




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 設計題目: 大整數的四則運算 1. 功能簡介:編寫出實現大整數之間相加,相減,相乘,相除的程序,并輸出計算結構。 課程設計要求:采用模塊化程序設計 源程序中應有足夠的注釋 必須上機調試通過 注重算法運用,優(yōu)化存儲效率與運算效率 需提交源程序(含有注釋)及相關文件(數據或數據庫文件); 提交設計報告書。2. 總體結構: 數據初始化判斷運算符號加法正整數非正整數轉變?yōu)檎麛禍p法轉變?yōu)榧臃ǔ朔ǔㄞD變?yōu)槌朔ê蜏p法退出流程圖:3 .概要設計:1) 加法運算 利用兩個整形數組分別存放兩個數a和b的每一位的數值,最低位存放符號。如果a和b同號,從最低為開始計算,如果有進位則保存在高一位,本為則減10,然
2、后反序將計算后的各個位的數值保存在一個數組c并輸出,如果a和b都是負數則在前面要輸出負號,函數的返回值為c的位數。如果a和b異號,也即兩個正整數相減,從最低位開始相減,如果要借位則本位加10再相減,高一位要減1,然后反序將計算后的各個位的數值保存在一個數組c并輸出,在前面要輸出相應的符號位。2) 減法運算 可將減法運算轉化為加法運算,只要將被減數的符號改變即可。3) 乘法運算 符號存放在最低位,將其中一個數a的每一位分別乘以另一個數b的每一位,并將結果保存在數組c中,然后重復計算a的下一位跟b的每一位的乘積,把上一次計算保存在c的值加上本次計算后的值,并保存在c自身中,直到a的最高位,最后輸出
3、符號和相應的計算結果。4) 除法運算 利用乘法和減法,將除數分別乘以1到9,直到其值大于等于被除數的對應的數,然后被除數對應的數減去其乘積,保存在一個數組中,下一次循環(huán)把它歸到被除數中繼續(xù)做除法運算,最后得到余數并輸出。4. 函數功能:1. void init(int a,int b,int *p1,int *p2)2. 功能說明:讀入所要計算的數值,數據初始化3. int plus(int a,int b,int c,int m,int n) 4. 功能說明:兩個正整數相加3. void change(int a,int b,int m,int n) 功能說明:當兩異號數相加時,改變其符號以
4、符合加法運算5. int minus(int a,int b,int d,int m,int n) 6. 功能說明:兩個正整數相減5. void minusfun(int a,int b,int d,int m,int n) 功能說明:判斷兩個異號數的相加方式7. int multi(int a,int b,int c,int m,int n) 8. 功能說明:兩個正整數相乘7. void print(long c,int flag) 功能說明:打印帶符號flag(1為負)的long c數組8. int write(long a,int flag) 功能說明:將鍵盤敲入的數字按4位一組放入lo
5、ng a,且將符號放入flag9. void mul(long a,int first,int last,long b,long c) 功能說明:乘法,a的第last到first位乘以b,答案放到c10. int compara(long a,int first,int last,long b) 功能說明:比較數組a,b大小,first last分別為a的最高最低位11. int minusd(long a,int first,int last,long b,long c,int flag) 功能說明:a為被減數,first last為a最高最低位,b為減數,c為差,flag為符號12. vo
6、id div(long a,long b,long c,int fa) 功能說明:除法,a除以b的值放入c,fa為a符號13. void menu() 功能說明:打印菜單函數14. void main() 功能說明:主函數,調用其余函數,計算相應功能的值并輸出。5.源程序:#include#include#include#define max 40 /可以修改,此時最大運算位數為四十位#define n 10 /此處應為最大位數除以4void init(int a,int b,int *p1,int *p2) /輸入int i,j;char r,s;for(i=0;imax;i+)ai=0;b
7、i=0;printf(請輸入處理的第一個數的值:);r=getchar();if(r=45) a0=r;for(i=1;(r=getchar()!=n;i+)ai=r-48;else a1=r-48;for(i=2;(r=getchar()!=n;i+)ai=r-48;*p1=i;printf(請輸入處理的第二個數的值:);s=getchar();if(s=45) b0=s;for(j=1;(s=getchar()!=n;j+)bj=s-48;else b1=s-48;for(j=2;(s=getchar()!=n;j+)bj=s-48;*p2=j;int plus(int a,int b,i
8、nt c,int m,int n) /加法運算int dmax=0,i,j,k;for(i=0;imax;i+) ci=0;if(a1=0) for(i=0;in;i+) ci=bi;return(i);if(b1=0) for(i=0;i0&j0;i-,j-,k+)dk=ai+bj+dk;if(dk9)dk+1+;dk=dk-10;while(i0) dk=dk+ai;if(dk9) dk+1+;dk=dk-10;k+;i-;while(j0) dk=dk+bj;if(dk9) dk+1+;dk=dk-10;k+;j-;d0=a0+b0;c0=d0;if(dk=0) k-;for(i=1;k
9、0;i+,k-)ci=dk;return(i);void change(int a,int b,int m,int n) /變號運算int i,j;int cmax;if(m=n&b0=45)for(i=1;im;i+)ci=ai;for(i=1,j=1;jn;i+,j+)ai=bj;for(i=1,j=1;jn;i+,j+)bi=cj;for(j=i;j=n&a0=45)a0=0;b0=45;return;int minus(int a,int b,int d,int m,int n) /減法運算int cmax=0,i,j,k;for(i=0;i0&j0;i-,j-,k+)if(ck0|a
10、ibj)ck=ck+ai-bj;if(ck0) ck=ck+ai;if(ck0) ck+=10;ck+1-;k+;i-;ck=ai+ck;while(ck0) k-;for(i=1;k0;i+) di=ck-;return(i);void minusfun(int a,int b,int d,int m,int n) /判斷是否兩異號數相加int i,j,f=0,g=0;if(a1=0) if(b0!=0) printf(-);for(i=1;in;i+)printf(%d,bi);printf(n); return;if(b1=0) if(a0!=0)printf(-);for(i=1;im
11、;i+)printf(%d,ai);printf(n);return;if(m=n)for(i=1;im;i+)if(aibi&a0=45)g=1;if(ai!=bi) f=1;if(f=0)printf(0n);return;if(g=1)change(a,b,m,n);printf(-);j=minus(a,b,d,n,m);for(i=1;ij;i+) printf(%d,di);printf(n);return;else if(a0=45&b0=0)j=minus(b,a,d,n,m);for(i=1;ij;i+)printf(%d,di);printf(n);return;elsej
12、=minus(a,b,d,m,n); for(i=1;in&b0=45)j=minus(a,b,d,m,n); for(i=1;ij;i+) printf(%d,di);printf(n);return;if(mn&b0=45)change(a,b,m,n);printf(-); j=minus(a,b,d,n,m);for(i=1;in&a0=45)change(a,b,m,n); printf(-);j=minus(a,b,d,m,n);for(i=1;ij;i+) printf(%d,di);printf(n);return;if(mn&a0=45)j=minus(b,a,d,n,m);
13、 for(i=1;ij;i+) printf(%d,di);printf(n);return;int multi(int a,int b,int c,int m,int n) /正整數乘法運算int dmax=0,emax=0,i,j,k,r,s,x,y;for(i=0;imax;i+)ci=0;if(m0;i-,s+)for(r=0;r0;j-,k+)dk=ai*bj+dk;if(dk9) dk+1=dk+1+dk/10;dk=dk%10;if(dk=0)k-;y=k;for(r=1;k0;r+,k-)er=dk;for(r=1;rmax;r+)dr=er;if(s=1) x=plus(c,
14、d,e,0,y+1);else x=plus(c,d,e,y,y+1);for(r=0;rn)for(j=n-1,s=1;j0;j-,s+)for(r=0;r0;i-,k+)dk=ai*bj+dk;if(dk9) dk+1=dk+1+dk/10;dk=dk%10;if(dk=0) k-;y=k;for(r=1;k0;r+,k-)er=dk;for(r=1;rmax;r+)dr=er;if(s=1) x=plus(c,d,e,0,y+1);else x=plus(c,d,e,y,y+1);for(r=0;r=0;i-) if(ci) break; if(flag) printf(-); prin
15、tf(%4d,ci-); for(;i=0;i-) if(ci/1000) printf( %4ld,ci); else if(ci/100) printf( 0%3ld,ci); else if(ci/10) printf( 00%2ld,ci); else printf( 000%1ld,ci); int write(long a,int flag) /將鍵盤敲入的數字按4位一組放入long a,且將符號放入flagchar numn*4; char temp;int i,j,k;for(i=0;in*4;i+) numi=getchar();if(numi=10) i-;break;if
16、(numi=45)flag=(flag+1)%2; i-;k=0;for(j=0;j=i/2;j+) temp=numj;numj=numi-k;numi-k=temp;k+;k=1;for(j=0;j=0;max_i-) if(bmax_i) break; for(i=0;i=max_i;i+) if(bi) for(j=first;j=0;len-) if(blen)break;if(first-last)=len)if(first-last)len) flag=1;elsefor(i=len;i=0;i-)if(afirst-kbi)flag=1;break; if(afirst-kbi
17、) flag=0; break; k+;elseflag=0;return flag;int minusd(long a,int first,int last,long b,long c,int flag)int notchange;int i,k=0;int max; notchange=compara(a,first,last,b); if(notchange) for(i=last;i=first;i+)if(ai=0;max-)if(bmax)break;for(i=0;i=max;i+) if(bi=0;len_a-) if(alen_a)break;k=len_a;while(co
18、mpara(a,len_a,0,b) while(!compara(a,len_a,k,b) k-;ck=1;mul(c,k,k,b,result); while(compara(a,len_a,k,result) ck+;for(i=n-1;i=0;i-) resulti=0;mul(c,k,k,b,result);ck-; for(i=n-1;i=0;i-)resulti=0;mul(c,k,k,b,result); minusd(a,len_a,k,result,a,0); for(i=n-1;i=0;i-) resulti=0;for(len_a=n-1;len_a=0;len_a-)
19、 if(alen_a)break;k=len_a; void menu() /菜單printf(=大整數計算器=);printf(1.加法2.減法3.乘法4.除法0.退出n);printf(請從14中選擇:);return;void main() /主函數int flag; int max; int fa; int fb; long adn,bdn,cd2*n;int amax=0,bmax=0,cmax=0,dmax=0;char s;int m,n,i,j;int *p1,*p2;p1=&m;p2=&n;menu();s=getchar();getchar();while(1)switch
20、(s)case 0:return;case 1:printf(格式為:a+bn);init(a,b,p1,p2); if(a1=0&b1=0)printf(結果是:a+b=0n); break;if(a0=b0)j=plus(a,b,c,m,n); printf(結果是:a+b=);if(c0!=0)printf(-);for(i=1;ij;i+) printf(%d,ci);else printf(結果是:a+b=);minusfun(a,b,d,m,n);printf(n);break;case 2: printf(格式為:a-bn); init(a,b,p1,p2); if(b0=0)b
21、0=45;else if(b0=45)b0=0;if(a1=0&b1=0) printf(結果是:a-b=0n); break;if(a0=b0)j=plus(a,b,c,m,n); printf(結果是:a-b=);if(c0!=0) printf(-);for(i=1;ij;i+)printf(%d,ci);elseprintf(結果是:a-b=);minusfun(a,b,d,m,n);printf(n); break;case 3: init(a,b,p1,p2); if(a1=0|b1=0) printf(結果是:0n);break;j=multi(a,b,c,m,n); printf(結果是:);if(a0=45&b0=0)|(b0=45&a0=0)printf(-);for(i=1;ij;i+) printf(%d,ci);printf(n);break;case 4: flag=fa=fb=0; for(max=0;maxn;max+)admax=bdmax=cdmax=0;printf(請輸入被除數:);fa=write(cd,fa);printf(n請輸入除數:);fb=write(bd,fb);div(cd,bd,ad,fa); flag=(fa+fb)%2; printf( / );print(bd,fb);printf( =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年力與變形檢測儀項目發(fā)展計劃
- 2025年政府大數據項目發(fā)展計劃
- 2025年化學陶瓷化學品項目合作計劃書
- 2024年無人駕駛汽車資金籌措計劃書代可行性研究報告
- 智能家居領域股權投資合同模板
- 拆遷安置補償金分配與離婚房產權益確認協議
- 新能源設備采購、安裝與綠色認證服務協議
- 美團生活服務配送合作協議書
- 家庭財產保值與責任分擔協議
- 新能源企業(yè)ESG債券發(fā)行專項法律風險評估協議
- 太原市萬柏林區(qū)招聘社區(qū)專職人員考試真題2024
- 2024年杭州良渚文化城集團有限公司招聘真題
- 蘇州蘇州工業(yè)園區(qū)部分單位招聘51人筆試歷年參考題庫附帶答案詳解
- 北京2025年國家藝術基金管理中心招聘應屆畢業(yè)生筆試歷年參考題庫附帶答案詳解
- 安徽省部分高中2025屆高考生物四模試卷含解析
- 2025-2030全球及中國燃氣輪機服務行業(yè)市場現狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 初中學生安全教育課件
- 項目平行分包協議書范本
- 2025年江蘇武進經濟發(fā)展集團招聘筆試參考題庫含答案解析
- GB/T 3953-2024電工圓銅線
- 消化內鏡檢查前胃腸道準備課件
評論
0/150
提交評論