大整数的四则运算课程设计说明书.docx

上传人:b****1 文档编号:807444 上传时间:2022-10-13 格式:DOCX 页数:19 大小:289.10KB
下载 相关 举报
大整数的四则运算课程设计说明书.docx_第1页
第1页 / 共19页
大整数的四则运算课程设计说明书.docx_第2页
第2页 / 共19页
大整数的四则运算课程设计说明书.docx_第3页
第3页 / 共19页
大整数的四则运算课程设计说明书.docx_第4页
第4页 / 共19页
大整数的四则运算课程设计说明书.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

大整数的四则运算课程设计说明书.docx

《大整数的四则运算课程设计说明书.docx》由会员分享,可在线阅读,更多相关《大整数的四则运算课程设计说明书.docx(19页珍藏版)》请在冰豆网上搜索。

大整数的四则运算课程设计说明书.docx

大整数的四则运算课程设计说明书

中北大学

课程设计说明书

 

学院、系:

软件学院

专业:

软件工程

学生姓名:

宋雨琪

学号:

1221011205

设计题目:

大整数的四则运算

起迄日期:

2013年10月11日~2013年11月16日

指导教师:

薛海丽

 

日期:

2013年11月16日

 

1设计目的

本课程设计是采用C语言,在VC平台下实现大整数的四则运算,该系统运行在MS-DOS命令行模式下。

本课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力。

1)进一步巩固和复习C程序设计的基础知识;

2)培养学生结构化程序、模块化程序设计的方法和能力;

3)了解软件的编制过程及各环节的具体内容;

4)提高学生程序调试技巧、软件设计能力和代码规范化等素质;

提高学生分析问题、解决问题以及实际运用能力。

2任务概述

完成大整数的四则运算任务,假定整数不超过五十位要求:

1)在屏幕上能够手动输入待求的两个大整数;

2)输入完成后通过选择可以完成大整数的加、减、乘、除运算;

3)将结果分别显示在屏幕上。

4)验收时程序能够演示,自己单独做。

3模块划分

1)定义c_to_d(charstr[N],chard[N])函数,实现把str的各位转变成对应整数,右对齐存入d,start为最高位下标

2)定义d_to_c(chard[N],charstr[N],intstart)函数,实现把d中数字d[start...N-1]转变为字符左对齐存入str

3)定义加法函数

4)定义减法函数

5)定义乘法函数

6)定义除法函数

7)定义输出格式函数

8)运用主函数计算

4主要函数说明及其N-S图

1)主函数说明

①定义变量

②输入要进行运算代码数字

③输入数字

④调用函数进行运算

2)其他函数说明

①min函数,比较两数大小

②c_to_d(charstr[N],chard[N])函数,实现把str的各位转变成对应整数,右对齐存入d,start为最高位下标

③d_to_c(chard[N],charstr[N],intstart)函数,实现把d中数字d[start...N-1]转变为字符左对齐存入str

④add(charstr_a[N],charstr_b[N],charstr_c[N]),加法函数

⑤sub(charstr_a[N],charstr_b[N],charstr_c[N]),减法函数

⑥compare(charstr1[N],charstr2[N]),实现str1,str2内存的是要进行比较的大整数

⑦mul(charstr_a[N],charstr_b[N],charstr_c[N]),乘法函数

⑧divd(charstr_a[N],charstr_b[N],charstr_c[N]),除法函数

主要函数的N-S图:

图1:

函数c_to_d(charstr[N],chard[N])N-S图

图2:

函数d_to_c(chard[N],charstr[N],intstart)N-S图

图3:

加法运算函数add()的N-S图

while(i

memset(c,0,sizeof(c),)将c中有效的个字节替换为0并返回c

i=N-1;borrow=0

while(i>=start_a)

c[i]=a[i]-b[i]-borrow

如果有借位

TF

borrow=1;c[i]+=10

borrow=1;i--

i++

图4:

减法运算函数sub()的N-S图

 

图5:

比较函数compare()的N-S图

for(j=N-1;j>=start_b;j--)

memset(c,0,sizeof(c),)

carry=0;

for(i=N-1,k=j;i>=start_a;i--,k--)

d[k]=a[i]*b[j];

carry=d[k]/10;

d[k]=d[k]%10;

if(carry>0)如果有进位

TF

d[k]=carry;

k--;

start_d=k+1;把d累加到c中

memset(c,0,sizeof(c),)

carry=0

for(i=N-1;i>=start_d;i--)

c[i]=c[i]+d[i]+carry;

carry=c[i]/10;

c[i]=c[i]%10;

if(carry>0)

TF

c[i]=carry;

i--;

start_c=i+1;

调用函数d_to_c(c,str_c,start_c)

图6:

乘法运算函数的N-S图

 

图7:

除法运算函数的N-S图

 

图8:

运行四则运算的主函数的N-S图

5程序运行数据及其结果

1)测试加法

