长整数的处理
渭水学子网-娓娓动听
河南城建学院
《c语言程序设计》
课程设计报告
设 计 题 目: 长整数的处理
指 导 老 师:崔雪冰
沈云琴 张芳芳
学 生 学 号: 083215133
学 生
姓 名: 李 尧
同 组 人 员: 平捷 王舒涵 张媛婕
时 间: 2015年12月25日
目
录
第一章 长整数处理 ..............................
..................................................
.. 3
1.1设计目的 ...............................
..................................................
......... 3
1.2题目要求 ........................
..................................................
................ 3
1.3分组情况 .................
..................................................
....................... 3
第二章 程序设计 ...........
..................................................
......................... 4
2.1 实现功能 .......
..................................................
................................ 4
2.2 数据设计
..................................................
....................................... 4
2.3 函数设计 .........................................
................................................ 4
2.4 设计E-R图 .................................
..................................................
. 5
2.4 重点代码 ...............................
..................................................
........ 6
2.4 进入界面 ....................
..................................................
................... 7
第三章 程序运行 ...........
..................................................
......................... 8
3.1涉及知识点 .......
..................................................
............................. 8
3.2运行截图 ....
..................................................
.................................... 8
3.3
源代码 ..............................................
............................................... 9
第四章 总结 .......................................
..................................................
... 11
2
第一章 长整数处理
1.1设计目的
课程设计围绕课程的整体教学目标进行,课程设计的题目具有一定的综合性
和应用性,只靠个别单元的
知识一般不能实现课程设计的目标,需要对课程知识
进行综合运用。要完成好课程设计,就要对课程知识
进行系统学习、复习、总结、
应用,达到在实践中学习知识、掌握知识、应用知识和培养能力的目的。
1.通过课程设计,进一步熟悉掌握以下知识:数据类型、分支控制、循环
控制、函数的定义及
调用、结构体及数组、指针、文件操作、编译预处理等。
2.通过课程设计,达到系统理解、综合运用课程知识的学习目标。
3.通过课程设计,学会用高级语言程序解决实际问题的方法。
4.通过课程设计,掌握程序
的局部测试、调试方法,建立程序系统调试、
测试的基本概念和思想,学会较大程序的系统测试和调试方
法。
1.2题目要求
假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一
位数
字,则实际的长整数m表示为:
其中a[0]保存该长整数的位数。求:
长整数加长整数或长整数减长整数。
用户输入两组不同的数组,每个数组代表一个长整数,然后对长整数进行相
加或者相减。
1.3分组情况
本组成员有李尧、平捷、王舒涵、张媛婕。
李尧负责get函数,以及最后整合;
平捷负责switch函数;
王舒涵负责jianfa函数;
张媛婕负责jiafa函数。
3
第二章 程序设计
2.1 实现功能
实现的功能就是输入一个数组把其转化为长整数,实现长整数加长整数或
长整数减长整数。
2.2 数据设计
由于程序是两个数组转化长整数,所以数据类型定位int;
程序中用的全局变量是int x[]和int y[]
2.3 函数设计
程序中
一共设计了五个函数,分别是:get函数、switch函数、jiafa函数、
jianfa函数以
及main函数。
get函数的功能是用来获取用户的输入;函数参数是:int d[]
switch函数是选择运算函数;函数参数是:d
afa函数jianfa函数则是进行加减法运算的;函数参数是:int x[],int y[]
Main函数是主函数。
下面是对本程序函数之间的调用关系
Main
函数
Get 函数Switch 函数
Jiafa 函数Jianfa 函数
4
2.4 设计E-R图
E-R流程图图
开始
输入两个长整数a,b
将字符型转化为数字
1
计算加法输入
1
计算减法输入 2
2
T
计算c[i]=x[i]+y[i]
a>b
?
F
a[i]>=10?
T
F
c[i]=x[i]-y[i]
交换a,b
F
进位
c[i]<0?
T
c[i]=x[i]+y[i
]
输出c[i]
借位
c[i]<0
T
借位
输出c[i]输出-c[i]
结束
5
2.5 重点代码
void get(int d[])
{
int i,temp;
for(i=1;;++i)
{
d[i]=getchar()-48;
if(d[i]==-38||d[i]==-16)
break;
}
d[0]=i-1;
d[i]=0;
for(i=1;i<=d[0]2;++i)
{
temp=d[i];
d[i]=d[d[0]-i+1];
d[d[0]-i+1]=temp;
}
}
void
jiafa(int x[],int y[])
{
int i;
c[0]=x[0];
for(i=1;i<=x[0];++i)
{
c[i]=x[i]+y[i];
if(c[i]>=10)
{
c[i]-=10;
x[i+1]+=1;
}
}
if(x[i]>0)
{
c[i]=x[i];
c[0]++;
}
}
void jianfa(int x[],int y[])
{
int i=1;
c[0]=x[0];
for(i=1;i<=x[0];++i)
6
}
{
c[i]=x[i]-y[i];
if(c[i]<0)
{
c[i]+=10;
x[i+1]--;
}
}
while(c[--i]==10)
c[0]--;
2.6 进入界面 程序是两长整数相加相减,没有过多的界面设计,进入程序后选择加法输
入“1”,选择减法输入“
2”,按回车后输入数组。
7
第三章 程序运行
3.1涉及知识点
要定义多个函数,实现函数之间的相互调用。函数参数的传递方法和函数
的返回值。
3.2运行截图
1、长整数加长整数
2、长整数减长整数
8
3.3 源代码
#include
#include
using
namespace std;
int c[100]={0};
void
get(int d[])
{
int i,temp;
for(i=1;;++i)
{
d[i]=getchar()-48;
if(d[i]==-38||d[i]==-16)
break;
}
d[0]=i-1;
d[i]=0;
for(i=1;i<=d[0]2;++i)
{
temp=d[i];
d[i]=d[d[0]-i+1];
d[d[0]-i+1]=temp;
}
}
void
jiafa(int x[],int y[])
{
int i;
c[0]=x[0];
for(i=1;i<=x[0];++i)
{
c[i]=x[i]+y[i];
if(c[i]>=10)
{
c[i]-=10;
x[i+1]+=1;
}
}
if(x[i]>0)
{
c[i]=x[i];
c[0]++;
}
}
void jianfa(int x[],int y[])
9
{
int i=1;
c[0]=x[0];
for(i=1;i<=x[0];++i)
{
c[i]=x[i]-y[i];
if(c[i]<0)
{
c[i]+=10;
x[i+1]--;
}
}
while(c[--i]==10)
c[0]--;
}
int
daxiao(int x[],int y[])
{
int i;
if(x[0]>y[0])
return 1;
if(x[0]
for(i=x[0];i>=1;i--)
if(x[i]!=y[i])
break;
if(x[i]>y[i])
return 0;
return 0;
}
void
main()
{
int d,i,a[100]={0},b[100]={0};
cout<<为加法,2为减法:
cin>>d;
getchar();
cout<<请输入两个整数:n
get(a);
get(b);
switch(d)
{
case 1:
if(a[0]>=b[0])
jiafa(a,b);
else
10
jiafa(b,a);
break;
case 2:
if(daxiao(a,b)==1)
jianfa(a,b);
else
{
jianfa(b,a);
printf(
}
break;
}
for(i=c[0];i>=1;--i)
cout<
第四章 总结 <
br>这个课程设计,我感觉对于我们现在只学了些基础的知识的人来说确实是一
个不小的挑战!从一个
函数到很多函数的有机集合到多个类的使用,其中也经历
了不少困惑与不知。但至少我现在做到了,终于
战胜了自己对课程设计的恐惧,
也收获了程序运行成功的喜悦,有付出,就有收获。通过这次课程设计,
发现自
己还有很多不足的地方,做起来感觉很困难。还好可以通过去网上搜索、去图书
馆查找资
料、请教老师同学等各种方式克服了一个又一个的困难。多样化的处理
问题,才是成功之道,终于把设计
给完成了!学习的心态很关键,不懂了就要学
着去用不同的方式去获取,补足自己。
通过这次
实践,我对编程有了新的理解,编程并不是像大多数人说的那样充
满单调,乏味。一件东西的乐趣在于你
能去接触去理解。我接触了,我理解了。
让所学的运用于生活中,做到灵活运用,学有所成的兴奋是难得
的宝贵。我在其
中感悟到乐趣了。
11