编号:C21
河北工业大学计算机软件技术基础(VC)课程设计报告
学院 班级 姓名 学号 成绩 __ ___
一、 题目:
五进制长整数的加减运算 (C21)
二、设计思路
1、总体设计
1)分析程序的功能:通过此程序进行任意两个五进制长整数(位数不超过50)的加减乘运算。 2)系统总体结构:
本程序采用多文件,由主函数和4个分函数构成,功能是: ① 输入两个数据到字符数组中 ② 对两个字符数组中的字符串求逆序
③ 调用相加函数求两个数的和,再对所得字符串求逆序,然后输出 ④ 调用相乘函数求两个数的积,再对所得字符串求逆序,然后输出 ⑤ 调用相减函数求两个数的差,再对所得字符串求逆序,然后输出 2、各功能模块的设计:
① 输入函数:完成一个五进制无符号长整数的输入。输入数据到字符数组中,然后检验用户输入的数据是否合法(例五进制数中只能出现0~4),合法则返回,否则继续输入。 ② 求字符数组中字符串的逆序
③ 求和函数:求两个数据(字符数组中)的和 ④ 求积函数:求两个数据(字符数组中)的积 ⑤ 求差函数:求两个数据(字符数组中)的差 3、设计中的主要困难及解决方案
在这部分论述设计中遇到的主要困难及解决方案。 在这部分论述设计中遇到的主要困难及解决方案。 困难1 单个字符与数字的转换。
解决方案:在字符转数字时,'0'~'4'只需减去'0'即可;同样的,数字转字符时,只需加上'0'。
第1页/共8 页
编号:C21
困难2 应用多文件,在主函数中实现对多个分函数的调用,将程序的功能分解到不同的函数中去完成。
解决方案:将多个cpp文件放到一个工程中,用文件包含,通过#include “all.h”,来实现对分函数的调用。
4、你所设计的程序最终完成的功能
1)说明你编制的程序能完成的功能: 输入要加减乘的两个五进制长整数即显示其结果。 2)准备的测试数据及运行结果:输入两个五进制长整数: 12341342123 1232134 显示其结果为:
三、程序清单
如果是使用一个文件完成的程序,只需列出程序代码。
如果是使用多文件完成的程序,首先说明程序中的代码存放在哪些文件中,说明文件名(例如:本程序包含first.cpp、second.cpp、third.cpp和all.h四个文件);然后依次给出每个文件名及该文件清单,例如:
1、1.cpp文件清单 #include
char a[50],b[50]; int i,j=0;
while(j==0) //利用\语句实现判断输入数字是否符合要求,并可多次输入
第2页/共8 页
{
j=1; //标签 input(a,b);
for(i=0;i<50;i++) {
if(a[i]>52||b[i]>52) //检验数字是否合法 {
cout<<\数字不合法,请重新输入:\ j=0;break; } } }
change(a,b); }
2、2.cpp文件清单 #include
void input(char a[],char b[]) {
cout<<\cin.getline(a,50);
cout<<\cin.getline(b,50); }
3、3.cpp文件清单 #include
void change(char a[],char b[]) {
int i,N1=0,N2=0,n1,n2; int c1[50],c2[50];
strrev(a); //对字符串求逆序 strrev(b);
n1=strlen(a); //求字符长度 n2=strlen(b);
for(i=0;i c1[i]=(a[i]-48)*pow(5,i); N1=N1+c1[i]; } for(i=0;i c2[i]=(b[i]-48)*pow(5,i); N2=N2+c2[i]; 编号:C21 第3页/共8 页 } strrev(a); //对字符串求逆序 strrev(b); cout< cout< cout< 4、4.cpp文件清单 #include void add(int N1,int N2) { int M1=N1+N2,i; char m1[100]={0}; //初始化数组 for(i=0;M1!=0;i++) //将十进制整数转化为五进制字符数组 { m1[i]=M1%5; M1=M1/5; m1[i]=m1[i]+48; } strrev(m1); //对字符串求逆序 cout< void minus(int N1,int N2) { int M2=abs(N1-N2),i; char m2[100]={0}; //初始化数组 for(i=0;M2!=0;i++) //将十进制整数转化为五进制字符数组 { m2[i]=M2%5; M2=M2/5; m2[i]=m2[i]+48; } strrev(m2); //对字符串求逆序 if(N1 void multiply(int N1,int N2) { int M3=N1*N2,i; 编号:C21 第4页/共8 页 编号:C21 char m3[60]={0}; //初始化数组 for(i=0;M3!=0;i++) //将十进制整数转化为五进制字符数组 { m3[i]=M3%5; M3=M3/5; m3[i]=m3[i]+48; } strrev(m3); //对字符串求逆序 cout< 5、tou.h文件清单 void input(char a[],char b[]); void change(char a[],char b[]); void add(int N1,int N2); void minus(int N1,int N2); void multiply(int N1,int N2); (说明:程序清单中一定要有注释。程序清单部分的行间距设为1行即可) 四、对该设计题目有何更完善的方案 1、对自己完成程序进行自我评价。 基本完成了题目的要求,实现了两个长整数的相加,但仍有待提高,改善之处,需要不断学校完善。 2、对课题提出更完善的方案 可以通过进一步改进,实现两个带符号整数的运算;或更加创新,由用户输入数据使用的进制,然后输入两个整数,又程序计算并输出这两个数的和、差及积。 五、收获及心得体会 1、通过本次课程设计,自己在哪些方面的能力有所提高。 对数组有了进一步的学习提高,通过设计,是我在对c++的实际应用上有所提高,使自学能力和对所学知识的调用能力都有提升。 2、收获和心得体会。 由于知识上的缺陷会导致常常出现同样的错误,通过本次课程设计,我受益匪浅,学习了很多知识,应认真与人交流汲取知识,自我完善;新的知识可能导致程序的大量简化,思路更清楚结构,结构更简单,应不停的学习,并通过练习提高能力。也让我倍加体会到编程的乐趣,我将更加努力学习本门课程。 日期: 2011 年 06月 23日 第5页/共8 页