2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  《高級語言程序設(shè)計(jì)》</p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p><b>  計(jì)算機(jī)學(xué)院</b></p><p>  2016年4月22日</p><p> 學(xué)號1508020118</p><p><b>  目錄<

2、;/b></p><p><b>  一、需求分析1</b></p><p><b>  1、程序的實(shí)現(xiàn)1</b></p><p><b>  (1)功能1</b></p><p><b> ?。?)實(shí)施1</b></p>&l

3、t;p><b>  2、設(shè)計(jì)的要求1</b></p><p><b>  二、概要設(shè)計(jì)1</b></p><p><b>  1、問題分析1</b></p><p><b>  2、模塊結(jié)構(gòu)2</b></p><p><b>  (

4、1)結(jié)構(gòu)分析2</b></p><p> ?。?)結(jié)構(gòu)分析圖2</p><p><b>  三、詳細(xì)設(shè)計(jì)3</b></p><p><b>  1、解題思路3</b></p><p> ?。?)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)3</p><p>  (2)邏輯結(jié)構(gòu)存儲結(jié)構(gòu)

5、3</p><p><b>  2、算法設(shè)計(jì)3</b></p><p>  四、調(diào)試分析和測試結(jié)果4</p><p><b>  1、模塊分析4</b></p><p> ?。?)定義單鏈表結(jié)點(diǎn)類型4</p><p> ?。?)運(yùn)用尾插法建立單鏈表4</p&g

6、t;<p>  (3)建立有序鏈表5</p><p><b>  2、結(jié)果分析5</b></p><p><b>  五、總結(jié)6</b></p><p><b>  1、解決的問題6</b></p><p> ?。?)集合的運(yùn)算算法6</p>

7、<p><b>  (2)解決方式7</b></p><p><b>  2、心得體會7</b></p><p>  六、參考文獻(xiàn)(資料不得少于5篇)7</p><p><b>  七、致謝7</b></p><p>  八、附錄(含程序源碼)8<

8、/p><p><b>  一、需求分析</b></p><p><b>  1、程序的實(shí)現(xiàn)</b></p><p><b>  (1)功能</b></p><p>  使用鏈表來表示集合,完成集合的合并,求交集等操作。 </p><p><b> 

9、 (2)實(shí)施</b></p><p>  初步完成總體設(shè)計(jì),搭好框架,確定函數(shù)個數(shù);</p><p><b>  完成最低要求;</b></p><p>  繼續(xù)完成進(jìn)一步要求。</p><p><b>  2、設(shè)計(jì)的要求</b></p><p>  界面友好,函

10、數(shù)功能要劃分好;</p><p>  總體設(shè)計(jì)應(yīng)畫流程圖;</p><p>  程序要加必要的注釋;</p><p>  要提供程序測試方案;</p><p>  程序要經(jīng)得起測試,寧可功能少一些,也要能運(yùn)行起來,不能運(yùn)行的程序是沒有價(jià)值的。</p><p><b>  二、概要設(shè)計(jì)</b><

11、;/p><p><b>  1、問題分析</b></p><p>  該問題主要實(shí)現(xiàn)以下功能:</p><p>  利用尾插法建立單鏈表;</p><p>  對于輸入的鏈表進(jìn)行有序排列</p><p>  刪除有序鏈表中不符合要求的元素</p><p>  調(diào)用函數(shù)對單鏈表進(jìn)

12、行交、并運(yùn)算并輸出 </p><p><b>  2、模塊結(jié)構(gòu)</b></p><p><b> ?。?)結(jié)構(gòu)分析</b></p><p>  程序以用戶和計(jì)算機(jī)的對話方式執(zhí)行,即在計(jì)算及終端顯示提示信息之后,由用戶在鍵盤輸入演示程序中規(guī)定的運(yùn)算命令;相應(yīng)的輸入數(shù)據(jù)(過濾輸入中的非法字符)和運(yùn)算結(jié)果閑時間在其后。系統(tǒng)由以下

