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

下载本文档

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

文档简介

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

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

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

4、int start) 函数,实现把 d 中数字dstart.N-1转变为字符左对齐存入str4add(char str_aN, char str_bN, char str_cN),加法函数5sub(char str_aN, char str_bN, char str_cN),减法函数6compare(char str1N, char str2N),实现 str1,str2内存的是要进行比较的大整数7mul(char str_aN, char str_bN, char str_cN),乘法函数8divd(char str_aN, char str_bN, char str_cN),除法函数主要函

5、数的 N-S 图:定义变量 x,y,strN,dN,I,j,lenin t le n,start,i,jfor(i=0;iN;i+)di=0len=strle n(str)start=N-le nfor(i=0,j=start;ile n;i+,j+)dj=stri- 0return start图 1:函数 c_to_d(char strN,char dN) N-S 图定义变量 x,y,strN,dN,startl,j,lenin t le n,start,i,jfor(i=0,j=start;i=start_a)i+while(i=sftrt_bh-)memset(c,0,sizeof(c)

6、,)carry=0;for(i=N-1,k=j;i=start_a;i-,k-)dk=ai*bj carry=dk/10; dk=dk%10;- if(carry0)如果有进位T Fdk=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)T Fci=carry;i-;start_c=i+1;调用函数 d_to_c(c,str_c,start_c)图 6 :乘法运算函数的 N-S 图定义变量 str_aN, str_bN,str

7、_cN ,cN,rmdN;tempN; i,k,len_rmd, len1,len2,cur;memset(c,0,sizeof(c)len 1=strle n( str_a); len 2=strle n( str_b)strcpy(rmd, str_a)rmdle n2=0:cur=len2-1cur 记下当前商对应的a 中的下标.if(compare(rmd, str_b)=0)sub(rmd, str_b, temp);ck+;strcpy(rmd, temp);cur+len rmd=strle n(rmd)rmdle n rmd=str acurrmdlen_rmd+1=0k+fo

8、r(i=0;i4|x4忸比Jt Jt JtJt JtJtMllMJitH.Jit赳JHM.*氧貝覽 ZEN 買Jt Hit買KM! JU負覽JCJtJCJtMJmJtK JtKJHN H-X-*-XMMMMKXMMKMMXM:JC貝拭) 良JOtKJHKJHKJC*X:K宾 *J JKKJKQ请输几需更的两彳数12Jb344b234 23452435=邓耶:72诃R4891鬲02:搭哼 HC:7Vfrdowssy&tEm32DebugJ2210112屮tn cnnt inne图五 退出程序6 课程设计心得这次我的课程设计是大整数的四则运算,由于平常使用的32 位操作系统 上,整形数的长

9、度是 32 位,即四个字节,对于一般的应用,这个长度的整数已经足够。但是在某些 领域,中,经常需要用到长达128 位(16 字节)的整数,对于这种整数,内部型是无法进行计算的,所以我将大整数用字符串,数组的形式表示出来,用于它的四则运算。通过此次课程设计,使我更加扎实的掌握了有关c 语言设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原 因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动 手制作,使我们掌握的知识不再是纸上谈兵。在课程设计过程中,不断发现错误,不断改正,不断领悟,不断获取。在设计中遇 到了很多问题,最后

10、在老师的指导以及同学的帮助下,终于迎刃而解。在今后社会的发 展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦 的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今 后的道路上劈荆斩棘。附录:#include#include #define N 256int min(int x, int y)return xy?x:y;int c_to_d(char strN, char dN)/ 把 str 的各位转变成对应整数,右对齐存入 d, start 为最高位下标 int len,start; /strlen(str)=5 N=10 start=10

11、-5=5 int i,j;for(i=0;iN;i+)di=0;len=strlen(str);start=N-len; for(i=0,j=start;ilen;i+,j+)dj=stri-0;return start;void d_to_c(char dN, char strN, int start)/把 d 中数字 dstart.N-1 转变为字符左对齐存入 str int i,j;int len=N-start; for(i=0,j=start; i=start_c)ci=ai+bi+carry; carry=ci/10; ci=ci%10;i-;/如果有进位 if(carry0)st

12、art_c-; cstart_c=carry;/把 c 转化为字符串 str_c d_to_c(c, str_c, start_c);/ 减法, subtrationvoid sub(char str_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_

13、to_d(str_b, b);/从低位到高位,对应位相减,注意借位 memset(c,0,sizeof(c);/ 将 c 中有效的个字节替换为并返回 c; i=N-1;borrow=0; while(i=start_a)ci=ai-bi-borrow; if(ci0) / 借位borrow=1; ci+=10;else /注意不可缺省borrow=0;i-;/去掉结果前面的 while(iN & ci=0 )i+;/把 c 转化为字符串 str_c d_to_c(c, str_c, i);/i 是 c 中最高位下标int compare(char str1N, char str2N)

14、/str1,str2 内存的是要进行比较的大整数 / 如果前者大于后者,返回正数,若相等返回,否则返回负数int len1,len2;len1=strlen(str1);len2=strlen(str2);if(len1len2)return 1;elsereturn strcmp(str1,str2);/乘法 multiplicationvoid mul(char str_aN, char str_bN, char str_cN)int len1, len2,i,j,k,carry;char aN, bN, cN, dN;int start_a, start_b, start_c, star

15、t_d;len1=strlen(str_a);len2=strlen(str_b);/把 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);/用 bj(j=N-1,N-2.,)乘 a,存入 d,再把 d 累加到 c 中,注意错位问题,d 的最低位下标不是 N-1 ,而是 jfor(j=N-1;j=start_b;j-)memset(d, 0, sizeof(d);carry=0;for(i=N-1,k=j;i=start_a;i-,k-)

16、 / 注意 d 的最低位下标从 j 开始,而不是从 N-1 开始dk=ai*bj; carry=dk/10; dk=dk%10;/如果有进位if(carry0)dk=carry;k-;start_d=k+1;/把 d 累加到 c 中carry=0;for(i=N-1;i=start_d;i-)ci=ci+di+carry; carry=ci/10;ci=ci%10;/如果有进位if(carry0)ci=carry;i-;start_c=i+1;/把 c 转化为字符串 str_c d_to_c(c, str_c, start_c);/除法。 divisionvoid divd(char str_

17、aN, char str_bN, char str_cN)/ 已假设 abchar cN; / 以左对齐的方式存储各位数char rmdN;/ 存储余数char tempN;int 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-1; /cur 记下当前商对应的 a 中的下标/如果不够除,再向右取位 if(compare(rmd, str_b)=0

18、) / 本循环确定 str_acur 对应位置的商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;i4|x0)printf( 输入错误,请重新输入 n); scanf(%d,&x);printf( 请输入需要的两个数 n); scanf(%s,str_a); scanf(%s,str_b);switch(x)case 1:add(str_a,str_b,str_c); break;ca

温馨提示

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

评论

0/150

提交评论