




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上精選優質文檔-傾情為你奉上專心-專注-專業專心-專注-專業精選優質文檔-傾情為你奉上專心-專注-專業實 驗 報 告題目:編制一個一元多項式基本運算的程序 姓名: 學號:PB 一、需求分析在通常的應用中,多項式的次數可能很高且變化很大,使得順序存儲結構的最大長度很難確定。由稀疏多項式的特點,故采用鏈式存儲結構,可以不會帶來浪費存儲空間。程序中單鏈表存儲,根據鏈表的指數域,對鏈表進行升序排序,可給運算帶來方便。 程序設計是在VC6.0環境下設計的的。程序執行的命令為(程序主界面):二、概要設計抽象數據類型一元多項式的定義如下:LNode *MakeNode(double
2、coef, int exp) 通過傳入指數和系數創建一個節點,返回該節點的地址。void InitList(LinkList &L) 初始化,帶頭節點void PrintPolyn (LinkList L) 傳入鏈表的指針,打印該鏈表LinkList CreatPolyn(void)/輸入m項的系數和指數,建立表示一元多項式的有序鏈表Ldouble SumPolyn(LinkList L,double x) 傳入鏈表的指針及x值,求多項式的值。void DestroyPolyn (LinkList &L) 銷毀多項式,去掉頭節點void ClearPolyn (LinkList &L) 清空多
3、項式,保留節點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) /根據鏈表的expn指數域,對鏈表進行升序插入。13. void DifferentialPolyn(LinkList L,LinkList &L2) 對L1求導存到L214. void IntegralPolyn(LinkList L,LinkList &L2) 對L1積分存到L22. 主程序:void main( )初始化;While(1)Switch()選擇命令;處理命令;三、詳細設計元素類型、結點類型和指針類型 typedef struct PolyNodeint expn; /指數double coef;/系數struct PolyNode *next;LNode,*LinkL
5、ist; 2幾個基本操作的函數 1. LNode *MakeNode (double coef,int expn)/制造節點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) /根據鏈表的expn指數域,對鏈表進行升序插入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項的系數和指數,建立表示一元多項式的有序鏈表L LNode *p;LinkList head;double c;int e;InitList(head);printf(輸入系數、指數,系數為0時結束);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.主函數#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; 四、調試分析1剛開始時,忽略了一些變量參數的標識&,使調試程序時費了不少功夫。應注重確定參數的變量和屬性。2在做多項式求導運算時,未考慮常數項,結果出現a*x-1,運算錯誤。應考慮特殊情況。3整個程序運行期間實行動態存儲管理,釋放無用空間;特別是通過清除函數ClearPolyn和銷毀函數DestroyPolyn釋放無用空間。有效地防止了在程序反復運行可能出現系統空間不夠分配的現象。4.經驗
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣西社會工作者成績復核流程及辦理指南
- 小學生作文辯論課件
- 《鑄智慧殿堂》課件
- 《構建物聯網》課件
- 專職安全生產管理人員(C類)模擬試題含答案(附解析)
- 配電線路工專業模考試題與參考答案解析
- 2024年11月預防醫學考試題(附答案解析)
- 11月財務報表管理模擬試題(附參考答案解析)
- 航空物流中的航空貨運標準化與規范化考核試卷
- 互聯網生活服務行業智能硬件應用考核試卷
- HSK六級真題與答案下載(第一套)
- 鐵總物資〔2015〕117號:鐵路建設項目甲供物資目錄
- 二年級期中家長會課件PPT
- 初三綜合素質評價自我陳述報告(16篇)
- 工資條(標準模版)
- 2023年江西南昌高新區社區工作者招聘54人(共500題含答案解析)筆試歷年難、易錯考點試題含答案附詳解
- 四川省中小流域暴雨洪水計算表格(尾礦庫洪水計算)
- 教育部中等職業學校教學大綱
- 中藥斗譜排列方法 斗譜的編排原則
- 《海底兩萬里》1-47章練習題(含答案)
- GB/T 23703.2-2010知識管理第2部分:術語
評論
0/150
提交評論