13、幾個模塊組成,分別是:</p><p><b>  單鏈表的建立</b></p><p><b>  單鏈表的有序排列</b></p><p>  刪除單鏈表中不符合條件的元素</p><p><b>  集合交集</b></p><p><b&g

14、t;  集合并集</b></p><p><b>  單鏈表輸出</b></p><p><b>  主函數(shù) </b></p><p><b> ?。?)結(jié)構(gòu)分析圖</b></p><p><b>  三、詳細(xì)設(shè)計(jì)</b></p>

15、<p><b>  1、解題思路</b></p><p><b> ?。?)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p>  創(chuàng)建三個帶頭結(jié)點(diǎn)的單鏈表,用來存儲兩個集合中的元素和最終的結(jié)果,為實(shí)現(xiàn)集合的交、并運(yùn)算功能,應(yīng)以有序鏈表表示集合。為此,需要兩個抽象數(shù)據(jù)類型:有序表和集合。</p><p> ?。?)邏輯結(jié)構(gòu)存

16、儲結(jié)構(gòu)</p><p>  邏輯結(jié)構(gòu):創(chuàng)造一個帶結(jié)點(diǎn)的單鏈表包括(頭結(jié)點(diǎn)L、結(jié)點(diǎn)若干、尾結(jié)點(diǎn));單鏈表中每個結(jié)點(diǎn)包括(*next表示指針data表示域) </p><p><b>  2、算法設(shè)計(jì)</b></p><p>  程序執(zhí)行的命令包括:</p><p>  定義單鏈表結(jié)點(diǎn)類型typedef struct LNo

17、de </p><p>  運(yùn)用尾插法建立單鏈表void CreatListR(LinkList *&L,ElemType a[],int n)</p><p>  創(chuàng)建頭結(jié)點(diǎn),為頭結(jié)點(diǎn)分配空間</p><p><b>  創(chuàng)建新結(jié)點(diǎn)</b></p><p>  建立有序鏈表void Sort(LinkList

18、*&head)</p><p>  將兩個集合的元素進(jìn)行比較 while語句</p><p>  刪除有序鏈表中的重復(fù)元素void shanchu(LinkList *&head)</p><p>  求交集 void jiao(struct Lnode **L1,struct Lnode **L2,struct Lnode **L3)<

19、;/p><p>  求并集 void bing(struct Lnode ** L1,struct Lnode **L2,struct Lnode **L3)</p><p>  輸出單鏈表void Display(LinkList *L)</p><p>  四、調(diào)試分析和測試結(jié)果</p><p><b>  1、模塊分析</

20、b></p><p> ?。?)定義單鏈表結(jié)點(diǎn)類型</p><p>  typedef struct LNode</p><p>  { ElemType data;</p><p>  struct LNode *next;</p><p>  } LinkList;</p><p> 

