大整数的四则运算高质量C语言程序.docx

上传人:牧羊曲112 文档编号:5091451 上传时间:2023-06-03 格式:DOCX 页数:22 大小:269.28KB
返回 下载 相关 举报
大整数的四则运算高质量C语言程序.docx_第1页
第1页 / 共22页
大整数的四则运算高质量C语言程序.docx_第2页
第2页 / 共22页
大整数的四则运算高质量C语言程序.docx_第3页
第3页 / 共22页
大整数的四则运算高质量C语言程序.docx_第4页
第4页 / 共22页
大整数的四则运算高质量C语言程序.docx_第5页
第5页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《大整数的四则运算高质量C语言程序.docx》由会员分享,可在线阅读,更多相关《大整数的四则运算高质量C语言程序.docx(22页珍藏版)》请在三一办公上搜索。

1、设计题目:大整数的四则运算1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。课程设计要求:采用模块化程序设计源程序中应有足够的注释必须上机调试通过注重算法运用,优化存储效率与运算效率需提交源程序(含有注释)及相关文件(数据或数据库文件); 提交设计报告书.2. 总体结构:数据初判断运算符加法减法 乘法 除法 退出正整数非正整 转变为转变为转变为流程图:1) 加法运算利用两个整形数组分别存放两个数a和b的每一位的数值,最低位存放符号。如果a 和b同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10,然后反序将计 算后的各个位的数值保存在一个数组c并输出,

2、如果a和b都是负数则在前面要输出负号, 函数的返回值为c的位数。如果a和b异号,也即两个正整数相减,从最低位开始相减,如果 要借位则本位加10再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数 组c并输出,在前面要输出相应的符号位。2) 减法运算可将减法运算转化为加法运算,只要将被减数的符号改变即可。3) 乘法运算符号存放在最低位,将其中一个数a的每一位分别乘以另一个数b的每一位,并将结 果保存在数组c中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在c 的值加上本次计算后的值,并保存在c自身中,直到a的最高位,最后输出符号和相应的计算结 果.4) 除法运算利用乘法

3、和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后 被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法 运算,最后得到余数并输出。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)功能说明:当两异号数相加时,改变其符号以符合加法运算5. int minu

