版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上課 程 設 計 說 明 書題目:數(shù)據(jù)結構與算法課程設計學院(系): 專業(yè)班級: 學 號: 學生姓名: 指導教師: 教師職稱: 起止時間: 課程設計(論文)任務及評語院(系): 教研室: 軟件工程學 號學生姓名專業(yè)班級課程設計(論文)題目數(shù)據(jù)結構與算法課程設計課程設計(論文)任務1從十個題目中選擇一個題目,,要求每個題目用標準的C語言程序?qū)崿F(xiàn),另外,完成思考題一題,思考題須寫出相應的類C算法即可。2每個題目編寫源程序時,要求有主菜單,每個子功能定義為相應的子函數(shù),在主函數(shù)中調(diào)用各子函數(shù),程序結構清晰。3 根據(jù)題目,選擇合適的邏輯結構和存儲結構。4 輸入的數(shù)據(jù)由鍵盤輸入。
2、5 分析算法的時間復雜度,要求算法的效率盡可能高。6 驗證排序算法的穩(wěn)定性。指導教師評語及成績成績: 指導教師簽字: 2012 年 月 日專心-專注-專業(yè)目 錄第1章 課程設計目的與要求1.1 課程設計目的 本課程設計是計算機科學與技術專業(yè)、軟件工程專業(yè)的專業(yè)技術實踐課。 本實踐課的主要目的是:使學生學會利用在課堂中學過的理論知識,解決相應的實際問題,深入理解和靈活掌握所學的內(nèi)容,培養(yǎng)學生理論和實踐相結合的能力,培養(yǎng)學生分析問題解決問題的能力。同時,在實驗步驟規(guī)范化、程序設計方法等方面受到比較系統(tǒng)和規(guī)范的訓練。通過實踐設計使學生進一步加深對程序設計的規(guī)范化及對復雜程序設計步驟的理解。通過課程設
3、計,加深對數(shù)據(jù)結構這一課程所學內(nèi)容的進一步理解與鞏固。通過課程設計,加深對結構化設計思想的理解,能對系統(tǒng)功能進行分析,并設計合理的模塊化結構。通過課程設計,提高程序開發(fā)功能,能運用合理的控制流程編寫清晰高效的程序。通過課程設計,訓練C程序調(diào)試能力,能將一個中小型各級組織系統(tǒng)聯(lián)調(diào)通過。通過課程設計,開發(fā)一個中小型系統(tǒng),掌握系統(tǒng)研發(fā)全過程。通話課程設計,培養(yǎng)分析問題、解決實際問題的能力。1.2 課程設計的實驗環(huán)境 PC機,WindowsXP,C+。1.3 課程設計的預備知識 C語言程序設計、數(shù)據(jù)結構。1.4 課程設計要求(1)認真查找資料,分析每個題目應選擇的數(shù)據(jù)結構(邏輯結構和物理結構);(2)
4、按時到實驗室調(diào)試程序,遵守實驗室的規(guī)章制度,愛護設備;(3)每個題目編寫源程序時,每個子功能定義為相應的子函數(shù),在主函數(shù)中調(diào)用各子函數(shù),程序結構清晰,有必要的注釋,可讀性強。(4)程序健壯性強,當數(shù)據(jù)輸入錯誤時,要進行相應的處理; (5)分析算法的時間復雜度,要求算法的效率盡可能高;(6)對于排序算法,要驗證排序算法的穩(wěn)定性。第2章 課程設計內(nèi)容2.1題目的選擇6、學生成績管理系統(tǒng)2.2 題目的具體實現(xiàn)(1)題目應實現(xiàn)的具體功能;錄入學生成績信息并保存;可查詢顯示所有學生的個人信息;可查詢顯示所有學生的所學課程信息;按學號或姓名查詢成績信息;能添加、刪除和修改學生的成績信息;(2)題目所選擇的
5、數(shù)據(jù)結構及存儲結構; 采用線性數(shù)據(jù)結構及鏈式存儲結構(3)完整的源程序#include #include #include struct stud long num; char name20; double score1,score2; ; typedef struct stucode struct stud student ; struct stucode *next; L; void menu(); void createlist(struct stucode *r); void out(struct stucode *r); void search1(struct stucode *r)
6、; void search2(struct stucode *r); void del(struct stucode *r); void insert(struct stucode *r);void change(struct stucode *r); void main() char choose; int flag=1; struct stucode *r=NULL; while(flag) system(cls); menu(); choose=getchar(); switch(choose) case 1: createlist(&r); out(r); printf(Testing
7、 function 1nPress any key to continuen); getchar();getchar(); break;case 2: search1(r); printf(Testing function 1nPress any key to continuen); getchar(); getchar(); break; case 3: search2(r); printf(Testing function 1nPress any key to continuen); getchar(); getchar(); break; case 4: del(&r); out(r);
8、 printf(Testing function 1nPress any key to continuen); getchar(); getchar(); break; case 5: insert(&r); out(r); printf(Testing function 1nPress any key to continuen); getchar(); getchar(); break;case 6:out(r);printf(Testing function 1nPress any key to continuen);getchar(); getchar();break;case 7:ch
9、ange(&r);out(r);printf(Testing function 1nPress any key to continuen); getchar(); getchar(); break;case 0: flag=0; printf(The end.n); break; default: printf(nWrong Selection!(選擇錯誤,請重選!)n);getchar();getchar(); void createlist(struct stucode *r) struct stucode *p,*t; long n; char a20; double s1,s2; if
10、(*r) *r=NULL; printf( n請輸入:n 學號 姓名 分數(shù)1 分數(shù)2(若要結束請輸入四個為零)n); scanf(%ld%s%lf%lf,&n,a,&s1,&s2); if(n=0) return; p=(L *)malloc(sizeof(L); p-student.num=n; strcpy(,a);p-student.score1=s1;p-student.score2=s2;p-next=NULL; *r=p; scanf(%ld%s%lf%lf,&n,a,&s1,&s2); while(n) t=p; p=(L *)malloc(sizeo
11、f(L); p-student.num=n; strcpy(,a); p-student.score1=s1; p-student.score2=s2;p-next=NULL; t-next=p;scanf(%ld%s%lf%lf,&n,a,&s1,&s2); void search1(struct stucode *r) long x; struct stucode *p=r;if(!r) printf(沒有學生信息可查詢!n); return ; printf( 請輸入要查詢的學生信息的學生學號:n); scanf(%ld,&x); while(p&p-stud
12、ent.num!=x) p=p-next; if(p=NULL) printf(Error! No such student !n); else printf(%ld%s%.2lf%.2lfn,p-student.num,,p-student.score1,p-student.score2); void search2(struct stucode *r) char m20; if(!r) printf(沒有學生信息可查詢!n); return ; printf( 請輸入要查詢的學生信息的學生姓名:n); scanf(%s,m); while(r&strcmp(r-
13、,m) r=r-next; if(r=NULL) printf(Error! No such student !n); else printf(%ld%s%.2lf%.2lfn,r-student.num,,r-student.score1,r-student.score2); void del(struct stucode *r) long k; struct stucode *p=*r,*t; if(!(*r) printf(沒有學生信息可刪除 !n); return ; printf( 請輸入要刪除的學生信息的學生學號:n); scan
14、f(%ld,&k); if(p-student.num=k) *r=(*r)-next,free(p); else while(p-next&p-next-student.num!=k) p=p-next; if(p-next=NULL) printf(Error! No such student !n); else t=p-next; p-next=p-next-next; free(t); void insert(struct stucode *r) long n; char a20; double s1,s2; L *p,*t,*k; printf( 請輸入要插入的學生信息的學生學號 姓
15、名 分數(shù)1 分數(shù)2 :n); scanf(%ld%s%lf%lf,&n,a,&s1,&s2); p=(L *)malloc(sizeof(L); p-student.num=n; p-student.score1=s1; p-student.score2=s2;strcpy(,a); if(!(*r) *r=p; (*r)-next=NULL; return ; if(p-student.numstudent.num) p-next=(*r),(*r)=p; else t=*r; k=t; while(t-next&t-next-student.numstudent
16、.num) t=t-next; p-next=t-next; t-next=p; *r=k; void out(struct stucode *r) printf(nn); if(!r) printf(沒有學生信息可輸出!n); return ; while(r) printf(%ld%s%.2lf%.2lfn,r-student.num,,r-student.score1,r-student.score2); r=r-next; printf(nn); void change(struct stucode *r)struct stucode *p=*r;long
17、x;long n; char a20; double s1,s2; printf(更改的學生的信息n); printf( 請輸入要查詢的學生信息的學生學號:n); scanf(%ld,&x); while(p&p-student.num!=x) p=p-next; if(p=NULL) printf(Error! No such student !n); else printf(%ld%s%.2lf%.2lfn,p-student.num,,p-student.score1,p-student.score2); printf( 請輸入要修改的學生信息:n); sca
18、nf(%ld%s%lf%lf,&n,a,&s1,&s2); p-student.num=n; strcpy(,a); p-student.score1=s1; p-student.score2=s2; void menu() printf(n 學生成績管理系統(tǒng)n); printf(n 菜單nn); printf(n 1建立鏈表n); printf(n 2查找某學號的學生信息n); printf(n 3查找某姓名的學生信息n); printf(n 4刪除某學號的學生信息n);printf(n 5插入新的學生信息n);printf(n 6顯示所有學生的個人信息n);pr
19、intf(n 7更改學生個人信息n); printf(n 0退出n); printf(n 請選擇您要執(zhí)行的選項:n); (4)程序的輸入和輸出圖1按學生學號查找結果:圖2按學生姓名查找:圖3刪除某學生的運行結果:圖4插入某學生的運行結果:圖5顯示所有學生的信息:圖6(5)調(diào)試程序中遇到的問題及解決方案 在調(diào)試search1子函數(shù)由于在查找中移動了原指針,導致search1中不能查找,解決方法設一結構體類型的指針,將原指針賦給該指針,將該指針進行移動查找。在調(diào)試chance()中,如何對已有的記錄進行從新輸入更改。解決方案為在chance()子函數(shù)中加入一個查找的程序,也就是說先找到要修改的學生
20、信息,用scanf語句對要修改的學生的信息進行重新輸入,再將所賦的信息通過賦值語句將修改后的學生信息賦給該學生對應的結構體。如何返回一個結構體中信息,解決方案是采用指針類型,將變量的地址作為實參賦給子函數(shù)。數(shù)組名代表數(shù)組首地址,用scanf語句賦值字符串時,不用加地址操作符。2.3 思考題解析所選擇的思考題:編寫一個算法,構造一棵哈夫曼樹。程序如下:typedef structunsigned int weight;unsigned int parent,lchild,rchild;HTNode,*HuffmanTree;typedef char * *HuffmanCodevoid Hnff
21、Codeding(HnffmanTree &HT,&HC,int *w,int n)if(n=1) return;m=2*n-1; HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); for(p=HT;i=1;i=n;+i,+,+w) *p= *w,0,0,0; for(;i=m;+i,+p) *p= *w,0,0,0; for(i=n+1;i=m;+i) Select(HT,i-1,s1,s2); HTs1.parent=i; HTs2.parent=i; HTi.lchild=s1; HTi.rchild=s2; HTi.weight=HTs1.weig
22、ht+HTs2.weight; HC=(HuffmanCode)malloc(n+1)*size(char *); cd=(char *)malloc(n*sizeof(char); cdn-1=0; for(i=1;i=n;+i) start=n-1; for(c=i;f=HTi.parent;f!=0;c=f,f=HTf.parent) if(HTf.lchild=c) cd-start=0; else cd-start=1; HCi=(char*)malloc(n-start)*sizeof(char); strcpy(HCi,&cdstart); free(cd);算法分析:哈夫曼樹構造方法如下:(1) 根據(jù)給定的n個權值W1,W2,.Wn構成n課二叉樹的集合F=T1,T2.Tn,其中每棵二叉樹Ti中只有一個帶權為Wi的根節(jié)點,其左右子樹均為空。(2) 在F中選取兩棵節(jié)點的權值最小的樹為左右之樹構造一棵新的二叉樹,且置新的二叉樹的根結點的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度物流倉儲用地承包租賃合同(2024版)4篇
- 2025年度新型儲藏室與車位投資合作合同模板4篇
- 2025年度新能源汽車充電樁承債式公司股權轉讓合同4篇
- 2025年度文化演藝場館承包經(jīng)營合同4篇
- 2025年度土地整治與生態(tài)修復項目承包合同4篇
- 2024通信線路施工及改造分包合同范本3篇
- 2025年度生態(tài)環(huán)保工程承包商工程款支付擔保協(xié)議4篇
- 2025年度歷史文化街區(qū)保護項目房屋拆遷補償合同2篇
- 2025年度住宅小區(qū)配套停車場車位代理銷售協(xié)議4篇
- 2025年度星級酒店廚師團隊合作協(xié)議4篇
- 土壤農(nóng)化分析課件
- 小區(qū)大型團購活動策劃
- NEC(新生兒壞死性小腸結腸炎)92273
- 2023年租賃風控主管年度總結及下一年展望
- 開關插座必看的七個安全隱患范文
- 高分子成型加工課件
- 消防救援-低溫雨雪冰凍惡劣天氣條件下災害防范及救援行動與安全
- 硅石項目建議書范本
- 概率論在金融風險評估中的應用研究
- 住院醫(yī)療互助給付申請書
- 外墻外保溫工程檢驗批質(zhì)量驗收記錄表
評論
0/150
提交評論