一元多項式計算器報告(C語言編程)_第1頁
一元多項式計算器報告(C語言編程)_第2頁
一元多項式計算器報告(C語言編程)_第3頁
一元多項式計算器報告(C語言編程)_第4頁
一元多項式計算器報告(C語言編程)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)實 驗 報 告題目:編制一個一元多項式基本運算的程序 姓名: 學號:PB 一、需求分析在通常的應用中,多項式的次數(shù)可能很高且變化很大,使得順序存儲結(jié)構的最大長度很難確定。由稀疏多項式的特點,故采用鏈式存儲結(jié)構,可以不會帶來浪費存儲空間。程序中單鏈表存儲,根據(jù)鏈表的指數(shù)域,對鏈表進行升序排序,可給運算帶來方便。 程序設計是在VC6.0環(huán)境下設計的的。程序執(zhí)行的命令為(程序主界面):二、概要設計抽象數(shù)據(jù)類型一元多項式的定義如下:LNode *MakeNode(double

2、coef, int exp) 通過傳入指數(shù)和系數(shù)創(chuàng)建一個節(jié)點,返回該節(jié)點的地址。void InitList(LinkList &L) 初始化,帶頭節(jié)點void PrintPolyn (LinkList L) 傳入鏈表的指針,打印該鏈表LinkList CreatPolyn(void)/輸入m項的系數(shù)和指數(shù),建立表示一元多項式的有序鏈表Ldouble SumPolyn(LinkList L,double x) 傳入鏈表的指針及x值,求多項式的值。void DestroyPolyn (LinkList &L) 銷毀多項式,去掉頭節(jié)點void ClearPolyn (LinkList &L) 清空多

3、項式,保留節(jié)點void CopyPolyn (LinkList La, LinkList &Lb) 將La位置的多項式復制到Lb位置void AddPolyn(LinkList L,LinkList J ,LinkList &K) 將a和b多項式相加存到cvoid MultiplyPolyn(LinkList L,LinkList J,LinkList &K) 將a和b相減存到c11. void MultiplyPolyn(LinkList L,LinkList J,LinkList &K) 將a和b多項式相乘存到c12. void OrderInsert(LinkList L,LNode *

4、r) /根據(jù)鏈表的expn指數(shù)域,對鏈表進行升序插入。13. void DifferentialPolyn(LinkList L,LinkList &L2) 對L1求導存到L214. void IntegralPolyn(LinkList L,LinkList &L2) 對L1積分存到L22. 主程序:void main( )初始化;While(1)Switch()選擇命令;處理命令;三、詳細設計元素類型、結(jié)點類型和指針類型 typedef struct PolyNodeint expn; /指數(shù)double coef;/系數(shù)struct PolyNode *next;LNode,*LinkL

