數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)大數(shù)相乘與多項(xiàng)式相乘_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)大數(shù)相乘與多項(xiàng)式相乘_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)大數(shù)相乘與多項(xiàng)式相乘_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)大數(shù)相乘與多項(xiàng)式相乘_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)大數(shù)相乘與多項(xiàng)式相乘_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目錄1、 問題描述2、 設(shè)計(jì)思路3、 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)4、 功能函數(shù)設(shè)計(jì)5、 程序代碼6、 運(yùn)行與測(cè)試7、 設(shè)計(jì)心得一、大數(shù)相乘1、問題描述:輸入兩個(gè)相對(duì)較大的正整數(shù),能夠通過程序計(jì)算出其結(jié)果2、設(shè)計(jì)思路:首先考慮設(shè)計(jì)將兩個(gè)大數(shù)按照輸入順序存入分別存入數(shù)a ,b 中.把這個(gè)數(shù)組中的每一位數(shù)字單獨(dú)來進(jìn)行乘法運(yùn)算,比如我們可以用一個(gè)數(shù)字和另外一個(gè)數(shù)組中的每一位去相乘,從而得到乘法運(yùn)算中一行的數(shù)字,再將每一行數(shù)字錯(cuò)位相加。這就是乘法運(yùn)算的過從低位往高位依次計(jì)算,同時(shí)確定每一列的項(xiàng)數(shù),確定每一位上的結(jié)果存入數(shù)組c 中.找到最高位在數(shù)組中的項(xiàng)ci,然后依次輸出各位上的數(shù)值通過主函數(shù)來調(diào)用其它各個(gè)函數(shù)。3、數(shù)

2、據(jù)結(jié)構(gòu)設(shè)計(jì):輸入階段采用一維數(shù)組a ,b 在輸入階段當(dāng)大數(shù)輸入時(shí),大數(shù)a,b從高位到低位分別依次存入數(shù)組a ,b 。調(diào)用函數(shù)計(jì)算階段采用一維數(shù)組c 在調(diào)用sum(a,b,m,n)函數(shù)中,在計(jì)算過程中,由個(gè)位到高位依次計(jì)算各位的結(jié)果,并依次存入數(shù)組c 中。4、功能函數(shù)設(shè)計(jì):找出每一列的所有項(xiàng)首先找規(guī)律,如下所示 進(jìn)行乘法:a0 a1 a2b0 b1 b2b2a0 b2a1 b2a2b1a0b1a1 b1a2b0a0b0a1b0a2下標(biāo)之和01 2 3 4 i=4 i=3 i=2 i=1 i =0(循環(huán)時(shí)的i的數(shù)值)即有 下標(biāo)之和=m+n-2-i,由此限定條件可設(shè)計(jì)循環(huán)得出每一列的所有項(xiàng)。故首先解

3、決了找出每一列所有項(xiàng)的問題。計(jì)算從低位到高位每一位的值。顯然考慮到進(jìn)位的問題,故必須從低位到高位依次計(jì)算,對(duì)于每一列 ,第一項(xiàng)可以除十取余數(shù),保留在原位,存入c ,所得商進(jìn)位存入mm。然后對(duì)于第二列,第一項(xiàng)加進(jìn)位mm,然后取余數(shù)存入su,再加第二項(xiàng),取余數(shù)存入c ,求商存入進(jìn)位mm,直到該列所有項(xiàng)參與運(yùn)算到該列結(jié)束時(shí),求的最終的c ,和mm. 依次進(jìn)行后面的運(yùn)算。找出反向存入結(jié)果c 中的首項(xiàng).因?yàn)樽罡呶灰欢ú粸榱悖士梢栽O(shè)計(jì)程序從c399開始判斷,當(dāng)ci不等于零時(shí),即為最高項(xiàng)。設(shè)計(jì)主函數(shù),依次調(diào)用如上函數(shù)。然后通過for循環(huán)5、程序代碼:#include #include void sum(i

