一元多項式簡單的計算器_第1頁
一元多項式簡單的計算器_第2頁
一元多項式簡單的計算器_第3頁
一元多項式簡單的計算器_第4頁
一元多項式簡單的計算器_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄1軟件開發(fā)平臺12軟件功能說明12.1功能分析說明圖12.2各項功能說明33軟件設(shè)計詳細(xì)內(nèi)容53.1采用的主要數(shù)據(jù)結(jié)構(gòu)類型53.2流程圖54軟件測試84.1軟件測試用例84.2軟件測試報告85總結(jié)和致謝136附錄136.1軟件使用說明136.2源碼166.3參考文獻(xiàn)261.軟件開發(fā)平臺配置環(huán)境 Windows XP 系統(tǒng) 或Windows 7 系統(tǒng) 運行環(huán)境 Windows XP 系統(tǒng) 或 Windows 7 系統(tǒng)開發(fā)工具 VC+6.0 程序語言 C 語言2.軟件功能說明一元多項式簡單的計算器該計算器具有以下功能:1 能夠按照多項式變量的指數(shù)降序創(chuàng)建一個多項式;2 能夠?qū)σ褎?chuàng)建的多項式進(jìn)行

2、顯示;3 能夠?qū)σ褎?chuàng)建的多項式之間的加法運算;4 能夠?qū)σ褎?chuàng)建的多項式之間的減法運算;5 能夠?qū)σ褎?chuàng)建的多項式進(jìn)行刪除;6 能夠?qū)崿F(xiàn)計算器退出操作;2.1功能分析說明圖退出菜單多項式的刪除多項式的相減多項式的相加多項式的顯示多項式的建立一元多項式簡單的計算器 2.2各項功能說明要求對分別上面的每個功能模塊進(jìn)行詳細(xì)的文字說明主函數(shù)模塊main() 建立一個可供選擇的菜單,通過switch語句,選擇1則是去建立多項式,選擇2則是去顯示出多項式,選擇3則是去進(jìn)行兩個多項式的相加,選擇4則是進(jìn)行兩個多項式的相減,選擇5則是去進(jìn)行多項式的刪除,選擇6則是退出菜單。多項式的建立模塊Creatpol() 建

3、立一個鏈表,頭指針均用結(jié)構(gòu)體指針數(shù)組中的元素表示,且頭指針?biāo)傅慕Y(jié)構(gòu)體的指數(shù)是表示該鏈表表示的多項式的項數(shù),而后以指數(shù)遞減的次序依次輸入各項,鏈表中的第二個節(jié)點表示的是多項式中的第一項,依次類推,不斷把多項式各項的指數(shù),系數(shù)的值輸入鏈表的節(jié)點中,并使鏈尾指針為空。多項式的輸出模塊Outp_pol() 首先用一個指針指向需要輸出的多項式對應(yīng)的鏈表的頭指針,頭指針的指數(shù)成員表示項數(shù),接著通過鏈表依次輸出各項,從第二項開始,系數(shù)不小于的項與系數(shù)小于0的項輸出是不一樣的,判斷后依次輸出。多項式的相加模塊Addpol() 需要用到兩個指針指向相加的兩個多項式,用一個鏈表表示兩個多項式相加后形成的新的多項

4、式,首先確定兩指針是否已到達(dá)鏈尾來作為循環(huán)條件,其次以兩指針?biāo)傅墓?jié)點的結(jié)構(gòu)體的指數(shù)成員值的大小比較分成三種情況進(jìn)行計算,指數(shù)偏大者指針向下一個移動,指數(shù)相同的兩者系數(shù)相加,直到兩者都到達(dá)鏈尾,從而伴隨著新鏈表的形成,及相加后新的多項式的形成。多項式的相減模塊Decpol() 需要用到兩個指針指向相減的兩個多項式,用一個鏈表表示兩個多項式相減后形成的新的多項式,首先確定兩指針是否已到達(dá)鏈尾來作為循環(huán)條件,其次以兩指針?biāo)傅墓?jié)點的結(jié)構(gòu)體的指數(shù)成員值的大小比較分成三種情況進(jìn)行計算,指數(shù)偏大者指針向下一個移動,指數(shù)相同的兩者系數(shù)相減,直到兩者都到達(dá)鏈尾,從而伴隨著新鏈表的形成,及相減后新的多項式的形

