C语言课程设计大数加减试验报告_第1页
C语言课程设计大数加减试验报告_第2页
C语言课程设计大数加减试验报告_第3页
C语言课程设计大数加减试验报告_第4页
C语言课程设计大数加减试验报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

《C语言程序设计》课程设计大数加减一、目的因为C语言中的1玳类型和10ng类型的大小范围仅为(-32767~32767和-2147483647~2147483647),在某些较大型计算中,数据长度不能满足需要。本实验目的是用C设计一个足够大的整数类型,实现两个大整数的加减运算。二、需求分析1、输入的形式和输入值的范围运行程序时,按照提示将依次输入一个整数、一个‘+’或‘-’号和另一个整数;输入值最小为0,最大可达100位,但当输入的两个数都是100位且相加时,可能会发生溢出,所以为了保险起见,最大输入为99位。2、输出的形式输入的两个数进行加法或减法运算后,结果将以一个整型数输出。3、程序所能达到的功能在某些较大型计算中,C语言中的1玳类型和10ng类型的长度不能满足需要,本程序借助字符数组来储存这两个大数,然后根据0-9的ASCII码进行加减并转换成数字输出,从而实现两个大整数的加减运算。4、初步的测试计划(1)两个正整数相加,结果分发生进位和未发生进位两种情况;(2)两个正整数相减,分大数减小数和小数减大数两种情况。三、概要设计1、主函数模块intmian(){定义变量;Do{定义字符数组并初始化;调用函数读入两个数据和从键盘输入‘+’或‘-’;给变量赋值;姓名:中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:《C语言程序设计》课程设计使用switch结构来实现加减运算并输出结果;提示是否继续计算;}while( );return0;)2、子函数功能intread(charstr[N]);用数组读入整数并返回数位;voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);对两个整数进行加法运算;voidoutput(charstr[N],intm);输出两个整数相加后的结果;voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);比较两个整数的大小,调用其它函数执行减法运算,输出结果;voiddecrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);对两个整数进行减法运算;voidprint(charstr[N],intm);输出两个整数相减后的结果。3、数据类型及含义inta,b,m,n;定义整型变量,a是第一个整数的位数,b是第二个整数的位数,m是a、b中较大值再加上1,n是a、b中较小值;charop,ans;定义字符变量,op代表‘+’或‘-’,ans代表你的选择(完成此次计算后是否继续下一次计算);charnumber1[N]={0},number2[N]={0},number[N]={0};定义三个字符数组,分别储存两个输入值和一个结果,并进行初始化。姓名:中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:《C语言程序设计》课程设计四、详细设计1、伪码算法/*函数功能:输入两个大正整数,利用字符数组对其进行加法运算或减法运算,并输出结果*//*头文件*/#include<stdio.h>#include<string.h> /*用于字符串的处理*//*定义字符串的长度*/#defineN100/*函数声明*/intread(charstr[N]);voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);voidoutput(charstr[N],intm);voiddecrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);voidprint(charstr[N],intm);voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);/*主函数*/intmain(){inta,b,m,n;charop,ans;/*定义变量*/do{charnumber1[N]={0},number2[N]={0},number[N]={0};/*定义三个字符数组并进行初始化*/a=read(number1); /*调用函数读入数据*/printf(〃请输入'+'或'-':〃);姓名:中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:《C语言程序设计》课程设计scanf("%c",&op);/*读入'+'或'-'*/getchar();/*读入回车符*/b=read(number2);m=(a>=b?a:b)+1;n=(a<=b?a:b);switch(op){case'+':increase(number1,number2,number,m,n,a,b);output(number,m);break;case'-':calculate(number1,number2,number,m,n,a,b);break;default:printf("输入错误!\n");)printf(〃你想继续吗?输入丫表示继续,输入9表示放弃:〃);scanf("%c”,&ans);getchar();}while((ans==,Y,)||(ans==,y,));return0;)intread(charstr[N]){inti;使用循环读入数据,储存到字符数组returni; /*用i返回字符串长度即大正整数位数*/姓名:中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:《C语言程序设计》课程设计)voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){利用字符‘0’到‘9’的ASCII码进行加法运算,注意进位;当a、b不同时,要考虑a、b的大小,当较小的那个数累加完后,仔细思考另一个数剩余位上的数与进位的数相加后是否进位及进位后该位数字;return;)voidoutput(charstr[N],intm){逐个输入每位数字,考虑第一位是否为0,如果是0,则不能输出改为数字;return;)voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){printf("结果是:”);if(a>b){decrease(str1,str2,str,m,n,a,b);/*调用函数计算*/print(str,m);/*调用函数输出*/)elseif(a<b){decrease(str2,str1,str,m,n,b,a);printf(〃-〃);/*考虑到结果可能是负数*/print(str,m);中南民族大学计算机科学学院计算机科学与技术专业 学号: 姓名: 5《C语言程序设计》课程设计)else/*a=b*/{if(strcmp(str1,str2)>0){decrease(str1,str2,str,m,n,a,b);print(str,m);)elseif(strcmp(str1,str2)<0){decrease(str2,str1,str,m,n,b,a);printf(〃-〃);print(str,m);)else/*strcmp(str1,str2)==0*/{printf(〃0\n〃);))return;)voiddecrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){减法运算,考虑借位,分a、b相等和不等进行讨论;return;)voidprint(charstr[N],intm)姓名:中南民族大学计算机科学学院计算机科学与技术专业 学号:

姓名:《C语言程序设计》课程设计输出结果;return;2、整个程序流程图如下:《C语言程序设计》课程设计输出结果;return;2、整个程序流程图如下:五、调试分析姓名:中南民族大学计算机科学学院计算机科学与技术专业 学号:

