《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》報(bào)告一元稀疏多項(xiàng)式計(jì)算器
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元稀疏多項(xiàng)式計(jì)算器班級(jí): 軟件1408學(xué)號(hào):1130505140831姓名: 齊瑞征指導(dǎo)老師: 石鋒問題描述設(shè)計(jì)簡(jiǎn)單的一個(gè)一元稀疏多項(xiàng)式計(jì)算器?;疽笠辉∈瓒囗?xiàng)式簡(jiǎn)單計(jì)算器的基本功能是:(1) 輸入并建立多項(xiàng)式,以帶頭結(jié)點(diǎn)的單鏈表存儲(chǔ);(2) 輸出多項(xiàng)式,輸出形式為整數(shù)序列:n,c1,e1, c2,e2, cn,en,其中n是多項(xiàng)式的項(xiàng)數(shù),ci,ei,分別是第i項(xiàng)的系數(shù)和指數(shù),序列按指數(shù)降序排序;(3) 多項(xiàng)式a和b相加,建立多項(xiàng)式a+b;(4) 多項(xiàng)式a和b相減,建立多項(xiàng)式a-b;(5) 多項(xiàng)式a和b相乘,建立多項(xiàng)式a*b;數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)在模擬多項(xiàng)式時(shí),為了簡(jiǎn)化處理,只取最核心的兩個(gè)數(shù)據(jù):多項(xiàng)式的系數(shù)和指數(shù),具體數(shù)據(jù)結(jié)構(gòu)定義如下:typedef struct nodeint xs; /*系數(shù)*/int zs;/*指數(shù)*/struct node * next; /*next指針*/Dnode,* Dnodelist;功能函數(shù)設(shè)計(jì)(1)鏈表初始化函數(shù)Creat_node()(2)多項(xiàng)式數(shù)據(jù)的輸入函數(shù)input()(3)數(shù)據(jù)的插入函數(shù)Insert_node()(4)多項(xiàng)式的顯示函數(shù)output()(6)多項(xiàng)式的運(yùn)算函數(shù):新建鏈表存儲(chǔ)計(jì)算后的多項(xiàng)式多項(xiàng)式相乘Mulresult()多項(xiàng)式相加Addresult()多項(xiàng)式相減Subresult()(7)主函數(shù)main()創(chuàng)建兩個(gè)多項(xiàng)式的鏈表并且初始化,分別調(diào)用相應(yīng)的多項(xiàng)式創(chuàng)建函數(shù),創(chuàng)建成功后選擇運(yùn)算方式,再將運(yùn)算結(jié)果輸出顯示。【實(shí)現(xiàn)過程】1、在D:根目錄下建立文件夾,命名方式為“班級(jí)”+“順序號(hào)(兩位)+“姓名”,例如你是商務(wù)1419班的,你在學(xué)生花名冊(cè)上的順序號(hào)是05號(hào),你的姓名是張有才,則文件夾的名字是“商務(wù)141905張有才”。這個(gè)文件夾就是你的工作文件夾。2、 在VC中創(chuàng)建c+源程序,命名為“poly.c”,保存在工作文件夾中;3、在poly.c中輸入以下內(nèi)容并編譯,使沒有語(yǔ)法錯(cuò)誤:#include<stdio.h>#include<stdlib.h>typedef struct nodeint xs;int zs;struct node * next;Dnode,* Dnodelist; /*定義結(jié)構(gòu)體*/Dnodelist Creat_node(void) /*鏈表初始化*/Dnodelist D;D=(Dnodelist)malloc(sizeof(Dnode);if(D)D->next=NULL;return D;4、回答問題,以上程序中,Creat_node(void)函數(shù)的功能是什么?答:創(chuàng)建鏈表里面的一個(gè)節(jié)點(diǎn)。5、在poly.c中完成如下函數(shù),并編譯。int Insert_node(Dnodelist D,int xs,int zs) /*插入函數(shù)*/Dnodelist p;Dnodelist q;Dnodelist r;p=D;while(p->next) r=p;p=p->next;if(zs=p->zs) p->xs=p->xs+xs;return 1;else if(zs>p->zs) q=Creat_node();q->xs=xs;q->zs=zs;r->next=q;q->next=p;return 1;/*while(p->next)*/q=Creat_node(); q->xs=xs;q->zs=zs;q->next=p->next;p->next=q;return 1;free(p);free(q);free(r);函數(shù)功能:將一項(xiàng)合并到多項(xiàng)式中。參數(shù)說(shuō)明:D:一個(gè)帶頭結(jié)點(diǎn)的單鏈表的頭指針,其中按指數(shù)降序存放一個(gè)一元多項(xiàng)式的數(shù)據(jù);xs:要合并的項(xiàng)的系數(shù);zs:要合并的項(xiàng)的指數(shù)。6、在poly.c中完成如下函數(shù),并編譯。void output(Dnodelist D)Dnodelist r;r=D->next;printf("%dx%d",r->xs,r->zs);r=r->next;while(r!=NULL)if(r->xs>0)printf("+%dx%d",r->xs,r->zs);elseprintf("%dx%d",r->xs,r->zs);r=r->next;printf("n"); 函數(shù)功能:以類似“-3*x100+2*x10-10”的形式輸出D中存放的多項(xiàng)式數(shù)據(jù)。7、在poly.c中輸入以下函數(shù),并編譯。Dnodelist input(void) Dnodelist D; int xs, zs; D = Creat_node(); printf("請(qǐng)輸入系數(shù)和指數(shù)(系數(shù),指數(shù)):"); scanf("%d,%d", &xs, &zs); while(xs!=0 && zs!=0) Insert_node(D, xs, zs); printf("請(qǐng)輸入系數(shù)和指數(shù)(系數(shù),指數(shù)):"); scanf("%d,%d", &xs, &zs); return D;你認(rèn)為以上函數(shù)的功能是什么?答:從鍵盤輸入系數(shù)和指數(shù)存放在鏈表中。8、在poly.c中輸入以下main()函數(shù),并編譯。void main(void) Dnodelist D; D = input(); output(D);9、運(yùn)行你的程序,輸入以下數(shù)據(jù):-3,1002,10-10,10,0將你的程序的運(yùn)行結(jié)果的界面粘貼在下面:10、在poly.c中完成以下函數(shù),其功能是計(jì)算D1和D2中兩個(gè)多項(xiàng)式的和,函數(shù)返回和多項(xiàng)式。Dnodelist Addresult(Dnodelist D1,Dnodelist D2) Dnodelist D;Dnodelist p,q;int x,z;D=Creat_node();p=D1->next;q=D2->next;while(q)x=q->xs;z=q->zs;Insert_node(D,x,z);q=q->next;while(p)x=p->xs;z=p->zs;Insert_node(D,x,z);p=p->next; return D;11、在poly.c中完成以下兩個(gè)函數(shù),其功能分別是是計(jì)算兩個(gè)多項(xiàng)式的差和乘積。Dnodelist Subresult(Dnodelist D1, Dnodelist D2) Dnodelist D;Dnodelist p,q;int x,z;D=Creat_node();p=D1->next;q=D2->next;while(p&&q)if(p->zs)<(q->zs)x=-(q->xs); z=q->zs;Insert_node(D,x,z);q=q->next;else if(p->zs)>(q->zs)x=p->xs;z=p->zs;Insert_node(D,x,z);p=p->next;else z=q->zs;x=(p->xs)-(q->xs);Insert_node(D,x,z);p=p->next;q=q->next;while(p)x=p->xs;z=p->zs;Insert_node(D,x,z);p=p->next;while(q)x=-(q->zs);z=q->zs;Insert_node(D,x,z);q=q->next; return D;Dnodelist Mulresult(Dnodelist D1, Dnodelist D2)Dnodelist D;Dnodelist p,q;int x,z;D=Creat_node();p=D1->next;q=D2->next;while(q)while(p)x=p->xs*q->xs; /*系數(shù)相乘,指數(shù)相加*/z=p->zs+q->zs;Insert_node(D,x,z);p=p->next;p=D1->next;q=q->next;return D;12、 編寫main函數(shù),功能輸入兩個(gè)多項(xiàng)式的數(shù)據(jù),計(jì)算并輸出和、差、積多項(xiàng)式,把程序運(yùn)行結(jié)果的界面粘貼在下面。收獲和建議1、通過本次課程設(shè)計(jì),你都有哪些收獲,請(qǐng)寫在下面。通過這次課程設(shè)計(jì),我感覺到要真正做出一個(gè)程序并不很容易,但只要用心去做,總會(huì)有收獲,特別是當(dāng)我遇到問題,查資料,問同學(xué),想盡辦法去解決,最后終于找到方法時(shí),心里的那份喜悅之情真是難以形容.編寫程序中遇到問題再所難免,應(yīng)耐心探究其中的原因,從出現(xiàn)問題的地方起,并聯(lián)系前后程序,仔細(xì)推敲,逐個(gè)排查.直到最終搞清為止。 “享受制作過程 追求更加完美”是我對(duì)實(shí)訓(xùn)的總結(jié)。2、 你對(duì)這門課程教學(xué)內(nèi)容和方法有什么好的建議,請(qǐng)寫在下面。 通過這次課程設(shè)計(jì)我覺得我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的方法存在一定的弊端,數(shù)據(jù)結(jié)構(gòu)的效果直接影響到我們對(duì)其它專業(yè)課的學(xué)習(xí)和今后業(yè)務(wù)的成長(zhǎng)。我覺得我們對(duì)于數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)不僅包括理論部分的學(xué)習(xí),還要讓我們勤動(dòng)手,多實(shí)踐。整個(gè)實(shí)驗(yàn)過程要結(jié)合教學(xué)進(jìn)度與我們的實(shí)際情況,制定實(shí)驗(yàn)的內(nèi)容。實(shí)驗(yàn)分兩部分,一是驗(yàn)證性的,主要結(jié)合課堂理論教學(xué)內(nèi)容展開,學(xué)生可以對(duì)在課堂上學(xué)到的基本算法進(jìn)行驗(yàn)證;二是設(shè)計(jì)性實(shí)驗(yàn),堅(jiān)持“學(xué)以致用”的原則,目的是讓學(xué)生充分利用所學(xué)的理論知識(shí)進(jìn)行相對(duì)復(fù)雜的應(yīng)用設(shè)計(jì),以進(jìn)一步提高綜合能力和創(chuàng)新實(shí)踐能力。而在傳統(tǒng)的課堂教學(xué)中,一般采用的是“教師黑板學(xué)生”的教學(xué)模式,這對(duì)大多數(shù)教師和學(xué)生來(lái)說(shuō),“教”和“學(xué)”很難在課堂中得到良好的協(xié)調(diào),因而也就難以對(duì)教學(xué)內(nèi)容進(jìn)行及時(shí)而有效地消化,“聽懂但不會(huì)做”是大部分學(xué)生的通病,從而使教學(xué)效果受到影響。所以我希望以后的數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)能夠注重實(shí)驗(yàn)上機(jī).