一元多項式相加實驗報告_第1頁
一元多項式相加實驗報告_第2頁
一元多項式相加實驗報告_第3頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

一元多項式相加實驗報告一元多項式的相加一實驗內容根據(jù)所學的數(shù)據(jù)結構中線性結構(線性表)的邏輯特性和物理特性及相關法,應用于求解一個具體的實際問題 兩個多項式相加二需求分析掌握線性結構的邏輯特性和物理特性。建立一元多項式。將一元多項式輸入,并存儲在內存中,并按照指數(shù)降序排列輸出多項式。能夠完成兩個多項式的加減運算,并輸出結果。三概要設計本程序所用到的抽象數(shù)據(jù)類型:typedefOrderedLinkList polynomial;//用帶表頭結點的有序鏈表表示多項式結點的數(shù)據(jù)元素類型定義為:typedefstruct{//項的表示floatcoef;//系數(shù)int expn;//指數(shù)term,ElemType;VoidAddPolyn(polynomail&Pa,polynomail&Pb)PositionGetHead()PositionNextPos(LinkListL,Linkp)ElemGetCurElem(Linkp)intcmp(terma termb)StatusSetCurElem(Link&p,ElemTypee)StatusDelFirst(Linkh,Link&q)StatusListEmpty(LinkListL)StatusAppend(LinkList&L,LinkFreeNode()存儲結構coefcoefexpnext項式的相加相減操作。模塊劃分a)主程序;2)初始化單鏈表;3)建立單鏈表;4)相加多項式a)主程序;2)初始化單鏈表;3)建立單鏈表;4)相加多項式主程序流程圖開始開始申請結點空間輸入多項式各項的系數(shù)X,指數(shù)Y輸出已輸出的多項式否是否輸入正確合并同類項結束四詳細設計根據(jù)一元多項式相加的運算規(guī)則:對于兩個一元多項式中所有指數(shù)相同的項,對應系數(shù)相加,若其和不為零,則構成“和多項式”中的一項,對PolyAddpapb所指的兩個多項式相加,結果為paqaqb分別從多項式的首項開始掃描2-5-1qa和qb可能出現(xiàn)下列三種情況之一:qa->expqb->exp,qa繼續(xù)向后掃描。qa->expqb->exp,則將其系數(shù)相加。若相加結果不為零,將結果qa->coefqbqaqbqa、qb繼續(xù)向后掃描。qa->expqb->exp,qbqa所指結點之前,然后qa、qb繼續(xù)向后掃描。qaqbpa指向的鏈表即為兩個多項式之和。五源程序代碼#include<stdio.h>#include<malloc.h>#include<stdlib.h>#defineNULL0typedefstructNODE{float coef; //系數(shù)int expn; //指數(shù)structNODE*next;}NODE;NODE*Creat(intn);voidprint(NODENODE*AddPolyn(NODE*head1,NODE*head2);NODE*Delfirst(NODE*head,NODE*q);voidInsertBefore(NODE*p1,NODEint compare(inta,intb);main(){NODE*head1,*head2,*head3;intn1,n2;printf("請輸入你需要的多項數(shù)的數(shù)目n1 :");scanf("%d",&n1);head1=Creat(n1);printf("第一個多項式的顯示:\n");print(head1);printf("\n請輸入你需要的多項數(shù)的數(shù)目n2 :scanf("%d",&n2);head2=Creat(n2);printf("\n第二個多項式的顯示:print(head2);head3=AddPolyn(head1,head2);printf("\n合并后的多項式的顯示:print(head3);printf("\n");}/*創(chuàng)建鏈表*/NODE*Creat(intn){NODE*current,*previous,*head;inti;head=(NODE*)malloc(sizeof(NODE));/*創(chuàng)建頭結點*/previous=head;for(i=0;i<n;i++){current=(NODE*)malloc(sizeof(NODE));printf("請輸入系數(shù)和指數(shù):");scanf("%f%d",¤t->coef,¤t->expn);previous->next=current;previous=current;}previous->next=NULL;returnhead;}/*qaqbpb(00),pb里面由InsertBefore和Delfirst兩個小模塊組成一部分NODE *AddPolyn(NODE*head1,NODE*head2){NODE*ha,*hb,*qa,*qb;inta,b;floatsum;ha=head1; /*hahb指向頭結點hb=head2;qa=ha->next; /*qaqb指向頭結點的下一個結點qb=hb->next;while(qa&&qb) /*qaqb均非空*/{a=qa->expn;b=qb->expn;switch(compare(a,b)){case-1: /*qa->expn<qb->expn*/ha=qa;qa=qa->next;break;case0:sum=qa->coef+qb->coef; /*系數(shù)的和*/if(sum!=0.0){ /*如果不是qa->coef=sum; /*改變系數(shù)*/ha=qa;}else{free(Delfirst(ha,qa));}free(Delfirst(hb,qb));qa=ha->next;qb=hb->next; /*qb釋放后要重新賦值*/break;case1: /*qa->expn>qb->Delfirst(hb,qb);InsertBefore(ha,qb); /*qbha下一個結點之前qb=hb->next;ha=ha->next;break;}}if(qb)ha->next=qb; /*free(head2);returnhead1;}/*比較*/intcompare(inta,intb){if(a<b)return-1;elseif(a>return1;elsereturn0;}/*刪除結點q*/NODE*Delfirst(NODE*p1,NODE*q){p1->next=q->next;return(q);}/*插入結點,引入結點p,可以讓p插入到p2和p1之間*/voidInsertBefore(NODE*p1,NODE*p2){NODE*p;p=p1->next;p1->next=p2;p2->next=p;}/*打印,為了美觀程序分開打印*/voidprint(NODE*head){NODE*current;current=head->next;while(current->next!=NULL){printf("%0.f*x^%d+",current->coef,current->expn);current=current->next;}printf("%0.f*x^%d",current->coef,current->expn);}六調試分析

溫馨提示

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

評論

0/150

提交評論