姓名:《C语言程序设计》课程设计1、关于用字符数组来储存输入的数据我最初的想法是用整型数组来储存数据,将数据一次输入,但在执行时无法用strlen来计算数据位数,所以我使用字符数组,但现在想想用整型数组也是可以的,只要将一个数的相邻两位之间都加入空格,而且计算时会简单很多,但这样的输入很不方便。2、关于加减时出现的问题(1)利用字符0-9的ASCII进行计算、转化,再输出字符0-9,需要掌握其中规律,容易出错;(2)需要注意加减运算可能出现的进位和退位的问题;(3)需要考虑两个数据长度不同时,其中每个循环的控制条件;3、关于输出的问题(1)需要考虑两个整数相加时结果的位数是否增加,如果没有增加,如何在输出时消除首位的0;(2)需要考虑两个整数相减时,结果的正负,输出时结果前的0。六、测试结果1、加法运算(1)位数增加IW课程段计源代德'dashujiaj值NDebugW,.I回(2)位数不增加中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:《C语言程序设计》课程设计2、减法运算(1)结果为正(2)结果为负《C语言程序设计》课程设计2、减法运算(1)结果为正(2)结果为负(3)结果为03、运算符输入错误姓名:中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:《C语言程序设计》课程设计yes:12船m贰如■、yes:12船m贰如■、E:\课程设计源代码'由shuj㈣MrAD旧bug\&」1=1回yes七、用户使用说明本程序的算法简单明确,但在实际的编码过程中却遇到了不少细节问题,分多种情况讨论,导致程序相对较长和复杂,还好的是实际操作简单,用户只需要根据提示进行输入便可得到结果,而且可以根据用户的选择重复计算。果是二33youwantcontinue?¥for揄入一个^整教二21揄入或二葭一wA一"正整数二12果是二9youwant;continue?Vforessanykeytocontinue八、课程设计总结1、本次课程设计难度较大,是我学习C语言以来用时最长、代码最长的一次编程。2、本次的课程设计加深了我对C语言的了解,强化了相关知识,也提高了我对自己专业的学习兴趣。3、本次课程设计的所有内容均为自己独立思考完成的,一定程度上加强了自己的实践能力和思考能力。中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:104、本次课程设计加强了我对文档排版的重视,在准备材料时首次使用绘图软件,也算是一种收获。

中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:10《C语言程序设计》课程设计源代码:/*函数功能:输入两个大正整数,利用字符数组对其进行加法运算或减法运算,并输出结果*/#include<stdio.h>#include<string.h>#defineN100intread(charstr[N]);/*用数组读入大正整数*/b);voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);b);b);/*对两个大正整数进行加法运算*/voidoutput(charstr[N],intm);/*输出两个大正整数相加后的结果*/voiddecrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb);/*b);/*比较两个大正整数的大小,分别执行不同的操作*/intmain(){inta,b,m,n;charop,ans;do{/*对两个大正整数进行减法运算*/voidprint(charstr[N],intm);中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:11/*输出两个大正整数相减后的结果*/voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,int

中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:11《C语言程序设计》课程设计charnumber1[N]={0},number2[N]={0},number[N]={0};/*定义三个字符数组并进行初始化*/a=read(number1);/*读入第一个大正整数*/printf(〃请输入'+'或'-':〃);scanf("%c",&op); /*读入'+'或'-'*/getchar();/*读入回车符*/b=read(number2); /*读入第二个大正整数*/m=(a>=b?a:b)+1;n=(a<=b?a:b);switch(op){case'+':increase(number1,number2,number,m,n,a,b);output(number,m);break;case'-':calculate(number1,number2,number,m,n,a,b);break;default:printf("输入错误!\n");)printf("Doyouwantcontinue?Yforyes,Nforno:");scanf("%c”,&ans);getchar();}while((ans=='Y')||(ans=='y'));return0;)intread(charstr[N])中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:12

中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:12《C语言程序设计》课程设计{inti;printf(〃请输入一个正整数:”);for(i=0;;i++){scanf("%c”,&str[i]);if(str[i]==,\n,){break;))returni;/*用i返回字符串长度即大正整数位数*/)voidincrease(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){charc,d='0';inti;for(i=1;i<=n;i++){c=str1[a-i]+str2[b-i]-48;/*利用ASCII码对字符进行处理*/c=c+d-48;d='0';if(c>'9'){c=c-10;d=d+1;)str[m-i]=c;中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:13《C语言程序设计》课程设计if(a>=b){for(i=n+1;i<=a;i++){c=str1[a-i]+d-48;d='0';if(c>'9'){c=c-10;d=d+1;)str[m-i]=c;)str[0]=d;else{for(i=n+1;i<=b;i++){c=str2[b-i]+d-48;d='0';if(c>'9'){c=c-10;d=d+1;)str[m-i]=c;)中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:14

中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:14《C语言程序设计》课程设计str[0]=d;)return;)voidoutput(charstr[N],intm){inti;printf("结果是:”);if(str[0]==,1,){for(i=0;i<m;i++){printf("%c”,str[i]);)printf(〃\n〃);)else{for(i=1;i<m;i++){printf("%c”,str[i]);)printf(〃\n〃);)return;)中南民族大学计算机科学学院计算机科学与技术专业 学号:姓名:15《C语言程序设计》课程设计voidcalculate(charstr1[N],charstr2[N],charstr[N],intm,intn,inta,intb){printf("结果是:”);if(a>b){decrease(str1,str2,str,m,n,a,b);print(str,m);)elseif(a<b){decrease(str2,str1,str,m,n,b,a);printf(〃-〃);print(str,m);)else/*a=b*/{if(strcmp(str1,str2)>0)

温馨提示

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

评论

0/150

提交评论