收藏 分享(赏)

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

上传人:精品资料 文档编号:10165585 上传时间:2019-10-15 格式:DOC 页数:20 大小:1.42MB
下载 相关 举报
大整数的四则运算    高质量C语言程序.doc_第1页
第1页 / 共20页
大整数的四则运算    高质量C语言程序.doc_第2页
第2页 / 共20页
大整数的四则运算    高质量C语言程序.doc_第3页
第3页 / 共20页
大整数的四则运算    高质量C语言程序.doc_第4页
第4页 / 共20页
大整数的四则运算    高质量C语言程序.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、 设计题目: 大整数的四则运算 1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。课程设计要求:采用模块化程序设计源程序中应有足够的注释必须上机调试通过注重算法运用,优化存储效率与运算效率需提交源程序(含有注释) 及相关文件 (数据或数据库文件);提交设计报告书。2.总体结构:数据初始化判断运算符号加法正整数 非正整数转变为正整数减法转变为加法乘法 除法转变为乘法和减法退出流程图: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 的值加上本次计

3、算后的值,并保存在 c 自身中,直到 a 的最高位,最后输出符号和相应的计算结果。4)除法运算利用乘法和减法,将除数分别乘以 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

4、 m,int n) 功能说明:当两异号数相加时,改变其符号以符合加法运算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

5、,int flag) 功能说明:将键盘敲入的数字按 4 位一组放入 long 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) 功能

6、说明:a 为被减数,first last 为 a 最高最低位,b 为减数,c 为差,flag 为符号12. void 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,i

7、nt b,int *p1,int *p2) /输入int i,j;char r,s;for(i=0;i0i-,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;k0;i+,k-)ci=dk;return(i);void change(int a,int b,int m,int n) /变号运算int i,j

8、;int cMAX;if(m=nb0=45;return;int minus(int a,int b,int d,int m,int n) /减法运算int cMAX=0,i,j,k;for(i=0;i0i-,j-,k+)if(ck0) ck=ck+ai;if(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;ibiif(ai!=bi) f=1;

9、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;in for(i=1;in printf(“-“);j=minus(a,b,d,m,n);for(i=1;i0;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;rn)for(j=n-1,s=1;j0;j-,s+)for(r=0;r0;i-,k

10、+)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;r=0;i-) if(ci)break;if(flag) printf(“-“); printf(“%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);in

11、t write(long a,int flag) /将键盘敲入的数字按 4 位一组放入 long a,且将符号放入 flagchar numN*4; char temp;int i,j,k;for(i=0;i=0;max_i-) if(bmax_i)break;for(i=0;i=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-k=0;max-)if(bmax)break;for(i=0;i=0

12、;len_a-) if(alen_a)break;k=len_a;while(compara(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-

13、) resulti=0;for(len_a=N-1;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,cd2*N;int aMAX=0,bMAX=0,cMAX=0,dMAX=0;char s;int m,n,i,j;int *p1,*p2;p1=

14、p2=menu();s=getchar();getchar();while(1)switch(s)case 0:return;case 1:printf(“格式为:a+bn“);init(a,b,p1,p2); if(a1=0 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(“格式为

15、:a-bn“); init(a,b,p1,p2); if(b0=0)b0=45;else if(b0=45)b0=0;if(a1=0 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=mu

16、lti(a,b,c,m,n); printf(“结果是:“);if(a0=45for(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(“ = “);print(

17、ad,flag);printf(“(“);print(cd,0);printf(“)n“);break;menu();s=getchar();getchar();6.调试结果程序的调试是指对程序的差错和排错,为了便于差错、阅读,在设计该程序的过程中添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。 经过仔细检查之后进行上机调试。进行编译,如果在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,在进行编译如此反复,直到顺利通过编译和连接为止。以下是编译的最终结果:由上图可知,该程序可以成功运行,且运行结果正确无误。7.设计总结:此次程序设计过程中发现的主

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

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报