4、s(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位一组放入long a ,且将符号放入

5、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。void div(

6、long a, long b ,long c , int fa)功能说明:除法,a除以b的值放入c, fa为a符号13。void menu ()功能说明:打印菜单函数14。void main ()功能说明:主函数,调用其余函数,计算相应功能的值并输出。5. 源程序:#includeiostream。h#includemath.h#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;

7、iMAX; i+)ai =0;b i =0;printf(”请输入处理的第一个数的值:”);r=getchar();if(r=45)a 0=r;for(i=1; (r=getchar ()! =n; i+) ai=r48;elsea1=r48;for (i=2;(r=getchar()! =ni+)ai=r48;*p1=i;printf (请输入处理的第二个数的值:”); s=getchar();if(s=45)b 0 =s;for (j=1;(s=getchar ()! =n;j+)bj =s48;elseb 1 =s48;for(j=2; (s=getchar () !=n;j+)b j

8、=s48;大 p2=j;int plus (int a ,int b, int c , int m,int n)/加法运算int dMAX=0 ,i, j, k;for (i=0;iMAX; i+)ci=0;if(a 1 =0)for(i=0; in;i+) ci =bi;return(i);if(b 1 =0)for (i=0; i0&j0; i,j, k+)dk=a i+bj +dk;if(d k 9)d k+1+;d k=dk10; while(i0)dk =dk+ai;if(dk9)d k+1+;dk=d k 10;k+;i;while (j0)dk =dk+b j;if(dk 9)d

9、 k+1 +; d k=dk-10;k+;j一;d0=a 0 +b 0;c 0=d 0;if(d k =0)k;for(i=1;k0;i+, k)ci =d k; return(i);void change (int a ,int b,int m,int n)变号运算inti, j;int cMAX;if(m=n&b0=45)for (i=1;im; i+)c i=ai;for(i=1, j=1;jn;i+,j+)ai =bj;for(i=1,j=1; j=n&a 0 =45)a0 =0;b0=45;return;int minus (int a,int b ,int d ,int m,int

10、 n)减法运算int cMAX = 0 ,i, j, k;for (i=0; iMAX; i+)di=0;for(i=m-1, j=n-1,k=1;i0&j0; i-,j-,k+)if (c k 0 I |ai bj)c k =ck +a i bj;if(ck 0)ck +=10;c k+1-;else c k =a i -b j;while (i0)ck =ck+ai;if(ck0)c k +=10;c k+1-;k+;i-;ck=ai+ck;while(ck=0&k0)k;for(i=1;k0;i+)di=ck-;return (i);void minusfun (int a ,int b

11、,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 (b 1=0)if (a 0!=0)printf (”);for (i=1;im; i+)printf(”d”, ai);printf (n);return;if (m=n)for (i=1; im; i+)if (a ib i&a 0 =45) g=1;if (a i !=b i) f=1;if(f=0)printf (”0n);re

12、turn;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 (a 0 =45&b0 =0)j=minus(b,a,d,n, m);for(i=1;ij;i+)printf(%d”, di);printf (”n”);return;elsej=minus (a,b,d, m,n);for(i=1;in&b 0=45)j=minus (a,b, d,m, n);for (i=1; ij;i+) printf (%d”,d

13、i);printf( n )returnif(mn&b 0 =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”,d i);printf (n”);return;if (mn&a 0=45)j=minus (b,a,d,n,m);for(i=1;ij;i+)printf(%d”, di);printf(n);return;int multi(int a ,int b ,

14、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;rMAX;r+)dr=0; er=0; for (j=n1, k=1*s;j0; j,k+)dk =a i大bj+dk;if (dk9) d k+1=dk+1 +d k/10; d k=d k%10; if (d k=0)k;y=k;for(r=1;k0;r+,k)er =d k;for(r=1 ; rMAX;r+)dr =e r;if (s=1)x=plus (c,d,e, 0,y+1

15、 );elsex=plus (c,d, e,y,y+1);for (r=0; rn)for(j=n1,s=1; j0; j,s+)for(r=0; rMAX; r+)d r =0;e r=0;for(i=m-1, k=1*s;i0;i, k+)d k=a i大b j +d k;if(dk9)d k+1 =dk+1+dk /10;d k =dk%10;if (dk=0)y=k;for (r=1;k0; r+, k)er=dk;for (r=1; rMAX;r+)dr =e r;if (s=1)x=plus(c,d,e, 0,y+1);elsex=plus (c, d, e, y, y+1);fo

16、r (r=0;r=0; i)if(c i)break;if(flag)printf (”一”);printf (%4d”,c i-);for (;i=0; i-)if (c i /1000)printf(” 4ld”, c i);else if(c i /100)printf (” 0%3ld”,ci);else if (ci/10)printf( 00%2ld”,ci);elseprintf (” 000%1ld”, c i);int write (long a ,int flag)/将键盘敲入的数字按4位一组放入long a,且将符号放入flagchar num N*4;char temp

17、;int i, j, k;for (i=0; iN*4; i+)num i =getchar();if (numi=10)i-;break;if(numi =45)flag=(flag+1)%2;i-;k=0;for (j=0;j=i/2; j+)temp=num j;num j =numi-k;numi-k =temp;k+;k=1;for(j=0;j=i;j+)switch (k)case 1: a j/4+=(long)(num j-48);k+; break;case 2:aj/4 +=(long)(numj48) *10;k+; break;case 3: a j/4+= (long

18、) (num j -48) *100;k+; break;case 4:aj/4+=(long) (numj -48)大 1000;k=1; break;return flag;void mul (long a, int first, int last, long b,long c)/乘法int i,j;int max_i;long temp;for(max_i=N1; max_i=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 (firstlast)=len)i

19、f (first-last) len)flag=1;elsefor(i=len;i=0; i-)if (a firstk bi)flag=1;break;if (afirst-k =0; max-) if (bmax) break;for(i=0;i=max;i+)if (b i=0;i-)result i=0;mul(c, k, k,b, result);ck-;for(i=N1; 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-)result i=0;for(len_a=

20、N1;len_a=0;len_a)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, cd 2*N;int aMAX= 0,bMAX=0, c MAX=0, d MAX =0;char s;int m, n,i, j;int 大 p1,大 p2;p1=&m;p2=&n;menu ();s=getch

21、ar ();getchar ();while(1)switch (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(a 0=b 0)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

22、2:printf (”格式为:abn”);init(a,b,p1,p2);if(b0 =0)b 0=45;else if (b 0=45)b 0 =0;if(a 1=0&b1 =0)printf (”结果是:a-b=0n”); break;if(a0 =b0)j=plus (a,b,c, m,n);printf(结果是:ab=);if (c0! =0)printf(-”);for (i=1;ij;i+)printf(%d”,ci);elseprintf(结果是:ab=);minusfun (a, b, d,m,n);printf (”n”);break;case 3:init (a,b,p1,

23、p2);if(a1=0 I |b 1 =0)printf(”结果是:0n);break;j=multi (a,b, c,m, n);printf (”结果是:”);if( (a0 =45&b0=0)I |(b 0=45&a0=0)printf (-);for(i=1; ij; i+)printfC%d”,ci);printf (n);break;case 4:flag=fa=fb=0;for(max=0;maxN;max+)admax =bdmax=cd max=0;printf(-请输入被除数:”);fa=write (cd, fa);printf (n请输入除数:”);fb=write (

24、bd, fb);div (cd,bd,ad,fa);flag= (fa+fb) %2;printf( / );print(bd,fb);printf=);print(ad,flag );printf(”)print(cd,0); printf(”)n”); break;menu (); s=getchar(); getchar ();6. 调试结果程序的调试是指对程序的差错和排错,为了便于差错、阅读,在设计该程序的过程中添加 了尽可能多的注释,这就为接下来的调试过程带来了很多方便。经过仔细检查之后进行上 机调试.进行编译,如果在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找 到出错

25、的位置,加以改正,在进行编译如此反复,直到顺利通过编译和连接为止。、=回以下是编译的最终结果: C:LFse rsnan cyDocum ent5DehjcCfx)l.exe1.加法2_-曲法3,乘法4.除注 虬令茁 髀捋中选择 格式为旧珀;13123243243254353s 234243E43E4354S5656煎柚.理单愚二 、耳*入处理南第一 乒:I杲是:=23 5 55 5 86 786 7872 6(337= = = = = = = = =0= = =尸与=三=.三冬三大粹数 计算器 1-加法度法,-乘法耳-除法。-追茁 请亦1中选择;C;Us-ET5nan cyDoc u m D

26、cbugCpp 由上图可知,该程序可以成功运行,且运行结果正确无误.7. 设计总结:此次程序设计过程中发现的主要问题有三:1)语法错误:大多的语法错误在通过书本参考下能够修改。主要是平时缺乏锻炼、不太 注意而产生的.如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在 for、if、while语句中画蛇添足加分号。2)注释的位置:程序设计中在注释的时候不能同我们平常写字一样随心所欲,我们应该 注意注释的格式。注释中不能含有C语言可执行的语句.3)技术问题:编写到最后不会除法的算法,就上网借鉴了下,应该记住以备将来使用。8. 心得体会及致谢:经过这次困难重重的C语言编程设计,我学到了更多的编程技巧,同时也对C有了更多 的认识。通过这次两个星期左右的C语言程序课程设计实习,我觉得我学到了很多,以前 在课堂上学的东西以为都是一些枯燥无味的东西,可是操作在实践中的时候发现其实也有别 样的魅力所在,变得生动活泼而有挑战性.同时也让我感觉到自己编程的能力还有很多不足, 希望在以后的学习生活中能有更多的机会进行提高。最后也感谢郭恒宁老师的指导。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号