5、成。多項式的刪除模塊 Delpol() 用一個指針指向要刪除的多項式,運用free()函數(shù),依次刪除該鏈表的各個節(jié)點。3.軟件設(shè)計詳細(xì)內(nèi)容3.1采用的主要數(shù)據(jù)結(jié)構(gòu)類型#include<stdio.h> /標(biāo)準(zhǔn)輸入、輸出頭文件#include<stdlib.h> /包含動態(tài)存儲與釋放函數(shù)頭文件結(jié)構(gòu)體:struct ponode float xishu; /系數(shù) int zhishu; /指數(shù) struct ponode *next; /自引用結(jié)構(gòu)*polhead; /定義指針p_pol polhead26=0; / 定義結(jié)構(gòu)體指針數(shù)組char menu,name,name

6、1,name2;int tuichu=0,j=0,n; 3.2 流程圖1) .主菜單流程圖int tuichu=0,j=0tuichu=0?j=0?printf(“ ”)READ(menu) menu=1?menu=2?menu=3?menu=4?menu=5?j+menu=6?Creatpol()Creatpol()Outp_pol()Addpol()Decpol()Delpol()tuichu=1breakbreakbreakbreakbreakbreakNYNNNNNNYYYYYYprintf(“再次選擇”)Y2) Creatpol()函數(shù)流程圖:p_pol p,t;int i;*p_p

7、olhead=(pol*)malloc(sizeof(pol)(*p_polhead)->zhishu=nt=*p_polheadprintf(“ ”)i<np=(pol*)malloc(sizeof(pol)printf(“ ”)scanf("%f%d")t->next=pt=pi+t->next=NULLreturn 1YN3) Outp_pol()函數(shù)流程圖:int i=0; p_pol p;p=p_polhead->nextprintf(“”)printf("%f*x%d",)i<p_polhead->z

8、hishui=0printf("%f*x%d",)p->xishu>=0printf("+%f*x%d",)p=p->nexti+printf("n")4) Addpol()函數(shù)流程圖:p1=polhead1->nextp2=polhead2->next*p_polhead=(pol*)malloc(sizeof(pol)p=t=*p_polheadp1&&p2=0e1=p1->zhishue2=p2->zhishue1>e2e1=e2e1<e2p1=p1->

9、nextsum=p1->xishu+p2->xishup1=p1->next; p2=p2->nextp2=p2->nextp1=0i+p1=p1->nexti+p2=0i+p2=p2->nextt->next=NULL(*p_polhead)->zhishu=iYYYYYYNNNNNN5) Decpol()函數(shù)流程圖:p1=polhead1->nextp2=polhead2->next*p_polhead=(pol*)malloc(sizeof(pol)p=t=*p_polheadp1&&p2=0e1=p1-&

10、gt;zhishue2=p2->zhishue1>e2e1=e2e1<e2p1=p1->nextdif=p1->xishu-p2->xishup1=p1->next; p2=p2->nextp2=p2->nextp1=0i+p1=p1->nexti+p2=0i+p2=p2->nextt->next=NULL(*p_polhead)->zhishu=iYYYYYYNNNNNN6) Delpol()函數(shù)流程圖:p_pol p,tp=t=*p_polheadp->next=0p=p->nextfree(t)t=

11、pNY4.軟件測試4.1 軟件測試用例打開軟件,進(jìn)入系統(tǒng)主界面:多項式創(chuàng)建功能測試:選擇指令1,進(jìn)入建立多項式的模塊,先創(chuàng)建多項式a:再次選擇指令1,創(chuàng)建多項式b:多項式輸出功能測試選擇指令2,進(jìn)入多項式輸出的模塊,先輸出多項式a:再次選擇指令2,輸出多項式b:多項式相加功能測試選擇指令3,進(jìn)入多項式相加的模塊,并輸出相加后的多項式c:多項式相減功能測試然后選擇指令4,進(jìn)入多項式相減的模塊,并輸入相減后的多項式d:多項式刪除功能測試接著選擇指令5,進(jìn)入多項式刪除的模塊,刪除多項式d,及釋放多項式d對應(yīng)的鏈表所占用的內(nèi)存:多項式刪除功能測試最后選擇指令6,退出菜單:所有測試完畢,功能全部正常。4