4、nt a200,int b200,int m,int n)/結(jié)果在數(shù)組里順序是反著的 int mm=0;/保存進(jìn)位int c400=0;/保存結(jié)果int i,j,su,tt;for(i=0;im+n;i+) su=0;for(j=0;j=n|(tt=(m-1+n-1-i-j)=0;i-)/找首位 if(ci!=0)tt=i;break; else continue; for(i=tt;i=0;i-)/輸出printf(%d,ci); printf(n);void main()int i,m,n,c;int a200=0,b200=0;printf(*n);printf(請(qǐng)輸入第一個(gè)數(shù)字:n);

5、for(i=0;(c=getchar()!=n;i+)ai=c-48;m=i;printf(n*n);printf(請(qǐng)輸入第二個(gè)數(shù)字:n);for(i=0;(c=getchar()!=n;i+)bi=c-48;n=i;/m,n為數(shù)字長(zhǎng)度sum(a,b,m,n);6運(yùn)行與測(cè)試:7、設(shè)計(jì)心得:根據(jù)數(shù)字相乘原理,編程實(shí)現(xiàn)了大數(shù)相乘,雖然過程中出現(xiàn)了許多問題但經(jīng)過與同學(xué)討論后都順利解決。二、多項(xiàng)式相乘1、問題描述:能夠按照指數(shù)降序排列建立多項(xiàng)式,能夠完成兩個(gè)多項(xiàng)式的相乘,并將結(jié)果輸出。2、設(shè)計(jì)思路:這個(gè)程序的關(guān)鍵是多項(xiàng)式的創(chuàng)建和排列,以及相乘時(shí)相同指數(shù)的系數(shù)相加。由于多項(xiàng)式擁有指數(shù)和系數(shù)(假設(shè)基數(shù)已定

6、),所以可以定義一個(gè)包含指數(shù)系數(shù)的結(jié)構(gòu)體,用單鏈表存儲(chǔ)多項(xiàng)式的數(shù)據(jù),所以結(jié)構(gòu)體包含next指針。數(shù)據(jù)插入時(shí)比較兩數(shù)的指數(shù),按照降序排序,從表頭的next開始,直至找到合適的位置,然后開始鏈表中數(shù)值的插入,如果相等則直接將指數(shù)相加,如果大于就將新數(shù)據(jù)插入到當(dāng)前指向的前面,否則將新數(shù)據(jù)插入到最后。輸入完數(shù)據(jù)后相乘,多項(xiàng)式運(yùn)算時(shí)要循環(huán)遍歷整個(gè)多項(xiàng)式,多項(xiàng)式的每一組數(shù)據(jù)都要和另一個(gè)多項(xiàng)式整組數(shù)據(jù)相乘,直到兩個(gè)多項(xiàng)式都遍歷完結(jié)束。3、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):對(duì)已排序且合并了同指數(shù)項(xiàng)的兩個(gè)多項(xiàng)式實(shí)現(xiàn)乘法操作,并輸出結(jié)果;結(jié)果多項(xiàng)式要求以動(dòng)態(tài)鏈表為存儲(chǔ)結(jié)構(gòu),復(fù)用原多項(xiàng)式的結(jié)點(diǎn)空間;輸出結(jié)果多項(xiàng)式要求按指數(shù)升序排列,同

7、指數(shù)的多項(xiàng)要合并,項(xiàng)數(shù)的正負(fù)號(hào)要求顯示合理。4、 功能函數(shù)設(shè)計(jì)(見源代碼)5、 程序代碼:#include #include #define TRUE 1#define FALSE 0#define N sizeof(struct quantic)/跳轉(zhuǎn)頁面void welcome()printf(n*n);/創(chuàng)建多項(xiàng)式結(jié)構(gòu)體struct quanticint xishu;int mi;struct quantic *next;/得到一元變量char getx(void)char x;printf(n請(qǐng)輸入一元變量:);scanf(%c, &x);return x;/創(chuàng)建多項(xiàng)式鏈表struct

8、 quantic *input(void)struct quantic *p1, *p2, *head;head = p2 = (struct quantic *)malloc(N);printf(n請(qǐng)輸入:系數(shù) 冪值(系數(shù)輸入0結(jié)束)。n);p1 = (struct quantic *)malloc(N);scanf(%d %d, &p1 - xishu, &p1 - mi);while(p1 - xishu != 0)p2 - next = p1;p2 = p1;p1 = (struct quantic *)malloc(N);scanf(%d %d, &p1 - xishu, &p1 -

9、 mi);p2 - next = NULL;free(p1);return head;/查找void find(char x, struct quantic *p)struct quantic *p1;int m, n, i = 0;p1 = p;printf(1.按系數(shù)查找。n);printf(2.按指數(shù)查找。n);printf(0.退出查找。n);scanf(%d, &m);switch(m)case 1:printf(請(qǐng)輸入索引關(guān)鍵字:);scanf(%d, &n);p1 = p1 - next;while(p1 != NULL)if(p1 - xishu = n)printf(%d%c

10、(%d), p1 - xishu, x, p1 - mi);i +;p1 = p1 -next;if(i = 0)printf(查無此數(shù)據(jù)。n);printf(n);find(x, p);break;case 2:printf(請(qǐng)輸入索引關(guān)鍵字:);scanf(%d, &n);p1 = p1 - next;while(p1 != NULL)if(p1 - mi = n)printf(%d%c(%d), p1 - xishu, x, p1 - mi);i +;p1 = p1 -next;if(i = 0)printf(查無此數(shù)據(jù)。n);printf(n);find(x, p);break;cas

11、e 0:welcome();/多項(xiàng)式相乘struct quantic *MulExp(struct quantic *exp1,struct quantic *exp2)struct quantic *head,*p1,*q,*p2,*last,pre,*p;int flag=TRUE;head=p1=*exp1;/p1=p1-next;for(;p1-next != NULL;p1=p1-next);p=last=p1;p1=(*exp1)-next;while(p1 != p-next)pre = *p1;flag=TRUE;p2=(*exp2)-next;while(p2)if(flag

12、=TRUE)p1-xishu=p1-xishu*p2-xishu;p1-mi=p1-mi+p2-mi;p2=p2-next;flag=FALSE;elseq=(struct quantic *)malloc(N);q-xishu=pre.xishu*p2-xishu;q-mi=pre.mi+p2-mi;last-next=q;last=q;p2=p2-next;p1=p1-next;last-next=NULL;return head;/排序多項(xiàng)式struct quantic *sort(struct quantic *pol)struct quantic *head = pol;struct

13、 quantic *p,*q;struct quantic *r,*t;if(head-next = NULL)printf(請(qǐng)輸入有效信息。n);elsep = head-next;q = p-next;p-next = NULL;p = q;while(p!=NULL)r = head;q = r-next;while(q != NULL& q-mi mi)r = q;q = q-next; t=p-next; p-next=r-next; r-next=p; p=t;return(head);/合并多項(xiàng)式struct quantic *combine(struct quantic *he

14、ad)struct quantic *p1,*p2;p1 = head -next;while(p1 - next != NULL )if(p1 - next - mi = p1 - mi)p2 = p1 -next;p1 - xishu = p1 - xishu + p2 - xishu;p1 - next = p1 - next -next;free(p2);elsep1 = p1 - next;return(head);/輸出多項(xiàng)式void output(char x, struct quantic *p)p = p - next;while(p != NULL)if(p - xishu

15、 xishu, x, p - mi);p = p -next;printf(b );printf(n);main()char x;struct quantic *p, *q, *l, *s, *k, *a, *b, *c, *d;/歡迎界面開始welcome();/輸入一元未知量x = getx();/輸入兩個(gè)多項(xiàng)式并輸出printf(n請(qǐng)輸入第一個(gè)多項(xiàng)式:n);p = input();output(x, p);printf(n請(qǐng)輸入第二個(gè)多項(xiàng)式:n);l = input();output(x, l);/查找相應(yīng)節(jié)點(diǎn)find(x, p);find(x, l);/對(duì)隊(duì)列進(jìn)行排序、合并,然后輸出q = s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論