大整数的四则运算-课程设计说明书_第1页
大整数的四则运算-课程设计说明书_第2页
大整数的四则运算-课程设计说明书_第3页
大整数的四则运算-课程设计说明书_第4页
大整数的四则运算-课程设计说明书_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中北大学课程设计说明书学院、系: 专业:学 生 姓 名:宋雨琪软件学院软件工程学 号:1221011205设 计 题 目:起 迄 日 期 : 指 导 教 师 :大整数的四则运算2013 年 10 月 11 日2013 年 11 月 16日薛海丽日期: 2013 年 11 月 16 日设计目的本课程设计是采用C 语言,在 VC 平台下实现大整数的四则运算,该系统运行在 MS-DOS 命令行模式下。本课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力.提高学生适应实际, 实践编程的能力。进一步巩固和复习C 程序设计的基础知

2、识;培养学生结构化程序、模块化程序设计的方法和能力;了解软件的编制过程及各环节的具体内容;提高学生程序调试技巧、软件设计能力和代码规范化等素质; 提高学生分析问题、解决问题以及实际运用能力.任务概述完成大整数的四则运算任务,假定整数不超过五十位要求:在屏幕上能够手动输入待求的两个大整数;输入完成后通过选择可以完成大整数的加、减、乘、除运算;将结果分别显示在屏幕上.验收时程序能够演示,自己单独做。模块划分定义 c_to_d(char strN, char dN)函数,实现把 str 的各位转变成对应整数,右对齐存入d, start 为最高位下标定义 d_to_c(char dN, char st

3、rN, int start)函数,实现把 d 中数字 dstart。 N1转变为字符左对齐存入str定义加法函数4)定义减法函数定义乘法函数定义除法函数定义输出格式函数运用主函数计算主要函数说明及其 N-S 图1)主函数说明定义变量输入要进行运算代码数字输入数字调用函数进行运算2)其他函数说明min 函数,比较两数大小c_to_d(char strN, char dN)函数,实现把 str 的各位转变成对应整数,右对齐存入d, start 为最高位下标d_to_c(char dN, char strN, int start)函数,实现把 d 中数字dstart。.。N1转变为字符左对齐存入st

4、radd(char str_aN, char str_bN, char str_cN),加法函数sub(char str_aN, char str_bN, char str_cN),减法函数compare(char str1N, char str2N) ,实现 str1,str2 内存的是要进行比较的大整数mul(char str_aN, char str_bN, char str_cN),乘法函数divd(char str_aN, char str_bN, char str_cN),除法函数主要函数的NS 图:定义变量 x,y,strN,dN,I,j,len int len,start,i,

5、jfor(i=0;iN;i+) di=0len=strlen(str) start=N-lenfor(i=0,j=start;ilen;i+,j+)dj=stri-0)return start图 1:函数 c_to_d(char strN,char dN) N-S 图定义变量 x,y,strN,dN,startI,j,len int len,start,i,jfor(i=0,j=start;i=start_c)如果有进位TFstart_c-;cstart_c=carry;调用函数 d_to_c()图 3:加法运算函数 add()的 NS 图定义变量 str_aN, str_bN, str_cN

6、 aN, bN,cN,i, start_a,start_b,start_c,borrow调 用 函 数 c_to_d() memset(c,0,sizeof(c),)将 c 中有效的个字节替换为 0 并返回ci=N-1;borrow=0ci=ai-bi-borrow如果有借位TFborrow=1;ci+=10while(i=start_a)borrow=1;i-i+while(iN & ci=0 )调用函数d_to_c()定义变量 str1N, str2N,len1,len2len1=strlen(str1) len2=strlen(str2)if(len1len2)return -1;TFr

7、eturn 1return strcmp(str1,str2);图 4:减法运算函数sub()的NS 图图 5:比较函数compare()的NS 图定义变量str_aN, str_bN, str_cN,len1, len2,i,j,k,carry,aN, bN, cN, dN,start_a,start_b, start_c, start_d len1=strlen(str_a); len2=strlen(str_b) 调 用 函 数 c_to_d() memset(c,0,sizeof(c),)ffoorr(j=j=NN-11;j;j=sstatarrt_t_bb;j;-j-)memset(

8、c,0,sizeof(c),) carry=0;for(i=N-1,k=j;i=start_a;i-,k-)dk=ai*bj; carry=dk/10; dk=dk%10;if(carry0) 如果有进位TFdk=carry; k-;start_d=k+1; 把 d 累加到 c 中carry=0for(i=N-1;i=start_d;i-)ci=ci+di+carry; carry=ci/10; ci=ci%10;if(carry0)TFci=carry; i-;start_c=i+1;调用函数 d_to_c(c,str_c,start_c)图 6:乘法运算函数的 NS 图定义变量 str_a

