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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

11、性,當(dāng)然也注意到很多細(xì)節(jié)問題是平時編小程序時經(jīng)常疏忽的,如局部變量,外部變量等的定義與使用。雖然這次課程設(shè)計并非做的好,但我知道這也只不過是另一次嘗試,一次考驗(yàn)。而且通過這次課程設(shè)計,我深知在做一件比擬專業(yè)的事情的時候,沒有其專業(yè)知識時絕對不可能把它做好的,也許并非這個一元多項(xiàng)式的運(yùn)算難,而是自己的編程知識缺乏了點(diǎn),所以一直在想我該先做什么,后來,我就去查閱了一些資料,就把目標(biāo)鎖定在要實(shí)現(xiàn)的功能上,從簡單到容易,所以就構(gòu)思了一下整體結(jié)構(gòu),然后開始找資料,寫程序。但不管怎樣,我受益還是頗多的,起碼讓我認(rèn)識到自身編程知識還是有些欠缺的,所以我以后會踏踏實(shí)實(shí)的走好每一步。附錄:源程序代碼#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;    /輸入第一個表達(dá)式    printf("請輸入第一個多項(xiàng)式的項(xiàng)數(shù):");    scanf("%d",&sum1);    d1=(da

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

28、  /輸入第二個表達(dá)式    printf("請輸入第二個多項(xiàng)式的項(xiàng)數(shù):");    scanf("%d",&sum2);    d2=(data*)malloc(sum2*sizeof(data);    printf("請依次輸入每項(xiàng)多項(xiàng)式的系數(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");    /輸出第一個表達(dá)式  

31、  printf("第一個表達(dá)式為: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、個表達(dá)式    printf("第二個表達(dá)式為: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; /求兩個多項(xiàng)式的和和差    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;       /將剩余的項(xiàng)加到表達(dá)式中    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、;    /輸出兩個表達(dá)式的和    printf("兩個表達(dá)式的和為:n");    output(he);    /輸出兩個表達(dá)式的差    printf("n兩個表達(dá)式的差為:n");    output(cha);    /表達(dá)式乘法   &

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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論