1內蒙古科技大學課程設計任務書-一元多項式的代數(shù)運算_第1頁
1內蒙古科技大學課程設計任務書-一元多項式的代數(shù)運算_第2頁
1內蒙古科技大學課程設計任務書-一元多項式的代數(shù)運算_第3頁
1內蒙古科技大學課程設計任務書-一元多項式的代數(shù)運算_第4頁
1內蒙古科技大學課程設計任務書-一元多項式的代數(shù)運算_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、內蒙古科技大學數(shù)據結構課程設計論文題 目:一元多項式的代數(shù)運算學生姓名:郭棟學 號:1176807301專 業(yè):計算機科學與技術班 級:計-3指導教師:丁雨 內蒙古科技大學課程設計任務書課程名稱數(shù)據結構課程設計設計題目一元多項式的代數(shù)運算指導教師丁雨時間一、教學要求1. 掌握數(shù)據結構與算法的設計方法,具備初步的獨立分析和設計能力2. 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設計、程序編碼、測試等根本方法和技能3. 提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力4. 訓練用系統(tǒng)的觀點和軟件開發(fā)一般標準進行軟件開發(fā),培養(yǎng)軟件工作者所應具備的科學的工作方法和作風二、設計資料及參數(shù)一元多項式的代

2、數(shù)運算以鏈表存儲一元多項式,在此根底上完成對多項式的操作。要求設計類或類模板來描述一元多項式,包含必要的構造函數(shù)和析構函數(shù),以及其他能夠完成如下功能的成員函數(shù):v 輸入多項式v 輸出多項式v 多項式加法v 多項式減法v 多項式乘法 并設計主函數(shù)測試該類。三、設計要求及成果1. 分析課程設計題目的要求2. 寫出詳細設計說明3. 編寫程序代碼,調試程序使其能正確運行4. 設計完成的軟件要便于操作和使用5. 設計完成后提交課程設計報告四、進度安排資料查閱與討論系統(tǒng)分析系統(tǒng)的開發(fā)與測試編寫課程設計說明書和驗收五、評分標準考勤占20%課程設計論文40%辯論綜合評定40%成績采用五級分制評定六、建議參考資

3、料1?數(shù)據結構 C3.?數(shù)據結構:用面向對象方法與C+語言描述?,殷人昆 主編, 清華大學出版社 2007目錄引言4需求分析4設計概要4一、 存儲結構:4二、 一元多項式的創(chuàng)立:5三、 加法設計:6四、 乘法設計:7五、 減法設計:7六、 一元多項式輸出:8運行環(huán)境與運行結果9運行環(huán)境9運行結果9心得體會10附錄:源程序代碼11引言一般的,我們只知道數(shù)學上的一元多項式的運算,且都是用筆來計算的,然而此次課程設計將會通過程序用電腦來實現(xiàn)一元多項式的加法和乘法運算。 通過C+使用順序和動態(tài)存儲結構實現(xiàn)一元多項式加法和乘法的運算,并且按升序和降序兩種情況排列。需求分析這個程序的關

4、鍵是多項式的創(chuàng)立和排列,以及相乘時系數(shù)相乘和指數(shù)相加、相加時相同指數(shù)的系數(shù)相加、相減時相同指數(shù)的系數(shù)相減。由于多項式擁有指數(shù)和系數(shù)假設基數(shù)已定,所以可以定義一個包含指數(shù)系數(shù)的結構體,用單鏈表存儲多項式的數(shù)據,所以結構體包含next指針。數(shù)據插入時比擬兩數(shù)的指數(shù),按照升序降序順序排序,從表頭的next開始,直至找到適宜的位置,然后開始鏈表中數(shù)值的插入,如果相等那么直接將指數(shù)相加,如果大于就將新數(shù)據插入到當前指向的前面,否那么將新數(shù)據插入到最后。輸入完數(shù)據后輸出相乘、相加,多項式運算時要循環(huán)遍歷整個多項式,多項式的每一組數(shù)據都要和另一個多項式整組數(shù)據相運算每一個運算值都存儲到新建的“多項式鏈表中,

