C语言四则运算测试程序设计报告.doc

上传人:jian****018 文档编号:9560505 上传时间:2020-04-06 格式:DOC 页数:22 大小:663KB
返回 下载 相关 举报
C语言四则运算测试程序设计报告.doc_第1页
第1页 / 共22页
C语言四则运算测试程序设计报告.doc_第2页
第2页 / 共22页
C语言四则运算测试程序设计报告.doc_第3页
第3页 / 共22页
点击查看更多>>
资源描述
昆明理工大学计算机程序设计基础课程综合实践型教学课题报告课题名称:100以内的整数四则运算测试程序设计组长: 学号 040401067 姓名 周绍平组员: 学号 040401070 姓名 邓 磊学号 040401106 姓名 刘云路学号 姓名学号 姓名学号 姓名学号 姓名学院: 信自学院 专业班级: 自动化0421 指导教师: 耿植林 昆明理工大学计算中心2005 年 6月18日昆明理工大学计算中心计算机程序设计基础课程综合实践型教学课题报告课程名称:100以内的整数四则运算测试程序设计 学院: 信自学院 专业班级: 自动化0421学号姓名小组编号所选题号自评小组工作量(16)自评分数分数040401067周绍平15595040401070邓 磊15586040401106刘云路15585设计说明与功能描述(基本思路及关键语句说明)作为一个数学运算的程序,在我看来至少要有以下几个功能:1、 出题。既然是出题,那么就要求每次出的不一样。2、 解题。如果一个用于数学计算的程序,无法让使用者输入解答。这便是一个空壳。3、 判断。和解题相似,如果一个程序无法判断使用者输入结果的正误,又在谁会使用它呢?4、 显示。使用者有看到自己做的答卷和正确答案的要求和希望。5、 重做。使用者在知道自己做错的题后,一般会选择重做错题,以达到对其的了解。6、 菜单。不用说,这几乎是每一个程序都要求的。这是为了方便使用者进行多种选择。7、 循环。这就要求程序能多次重复地运行。设计这个程序的基本思路:分别设计出题(计算和除法)、评分、答卷、正解、菜单、重做七个功能模块。然后再设计一个主函数,不断地调用菜单这个函数,使其达到各项功能。同时,菜单函数与各函数要紧密地联系在一起,可以说菜单这个函数是整个程序中的枢纽。关键语句说明:由于数据要求共享,即多次调用。将几个变量定义为全局变量(运算数(sy10,sr10),运算符(fh10),输入结果(jd10),正确结果(jg10),分数(fs)。运算数由随机函数产生,并对取余以保证其在以内。随即数种子由系统时间函数产生。运算符也由随机函数产生,对取余。生成个数字,再转换为相应的运算符。(srand( (unsigned)time( NULL ) ); syi=rand()%100; sri=rand()%100; p=rand()%4; )程序中多次用到循环,对控制循环变量的定义和运算有很高的要求。由于菜单选项函数的出现,这就要求对输入选项的合法性进行验证,如果不合法就要求重输。( while(!(c=0&c6); return c; )错题正解和错题重做都要求其的处理在知道错题的基础上的。因此if(jgi=jdi,这个语句是个基础,在这两个函数中它是根本,如果不能对其正确的判断,就无法达到相应的功能。 由于除法的特殊性除数不能为和得到的结果是整数。我们专门设计了一个用于产生除法的函数,将其放入计算这个函数中。下面是这个函数的核心部分:srand( (unsigned)time( NULL ) ); FA: sy=rand()%100; if(sy=0) goto FA;for(i=1;i=10 sy是否为0随机产生两个数对100取余及运算符输入结果(jd)是否为答案(jg) 假For循环产生sy的约数csb 从csb中随机抽取一个除数将值返回函数jisuan分数(fs+0)分数(fs+10)真否结束结束3、重做(chongzuo)4、主函数(main)开始开始调用计算函数(jisuan)调用计算这个函数(jisuan)m10?假调用菜单函数(caidan)真For循环jd=jg?输入选项(key=?)真key=0?假输出题目dajuan1zhengjie输入结果2假pingjiajd=jg?3真chongzuo4假jisuanFor循环再次输出该题5结束结束真由于其它四个函数较为简单或者和某些函数相似,这里就不再重复说明。在程序中用到的数据说明:运算符:随机产生4个数字(0、1、2、3),定义为int p(全局变量),再转换为运算符(+、-、*、/),定义为char fh10(全局变量) .运算数:随机产生两个运算数,对100取余。定义为 int sy10,sr10(全局变量).结果和答案:定义为 int jd10,jg10(全局变量).循环控制变量:定义为 int i(函数(jisuan,chufa)),j(函数(dajuan)),k(函数(zhengjie)),m,n(函数(chongzuo)),key(主函数(main)).临时交换数据变量:int gh(函数(jisuan)).统计分数:int fs(全局变量).四、程序调试与测试 100以内的四则运算出题 (程序调试过程中遇到的问题)第一;重做程序调试中遇到的问题:在重做程序的调试中遇到的问题不太多,主要是答错的题给三次重做机会的程序设计一开始不能正常运行,要不就是给予无限次的机会,要不就是只能重做一次。由于开始我不能找出错误所在,调试了多次也不能很好的运行,经过多次的调试,改正,再调试,再改正,到最后终于将错误的地方改正了,正确的程序应当是“ for(n=0;n3;n+) printf(你仍未做对!你还有%d次机会: ,2-n);/*再次计算*/printf(%2d %c %2d =?,sym,fhm,srm);scanf(%d,&jdm); if(jdm=jgm) printf(恭喜!你做对了!n); break;/*跳出循环*/ ” 这样就很好的解决了前面所遇到的问题。第二;评价程序中遇到的问题: 我们做的这个自动出题程序中,当答题者做完题目后,程序会按成绩分段给出响应的评价。在做这部分程序的时候遇到的困难主要是score数据的获得,一开始不知道该用哪个函数对成绩进行评价,经过看书和小组内部的讨论才知道了应当用条件函数switch对成绩score进行分段并给出相应的评价结果score的数据从主函数获得:“ int fs; printf(请输入成绩(0,10,20.100):);scanf(%d,&fs); switch(fs) ” 这才使得程序能够正常运行。第三;菜单程序设计中遇到的问题: 本程序的主菜单选项分为显示答卷、错题的正确解、再进行一次练习、系统对成绩的评价、退出系统等选项。在做这个程序的时候,一开始我用的是05代表以上各选项,但是在定义的时候却定义成了16,导致程序在运行的过程中5选项和0选项都无法运行,而这个错误在编译时又不能找出来,所以让我费了大量的时间才知道是自己不认真定义错了。而这个程序主要是使用printf()函数显示菜单项,用sacnf()函数接收选项字符while条件限定选项的合法性,非法字符则重新输入并返回主函数:“printf(n* 数学四则运算测试软件 *nnn); printf( 1.显示答卷 2.错题正解nn); printf( 3.系统评估 4.错题重做nn); printf( 5.再次练习 0.退出系统nn); printf(n*); printf(n请输入选项(0-5):); /*提示输入选项*/ 第四;计算程序的设计中的问题: 在这部分程序的设计中没什么大的问题,计算程序主要是用随机函数rand()产生032767之间的整数,与100取余数后得到099之间的整数运算符也由随机数产生,rand()%4 得到03之间的随机数,约定0:减法,1:加法,2:乘法,3:除法。for循环控制题目数量,每次循环先产生题目并显示出来,将计算结果保存在jg中然后再等待做题的人从键盘输入计算结果保存在s中,将jg与s进 行比较判定正确性做完10道题后(循环结束),显示测试结果并进行评价。 第五;除法程序中遇到的问题: 除法运算程序的设计是本程序设计中最难解决也是出错最多的部分。主要除法运算的每一次运算不可能都是整数,这就使得程序的设计难度提高了许多,特别是在主函数的调用中主程序中遇到的问题:在主程序的调试过程中,遇到的问题较为突出。主要有两个方面。一是菜单选项的不运行。二是计算函数对除法函数的调用问题。为了解决这两个问题,我们小组进行了多次的试验,但是都无法解决这两个问题。这使得我们有点失落。主程序最后的解决是在询问了老师之后才解决的。我们在老师的帮助下发现并解决了这两个问题。菜单选项的问题是由于,对选项字符的合法性验证有问题。对函数调用的不成功则是对指针的不熟悉,从而造成了调用的不恰当,使数据的返回存在问题。五、程序清单#include stdio.h#include #include #include /* 字符操作函数*/* 定义全局变量*/int sy10,sr10,jd10,jg10; /* sy,fh,sr,jd,jg分别保存第一运算数,运算符, 第二运算数,输入结果,正确结果*/ int fs=0; /* s接收键盘输入的结果,score保存成绩*/char fh10; /* fh保存运算符号*/ /*作者:邓磊 编写日期:2005.6.13 最后修改日期:2005.6.13*/void chufa(int *s1,int *s2,int *s3)int i,b=1,c,jg; /*i为控制循环变量,jg,jd分别保存输入结果和正确答案*/int cs20=0,sy,sr; /*cs为除数数组,sy保存被除数,sr为从cs中抽取的除数*/srand( (unsigned)time( NULL ) ); FA: sy=rand()%100; if(sy=0) goto FA;for(i=1;i=sy;i+) /*产生除数数组的循环*/if(sy%i=0) csb=i; b+;else continue; /*循环结束*/c=rand()%b; /*随机抽取除数*/if(c=0) c=c+1;sr=csc;jg=sy/sr;*s1=sy; /*指针变量*/*s2=sr;*s3=jg;/* 作者:周绍平 编写日期:2005.6.8 最后修改日期:2005.6.14*/* 自动生成10道运算题目,数值在099之间 每出1道题后等待操作者输入运算结果 判断输入的结果是否正确,正确则加10分 给出最终得分*/* 算法:用随机函数rand()产生032767之间的整数,与100取余数后得到099之间的整数 运算符也由随机数产生,rand()%4 得到03之间的随机数,约定0:减法,1:加法, 2:乘法,3:除法。for循环控制题目数量,每次循环先产生题目并显示出来,将计 算结果保存在jg中然后再等待做题的人从键盘输入计算结果保存在s中,将jg与s进 行比较判定正确性做完10道题后(循环结束),显示测试结果并进行评价*/void jisuan() int p; /* p为随机产生的运算符号,规定0为加法,1为减法,2为乘法,3为除法*/int i,gh; /* i为循环控制变量,gh用于临时交换数据*/printf(你将进行的是100以内数字的四则运算!n);srand( (unsigned)time( NULL ) ); /* 随即数种子由系统时间函数产生*/* 循环产生10道100之内的加减乘除法运算题目*/for(i=0;i10;i+)syi=rand()%100; /* 随机产生第一个操作数(199)*/sri=rand()%100; /* 随机产生第二个操作数(199)*/p=rand()%4; /* 随机产生运算符(03)*/ if(p=0) /* 转换成运算符号,p为0表示做加法*/fhi=+; jgi=syi+sri; /* fh为,jg为syi+sri*/else if(p=1) /* p为1,表示做减法*/fhi=-; if(syisri) gh=syi; syi=sri;sri=gh; /* 如果sy=0&c6); /*验证选项是否合法,若否则重输*/ return c; /*返回选择项*/*作者:邓磊 编写日期:2005.6.12 最后修改日期:2005.6.12*/*对成绩结果进行评价,便于做题都了解自己的情况,进行有针对性的学习.按分数的不同层次进行评价*/*算法:用条件函数switch对成绩score进行分段并给出相应的评价,结果score的数据从主函数获得*/void pingjia()printf(你的成绩是%d分.n,fs); /* 显示测试结果*/switch(fs) /*显示评价*/ case 100: printf(真棒!不要骄傲哟!n); break; case 90: printf(优秀!恭喜你取得了好成绩!n); break; case 80: case 70: printf(良好!请继续努力,下次取得更好的成绩!n); break; case 60: printf(及格!成绩不太理想哟!再接再励吧!n); break; case 50: case 40: case 30: case 20: case 10: printf(多花点功夫吧,不然你会后悔的!n); break; case 0: printf(太差劲了!再不努力的话,你就完了!再做一次吧!n); break; printf(nn); /*作者:刘云路 编写日期:2005.6.12 最后修改日期:2005.6.12*/*显示答卷*/*各数据从主函数中获取*/void dajuan()int j;printf(你的答卷为:n);for(j=0;j10;j+)printf(%2d %c %2d = %2dn,syj,fhj,srj,jdj); printf(nn);/*作者:周绍平 编写日期:2005.6.12 最后修改日期:2005.6.12*/*对错题给出正确的答案*/*各数据从主函数中获取*/void zhengjie()int k;printf(你答错的题的正确答案为:n);for(k=0;k10;k+) if(jdk=jgk) continue; elseprintf(%2d %c %2d = %2dn,syk,fhk,srk,jgk); printf(nn);/*作者:刘云路 编写日期:2005.6.12 最后修改日期:2005.6.12*/*将错题给出,让做题者再次对其进行计算*/*各数据从主函数中获取*/void chongzuo()int m,n;printf(以下是你做错的题,请重做:n);for(m=0;m10;m+) /*用循环对错题进行选择*/if(jdm=jgm) continue; /*做对的题则跳过*/else printf(%2d %c %2d =?,sym,fhm,srm); scanf(%d,&jdm);if(jdm=jgm) printf(恭喜!你做对了!n);/*再次对输入的答案进行检验*/else /*若仍未做对,则用此函数*/ for(n=0;n3;n+) printf(你仍未做对!你还有%d次机会: ,2-n);/*再次计算*/ printf(%2d %c %2d =?,sym,fhm,srm); scanf(%d,&jdm); if(jdm=jgm) printf(恭喜!你做对了!n); break;/*跳出循环*/ /*循环结束*/ printf(nn);/*作者:周绍平、刘云路、邓磊 编写日期:2005.6.13 最后修改日期:2005.5.14*/*主函数*/void main()int key=1;jisuan();while(key)switch(caidan() case 1: printf(nnn); dajuan(); break;case 2: printf(nnn); zhengjie(); break;case 3: printf(nnn); pingjia(); break;case 4: printf(nnn); chongzuo(); break;case 5: printf(nnn); jisuan(); break;case 0: key=0; 个人收获和体会:(1)组长:周绍平这次C语言的程序设计,对于我来说是一个挑战。我对C语言的学习并不是很好,尤其是在数组之后的内容,对它并不了解,使用也达不到要求,更不要说灵活的运用它们了。这在程序的设计中也有所体现。每一个函数都设计好了,也调试好了,把它们分开运行并没有错误,但是当把它们组合成一个程序时,便是一个一个地出现错误。把这个问题解决了,另一个新的问题又来了。这不能说是对知识的欠缺。通过这次的程序设计,我懂得了无论什么事都要去做才会发现问题,才有可能去解决问题。对知识的学习,不能潜偿辄止,要深入去学习,去了解,这样才会有所收获。有许多东西,许多事,不是想像中的那么容易,不去实践,永远也不会有提高,尤其是学习计算机。我的另一个感受便是团队精神,如果没有我们这个小组成员的共同努力,我想这个程序也是没法完成的。共同合作、共同分享、共同研究这才是一个好的团队。(2)组员:邓磊这次C语言的实践,我们做的是数字100以内的四则运算,在其中我们各自分工,最后结合成一个自动出题,错题重做,自动打分以及加减乘除四则运算的统一完整的程序。 我做的是“对成绩结果进行评价,便于做题都了解自己的情况,进行有针对性的学习.按分数的不同层次进行评价。”在其中采用简单的C代码,并加入幽默风趣的语句来鼓励做题的人,例如:case 100: printf(真棒!不要骄傲哟!n);case 0: printf(太差劲了!再不努力的话,你就完了!再做一次吧!n);经过这次C语言程序设计的实践,让我学到了更多知识,也增强了自己的动手能力,同时也看到了C程序在社会上的广泛应用及优良的效果,已经成为一个我们应该懂得一点的技术。在这次实践中虽然我只做了其中一部分,但是体味到了其中的乐趣。我会在以后的学习和生活中努力思考,善于发现和解决问题,开动脑筋,去发现更多新的东西。刘云路这次C语言的实践,我们做的是数字100以内的四则运算,在其中我们各自分工,最后结合成一个自动出题,错题重做,自动打分以及加减乘除四则运算的统一完整的程序。我做的是“将错题给出,让做题者再次对其进行计算”这一部分printf(以下是你做错的题,请重做:n);for(m=0;m10;m+) /*用循环对错题进行选择*/if(jdm=jgm) continue; /*做对的题则跳过*/在其中用了简单的C语言代号,反映出了智能化的效果。经过这次C语言程序设计的实践,让我学到了更多知识,也增强了自己的动手能力,同时也看到了C程序在社会上的广泛应用及优良的效果,已经成为一个我们应该懂得一点的技术。在这次实践中虽然我只做了其中一部分,但是体味到了其中的乐趣。我会在以后的学习和生活中努力思考,善于发现和解决问题,开动脑筋,去发现更多新的东西。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!