習(xí)題四實(shí)驗(yàn)報(bào)告_第1頁
習(xí)題四實(shí)驗(yàn)報(bào)告_第2頁
習(xí)題四實(shí)驗(yàn)報(bào)告_第3頁
習(xí)題四實(shí)驗(yàn)報(bào)告_第4頁
習(xí)題四實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)報(bào)告題目:一元多項(xiàng)式加法班級(jí):08113701姓名:韓校歡學(xué)號(hào):0811370115完成日期:2010年11月20日一、需求分析一元多項(xiàng)式加法的任務(wù)主要是對(duì)用戶輸入的合法的兩個(gè)一元多項(xiàng)式進(jìn)行加法運(yùn)算并輸出計(jì)算后的結(jié)果。(1)輸入的形式和輸入值的范圍:用戶只需輸入多項(xiàng)式每一項(xiàng)的指數(shù)e和系數(shù)m(必須成對(duì)輸入,常數(shù)項(xiàng)的指數(shù)為0),其中e必須是正整數(shù)(0,1,2……),m必須是實(shí)數(shù)。規(guī)定多項(xiàng)式最多只能有20項(xiàng)。(2)輸出的形式:(m0,e0)(m1,e1)(m2,e2)…………(3)程序所能達(dá)到的功能:計(jì)算用戶輸入的兩個(gè)多項(xiàng)式的加法結(jié)果(4)測(cè)試數(shù)據(jù):輸入被加的多項(xiàng)式為(1.24)(32)來檢驗(yàn)當(dāng)用戶不按順序輸入時(shí)程序的處理能力輸入字母時(shí),輸入H來檢驗(yàn)程序處理錯(cuò)誤的能力輸入被加的多項(xiàng)式(40)(1.25)(266)(57)(208)(1410)輸入加的多項(xiàng)式(23)(155)(3.28)(209)(1210)(5.611)(8012)(5613)(414)(7.315)(116)(117)(118)(119)(120)(121)(122)(123)(124)(125)二、概要設(shè)計(jì)線性表的抽象數(shù)據(jù)類型定義:ADTList{數(shù)據(jù)對(duì)象:D={ai|ai∈ElemSet,i=1,2,……,n,n≥0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=1,2,……,n}基本操作:Init(&L)操作結(jié)果:構(gòu)造一個(gè)空的線性表L。Destroy(&L)初始條件:線性表L已經(jīng)存在。操作結(jié)果:銷毀線性表L。}ADTList本程序的主函數(shù)順序執(zhí)行各個(gè)函數(shù),只有一個(gè)主函數(shù)模塊,所以沒有模塊的調(diào)用。三、詳細(xì)設(shè)計(jì)全部程序:#include<iostream.h>#include<stdlib.h>#defineOK1#defineERROR0typedefintStatus;typedefstructxiang{//項(xiàng)的表示floatcoef;//系數(shù)intexpn;//指數(shù)structxiang*next;}xiang,*term;StatusInit(term&L){//創(chuàng)建一個(gè)空鏈表 L=(term)malloc(sizeof(xiang)); if(!L)exit(ERROR); L->next=NULL; returnOK;}//InitStatuscreat(term&p){//輸入多項(xiàng)式的系數(shù)和指數(shù),建立一元多項(xiàng)式的有序鏈表ptermq; q=(term)malloc(sizeof(xiang)); if(!q)exit(ERROR); p->next=q; charh;//用于判斷用戶是否輸入結(jié)束 intd;//用于判斷用戶是否順序輸入 for(inti=1;i<=20;i++){cout<<"請(qǐng)輸入第"<<i<<"項(xiàng)的系數(shù)(實(shí)數(shù))"<<endl; cin>>q->coef; cout<<"請(qǐng)輸入第"<<i<<"項(xiàng)的指數(shù)(正整數(shù))"<<endl;cin>>q->expn;if(i!=1){ if(d>q->expn) {cout<<"您沒有順序輸入,程序結(jié)束"<<endl; exit(ERROR);} }//判斷用戶是否順序輸入 d=q->expn; if(i==20){ cout<<"您已輸入到規(guī)定的最大項(xiàng)數(shù)"<<endl; q->next=NULL; returnOK;}//限定用戶最多只能輸入20項(xiàng)cout<<"還需要繼續(xù)輸入嗎?(Y/N請(qǐng)輸入小寫)"<<endl; cin>>h; if(h=='n'){q->next=NULL;returnOK;} if(h!='y'){cout<<"您輸入了錯(cuò)誤的字符,程序結(jié)束"<<endl;exit(ERROR);}termr; r=(term)malloc(sizeof(xiang)); if(!r)exit(ERROR);q->next=r; q=r; }//for q->next=NULL; returnOK;}//creatintqiuxiao(inta,intb){ //判斷a,b的大小 if(a!=b){ if(a<b)return1; elsereturn2; }//if elsereturn0;}Statusadd(term&pa,termpb){ //多項(xiàng)式加法:pa=pa+pb,利用兩個(gè)多項(xiàng)式的結(jié)點(diǎn)構(gòu)成“和多項(xiàng)式”//“和多項(xiàng)式”存儲(chǔ)在線性鏈表pa中 termqa,qb,s;qa=pa->next; qb=pb->next; s=pa; intc;while(qa&&qb){ c=qiuxiao(qa->expn,qb->expn); switch(c){ case1: s=qa; qa=qa->next; break; case2: termo;o=qb->next; s->next=qb; s=qb; qb->next=qa; qb=o; break; case0: floatx;x=qa->coef+qb->coef; if(x!=0.0){ termu;qa->coef=x; s=qa; qa=qa->next; u=qb;qb=qb->next; free(u); }//ifelse{s->next=qa->next;free(qa);qa=s->next; termu;u=qb;qb=qb->next;free(u); }//elsebreak;}//switch }//while if(qb)s->next=qb;//鏈接Pb中剩余結(jié)點(diǎn) free(pb);//釋放Pb的頭結(jié)點(diǎn) returnOK;}//addStatusshow(termp){ cout<<"計(jì)算結(jié)果如下:"<<endl; termk; k=p->next; for(inti=1;i<=40;i++){ cout<<"("<<k->coef<<","<<k->expn<<")";if(!(k->next))returnOK; k=k->next; }//for returnOK;}//showvoidmain(void){ termm1,m2; Init(m1); Init(m2); cout<<"請(qǐng)按指數(shù)遞增的順序輸入多項(xiàng)式的每一項(xiàng)(最多只能輸入20項(xiàng))"<<endl; cout<<"請(qǐng)輸入被加的多項(xiàng)式"<<endl; creat(m1); cout<<"請(qǐng)輸入加的多項(xiàng)式"<<endl; creat(m2); add(m1,m2); show(m1);}函數(shù)的調(diào)用關(guān)系圖反映如下:

四、調(diào)試分析該程序在調(diào)試的時(shí)候發(fā)現(xiàn)在建立鏈表m1和m2時(shí)在處理數(shù)據(jù)時(shí)會(huì)出現(xiàn)多種問題,特別是鏈表的尾節(jié)點(diǎn)的next一定要賦值NULL,所以要在每個(gè)結(jié)束語句前加上q->next=NULL。還有就是多種結(jié)束語句的位置一定要放的恰到好處。函數(shù)creat的空間復(fù)雜度為O(n),函數(shù)add的最大空間復(fù)雜度為O(n1+n2)。經(jīng)過程序的調(diào)試收獲很多,單單寫一個(gè)程序算法(簡(jiǎn)單的)不是很難,但是到調(diào)試的時(shí)候就會(huì)有很多錯(cuò)誤,經(jīng)過調(diào)試可以培養(yǎng)我們小心謹(jǐn)慎的辦事態(tài)度。五、用戶使用說明在執(zhí)行該程序時(shí),首先要根據(jù)提示順序(指數(shù)遞增的順序)輸入每一項(xiàng)的系數(shù)(實(shí)數(shù))和指數(shù)(整數(shù)),在遇到系統(tǒng)提示是否繼續(xù)輸入的時(shí)候要輸入字母小寫y(繼續(xù))或n(輸入結(jié)束),當(dāng)用戶輸完第20項(xiàng)時(shí),系統(tǒng)不再提示用戶是否繼續(xù)輸入而自動(dòng)運(yùn)行下邊程序,因?yàn)樵摮绦蛳拗屏硕囗?xiàng)式的最大項(xiàng)數(shù)不能超過20。當(dāng)用戶輸完以上數(shù)據(jù)后,系統(tǒng)便會(huì)自動(dòng)輸出計(jì)算結(jié)果。六、測(cè)試結(jié)果輸入被加的多項(xiàng)式為(1.24)(32)時(shí)系統(tǒng)提示出錯(cuò)自動(dòng)結(jié)束程序當(dāng)用戶遇到提示是否繼續(xù)輸入字符時(shí)輸入字母H系統(tǒng)提示輸入錯(cuò)誤的字符,程序自動(dòng)結(jié)束。當(dāng)用戶輸入被加的多項(xiàng)式(4,0)(1.2,5)(26,6)(5,7)(20,8)(14,10)輸入加的多項(xiàng)式(2,3)(15,5)(3.2,8)(20,9)(12,10)(5.6,11)(80,12)(56,13)(4,14)(7.3,15)(1,16)(1,17)(1,18)(1

溫馨提示

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

評(píng)論

0/150

提交評(píng)論