5、直到兩個多項式都遍歷完結束。設計概要一、 存儲結構:一元多項式的表示在計算機內可以用鏈表來表示,為了節(jié)省存儲空間,只存儲多項式中系數(shù)非零的項。鏈表中的每一個結點存放多項式的一個系數(shù)非零項,它包含三個域,分別存放該項的系數(shù)、指數(shù)以及指向下一個多項式項結點的指針。一元多項式相乘一元多項式輸出一元多項式相減退出一元多項式創(chuàng)立一元多項式相加一元多項式的運算一元多項式排序圖 開始創(chuàng)立一個含n個鏈表類型結點的項分別輸入各項的系數(shù)和指數(shù)判斷是否系數(shù)不為0且指數(shù)大于0重新輸入一元多項式創(chuàng)立成功二、 一元多項式的創(chuàng)立:三、 加法設計:創(chuàng)立兩個指針分別指向兩個多項式表頭的next,分別使用for函數(shù)單獨循環(huán),遍歷

6、各自的每一組數(shù)據,每遍歷一次都將系數(shù)與指數(shù)存儲到新建多項式的鏈表中。因為存儲時利用到插入函數(shù),而插入函數(shù)中有相同指數(shù)的系數(shù)相加功能直接將兩個多項式的數(shù)據依次插入到新的多項式中即可完成多項式相加。1功能:將兩多項式相加。 2數(shù)據流入:輸入函數(shù)。 3數(shù)據流出:多項式相加后的結果。 4程序流程圖:多項式的加法流程圖如圖3.3所示。 5測試:兩多項式是否為空,為空那么提示重新輸入,否那么,進行運算。開始運算時系數(shù)相加刪除該項判斷所輸入的多項式系數(shù)是否為0判斷輸入的兩個多項式指數(shù)是否相等輸入的第1個多項式為B判斷輸入的多項式1,2指數(shù)是否e1>e2輸入的第2

7、個多項式為B進行運算四、 乘法設計:創(chuàng)立兩個指針分別指向兩個多項式表頭的next,使用for函數(shù)嵌套循環(huán),遍歷每一組數(shù)據,每遍歷一次都將兩組數(shù)據的系數(shù)相乘,指數(shù)相加,再利用插入函數(shù)將系數(shù)與指數(shù)存儲到新建多項式的鏈表中。1功能:將兩多項式相乘。 2數(shù)據流入:輸入函數(shù)。 3數(shù)據流出:多項式相乘后的結果。 4程序流程圖:多項式的乘法流程圖如下圖。 開始給出運算的兩個多項式按系數(shù)相乘指數(shù)相加進行運算將運算的結果相加并輸出5測試要點:兩多項式是否為空,為空那么提示重新輸入,否那么,進行運算。五、 減法設計:創(chuàng)立兩個指針分別指向兩個多項式表頭的next,以兩個指針同

8、時不為空為條件循環(huán)遍歷,如果當前多項式A的指數(shù)小于多項式B,那么將當前多項式B的系數(shù)置負,指數(shù)不變,存入新建多項式中,指向多項式B的指針指向下一個;如果如果當前多項式A的指數(shù)大于多項式B,那么將當前多項式A的系數(shù)指數(shù)不變,存入新建多項式中,指向多項式A的指針指向下一個;否那么將多項式A的系數(shù)減去B的系數(shù)后存入新建多項式中,指數(shù)不變存入,再將兩個指針同時指向下一個。結束循環(huán)后判斷是哪一個多項式遍歷完了,將未遍歷完的多項式剩下的數(shù)據全部插入到新建多項式中。1功能:將兩多項式相減。 2數(shù)據流入:調用輸入函數(shù)。 3數(shù)據流出:多項式相減后的結果。 4程序流程圖:多項式的減法

9、流程圖如圖3.5所示。 開始調用多項式加法函數(shù)進行運算將多項式B進行復制取多項式B的相反數(shù)5測試要點:兩多項式是否為空,為空那么提示重新輸入,否那么,進行運算。六、 一元多項式輸出:先判斷錄入的兩個多項式是否有空項,如果兩個多項式都不是空的,那么順序輸出多項式A和多項式B,否那么多項式創(chuàng)立不成功。操作流程圖如下圖:輸出多項式B輸出多項式A開始判斷所輸入的兩個多項式是否有空的多項式創(chuàng)立有誤,重新輸入圖運行環(huán)境與運行結果運行環(huán)境:本課程程序設計語言為 C+,程序的運行環(huán)境為。、運行結果: 進入運行界面A、 B多項式輸出界面A、 B多項式加、減、乘運算輸出界面心得體會一元多項式計算是一個單