12、.2軟件測試報告將4.1 測試過程中能完成的功能和不能完成的功能以及不能完全完成的功能進(jìn)行列表分析,指出測試結(jié)果和出錯原因,例如:標(biāo)號項目預(yù)期結(jié)果實際結(jié)果出錯原因出錯次數(shù)01主函數(shù)菜單美觀的菜單得到美觀的菜單無無02多項式的創(chuàng)建正確輸入數(shù)據(jù)完成無無03多項式的顯示正確顯示數(shù)據(jù)完成無無04多項式的相加正確處理數(shù)據(jù)完成無無05多項式的相減正確處理數(shù)據(jù)完成無無06多項式的刪除正確刪除數(shù)據(jù)完成無無5.總結(jié)和致謝開始選這個程序的時候,我以為這個程序很簡單,可當(dāng)選完以后,自己開始著手做這個程序的時候,查閱了相關(guān)資料,發(fā)現(xiàn)做這個程序還要用到鏈表,而鏈表在課本上算是一個比較難的知識點,我做這個程序發(fā)了很久的時

13、間,單單就把書上的關(guān)于鏈表部分的知識看懂就發(fā)了比較多的時間,而自己把整個程序做出來的時候,一上機(jī)檢測,發(fā)現(xiàn)錯誤到處都是,自己于是細(xì)心地想辦法一個一個去改,最后運行到?jīng)]問題時,才放了一大口氣。我感覺自己通過做這個實驗收獲的挺多的,而自己完成了這個程序也產(chǎn)生了一種自豪感。通過這次課程設(shè)計,我發(fā)現(xiàn)了自己在學(xué)習(xí)中的諸多不足,我想我會積極改正的。無論是在課堂學(xué)習(xí),還是在課外的相關(guān)知識的拓展,我均通過這次課程設(shè)計認(rèn)識到了不足,很感謝能有這樣一次課程設(shè)計的機(jī)會。另外,在我自己寫完程序上機(jī)檢測的時候,真的是很多錯誤,我要感謝我的同學(xué),他們幫我指出了不少錯誤。然而幫助我改正絕大部分錯誤的還是網(wǎng)絡(luò)資料,因為很多莫

14、名的錯誤根本看不懂,只是在網(wǎng)上一查才知道到底錯誤實質(zhì)上是出在哪里了。最后還是感謝老師和許多同學(xué),我在這次課程設(shè)計中的收獲離不開他們的幫助。6.附錄6.1軟件使用說明運行條件:本軟件可以在Visual C+ 里運行,其他編程軟件沒有測試。進(jìn)入主菜單以后, 選擇你要執(zhí)行模塊,在初次使用時,應(yīng)先選擇指令1 輸入兩個多項式后才能使用其他模塊,在輸入多項式時應(yīng)注意多項式的名稱要用小寫字母表示,而且輸入多項式的項數(shù)時,要注意多項式的輸入應(yīng)不含同類項,且指數(shù)單調(diào)遞減,創(chuàng)建了兩個多項式后,可選擇指令2對其進(jìn)行輸出,只需輸入需輸出的多項式即可,可輸出多項式的項數(shù),而且顯示出多項式,接著可在再次選擇中選擇指令3,

15、并輸入兩個相加多項式的名稱和和式的名稱,即可輸出和式的項數(shù)以及顯示出相加后的多項式,接著可在再次選擇中選擇指令4,并輸入兩個相減多項式的名稱和差式的名稱,即可輸出差式的項數(shù)以及顯示出相減后的多項式,然后選擇指令5,可以刪除想要刪除的多項式,以騰出更多的內(nèi)存空間,當(dāng)使用完之后,可以選擇指令6來退出主菜單,6.2源碼#include<stdio.h>#include<stdlib.h> /*頭文件的包含*/#define READ(I) doI=getchar();while(I='n') /*宏定義,讀取不是回車符的字符*/typedef struct p