9、N, str_bN,str_cN ,cN,rmdN;tempN; i,k,len_rmd, len1,len2,cur;memset(c,0,sizeof(c) len1=strlen(str_a); len2=strlen(str_b)strcpy(rmd, str_a) rmdlen2=0;cur=len2-1cur 记下当前商对应的 a 中的下标if(compare(rmd, str_b)=0)sub(rmd, str_b, temp); ck+;strcpy(rmd, temp);cur+ len_rmd=strlen(rmd) rmdlen_rmd=str_acur rmdlen_r

10、md+1=0 k+for(i=0;i4|x0)欢迎的用!”)您使输出(输入错误,请重新输入)再次输入一个数字输出(”请输入需要的两个数”)并 结 束程序输入一个数再输入一个数switch()case 1:运行加法运算case2: 运行减法运算case 3: 运行乘法运算case 4: 运行除法运算输出结果图 8:运行四则运算的主函数的N-S 图程序运行数据及其结果测试加法输入 1再输入 1234567890 和 1234567890987图一加法运算结果测试减法输入 2再输入 123123123132 和 123123123图二减法运算结果测试乘法输入 3再输入 12363445234 和 2

11、3452435图三乘法运算结果测试除法输入 4再输入 1234567890 和 123456789退出输入 0课程设计心得图四除法运算结果图五退出程序这次我的课程设计是大整数的四则运算,由于平常使用的 32 位操作系统上,整形数的长度是 32 位,即四个字节,对于一般的应用,这个长度的整数已经足够。但是在某些领域,中,经常需要用到长达128 位(16 字节)的整数,对于这种整数,内部型是无法进行计算的,所以我将大整数用字符串,数组的形式表示出来,用于它的四则运算.通过此次课程设计,使我更加扎实的掌握了有关c 语言设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍

12、的检查终于找出了原因所在, 也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作, 使我们掌握的知识不再是纸上谈兵。在课程设计过程中,不断发现错误,不断改正,不断领悟,不断获取.在设计中遇到了很多问题,最后在老师的指导以及同学的帮助下,终于迎刃而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发 现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘。附录:includestdio。h#includestring.hdefine N 256int min(int x, int y)retu

13、rn xy?x:y;int c_to_d(char strN, char dN)/把 str 的各位转变成对应整数,右对齐存入d, start 为最高位下标 int len,start; /strlen(str)=5 N=10 start =105=5int i,j;for(i=0;iN;i+) di=0;len=strlen(str); start=Nlen; for(i=0,j=start;i0)start_c-; cstart_c=carry;/把 c 转化为字符串 str_c d_to_c(c, str_c, start_c);/减法,subtrationvoid sub(char s

14、tr_aN, char str_bN, char str_cN)/已假设 abchar aN, bN,cN; /以右对齐的方式存储各位数int i;int start_a,start_b;/分别存储 a,b,c 中最高位的下标int borrow;/借位/把 str_a,str_b 的各位转变成对应整数,右对齐存入 a,bstart_a=c_to_d(str_a, a); start_b=c_to_d(str_b, b);/从低位到高位,对应位相减,注意借位memset(c,0,sizeof(c);/将 c 中有效的个字节替换为并返回 c; i=N-1;borrow=0;while(i=sta

15、rt_a)ci=ai-biborrow; if(ci0) /借位borrow=1; ci+=10;else /注意不可缺省borrow=0;i-;/去掉结果前面的while(i=start_b;j-)memset(d, 0, sizeof(d)); carry=0;for(i=N-1,k=j;i=start_a;i-,k-) /注意 d 的最低位下标从 j 开始,而不是从 N1 开始dk=aibj; carry=dk/10; dk=dk%10;/如果有进位if(carry0)dk=carry; k;start_d=k+1;/把 d 累加到 c 中carry=0;for(i=N1;i=start

16、_d;i-)ci=ci+di+carry; carry=ci/10; ci=ci10;/如果有进位if(carry0)ci=carry; i;start_c=i+1;/把 c 转化为字符串 str_c d_to_c(c, str_c, start_c);/除法。divisionvoid divd(char str_aN, char str_bN,/已假设 abchar str_cN)char cN; /以左对齐的方式存储各位数char rmdN;/存储余数char tempN;int i,k,len_rmd, len1,len2,cur; memset(c,0,sizeof(c) ;/准备工作

17、,先在被除数中取和除数同样多的位数len1=strlen(str_a);len2=strlen(str_b); strcpy(rmd, str_a); rmdlen2=0;cur=len21; /cur 记下当前商对应的 a 中的下标/如果不够除,再向右取位if(compare(rmd, str_b)0)cur+; rmdcur=str_acur; rmdcur+1=0;/求商的过程是从高位到低位进行,商的每一位计算:需要多次执行减法,减法次数即商的一位。k=0;while(str_acur!=0)while(compare(rmd,str_b)=0) /本循环确定 str_acur对应位置的

18、商sub(rmd, str_b, temp); ck+;strcpy(rmd, temp);/右移一位后继续上述过程cur+; len_rmd=strlen(rmd);rmdlen_rmd=str_acur;/照抄被除数的一位rmdlen_rmd+1=0 k+;/将 c0。k-1转换成字符存入 str_c for(i=0;ik;i+)str_ci=ci+0; str_ci=0;void welcome()printf(*大整数四则运算*n”);printf(* 请选择要进行的四则运算对应选项:*n);printf(”*1:加法运算。*n);printf(*2:减法运算.*n”);printf(”*3:乘法运算.*n”);printf(”*4:除法运算.*n);printf(”*0:退出。*n);printf(*n”);int main()int x,i;char str_aN,str_bN,str_cN; for(i=1; ;i+)welcome(); scanf(%d”,&x) if(x=0)elseprintf(”程序结束!感谢您的使用!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论