5、ist; 2幾個基本操作的函數(shù) 1. LNode *MakeNode (double coef,int expn)/制造節(jié)點LNode *p;p=(LNode*)malloc(sizeof(LNode);p-coef=coef;p-expn=expn;p-next=NULL;return p;2. void OrderInsert(LinkList L,LNode *r) /根據(jù)鏈表的expn指數(shù)域,對鏈表進行升序插入if(!L)printf(error);LNode *p,*q; p=L;while(p-next&p-next-expnexpn) p=p-next; if(p-next&p-

6、next-expn=r-expn)p-next-coef+=r-coef; if(p-next-coef=0)q=p-next; p-next=q-next;free(q);free(r); else r-next=p-next; p-next=r; 3. void AddPolyn(LinkList L,LinkList J,LinkList &K)/多項式相加if(!L|!J)printf(errorn);return;LNode *p,*q,*m;p=L-next;q=J-next;InitList(K);while(p) m=MakeNode(p-coef,p-expn); Order

7、Insert(K,m);p=p-next;while(q) m=MakeNode(q-coef,q-expn);OrderInsert(K,m);q=q-next;4. void MultiplyPolyn(LinkList L,LinkList J,LinkList &K)/多項式相乘 if(!L|!J) printf(error); return; LNode *p,*q,*m; p=L-next; InitList(K); while(p) q=J-next; while(q) m=MakeNode(p-coef*q-coef,p-expn+q-expn); OrderInsert(K,

8、m); q=q-next; p=p-next; 5.LinkList CreatPolyn(void)/輸入m項的系數(shù)和指數(shù),建立表示一元多項式的有序鏈表L LNode *p;LinkList head;double c;int e;InitList(head);printf(輸入系數(shù)、指數(shù),系數(shù)為0時結(jié)束);while(1)scanf(%lf,&c);if(c=0) break;scanf(%d,&e);p=MakeNode(c,e); OrderInsert(head,p);return head;6.void DifferentialPolyn(LinkList L,LinkList &

9、L2) /求導LNode *p,*r;if(!L) return;InitList(L2);r=L2;p=L-next;while(p)if(p-expn=0) r-next=MakeNode(0,0);elser-next=MakeNode(p-coef*p-expn,p-expn-1);r=r-next;p=p-next;r-next=NULL;3.主函數(shù)#define N 12void main()LinkList PN=NULL;int menu,i,j,l;double k,sum;while(1)printf(n);printf( 多項式計算器 n);printf(=n); pri

10、ntf( 新建-1 打印-2 復制-3n);printf( 求值-4 相加-5 相減-6n);printf( 微分-7 銷毀-8 清空-9n); printf( 積分-10 相乘-11 退出-0n);printf(=n);printf( 請選擇:n);scanf(%d,&menu);switch(menu)case 0:return; case 1:printf(輸入新多項式的下標(0-%d):,N-1);scanf(%d,&i);Pi=CreatPolyn();break;case 2:for(i=0;iN;i+)printf( P%d = ,i);printPolyn(Pi);break;

11、case 3:printf(輸入被復制的多項式和新多項式的下標(0-%d): ,N-1);scanf(%d%d,&i,&j);CopyPolyn(Pi,Pj);break;case 4: printf(輸入要求值多項式的下標(0-%d)和X值:,N-1); scanf(%d%lf,&i,&k);sum=SumPolyn(Pi,k); printf(多項式值為%lf,sum); break;case 5:printf(輸入相加兩項的多項式和新多項式的下標(0-%d): ,N-1);scanf(%d%d%d,&i,&j,&l);AddPolyn(Pi,Pj,Pl);break;case 6:pri

12、ntf(輸入減兩項的多項式和新多項式的下標(0-%d): ,N-1);scanf(%d%d%d,&i,&j,&l);MinusPolyn(Pi,Pj,Pl);break; case 7:printf(輸入求導的多項式的下標(0-%d)和新多項式的下標(0-%d): ,N-1,N-1);scanf(%d%d,&i,&j);DifferentialPolyn(Pi,Pj);break;case 8:printf(輸入被銷毀多項式的下標(0-%d): ,N-1);scanf(%d,&i);DestroyPolyn(Pi);break; case 9:printf(輸入被清空多項式的下標(0-%d):

13、 ,N-1);scanf(%d,&i);ClearPolyn(Pi);break;case 10:printf(輸入求積分的多項式的下標(0-%d)和新多項式的下標(0-%d): ,N-1,N-1);scanf(%d%d,&i,&j);IntegralPolyn(Pi,Pj);break;case 11:printf(輸入相乘兩項的多項式和新多項式的下標(0-%d): ,N-1);scanf(%d%d%d,&i,&j,&l);MultiplyPolyn(Pi,Pj,Pl);break; 四、調(diào)試分析1剛開始時,忽略了一些變量參數(shù)的標識&,使調(diào)試程序時費了不少功夫。應注重確定參數(shù)的變量和屬性。2在做多項式求導運算時,未考慮常數(shù)項,結(jié)果出現(xiàn)a*x-1,運算錯誤。應考慮特殊情況。3整個程序運行期間實行動態(tài)存儲管理,釋放無用空間;特別是通過清除函數(shù)ClearPolyn和銷毀函數(shù)DestroyPolyn釋放無用空間。有效地防止了在程序反復運行可能出現(xiàn)系統(tǒng)空間不夠分配的現(xiàn)象。4.經(jīng)驗

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論