10、鏈表的運用, 通過這個程序可以檢測我們的學習情況,看看我們是否對單鏈表真正的理解。 一元多項式計算器的根本功能定為: (1) 建立多項式  (2) 輸出多項式  (3) 兩個多項式相加、相減、相乘,建立并輸出和、差、積多項式  由于課程設計只有短短的兩周時間,再加上原本自己編程能力并非突出,所以連這個簡單的一元多項式的四那么運算都令我大傷腦筋,盡管這樣,還是沒能完善,我還只能算勉勉強強完成了三那么運算,不過雖說這樣,我也從中學到不少東西,我深刻認識到編程中結構化和模塊化的重要

11、性,當然也注意到很多細節(jié)問題是平時編小程序時經常疏忽的,如局部變量,外部變量等的定義與使用。雖然這次課程設計并非做的好,但我知道這也只不過是另一次嘗試,一次考驗。而且通過這次課程設計,我深知在做一件比擬專業(yè)的事情的時候,沒有其專業(yè)知識時絕對不可能把它做好的,也許并非這個一元多項式的運算難,而是自己的編程知識缺乏了點,所以一直在想我該先做什么,后來,我就去查閱了一些資料,就把目標鎖定在要實現(xiàn)的功能上,從簡單到容易,所以就構思了一下整體結構,然后開始找資料,寫程序。但不管怎樣,我受益還是頗多的,起碼讓我認識到自身編程知識還是有些欠缺的,所以我以后會踏踏實實的走好每一步。附錄:源程序代碼#inclu

12、de<stdio.h>#include<malloc.h>#include<stdlib.h>struct data    int xishu;    int zhishu;struct node    data dat;    node *next;int cmp(const void *a,const

13、0;void *b)    return (data*)a)->zhishu-(data*)b)->zhishu;void output(node *head)    node *p;    node *shengxu;    shengxu=new node;    shengxu->next=NULL;&#

14、160;   printf("升序排列n");    p=head->next;    while(p)            if(p->dat.xishu<0)            printf("

15、;b");        if(p->dat.xishu!=0)                    if(p->dat.xishu=1)             &

16、#160;  printf("X%d+",p->dat.zhishu);            else if(p->dat.xishu=-1)                printf("-X%d+",p->dat.zhishu

17、);            else                printf("%dX%d+",p->dat.xishu,p->dat.zhishu);           

18、     node *q;        q=new node;        q->dat.zhishu=p->dat.zhishu;        q->dat.xishu=p->dat.xishu;     &

19、#160;  q->next=shengxu->next;        shengxu->next=q;        p=p->next;        printf("b n");    printf("降序排列n");

20、    p=shengxu->next;    while(p)            if(p->dat.xishu<0)            printf("b");      

21、;  if(p->dat.xishu!=0)                    if(p->dat.xishu=1)                printf("X%d+",p-&g

22、t;dat.zhishu);            else if(p->dat.xishu=-1)                printf("-X%d+",p->dat.zhishu);       &

23、#160;    else                printf("%dX%d+",p->dat.xishu,p->dat.zhishu);                p=p->next;&#

24、160;       printf("b n");int main()    int sum1,sum2;    data *d1,*d2;    int zhishu_max1=-1,zhishu_max2=-1;    int i,j;    i

