版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 設(shè)計(jì)題目</b></p><p> 用C語(yǔ)言實(shí)現(xiàn)一元多項(xiàng)式的加減法計(jì)算</p><p> 〔問(wèn)題描述〕輸入并建立兩個(gè)多項(xiàng)式并輸出多項(xiàng)式</p><p> 開發(fā)環(huán)境、采用的語(yǔ)言</p><p> 開發(fā)環(huán)境:vc6.0/windows xp</p><p><
2、;b> 采用的語(yǔ)言:C語(yǔ)言</b></p><p><b> 設(shè)計(jì)思想</b></p><p> 我的設(shè)計(jì)思想是輸入按冪項(xiàng)從大到小輸入一元多項(xiàng),并將一元多項(xiàng)式相等冪項(xiàng)進(jìn)行加減運(yùn)算,在加法運(yùn)算中將無(wú)相等冪項(xiàng)直接輸入到結(jié)果單鏈表中,在減法運(yùn)算中將被減的一元多項(xiàng)式的無(wú)相等冪項(xiàng)直接輸入到結(jié)果單鏈表中,將減項(xiàng)的一元多項(xiàng)式的無(wú)相等冪項(xiàng)變號(hào)后輸出到結(jié)果單鏈表
3、中,輸入2個(gè)方程式之后可以得出2式相加、相減的全部結(jié)果,也是簡(jiǎn)化了算法運(yùn)行時(shí)間難度。雖然浪費(fèi)了一些計(jì)算能力,但是簡(jiǎn)化了代碼復(fù)雜度。</p><p><b> 程序總的流程圖</b></p><p><b> 圖一:程序流程圖</b></p><p> 數(shù)據(jù)結(jié)構(gòu)說(shuō)明及模塊算法說(shuō)明</p><p>
4、; 數(shù)據(jù)結(jié)構(gòu)說(shuō)明:使用單鏈表來(lái)表示一元多項(xiàng)式:</p><p> typedef struct linklist</p><p><b> {</b></p><p> int mi; //mi是冪項(xiàng)</p><p> int xishu;//xishu是系數(shù)
5、</p><p> struct linklist *next;//next</p><p><b> }*list;</b></p><p><b> 模塊算法說(shuō)明</b></p><p> list creatpoly(void)</p><p> 創(chuàng)建一個(gè)
6、新的一元多項(xiàng)式,用do循環(huán)輸入一元多項(xiàng)式,以“系數(shù),冪項(xiàng)”的格式輸入數(shù)據(jù),當(dāng)系數(shù)與冪項(xiàng)同時(shí)為零時(shí)停止輸入。</p><p> void printpoly(list head) </p><p> 輸出一個(gè)一元多項(xiàng)式,將多項(xiàng)式從頭到尾輸出,使用一個(gè)IF語(yǔ)句來(lái)區(qū)分第一項(xiàng)前是否有加號(hào),使用一個(gè)whlie在當(dāng)p->不為NULL時(shí),進(jìn)行循環(huán)輸出+ax^b的形式,當(dāng)a為零時(shí)輸出空白,當(dāng)b為
7、零時(shí)輸出+ax,當(dāng)a<0時(shí)輸出-ax^b的形式,等等。以應(yīng)對(duì)多項(xiàng)式中出現(xiàn)的各種情況。</p><p> list addpoly(list pa, list pb)</p><p> 將兩個(gè)多項(xiàng)式執(zhí)行pa+pb的計(jì)算,從高冪次項(xiàng)向低冪次項(xiàng),無(wú)等冪項(xiàng)直接將數(shù)值輸出結(jié)果單鏈表,有等冪項(xiàng)兩系數(shù)相加后輸出到結(jié)果單鏈表中。</p><p> list misep
8、oly(list pa, list pb)</p><p> 將兩個(gè)多項(xiàng)式執(zhí)行pa-pb的計(jì)算,從高冪次項(xiàng)向低冪次項(xiàng),無(wú)等冪項(xiàng)的pa式中直接將數(shù)值輸出結(jié)果單鏈表、pb式中將系數(shù)變號(hào)后輸出到結(jié)果單鏈表中,有等冪項(xiàng)兩系數(shù)相減后輸出到結(jié)果單鏈表中。</p><p> int main(void)</p><p> 主函數(shù),具有部分交互界面以及各個(gè)函數(shù)的調(diào)
9、用過(guò)程??梢栽谥骱瘮?shù)中選擇是否不斷的進(jìn)行運(yùn)算,用一個(gè)while來(lái)循環(huán)整個(gè)程序。</p><p> 程序運(yùn)行說(shuō)明及結(jié)果截圖</p><p> 程序開始運(yùn)行輸入第一個(gè)一元多項(xiàng)式:</p><p><b> 圖二:算法的開始</b></p><p> 輸入第一個(gè)一元多項(xiàng)式之后輸入第二個(gè)一元多項(xiàng)式:</p>
10、<p> 圖三:第一個(gè)多項(xiàng)式輸入結(jié)束</p><p> 程序運(yùn)算后得到結(jié)果:</p><p> 圖四:運(yùn)算結(jié)束之后得到結(jié)果</p><p> 按下1后 程序繼續(xù)運(yùn)行:</p><p> 圖五:按下1后程序繼續(xù)運(yùn)行</p><p> 程序調(diào)試及測(cè)試過(guò)程記載</p><p>
11、 本程序從源碼開始經(jīng)過(guò)多次調(diào)試,一開始創(chuàng)建一元多項(xiàng)式并沒(méi)有遇到什么問(wèn)題,但是在一元多項(xiàng)式的加法時(shí)遇到一些問(wèn)題,在不從高到低的順序輸入時(shí)會(huì)導(dǎo)致計(jì)算混亂,多出很多項(xiàng)。后來(lái)將項(xiàng)從高到底順序輸入,并且沒(méi)有重復(fù)冪項(xiàng)時(shí),此問(wèn)題解決。</p><p> 然后是減法運(yùn)算,若第一個(gè)多項(xiàng)式中沒(méi)有比如5次冪項(xiàng),而第二個(gè)多項(xiàng)式中有5次冪項(xiàng),1式減2式的結(jié)果卻為正的五次冪項(xiàng),經(jīng)過(guò)修改后,無(wú)此問(wèn)題。</p><p&g
12、t; 最后是輸出時(shí)產(chǎn)生的問(wèn)題,第一項(xiàng)的輸出若為正的情況是沒(méi)有符號(hào)的,若第一項(xiàng)系數(shù)為零時(shí)還會(huì)輸出一個(gè)零的情況,還有加法運(yùn)算或者減法運(yùn)算后,其計(jì)算結(jié)果前面沒(méi)有‘+’號(hào)的情況,最后將程序制作成可以自動(dòng)識(shí)別正負(fù)項(xiàng)以及零項(xiàng)。</p><p><b> 總結(jié)及心得體會(huì)</b></p><p> 這次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì)讓我加深了對(duì)數(shù)據(jù)結(jié)構(gòu)的理解,同時(shí)也明白了更多知識(shí)。讓我加深
13、了對(duì)單鏈表的運(yùn)用。</p><p> 在制作這個(gè)程序的同時(shí),加深了我對(duì)C語(yǔ)言的運(yùn)用以及理解,讓我的編譯水平的到了一定的提高。我覺(jué)得自己的能力提高了,也讓我明白數(shù)據(jù)結(jié)構(gòu)在生活中的運(yùn)用。</p><p> 我明白了理論與實(shí)際應(yīng)用相結(jié)合的重要性,并提高了自己組織數(shù)據(jù)及編寫大型程序的能力。培養(yǎng)了基本的、良好的程序設(shè)計(jì)技能以及合作能力。</p><p> 這次課程設(shè)計(jì)同
14、樣提高了我的綜合運(yùn)用所學(xué)知識(shí)的能力。并對(duì)VC有了更深入的了解?!稊?shù)據(jù)結(jié)構(gòu)》是一門實(shí)踐性很強(qiáng)的課程,上機(jī)實(shí)習(xí)是對(duì)學(xué)生全面綜合素質(zhì)進(jìn)行訓(xùn)練的一種最基本的方法,是與課堂聽講、自學(xué)和練習(xí)相輔相成的、必不可少的一個(gè)教學(xué)環(huán)節(jié)。上機(jī)實(shí)習(xí)一方面能使書本上的知識(shí)變“活”,起到深化理解和靈活掌握教學(xué)內(nèi)容的目的;另一方面,上機(jī)實(shí)習(xí)是對(duì)學(xué)生軟件設(shè)計(jì)的綜合能力的訓(xùn)練,包括問(wèn)題分析,總體結(jié)構(gòu)設(shè)計(jì),程序設(shè)計(jì)基本技能和技巧的訓(xùn)練。</p><p&g
15、t;<b> 附錄:源代碼</b></p><p> #include<stdio.h></p><p> #include<malloc.h></p><p> #include<Windows.h></p><p> typedef struct linklist<
16、/p><p><b> {</b></p><p><b> int mi;</b></p><p> int xishu;</p><p> struct linklist *next;</p><p><b> }*list;</b></
17、p><p> list creatpoly(void)</p><p><b> {</b></p><p><b> int a, n;</b></p><p> int i = 1;</p><p> list head, s, p;</p><
18、p> printf("輸入一元多項(xiàng)式(以0,0標(biāo)志結(jié)束):\n");</p><p> printf("要求:按冪從大到小的次序輸入各個(gè)結(jié)點(diǎn)\n");</p><p> head = (list)malloc(sizeof(struct linklist));</p><p> head->next = N
19、ULL;</p><p><b> p = head;</b></p><p><b> do</b></p><p><b> {</b></p><p> printf("第%d次-> 系數(shù),冪:", i);</p><
20、p><b> i++;</b></p><p> scanf_s("%d,%d", &a, &n);</p><p> if (a != 0 || n != 0)</p><p><b> {</b></p><p> s = (list)mall
21、oc(sizeof(struct linklist));</p><p> s->xishu = a;</p><p> s->mi = n;</p><p> s->next = NULL;</p><p> p->next = s;</p><p><b> p = s;
22、</b></p><p><b> }</b></p><p> } while (a != 0 || n != 0);</p><p> printf("\n");</p><p> return(head);</p><p><b> }&l
23、t;/b></p><p> void printpoly(list head)</p><p><b> {</b></p><p><b> list p;</b></p><p> int first = 1;</p><p> p = head->
24、;next;</p><p> while (p != NULL)</p><p><b> {</b></p><p> if (first)</p><p><b> {</b></p><p> if (p->xishu == 1)</p>
25、<p> printf("x^%d", p->mi);</p><p> else if (p->xishu == 0)</p><p> printf("");</p><p> else if (p->mi == 0)</p><p> printf(&quo
26、t;%d", p->xishu);</p><p><b> else</b></p><p> printf("%dx^%d", p->xishu, p->mi);</p><p> first = 0;</p><p><b> }</b>
27、</p><p><b> else</b></p><p><b> {</b></p><p> if (p->xishu > 0)</p><p><b> {</b></p><p> if (p->mi == 1)&
28、lt;/p><p> printf("+%dx", p->xishu);</p><p> else if (p->mi == 0)</p><p> printf("+%d", p->xishu);</p><p><b> else </b></p&
29、gt;<p> printf("+%dx^%d", p->xishu, p->mi);</p><p><b> }</b></p><p> else if (p->xishu < 0)</p><p><b> {</b></p><
30、p> if (p->mi == 1)</p><p> printf("%dx", p->xishu);</p><p> else if (p->mi == 0)</p><p> printf("%d", p->xishu);</p><p><b>
31、 else </b></p><p> printf("%dx^%d", p->xishu, p->mi);</p><p><b> }</b></p><p><b> else</b></p><p> printf(""
32、;);</p><p><b> }</b></p><p> p = p->next;</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b><
33、/p><p> list addpoly(list pa, list pb) /*兩個(gè)多項(xiàng)式的加法運(yùn)算*/</p><p><b> {</b></p><p><b> int n;</b></p><p> list pc, s, p;
34、 /*pc是新產(chǎn)生的鏈表頭結(jié)點(diǎn)指針*/</p><p> pa = pa->next;</p><p> pb = pb->next;</p><p> pc = (list)malloc(sizeof(struct linklist)); /*產(chǎn)生附加的表頭結(jié)點(diǎn)*/</p><p> pc->next = N
35、ULL;</p><p> p = pc; /* P 指向PC鏈表的最后結(jié)點(diǎn)*/</p><p> while (pa != NULL&&pb != NULL)</p><p><b> {</b></p><p> if (pa->mi>pb->
36、mi)</p><p><b> {</b></p><p> s = (list)malloc(sizeof(struct linklist)); /* 建新結(jié)點(diǎn)*/</p><p> s->mi = pa->mi;</p><p> s->xishu = pa->xishu;&l
37、t;/p><p> s->next = NULL;</p><p> p->next = s;</p><p><b> p = s;</b></p><p> pa = pa->next;</p><p><b> }</b></p>
38、<p> else if (pa->mi<pb->mi)</p><p><b> {</b></p><p> s = (list)malloc(sizeof(struct linklist));</p><p> s->mi = pb->mi;</p><p> s-
39、>xishu = pb->xishu;</p><p> s->next = NULL;</p><p> p->next = s;</p><p><b> p = s;</b></p><p> pb = pb->next;</p><p><b&g
40、t; }</b></p><p> else/* 兩項(xiàng)冪相等*/</p><p><b> {</b></p><p> n = pa->xishu + pb->xishu;</p><p> if (n != 0)</p><p><b> {&
41、lt;/b></p><p> s = (list)malloc(sizeof(struct linklist));</p><p> s->xishu = n;</p><p> s->mi = pa->mi;</p><p> s->next = NULL;</p><p>
42、 p->next = s;</p><p><b> p = s;</b></p><p><b> }</b></p><p> pa = pa->next;</p><p> pb = pb->next;</p><p><b> }
43、</b></p><p><b> }</b></p><p> while (pa != NULL)</p><p><b> {</b></p><p> s = (list)malloc(sizeof(struct linklist));</p><p&
44、gt; s->mi = pa->mi;</p><p> s->xishu = pa->xishu;</p><p> s->next = NULL;</p><p> p->next = s;</p><p><b> p = s;</b></p><p
45、> pa = pa->next;</p><p><b> }</b></p><p> while (pb != NULL)</p><p><b> {</b></p><p> s = (list)malloc(sizeof(struct linklist));</
46、p><p> s->mi = pb->mi;</p><p> s->xishu = -pb->xishu;</p><p> s->next = NULL;</p><p> p->next = s;</p><p><b> p = s;</b><
47、;/p><p> pb = pb->next;</p><p><b> }</b></p><p> return (pc);</p><p><b> }</b></p><p> list misepoly(list pa, list pb) /
48、*兩個(gè)多項(xiàng)式的減法運(yùn)算*/</p><p><b> {</b></p><p><b> int n;</b></p><p> list pc, s, p; /*pc是新產(chǎn)生的鏈表頭結(jié)點(diǎn)指針*/</p><p> pa = pa->n
49、ext;</p><p> pb = pb->next;</p><p> pc = (list)malloc(sizeof(struct linklist)); /*產(chǎn)生附加的表頭結(jié)點(diǎn)*/</p><p> pc->next = NULL;</p><p> p = pc; /* P 指
50、向PC鏈表的最后結(jié)點(diǎn)*/</p><p> while (pa != NULL&&pb != NULL)</p><p><b> {</b></p><p> if (pa->mi>pb->mi)</p><p><b> {</b></p>
51、<p> s = (list)malloc(sizeof(struct linklist)); /* 建新結(jié)點(diǎn)*/</p><p> s->mi = pa->mi;</p><p> s->xishu = pa->xishu;</p><p> s->next = NULL;</p><p&
52、gt; p->next = s;</p><p><b> p = s;</b></p><p> pa = pa->next;</p><p><b> }</b></p><p> else if (pa->mi<pb->mi)</p>&l
53、t;p><b> {</b></p><p> s = (list)malloc(sizeof(struct linklist));</p><p> s->mi = pb->mi;</p><p> s->xishu = - pb->xishu;</p><p> s->n
54、ext = NULL;</p><p> p->next = s;</p><p><b> p = s;</b></p><p> pb = pb->next;</p><p><b> }</b></p><p> else/* 兩項(xiàng)冪相等*/&
55、lt;/p><p><b> {</b></p><p> n = pa->xishu - pb->xishu;</p><p> if (n != 0)</p><p><b> {</b></p><p> s = (list)malloc(sizeof
56、(struct linklist));</p><p> s->xishu = n;</p><p> s->mi = pa->mi;</p><p> s->next = NULL;</p><p> p->next = s;</p><p><b> p = s;&
57、lt;/b></p><p><b> }</b></p><p> pa = pa->next;</p><p> pb = pb->next;</p><p><b> }</b></p><p><b> }</b>&l
58、t;/p><p> while (pa != NULL)</p><p><b> {</b></p><p> s = (list)malloc(sizeof(struct linklist));</p><p> s->mi = pa->mi;</p><p> s->
59、xishu = pa->xishu;</p><p> s->next = NULL;</p><p> p->next = s;</p><p><b> p = s;</b></p><p> pa = pa->next;</p><p><b>
60、}</b></p><p> while (pb != NULL)</p><p><b> {</b></p><p> s = (list)malloc(sizeof(struct linklist));</p><p> s->mi = pb->mi;</p><
61、p> s->xishu = - pb->xishu;</p><p> s->next = NULL;</p><p> p->next = s;</p><p><b> p = s;</b></p><p> pb = pb->next;</p><p
62、><b> }</b></p><p> return (pc);</p><p><b> }</b></p><p> int main(void)</p><p><b> {</b></p><p> int choose;&
63、lt;/p><p><b> do</b></p><p><b> {</b></p><p> list poly1, poly2, poly3,poly4,poly5;</p><p> printf("建立第1個(gè)一元多項(xiàng)式=>\n");</p>&
64、lt;p> poly1 = creatpoly();</p><p> printf("建立第2個(gè)一元多項(xiàng)式=>\n");</p><p> poly2 = creatpoly();</p><p> poly3 = addpoly(poly1, poly2);</p><p> poly4 = mi
65、sepoly(poly1, poly2);</p><p> poly5 = misepoly(poly2,poly1);</p><p> printf("第1個(gè)一元多項(xiàng)式為\n");</p><p> printpoly(poly1);</p><p> printf("第2個(gè)一元多項(xiàng)式為\n&quo
66、t;);</p><p> printpoly(poly2);</p><p> printf("加法運(yùn)算后的一元多項(xiàng)式為\n");</p><p> printpoly(poly3);</p><p> printf("減法(1-2)運(yùn)算后的一元多項(xiàng)式為\n");</p><
67、;p> printpoly(poly4);</p><p> printf("減法(2-1)運(yùn)算后的一元多項(xiàng)式為\n");</p><p> printpoly(poly5);</p><p> printf("你還要計(jì)算其它的多項(xiàng)式嗎?若是按1,若不是按0退出\n");</p><p>
68、 scanf_s("%d",&choose);</p><p> }while(choose);</p><p> system("pause");</p><p><b> return 0;</b></p><p><b> }</b>&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--用c語(yǔ)言實(shí)現(xiàn)一元多項(xiàng)式的加減法計(jì)算
- 課程設(shè)計(jì)--一元多項(xiàng)式計(jì)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)一元多項(xiàng)式的加減法運(yùn)算
- 一元多項(xiàng)式運(yùn)算課程設(shè)計(jì)
- 一元多項(xiàng)式運(yùn)算課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--一元多項(xiàng)式計(jì)算問(wèn)題(c語(yǔ)言)
- 一元稀疏多項(xiàng)式計(jì)算器課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式計(jì)算
- 課程設(shè)計(jì)報(bào)告---一元多項(xiàng)式計(jì)算器
- 一元多項(xiàng)式計(jì)算(數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 課程設(shè)計(jì)---一元多項(xiàng)式的代數(shù)運(yùn)算
- c++課程設(shè)計(jì)--一元多項(xiàng)式簡(jiǎn)單計(jì)算器
- c++課程設(shè)計(jì)---一元多項(xiàng)式簡(jiǎn)單計(jì)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一元多項(xiàng)式
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----一元多項(xiàng)式
- 課程設(shè)計(jì)報(bào)告--一元多項(xiàng)式計(jì)算vs迷宮求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-一元多項(xiàng)式加減運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-一元多項(xiàng)式加減運(yùn)算
- 一元多項(xiàng)式的計(jì)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一元多項(xiàng)式的計(jì)算
評(píng)論
0/150
提交評(píng)論