版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)----集合運(yùn)算課程設(shè)計(jì)報(bào)告(c++)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告(集合交集并集運(yùn)算)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--集合的并、交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)集合的交并差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文章編輯集合運(yùn)算
- java語言課程設(shè)計(jì)--集合的并、交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 集合的并、交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--集合的并、交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---二叉排序樹實(shí)現(xiàn)集合的運(yùn)算
- 數(shù)據(jù)庫課程設(shè)計(jì)---集合交、并、差、對稱差運(yùn)算
- 任意長整數(shù)加法運(yùn)算-課程設(shè)計(jì)報(bào)告
- 數(shù)電課程設(shè)計(jì)報(bào)告---運(yùn)算器
- 有理數(shù)運(yùn)算c課程設(shè)計(jì)報(bào)告
- 稀疏矩陣的運(yùn)算課程設(shè)計(jì)
- 《matlab課程設(shè)計(jì)》報(bào)告-matlab的基本運(yùn)算與繪圖
- 稀疏矩陣的運(yùn)算課程設(shè)計(jì)
- c語言課程設(shè)計(jì)報(bào)告---小學(xué)算術(shù)運(yùn)算測試
- 有理數(shù)運(yùn)算c++課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告--小學(xué)算術(shù)運(yùn)算測試
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-長整數(shù)運(yùn)算
評論
0/150
提交評論