21、?。?)運(yùn)用尾插法建立單鏈表</p><p>  void CreatListR(LinkList*&L,ElemType a[],int n)</p><p>  { LinkList *s,*r;int I;</p><p>  L=( LinkList *)malloc(sizeof(LinkList)); //創(chuàng)建并為頭結(jié)點(diǎn)分配空間</p>

22、;<p>  L->next=NULL;</p><p><b>  r=L;</b></p><p>  for(i=0;i<n;i++)</p><p>  { s=( LinkList *)malloc(sizeof(LinkList)); //創(chuàng)建新結(jié)點(diǎn)</p><p>  s->

23、data=a[i];</p><p>  r->next=s;</p><p><b>  r=s;</b></p><p><b>  }</b></p><p>  r->next=NULL; //尾結(jié)點(diǎn)指向空</p><p><b> ?。?)建立

24、有序鏈表</b></p><p>  void Sort(LinkList *&head) </p><p>  { LinkList *p=head->next,*q,*r; if(p!=NULL) </p><p>  { r=p->next;</p><p>  p->next=N

25、ULL; p=r;</p><p>  while(p!=NULL)//后續(xù)元素與第一個元素進(jìn)行比較</p><p>  { r=p->next; q=head; while(q->next!=NULL&&q->next->data<p->data) q=q->next;

26、 p->next=q->next; q->next=p; p=r; }</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  2、結(jié)果分析</b></p><

27、p>  選擇數(shù)字1,進(jìn)行排序輸出;</p><p>  選擇數(shù)字2,輸出集合1與集合2的交集;</p><p>  選擇數(shù)字3,輸出集合1與集合2的并集。</p><p>  可以看出,該程序成功是實(shí)現(xiàn)了集合的排序和兩個集合的交集運(yùn)算,而兩個集合的并集運(yùn)算顯然還存在問題,在以后的學(xué)習(xí)與操作中,我們要更加注重程序的運(yùn)行,盡量做到零問題出現(xiàn)。</p>

28、<p><b>  五、總結(jié)</b></p><p><b>  1、解決的問題</b></p><p> ?。?)集合的運(yùn)算算法</p><p>  由于對集合的兩種運(yùn)算的算法推敲不足,在鏈表類型及其尾指針的設(shè)置時出現(xiàn)錯誤,導(dǎo)致程序低效。 </p><p>  剛開始時曾忽略了一些變量

29、參數(shù)的標(biāo)識”&”,使調(diào)試程序浪費(fèi)時間不少。今后應(yīng)重視確定參數(shù)的變量和賦值屬性的區(qū)分和標(biāo)識。</p><p><b> ?。?)解決方式</b></p><p>  開始時輸入集合后,程序只能進(jìn)行一次運(yùn)算,后來加入switch語句,成功解決了這一難題。 </p><p>  本程序的模塊劃分比較合理,且盡可能的將指針的操作封裝在節(jié)點(diǎn)和鏈表

30、的兩個模塊中,致使集合模塊的調(diào)試比較順利。</p><p><b>  2、心得體會</b></p><p>  通過實(shí)踐才發(fā)現(xiàn)程序設(shè)計(jì)的掌握直接關(guān)系到上機(jī)實(shí)驗(yàn)效果。對各個知識點(diǎn)的熟練掌握是在課程中理解理論算法和完成上機(jī)實(shí)驗(yàn)的重要保證。本課程設(shè)計(jì)采用數(shù)據(jù)抽象的程序設(shè)計(jì)方案,將程序化分為四個層次結(jié)構(gòu),使得設(shè)計(jì)時思路清晰,實(shí)現(xiàn)時調(diào)試順利,各模塊具有較好的可用性,確實(shí)得到了

31、一次良好的程序設(shè)計(jì)訓(xùn)練。</p><p>  六、參考文獻(xiàn)(資料不得少于5篇)</p><p>  催俊凱。計(jì)算機(jī)軟件基礎(chǔ)。機(jī)械工業(yè)出版社。2007.7 </p><p>  唐發(fā)根。數(shù)據(jù)結(jié)構(gòu)教程(第二版)。北京航空航天大學(xué)出版社。2005.5.</p><p>  嚴(yán)尉敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].清華大學(xué)出版社,2011年11月

32、</p><p>  譚浩強(qiáng)。C程序設(shè)計(jì)(第三版)。清華大學(xué)出版社。2005.</p><p>  李建學(xué),李光元,吳春芳。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)案例精編(用C/C++描述)。北京:清華大學(xué)出版社。2007.2</p><p>  王宏生,宋繼紅。數(shù)據(jù)結(jié)構(gòu)。北京:國防工業(yè)出版社,2006.1</p><p><b>  七、致謝</

33、b></p><p>  感謝輔導(dǎo)我們的老師在這個學(xué)期細(xì)心耐心的指導(dǎo)我們的基礎(chǔ)課學(xué)習(xí),為我們的課程設(shè)計(jì)打下良好的基礎(chǔ)。在這次課程設(shè)計(jì)中,代老師給我很多的指導(dǎo)和幫助,讓我能夠使程序正常運(yùn)行且實(shí)現(xiàn)實(shí)驗(yàn)的要求。</p><p>  八、附錄(含程序源碼)</p><p>  #include <iostream> </p><p>