输入1

再输入1234567890和1234567890987

图一加法运算结果

2)测试减法

输入2

再输入123123123132和123123123

图二减法运算结果

3)测试乘法

输入3

再输入12363445234和23452435

图三乘法运算结果

4)测试除法

输入4

再输入1234567890和123456789

图四除法运算结果

5)退出

输入0

图五退出程序

6课程设计心得

这次我的课程设计是大整数的四则运算,由于平常使用的32位操作系统上,整形数的长度是32位,即四个字节,对于一般的应用,这个长度的整数已经足够。

但是在某些领域,中,经常需要用到长达128位(16字节)的整数,对于这种整数,内部型是无法进行计算的,所以我将大整数用字符串,数组的形式表示出来,用于它的四则运算。

通过此次课程设计,使我更加扎实的掌握了有关c语言设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。

实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

在课程设计过程中,不断发现错误,不断改正,不断领悟,不断获取。

在设计中遇到了很多问题,最后在老师的指导以及同学的帮助下,终于迎刃而解。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘。

附录:

#include

#include

#defineN256

intmin(intx,inty)

{

returnx

x:

y;

}

intc_to_d(charstr[N],chard[N])

{//把str的各位转变成对应整数,右对齐存入d,start为最高位下标

intlen,start;//strlen(str)=5N=10start=10-5=5

inti,j;

for(i=0;i

d[i]=0;

len=strlen(str);

start=N-len;

for(i=0,j=start;i

d[j]=str[i]-'0';

returnstart;

}

voidd_to_c(chard[N],charstr[N],intstart)

{

//把d中数字d[start...N-1]转变为字符左对齐存入str

inti,j;

intlen=N-start;

for(i=0,j=start;i

str[i]=d[j]+'0';

str[len]='\0';

}

//加法addition

voidadd(charstr_a[N],charstr_b[N],charstr_c[N])

{

chara[N],b[N],c[N];//以右对齐的方式存储各位数

inti;

intstart_a,start_b,start_c;//分别存储a,b,c中最高位的下标

intcarry;//进位

//把str_a,str_b的各位转变成对应整数,右对齐存入a,b

start_a=c_to_d(str_a,a);

start_b=c_to_d(str_b,b);

//从低位到高位,对应位相加

i=N-1;

carry=0;

start_c=min(start_a,start_b);

while(i>=start_c)

{

c[i]=a[i]+b[i]+carry;

carry=c[i]/10;

c[i]=c[i]%10;

i--;

}

//如果有进位

if(carry>0)

{

start_c--;

c[start_c]=carry;

}

//把c转化为字符串str_c

d_to_c(c,str_c,start_c);

}

////减法,subtration

voidsub(charstr_a[N],charstr_b[N],charstr_c[N])

{//已假设a>b

chara[N],b[N],c[N];//以右对齐的方式存储各位数

inti;

intstart_a,start_b;//分别存储a,b,c中最高位的下标

intborrow;//借位

//把str_a,str_b的各位转变成对应整数,右对齐存入a,b

start_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>=start_a)

{

c[i]=a[i]-b[i]-borrow;

if(c[i]<0)//借位

{

borrow=1;

c[i]+=10;

}

else//注意不可缺省

borrow=0;

i--;

}

//去掉结果前面的

while(i

//把c转化为字符串str_c

d_to_c(c,str_c,i);//i是c中最高位下标

}

intcompare(charstr1[N],charstr2[N])//str1,str2内存的是要进行比较的大整数

{//如果前者大于后者,返回正数,若相等返回,否则返回负数

intlen1,len2;

len1=strlen(str1);

len2=strlen(str2);

if(len1

return-1;

elseif(len1>len2)return1;

else

returnstrcmp(str1,str2);

}

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1