




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、內(nèi)蒙古科技大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計論文題 目:一元多項(xiàng)式的代數(shù)運(yùn)算學(xué)生姓名:郭棟學(xué) 號:1176807301專 業(yè):計算機(jī)科學(xué)與技術(shù)班 級:計-3指導(dǎo)教師:丁雨 內(nèi)蒙古科技大學(xué)課程設(shè)計任務(wù)書課程名稱數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計題目一元多項(xiàng)式的代數(shù)運(yùn)算指導(dǎo)教師丁雨時間一、教學(xué)要求1. 掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨(dú)立分析和設(shè)計能力2. 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等根本方法和技能3. 提高綜合運(yùn)用所學(xué)的理論知識和方法獨(dú)立分析和解決問題的能力4. 訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般標(biāo)準(zhǔn)進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)二、設(shè)計資料及參數(shù)一元多項(xiàng)式的代
2、數(shù)運(yùn)算以鏈表存儲一元多項(xiàng)式,在此根底上完成對多項(xiàng)式的操作。要求設(shè)計類或類模板來描述一元多項(xiàng)式,包含必要的構(gòu)造函數(shù)和析構(gòu)函數(shù),以及其他能夠完成如下功能的成員函數(shù):v 輸入多項(xiàng)式v 輸出多項(xiàng)式v 多項(xiàng)式加法v 多項(xiàng)式減法v 多項(xiàng)式乘法 并設(shè)計主函數(shù)測試該類。三、設(shè)計要求及成果1. 分析課程設(shè)計題目的要求2. 寫出詳細(xì)設(shè)計說明3. 編寫程序代碼,調(diào)試程序使其能正確運(yùn)行4. 設(shè)計完成的軟件要便于操作和使用5. 設(shè)計完成后提交課程設(shè)計報告四、進(jìn)度安排資料查閱與討論系統(tǒng)分析系統(tǒng)的開發(fā)與測試編寫課程設(shè)計說明書和驗(yàn)收五、評分標(biāo)準(zhǔn)考勤占20%課程設(shè)計論文40%辯論綜合評定40%成績采用五級分制評定六、建議參考資
3、料1?數(shù)據(jù)結(jié)構(gòu) C3.?數(shù)據(jù)結(jié)構(gòu):用面向?qū)ο蠓椒ㄅcC+語言描述?,殷人昆 主編, 清華大學(xué)出版社 2007目錄引言4需求分析4設(shè)計概要4一、 存儲結(jié)構(gòu):4二、 一元多項(xiàng)式的創(chuàng)立:5三、 加法設(shè)計:6四、 乘法設(shè)計:7五、 減法設(shè)計:7六、 一元多項(xiàng)式輸出:8運(yùn)行環(huán)境與運(yùn)行結(jié)果9運(yùn)行環(huán)境9運(yùn)行結(jié)果9心得體會10附錄:源程序代碼11引言一般的,我們只知道數(shù)學(xué)上的一元多項(xiàng)式的運(yùn)算,且都是用筆來計算的,然而此次課程設(shè)計將會通過程序用電腦來實(shí)現(xiàn)一元多項(xiàng)式的加法和乘法運(yùn)算。 通過C+使用順序和動態(tài)存儲結(jié)構(gòu)實(shí)現(xiàn)一元多項(xiàng)式加法和乘法的運(yùn)算,并且按升序和降序兩種情況排列。需求分析這個程序的關(guān)
4、鍵是多項(xiàng)式的創(chuàng)立和排列,以及相乘時系數(shù)相乘和指數(shù)相加、相加時相同指數(shù)的系數(shù)相加、相減時相同指數(shù)的系數(shù)相減。由于多項(xiàng)式擁有指數(shù)和系數(shù)假設(shè)基數(shù)已定,所以可以定義一個包含指數(shù)系數(shù)的結(jié)構(gòu)體,用單鏈表存儲多項(xiàng)式的數(shù)據(jù),所以結(jié)構(gòu)體包含next指針。數(shù)據(jù)插入時比擬兩數(shù)的指數(shù),按照升序降序順序排序,從表頭的next開始,直至找到適宜的位置,然后開始鏈表中數(shù)值的插入,如果相等那么直接將指數(shù)相加,如果大于就將新數(shù)據(jù)插入到當(dāng)前指向的前面,否那么將新數(shù)據(jù)插入到最后。輸入完數(shù)據(jù)后輸出相乘、相加,多項(xiàng)式運(yùn)算時要循環(huán)遍歷整個多項(xiàng)式,多項(xiàng)式的每一組數(shù)據(jù)都要和另一個多項(xiàng)式整組數(shù)據(jù)相運(yùn)算每一個運(yùn)算值都存儲到新建的“多項(xiàng)式鏈表中,
5、直到兩個多項(xiàng)式都遍歷完結(jié)束。設(shè)計概要一、 存儲結(jié)構(gòu):一元多項(xiàng)式的表示在計算機(jī)內(nèi)可以用鏈表來表示,為了節(jié)省存儲空間,只存儲多項(xiàng)式中系數(shù)非零的項(xiàng)。鏈表中的每一個結(jié)點(diǎn)存放多項(xiàng)式的一個系數(shù)非零項(xiàng),它包含三個域,分別存放該項(xiàng)的系數(shù)、指數(shù)以及指向下一個多項(xiàng)式項(xiàng)結(jié)點(diǎn)的指針。一元多項(xiàng)式相乘一元多項(xiàng)式輸出一元多項(xiàng)式相減退出一元多項(xiàng)式創(chuàng)立一元多項(xiàng)式相加一元多項(xiàng)式的運(yùn)算一元多項(xiàng)式排序圖 開始創(chuàng)立一個含n個鏈表類型結(jié)點(diǎn)的項(xiàng)分別輸入各項(xiàng)的系數(shù)和指數(shù)判斷是否系數(shù)不為0且指數(shù)大于0重新輸入一元多項(xiàng)式創(chuàng)立成功二、 一元多項(xiàng)式的創(chuàng)立:三、 加法設(shè)計:創(chuàng)立兩個指針分別指向兩個多項(xiàng)式表頭的next,分別使用for函數(shù)單獨(dú)循環(huán),遍歷
6、各自的每一組數(shù)據(jù),每遍歷一次都將系數(shù)與指數(shù)存儲到新建多項(xiàng)式的鏈表中。因?yàn)榇鎯r利用到插入函數(shù),而插入函數(shù)中有相同指數(shù)的系數(shù)相加功能直接將兩個多項(xiàng)式的數(shù)據(jù)依次插入到新的多項(xiàng)式中即可完成多項(xiàng)式相加。1功能:將兩多項(xiàng)式相加。 2數(shù)據(jù)流入:輸入函數(shù)。 3數(shù)據(jù)流出:多項(xiàng)式相加后的結(jié)果。 4程序流程圖:多項(xiàng)式的加法流程圖如圖3.3所示。 5測試:兩多項(xiàng)式是否為空,為空那么提示重新輸入,否那么,進(jìn)行運(yùn)算。開始運(yùn)算時系數(shù)相加刪除該項(xiàng)判斷所輸入的多項(xiàng)式系數(shù)是否為0判斷輸入的兩個多項(xiàng)式指數(shù)是否相等輸入的第1個多項(xiàng)式為B判斷輸入的多項(xiàng)式1,2指數(shù)是否e1>e2輸入的第2
7、個多項(xiàng)式為B進(jìn)行運(yùn)算四、 乘法設(shè)計:創(chuàng)立兩個指針分別指向兩個多項(xiàng)式表頭的next,使用for函數(shù)嵌套循環(huán),遍歷每一組數(shù)據(jù),每遍歷一次都將兩組數(shù)據(jù)的系數(shù)相乘,指數(shù)相加,再利用插入函數(shù)將系數(shù)與指數(shù)存儲到新建多項(xiàng)式的鏈表中。1功能:將兩多項(xiàng)式相乘。 2數(shù)據(jù)流入:輸入函數(shù)。 3數(shù)據(jù)流出:多項(xiàng)式相乘后的結(jié)果。 4程序流程圖:多項(xiàng)式的乘法流程圖如下圖。 開始給出運(yùn)算的兩個多項(xiàng)式按系數(shù)相乘指數(shù)相加進(jìn)行運(yùn)算將運(yùn)算的結(jié)果相加并輸出5測試要點(diǎn):兩多項(xiàng)式是否為空,為空那么提示重新輸入,否那么,進(jìn)行運(yùn)算。五、 減法設(shè)計:創(chuàng)立兩個指針分別指向兩個多項(xiàng)式表頭的next,以兩個指針同
8、時不為空為條件循環(huán)遍歷,如果當(dāng)前多項(xiàng)式A的指數(shù)小于多項(xiàng)式B,那么將當(dāng)前多項(xiàng)式B的系數(shù)置負(fù),指數(shù)不變,存入新建多項(xiàng)式中,指向多項(xiàng)式B的指針指向下一個;如果如果當(dāng)前多項(xiàng)式A的指數(shù)大于多項(xiàng)式B,那么將當(dāng)前多項(xiàng)式A的系數(shù)指數(shù)不變,存入新建多項(xiàng)式中,指向多項(xiàng)式A的指針指向下一個;否那么將多項(xiàng)式A的系數(shù)減去B的系數(shù)后存入新建多項(xiàng)式中,指數(shù)不變存入,再將兩個指針同時指向下一個。結(jié)束循環(huán)后判斷是哪一個多項(xiàng)式遍歷完了,將未遍歷完的多項(xiàng)式剩下的數(shù)據(jù)全部插入到新建多項(xiàng)式中。1功能:將兩多項(xiàng)式相減。 2數(shù)據(jù)流入:調(diào)用輸入函數(shù)。 3數(shù)據(jù)流出:多項(xiàng)式相減后的結(jié)果。 4程序流程圖:多項(xiàng)式的減法
9、流程圖如圖3.5所示。 開始調(diào)用多項(xiàng)式加法函數(shù)進(jìn)行運(yùn)算將多項(xiàng)式B進(jìn)行復(fù)制取多項(xiàng)式B的相反數(shù)5測試要點(diǎn):兩多項(xiàng)式是否為空,為空那么提示重新輸入,否那么,進(jìn)行運(yùn)算。六、 一元多項(xiàng)式輸出:先判斷錄入的兩個多項(xiàng)式是否有空項(xiàng),如果兩個多項(xiàng)式都不是空的,那么順序輸出多項(xiàng)式A和多項(xiàng)式B,否那么多項(xiàng)式創(chuàng)立不成功。操作流程圖如下圖:輸出多項(xiàng)式B輸出多項(xiàng)式A開始判斷所輸入的兩個多項(xiàng)式是否有空的多項(xiàng)式創(chuàng)立有誤,重新輸入圖運(yùn)行環(huán)境與運(yùn)行結(jié)果運(yùn)行環(huán)境:本課程程序設(shè)計語言為 C+,程序的運(yùn)行環(huán)境為。、運(yùn)行結(jié)果: 進(jìn)入運(yùn)行界面A、 B多項(xiàng)式輸出界面A、 B多項(xiàng)式加、減、乘運(yùn)算輸出界面心得體會一元多項(xiàng)式計算是一個單
10、鏈表的運(yùn)用, 通過這個程序可以檢測我們的學(xué)習(xí)情況,看看我們是否對單鏈表真正的理解。 一元多項(xiàng)式計算器的根本功能定為: (1) 建立多項(xiàng)式 (2) 輸出多項(xiàng)式 (3) 兩個多項(xiàng)式相加、相減、相乘,建立并輸出和、差、積多項(xiàng)式 由于課程設(shè)計只有短短的兩周時間,再加上原本自己編程能力并非突出,所以連這個簡單的一元多項(xiàng)式的四那么運(yùn)算都令我大傷腦筋,盡管這樣,還是沒能完善,我還只能算勉勉強(qiáng)強(qiáng)完成了三那么運(yùn)算,不過雖說這樣,我也從中學(xué)到不少東西,我深刻認(rèn)識到編程中結(jié)構(gòu)化和模塊化的重要
11、性,當(dāng)然也注意到很多細(xì)節(jié)問題是平時編小程序時經(jīng)常疏忽的,如局部變量,外部變量等的定義與使用。雖然這次課程設(shè)計并非做的好,但我知道這也只不過是另一次嘗試,一次考驗(yàn)。而且通過這次課程設(shè)計,我深知在做一件比擬專業(yè)的事情的時候,沒有其專業(yè)知識時絕對不可能把它做好的,也許并非這個一元多項(xiàng)式的運(yùn)算難,而是自己的編程知識缺乏了點(diǎn),所以一直在想我該先做什么,后來,我就去查閱了一些資料,就把目標(biāo)鎖定在要實(shí)現(xiàn)的功能上,從簡單到容易,所以就構(gòu)思了一下整體結(jié)構(gòu),然后開始找資料,寫程序。但不管怎樣,我受益還是頗多的,起碼讓我認(rèn)識到自身編程知識還是有些欠缺的,所以我以后會踏踏實(shí)實(shí)的走好每一步。附錄:源程序代碼#inclu
12、de<stdio.h>#include<malloc.h>#include<stdlib.h>struct data int xishu; int zhishu;struct node data dat; node *next;int cmp(const void *a,const
13、0;void *b) return (data*)a)->zhishu-(data*)b)->zhishu;void output(node *head) node *p; node *shengxu; shengxu=new node; shengxu->next=NULL;
14、160; printf("升序排列n"); p=head->next; while(p) if(p->dat.xishu<0) printf("
15、;b"); if(p->dat.xishu!=0) if(p->dat.xishu=1) &
16、#160; printf("X%d+",p->dat.zhishu); else if(p->dat.xishu=-1) printf("-X%d+",p->dat.zhishu
17、); else printf("%dX%d+",p->dat.xishu,p->dat.zhishu);
18、 node *q; q=new node; q->dat.zhishu=p->dat.zhishu; q->dat.xishu=p->dat.xishu; &
19、#160; q->next=shengxu->next; shengxu->next=q; p=p->next; printf("b n"); printf("降序排列n");
20、 p=shengxu->next; while(p) if(p->dat.xishu<0) printf("b");
21、; if(p->dat.xishu!=0) if(p->dat.xishu=1) printf("X%d+",p-&g
22、t;dat.zhishu); else if(p->dat.xishu=-1) printf("-X%d+",p->dat.zhishu); &
23、#160; else printf("%dX%d+",p->dat.xishu,p->dat.zhishu); p=p->next;
24、160; printf("b n");int main() int sum1,sum2; data *d1,*d2; int zhishu_max1=-1,zhishu_max2=-1; int i,j; i
25、nt *biaodashi1,*biaodashi2; node *he,*cha; node *head1,*head2,*tail1,*tail2; head1=(node *)malloc(sizeof(node); head2=(node *)malloc(sizeof(node); head1->nex
26、t=NULL; head2->next=NULL; tail1=head1; tail2=head2; /輸入第一個表達(dá)式 printf("請輸入第一個多項(xiàng)式的項(xiàng)數(shù):"); scanf("%d",&sum1); d1=(da
27、ta*)malloc(sum1*sizeof(data); printf("請依次輸入每項(xiàng)多項(xiàng)式的系數(shù)和指數(shù):n"); for(i=0;i<sum1;i+) scanf("%d%d",&d1i.xishu,&d1i.zhishu);
28、 /輸入第二個表達(dá)式 printf("請輸入第二個多項(xiàng)式的項(xiàng)數(shù):"); scanf("%d",&sum2); d2=(data*)malloc(sum2*sizeof(data); printf("請依次輸入每項(xiàng)多項(xiàng)式的系數(shù)和指數(shù):n"); for(i=0;i<sum2;i
29、+) scanf("%d%d",&d2i.xishu,&d2i.zhishu); /排序 qsort(d1,sum1,sizeof(data),cmp); qsort(d2,sum2,sizeof(data),cmp);
30、160; zhishu_max1=d1sum1-1.zhishu; zhishu_max2=d2sum2-1.zhishu; for(i=0;i<30;i+) printf("="); printf("n"); /輸出第一個表達(dá)式
31、 printf("第一個表達(dá)式為:n"); for(i=0;i<sum1;i+) if(d1i.xishu!=0) if(d1
32、i.xishu=1) printf("X%d",d1i.zhishu); else if(d1i.xishu=-1) &
33、#160; printf("-X%d",d1i.zhishu); else printf("%dX%d",d1i.xishu,d1i.zhishu);
34、0; if(i<sum1-1) printf("+"); printf("n"); /輸出第二
35、個表達(dá)式 printf("第二個表達(dá)式為:n"); for(i=0;i<sum2;i+) if(d2i.xishu!=0) &
36、#160; if(d2i.xishu=1) printf("X%d",d2i.zhishu); else if(d2i.xishu=-1)
37、60; printf("X%d",d2i.zhishu); else printf("%dX%d",d2i.xishu,d2i.zhi
38、shu); if(i<sum2-1) printf("+"); printf("n");
39、160; /求兩個多項(xiàng)式的和和差 he=new node; cha=new node; he->next=NULL; cha->next=NULL; node *cha_tail,*he_tail; he_tail=he; c
40、ha_tail=cha; for(i=0,j=0;i<sum1&&j<sum2;) node *p,*p2; p=new node; p2=new node;
41、0; if(d1i.zhishu<d2j.zhishu) p->dat.zhishu=d1i.zhishu; p->da
42、t.xishu=d1i.xishu; p2->dat.zhishu=d1i.zhishu; p2->dat.xishu=d1i.xishu; i+; &
43、#160; else if(d1i.zhishu>d2j.zhishu) p->dat.zhishu=d2j.zhishu; &
44、#160; p->dat.xishu=d2j.xishu; p2->dat.zhishu=d2j.zhishu; p2->dat.xishu=-d2j.xishu;
45、160; j+; else p->dat.zhishu=d1i.zhishu;
46、60; p->dat.xishu=d1i.xishu+d2j.xishu; p2->dat.zhishu=d1i.zhishu; p2->dat.xishu=d1i.x
47、ishu-d2j.xishu; i+; j+; he_tail->next=p;
48、160; p->next=NULL; he_tail=p; cha_tail->next=p2; p2->next=NULL; cha_tail=p2;
49、0; /將剩余的項(xiàng)加到表達(dá)式中 if(sum1<sum2) for(;j<sum2;j+)
50、 node *p,*p2; p=new node; p2=new node; p->dat.zhishu=d2j.zhishu;
51、 p->dat.xishu=d2j.xishu; p2->dat.zhishu=d2j.zhishu; p2->dat.xishu=-d2j.xishu;&
52、#160; he_tail->next=p; p->next=NULL; he_tail=p;
53、0; cha_tail->next=p2; p2->next=NULL; cha_tail=p2;
54、160; else if(sum1>sum2) j=i; for(;j<sum1;j+)
55、160; node *p,*p2; p=new node; p2=new node; p->dat.zhishu=d2j.zhi
56、shu; p->dat.xishu=d2j.xishu; p2->dat.zhishu=d2j.zhishu; p2->dat.xishu=d2j.xish
57、u; he_tail->next=p; p->next=NULL; he_tail=p; &
58、#160; cha_tail->next=p2; p2->next=NULL; cha_tail=p2;
59、; /輸出兩個表達(dá)式的和 printf("兩個表達(dá)式的和為:n"); output(he); /輸出兩個表達(dá)式的差 printf("n兩個表達(dá)式的差為:n"); output(cha); /表達(dá)式乘法 &
60、#160;node *chengfa; chengfa = new node; chengfa -> next = NULL; for(i=0;i<sum1;i+) for(j=0;j<sum2;j+)
61、0; node *p; p = new node; p
62、0;-> dat.zhishu = d1i.zhishu + d2j.zhishu; p -> dat.xishu = d1i.xishu * d2j.xishu; p->next=NUL
63、L; node *q; q = chengfa; while(q->next) if(q->next->dat.zhishu>p->dat.zhishu)
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 彩禮成了婚姻的絆腳石該怎么處理
- 2020-2025年中國多層牛皮紙袋行業(yè)市場運(yùn)營現(xiàn)狀及投資方向研究報告
- “全職女兒”辭職記
- 2020-2025年中國驗(yàn)粉篩行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報告
- 塑膠托盤項(xiàng)目資金申請報告
- 中國諾氟沙星膠囊行業(yè)市場深度評估及投資戰(zhàn)略規(guī)劃報告
- 中國滑板車市場競爭格局及行業(yè)投資前景預(yù)測報告
- 2025年內(nèi)燃機(jī)密封墊片項(xiàng)目投資可行性研究分析報告
- 長三角城市群產(chǎn)業(yè)結(jié)構(gòu)升級對人口-土地城鎮(zhèn)化協(xié)調(diào)發(fā)展的影響研究
- 科技交流與合作教育領(lǐng)域的創(chuàng)新實(shí)踐
- 2024年河南鄭州二七區(qū)侯寨中心衛(wèi)生院招聘筆試真題
- 中國糖尿病防治指南+2024+解讀
- 數(shù)學(xué)-山東省天一大聯(lián)考齊魯名校教研共同體2024-2025學(xué)年(下)高三開學(xué)質(zhì)量檢測聯(lián)考試題和答案
- 崗位職責(zé)心得體會(2篇)
- 2025年上海寶冶集團(tuán)限公司招聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- GB/T 6822-2024船體防污防銹漆體系
- 電信網(wǎng)絡(luò)詐騙犯罪的特征、治理困境及對策建議
- 救護(hù)車掛靠私立醫(yī)院協(xié)議書(2篇)
- 《血透患教》課件
- app 購買合同范例
- 高二上學(xué)期物理(理科)期末試題(含答案)
評論
0/150
提交評論