16、onode float xishu;int zhishu;struct ponode *next;pol,*p_pol; /*結(jié)構(gòu)體類型的定義及其類型別名*/ int Creatpol(p_pol *p_polhead,int n); /*創(chuàng)建多項式的函數(shù)聲明*/void Outp_pol(p_pol p_polhead); /*輸出多項式的函數(shù)聲明*/void Addpol(p_pol *p_polhead,p_pol polhead1,p_pol polhead2); /*求多項式之和的函數(shù)聲明*/void Decpol(p_pol *p_polhead,p_pol polhead1,p_

17、pol polhead2); /*求多項式之差的函數(shù)聲明*/void Delpol(p_pol *p_polhead); /*刪除多項式的函數(shù)聲明*/void main()p_pol polhead26=0; /* 定義結(jié)構(gòu)體指針數(shù)組*/char menu,name,name1,name2;int tuichu=0,j=0,n; /*數(shù)據(jù)類型聲明*/printf(" * 一元多項式的簡單計算器*nnn");printf(" (為確保函數(shù)正常運行,多項式要求不含同類項,指數(shù)遞減)n");while(tuichu=0) if(j!=0)printf(&quo

18、t;nnnnn再次選擇:n");printf(" *1.建立多項式 *n");printf(" *2.輸出多項式 *n");printf(" *3.求兩個多項式之和,建立和式并輸出*n");printf(" *4.求兩個多項式之差,建立和式并輸出*n");printf(" *5.刪除多項式 *n");printf(" *6.退出 *n");printf(" *請選擇指令:");READ(menu); /*輸入指令*/printf("n&

19、quot;);switch(menu) /*根據(jù)不同指令選擇不同的菜單*/case '1': /*建立多項式*/printf(" *請輸入要創(chuàng)建的多項式的名稱,用單個小寫字母表示:");READ(name); /*輸入多項式的名稱*/printf("n"); printf(" *請輸入項數(shù):");scanf("%d",&n); /*輸入多項式的項數(shù)*/if(Creatpol(&polheadname-'a',n) /*調(diào)用函數(shù)并判斷是否成功創(chuàng)建了多項式*/printf

20、(" *多項式%c創(chuàng)建完畢!n",name);break;case '2': /*輸出多項式*/printf("請輸入要輸出的多項式的名稱:");READ(name); /*輸入需輸出的多項式的名稱*/printf("n");Outp_pol(polheadname-'a'); /*調(diào)用多項式輸出函數(shù)*/break;case '3': /*求兩多項式的和*/printf("請輸入加式1的名稱:");READ(name1);printf("n");p

21、rintf("請輸入加式2的名稱:");READ(name2);printf("n");printf("請輸入要創(chuàng)建的和式的名稱:");READ(name);printf("n");Addpol(&polheadname-'a',polheadname1-'a',polheadname2-'a'); /*調(diào)用多項式求和函數(shù)*/Outp_pol(polheadname-'a'); /*調(diào)用多項式輸出函數(shù)*/break;case '4

22、9;: /*求兩多項式的差*/ printf("請輸入被減式的名稱:");READ(name1);printf("n");printf("請輸入減式的名稱:");READ(name2);printf("n");printf("請輸入要創(chuàng)建的差式的名稱:");READ(name);printf("n");Decpol(&polheadname-'a',polheadname1-'a',polheadname2-'a');

23、/*調(diào)用多項式求差函數(shù)*/Outp_pol(polheadname-'a'); /*調(diào)用多項式輸出函數(shù)*/break;case '5': /*刪除多項式*/printf("請輸入要刪除的多項式名稱:n");READ(name);Delpol(&polheadname-'a'); /*調(diào)用多項式刪除函數(shù)*/ printf("多項式%c已刪除!n",name);break;case '6': /*退出菜單*/tuichu=1;break;j+; /*統(tǒng)計選擇指令的次數(shù)*/int Crea

24、tpol(p_pol *p_polhead,int n)int i;p_pol p,t;*p_polhead=(pol*)malloc(sizeof(pol); /*申請一個空間*/(*p_polhead)->zhishu=n; /*頭指針的指數(shù)成員值為多項式的項數(shù)*/t=*p_polhead; printf(" 請按指數(shù)遞減序輸入最簡形式的多項式n");for(i=0;i<n;i+) /*循環(huán)輸入多項式各項的系數(shù)與指數(shù)*/p=(pol*)malloc(sizeof(pol); printf(" 請輸入第%d項(系數(shù),指數(shù)):",i+1);s

25、canf("%f%d",&(p->xishu),&(p->zhishu); /*輸入該項的系數(shù)與指數(shù)*/printf("n");t->next=p; /*t的下一個節(jié)點為p*/t=p; /*將p的成員值賦給t*/t->next=NULL; /*確定鏈尾指針為空*/return 1; /*創(chuàng)建完畢后返回1*/void Outp_pol(p_pol p_polhead)int i;p_pol p;printf("總項數(shù)為:%dn",p_polhead->zhishu); /*鏈表的頭指針的指數(shù)

26、成員值代表該多項式的項數(shù)*/p=p_polhead->next;for(i=0;i<p_polhead->zhishu;i+)if(i=0)printf("%f*x%d",p->xishu,p->zhishu); /*第一項的輸出*/elseif(p->xishu>=0)printf("+%f*x%d",p->xishu,p->zhishu); /*系數(shù)不小于零的非第一項的輸出*/elseprintf("%f*x%d",p->xishu,p->zhishu); /*系數(shù)

27、小于零的非第一項的輸出*/p=p->next; /*p指針移向下一個節(jié)點*/printf("n");void Addpol(p_pol *p_polhead,p_pol polhead1,p_pol polhead2)int i=0,e1,e2; float sum;p_pol p1,p2,p,t;p1=polhead1->next;p2=polhead2->next;*p_polhead=(pol*)malloc(sizeof(pol); /*申請一個空間*/p=t=*p_polhead;while(p1&&p2) /*判斷p1與p2均為

28、非空指針*/e1=p1->zhishu;e2=p2->zhishu;if(e1>e2) p=(pol*)malloc(sizeof(pol);t->next=p; t=p;*p=*p1; /*將p1的成員值賦給p*/p1=p1->next; /*p1移向下一個節(jié)點*/i+; /*統(tǒng)計多項式的項數(shù)*/else if(e1=e2) sum=p1->xishu+p2->xishu; /*將兩個指數(shù)相同的項的系數(shù)相加*/if(sum!=0.0) /*當(dāng)其不為零時*/p=(pol*)malloc(sizeof(pol);t->next=p;t=p;p-&g

29、t;xishu=sum; /*系數(shù)為sum*/p->zhishu=e1; /*指數(shù)不變*/i+; /*統(tǒng)計多項式的項數(shù)*/p1=p1->next; p2=p2->next; /*p1與p2均移向下一個節(jié)點*/ else if(e1<e2) p=(pol*)malloc(sizeof(pol);t->next=p; t=p;*p=*p2; /*將p2的成員值賦給p*/p2=p2->next; /*p2移向下一個節(jié)點*/i+; /*統(tǒng)計多項式的項數(shù)*/while(p1) /*判斷p1是否為空指針*/p=(pol*)malloc(sizeof(pol);*p=*p

30、1; /*將p1的成員值賦給p*/t->next=p; t=p;p1=p1->next; /*p1移向下一個節(jié)點*/i+; /*統(tǒng)計多項式的項數(shù)*/while(p2) /*判斷p2是否為空指針*/p=(pol*)malloc(sizeof(pol);*p=*p2; /*將p2的成員值賦給p*/t->next=p; t=p; p2=p2->next; /*p2移向下一個節(jié)點*/i+; /*統(tǒng)計多項式的項數(shù)*/(*p_polhead)->zhishu=i; /*將多項式的項數(shù)保存在鏈表的頭指針的指數(shù)成員值中*/t->next=NULL; /*確定鏈尾指針為空*/

31、void Decpol(p_pol *p_polhead,p_pol polhead1,p_pol polhead2)int i=0,e1,e2;float dif;p_pol p1,p2,p,t;p1=polhead1->next;p2=polhead2->next;*p_polhead=(pol*)malloc(sizeof(pol);p=t=*p_polhead; while(p1&&p2) /*判斷p1與p2均為非空指針*/e1=p1->zhishu;e2=p2->zhishu;if(e1>e2) p=(pol*)malloc(sizeof(pol);t->next=p; t=p; *p=*p1; /*將p1的成員值賦給p*/p1=p1->next; /*p1移向下一個節(jié)點*/i+; /*統(tǒng)計多項式的項數(shù)*/else if(e1=e2

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論