25、nt *biaodashi1,*biaodashi2;    node *he,*cha;    node *head1,*head2,*tail1,*tail2;    head1=(node *)malloc(sizeof(node);    head2=(node *)malloc(sizeof(node);    head1->nex

26、t=NULL;    head2->next=NULL;    tail1=head1;    tail2=head2;    /輸入第一個表達式    printf("請輸入第一個多項式的項數(shù):");    scanf("%d",&sum1);    d1=(da

27、ta*)malloc(sum1*sizeof(data);    printf("請依次輸入每項多項式的系數(shù)和指數(shù):n");    for(i=0;i<sum1;i+)            scanf("%d%d",&d1i.xishu,&d1i.zhishu);      

28、  /輸入第二個表達式    printf("請輸入第二個多項式的項數(shù):");    scanf("%d",&sum2);    d2=(data*)malloc(sum2*sizeof(data);    printf("請依次輸入每項多項式的系數(shù)和指數(shù):n");    for(i=0;i<sum2;i

29、+)            scanf("%d%d",&d2i.xishu,&d2i.zhishu);        /排序    qsort(d1,sum1,sizeof(data),cmp);    qsort(d2,sum2,sizeof(data),cmp); &#

30、160;  zhishu_max1=d1sum1-1.zhishu;    zhishu_max2=d2sum2-1.zhishu;    for(i=0;i<30;i+)        printf("=");    printf("n");    /輸出第一個表達式  

31、  printf("第一個表達式為:n");    for(i=0;i<sum1;i+)            if(d1i.xishu!=0)                    if(d1

32、i.xishu=1)                printf("X%d",d1i.zhishu);            else if(d1i.xishu=-1)          &

33、#160;     printf("-X%d",d1i.zhishu);            else                printf("%dX%d",d1i.xishu,d1i.zhishu); 

34、0;              if(i<sum1-1)            printf("+");        printf("n");     /輸出第二

35、個表達式    printf("第二個表達式為:n");    for(i=0;i<sum2;i+)            if(d2i.xishu!=0)                  &

36、#160; if(d2i.xishu=1)                printf("X%d",d2i.zhishu);            else if(d2i.xishu=-1)       

37、60;        printf("X%d",d2i.zhishu);            else                printf("%dX%d",d2i.xishu,d2i.zhi

38、shu);                if(i<sum2-1)            printf("+");        printf("n");   &#

39、160; /求兩個多項式的和和差    he=new node;    cha=new node;    he->next=NULL;    cha->next=NULL;    node *cha_tail,*he_tail;    he_tail=he;    c

40、ha_tail=cha;    for(i=0,j=0;i<sum1&&j<sum2;)            node *p,*p2;        p=new node;        p2=new node;

41、0;       if(d1i.zhishu<d2j.zhishu)                    p->dat.zhishu=d1i.zhishu;            p->da

42、t.xishu=d1i.xishu;            p2->dat.zhishu=d1i.zhishu;            p2->dat.xishu=d1i.xishu;            i+; &

43、#160;              else if(d1i.zhishu>d2j.zhishu)                    p->dat.zhishu=d2j.zhishu;    &

44、#160;       p->dat.xishu=d2j.xishu;            p2->dat.zhishu=d2j.zhishu;            p2->dat.xishu=-d2j.xishu;    &#

45、160;       j+;                else                    p->dat.zhishu=d1i.zhishu;

46、60;           p->dat.xishu=d1i.xishu+d2j.xishu;            p2->dat.zhishu=d1i.zhishu;            p2->dat.xishu=d1i.x

47、ishu-d2j.xishu;            i+;            j+;                he_tail->next=p;   &#

48、160;    p->next=NULL;        he_tail=p;        cha_tail->next=p2;        p2->next=NULL;        cha_tail=p2;

49、0;       /將剩余的項加到表達式中    if(sum1<sum2)            for(;j<sum2;j+)                   

50、 node *p,*p2;            p=new node;            p2=new node;            p->dat.zhishu=d2j.zhishu;

51、            p->dat.xishu=d2j.xishu;            p2->dat.zhishu=d2j.zhishu;            p2->dat.xishu=-d2j.xishu;&

52、#160;           he_tail->next=p;            p->next=NULL;            he_tail=p;      

53、0;     cha_tail->next=p2;            p2->next=NULL;            cha_tail=p2;            &#

54、160;   else if(sum1>sum2)            j=i;        for(;j<sum1;j+)                  &#

55、160; node *p,*p2;            p=new node;            p2=new node;            p->dat.zhishu=d2j.zhi

56、shu;            p->dat.xishu=d2j.xishu;            p2->dat.zhishu=d2j.zhishu;            p2->dat.xishu=d2j.xish

57、u;            he_tail->next=p;            p->next=NULL;            he_tail=p;      &

58、#160;     cha_tail->next=p2;            p2->next=NULL;            cha_tail=p2;            

59、;    /輸出兩個表達式的和    printf("兩個表達式的和為:n");    output(he);    /輸出兩個表達式的差    printf("n兩個表達式的差為:n");    output(cha);    /表達式乘法   &

60、#160;node *chengfa;    chengfa = new node;    chengfa -> next = NULL;    for(i=0;i<sum1;i+)            for(j=0;j<sum2;j+) 

61、0;                  node *p;            p = new node;            p

62、0;-> dat.zhishu = d1i.zhishu + d2j.zhishu;            p -> dat.xishu = d1i.xishu * d2j.xishu;            p->next=NUL

63、L;            node *q;            q = chengfa;            while(q->next)                            if(q->next->dat.zhishu>p->dat.zhishu)    

溫馨提示

  • 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

提交評論