34、;  #include <malloc.h> </p><p>  using namespace std; </p><p>  typedef char ElemType; </p><p>  typedef struct LNode//定義單鏈表結(jié)點(diǎn)類型 </p><p>  { ElemType data; <

35、/p><p>  struct LNode *next; </p><p>  }LinkList; </p><p>  void CreatListR(LinkList *&L,ElemType a[],int n) //運(yùn)用尾插法建立單鏈表 </p><p>  { LinkList *s,*r;int i;</p>

36、;<p>  L=(LinkList *)malloc(sizeof(LinkList)); //創(chuàng)建頭結(jié)點(diǎn),為頭結(jié)點(diǎn)分配空間 </p><p>  L->next=NULL; </p><p>  r=L; //r先指向頭結(jié)點(diǎn)后指向尾結(jié)點(diǎn),開始時指針指向頭結(jié)點(diǎn) </p><p>  for(i=0;i<n;i++) </p

37、><p>  { s=(LinkList *)malloc(sizeof(LinkList));//創(chuàng)建新結(jié)點(diǎn)</p><p>  s->data=a[i]; </p><p>  r->next=s;</p><p><b>  r=s; </b></p><p><

38、b>  }</b></p><p>  r->next=NULL;//尾結(jié)點(diǎn)指向空 </p><p><b>  } </b></p><p>  void Sort(LinkList *&head)//建立有序鏈表 </p><p>  { LinkList *p=head

39、->next,*q,*r; </p><p>  if(p!=NULL) </p><p>  { r=p->next; </p><p>  p->next=NULL; </p><p><b>  p=r; </b></p><p>  while(p!=NULL

40、)//后續(xù)元素與第一個元素進(jìn)行比較</p><p>  { r=p->next; </p><p>  q=head; </p><p>  while(q->next!=NULL&&q->next->data<p->data) </p><p>  q=q->ne

41、xt; </p><p>  p->next=q->next; </p><p>  q->next=p; </p><p><b>  p=r; </b></p><p><b>  } </b></p><p><b>

42、;  } </b></p><p><b>  } </b></p><p>  void shanchu(LinkList *&head)//刪除有序鏈表中重復(fù)的元素及非小寫字母的元素 </p><p>  { LinkList *p=head->next,*r=head,*q,*f;</p>&

43、lt;p>  while(p->next)</p><p>  { if(p->data==p->next->data||((p->next->data>'z')||(p->next->data<'a')))</p><p>  { q=p->next; </p>

44、<p>  p->next=q->next; </p><p>  free(q); </p><p><b>  } </b></p><p><b>  else </b></p><p>  p=p->next;</p><p>

45、;<b>  } </b></p><p>  if(r->next->data>'z'||r->next->data<'a')</p><p>  { f=r->next; </p><p>  r->next=f->next; </p&g

46、t;<p>  free(f); </p><p><b>  } </b></p><p><b>  } </b></p><p>  void bing(LinkList * ha,LinkList * hb,LinkList * hc)//求并集hc </p>&l

47、t;p>  { LinkList * pa,* pb,* pc;</p><p>  pa=ha->next; </p><p>  while(pa!=NULL)</p><p>  { pc=(LinkList *)malloc(sizeof(LinkList)); </p><p>  pc->dat

48、a=pa->data;</p><p>  pc->next=hc->next;</p><p>  hc->next=pc;</p><p>  pa=pa->next;</p><p><b>  }</b></p><p>  pb=hb->next;&l

49、t;/p><p>  while(pb!=NULL)</p><p>  { pa=ha->next;</p><p>  while((pa!=NULL)&&(pa->data!=pb->data))</p><p>  pa=pa->next;</p><p>  if(pa=

50、=NULL)</p><p>  { pc=(LinkList *)malloc(sizeof(LinkList));</p><p>  pc->data=pb->data;</p><p>  pc->next=hc->next;</p><p>  hc->next=pc;</p><

51、p><b>  }</b></p><p>  pb=pb->next;</p><p><b>  } </b></p><p><b>  }</b></p><p>  void jiao(LinkList *ha,LinkList *hb,LinkList

52、*&hc)//求交集hc </p><p>  { LinkList *pa=ha->next,*pb,*s,*tc;</p><p>  hc=(LinkList *)malloc(sizeof(LinkList));//定義hc的頭結(jié)點(diǎn)</p><p><b>  tc=hc;</b></p><p&g

53、t;<b>  while(pa)</b></p><p>  { pb=hb->next;</p><p>  while(pb&&pb->data<pa->data)</p><p>  pb=pb->next;</p><p>  if(pb&&pb-

54、>data==pa->data)</p><p>  { s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->data=pa->data;</p><p>  tc->next=s;</p><p><b>  tc=s;</b>&l

55、t;/p><p><b>  }</b></p><p>  pa=pa->next;</p><p><b>  }</b></p><p>  tc->next=NULL;</p><p><b>  } </b></p>&l

56、t;p>  void cha(LinkList *ha,LinkList *hb,LinkList *&hc)//求差集hc </p><p>  { LinkList *pa=ha->next,*pb,*s,*tc;</p><p>  hc=(LinkList *)malloc(sizeof(LinkList));//定義hc的頭結(jié)點(diǎn)</p>&

57、lt;p><b>  tc=hc;</b></p><p><b>  while(pa)</b></p><p>  { pb=hb->next;</p><p>  while(pb&&pb->data<pa->data)</p><p>  pb

58、=pb->next;</p><p>  if(!(pb&&pb->data==pa->data))</p><p>  { s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->data=pa->data;</p><p>  tc->

59、;next=s;</p><p><b>  tc=s;</b></p><p><b>  }</b></p><p>  pa=pa->next;</p><p><b>  }</b></p><p>  tc->next=NULL;&

60、lt;/p><p><b>  }</b></p><p>  void DispList(LinkList *L)//輸出單鏈表L </p><p>  { LinkList *p=L->next;</p><p>  while(p!=NULL)</p><p>  { cout

61、<<p->data;</p><p>  p=p->next;</p><p><b>  }</b></p><p>  cout<<endl; </p><p><b>  } </b></p><p>  int main() <

62、;/p><p>  { LinkList *ha,*hb,*hc;</p><p>  ElemType a[100],b[100];//建立兩個數(shù)組存儲集合</p><p>  int la,lb,x;</p><p>  cout << "請輸入集合1:" ;</p><p>  c

63、in.getline(a,100);</p><p>  cout << "請輸入集合2:";</p><p>  cin.getline(b,100);</p><p>  la=strlen(a);</p><p>  lb=strlen(b);</p><p>  CreatLis

64、tR(ha,a,la);</p><p>  CreatListR(hb,b,lb);</p><p><b>  Sort(ha);</b></p><p><b>  Sort(hb);</b></p><p>  shanchu(ha);</p><p>  shanc

65、hu(hb);</p><p>  cout<<"1.輸出有序集合 2.求集合交集 3.求集合并集 4.求集合并集"<<endl;</p><p>  while(x!=0)</p><p>  { //循環(huán)對運(yùn)算的選擇</p><p>  cout<<"

66、請選擇運(yùn)算:(選0退出)";</p><p><b>  cin>>x;</b></p><p><b>  switch(x)</b></p><p>  { case 1: cout<<"有序1集合:";</p><p>  DispL

67、ist(ha); </p><p>  cout<<"有序2集合:";</p><p>  DispList(hb);//輸出有序集合</p><p><b>  break;</b></p><p>  case 2: jiao(ha,hb,hc);</p><p

68、>  cout<<"交集合:";DispList(hc);//調(diào)用求交集函數(shù)</p><p><b>  break;</b></p><p>  case 3: bing(ha,hb,hc);</p><p>  cout<<"并集合:";DispList(hc);//

69、調(diào)求用并集函數(shù)</p><p><b>  break;</b></p><p>  case 4: cha(ha,hb,hc);</p><p>  cout<<"差集合:";DispList(hc);//調(diào)用求差集函數(shù)</p><p><b>  break;</b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論