标签:
—— 题目:
请编写一个能自动生成小学四则运算题目的 “软件”。
让程序能接受用户输入答案,并判定对错。
最后给出总共 对/错 的数量。
——需求分析:
此“软件”主要面向小学生,考虑到小学生对计算机的使用和掌握程度有限,所以此“软件”的操作应尽量简单,易使用;
用户能在此"软件"上练习简单的四则运算;
此“软件”能提交用户的答案,并判断对错;
在使用此 “软件”后及时给出正确与错误的题目数。
——基本功能要求:
对于该题目,首先该设计一个程序能自动生成两个0-100之间的整数;
其次,在键盘上要选择哪种运算,需要做一个判断选择代码;
再次,用户在控制窗口输入自己的答案,该程序能够判断用户所输入的答案对错;
最后,程序能给出最后所做题目的数量以及所做题目对与错的数量。
——扩展功能:
1.用户答题结束以后,程序可以显示用户答题所用的时间;
2.程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
——设计:
考虑到小学生的计算能力有限,本“软件”随机生成百以内的操作数;
考虑学生的年级跨越较大,且各年级的学生掌握的知识水平有差异。本“软件”采用菜单的方式,可由用户选择所要练习的运算法则;
考虑到小学生在小学阶段没有接受过负数知识,本“软件”确保在用户进行减法练习时,随机生成的两个操作数相减不会出现负数;
另外,考虑到用户进行除法练习时对无法整除的运算结果输入不便,本“软件”确保在用户进行除法练习时,随机生成的两个操作数相除不会出现分数或小数;
对年级较高的学生,本“软件”设计了四则混合运算,方便用户进行综合练习;
最后,本“软件”在设计上使用C语言实现,在VC++6.0运行。
——代码实现:
采用模块化设计思想,修改之前的code,将 “计算功能” 封装起来在C语言环境下,将函数声明与具体实现分别存放在头文件(.h)和源文件(.c)中;
头文件(.h)代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> int test(int n) { int ranswer=0; //正确答案 int uanswer=0; //用户输入的答案 int t=0; //临时变量 char operation; //运算类别 int num1=0; //操作数1 int num2=0; //操作数2 srand(time(NULL)); //初始化随机数种子 num1=rand()%100; //取0—100之间的随机数 num2=rand()%100; //进入程序功能,如果选择5就随机产生1-4所代表的每一种运算方式 if(n==5) { n=rand()%4+1; } switch(n) { case 1: operation=‘+‘; break; case 2: operation=‘-‘; break; case 3: operation=‘*‘; break; case 4: operation=‘/‘; break; } if((operation==‘-‘) && (num1<num2))//当减数大于被减数数时,交换 { t=num1; num1=num2; num2=t; } if(operation==‘/‘) { if(num2==0) num2=1;//当除数随机取0时,就将除数置为1 num1=num1*num2;//为确保整除将被除数与除数的乘积赋值给被除数 } //输出测试题本身、提示用户输入 printf("%d%c%d= ",num1,operation,num2); scanf("%d",&uanswer); //程序计算正确结果 switch(operation) { case ‘+‘: ranswer=num1+num2; break; case ‘-‘: ranswer=num1-num2; break; case ‘*‘: ranswer=num1*num2; break; case ‘/‘: ranswer=num1/num2; break; } //评判,做对返回1,做错返回0 if(uanswer==ranswer) { printf("回答正确!\n"); return 1; } else { printf("回答错误!\n"); return 0; } } void doExercise(int n) { clock_t start,end; double use=0; int score=0; //练习得分,初始化为0 int i=0; //练习题数的计数器 start=clock();//记录开始时间 for(i=1;i<=10;i++) { end=clock();//记录结束时间 if((double)(end-start)/CLK_TCK<120) { score=score+test(n); } else { printf("时间已到,不能答题!\n"); break; } } if(i==11) { end=clock();//记录结束时间 use=(double)(end-start)/CLK_TCK; printf("耗时%lf秒\n",use); } printf("本次练习%d道题,你答对了%d道,答错了%d道\n",i-1,score,i-1-score); printf("========================================================\n"); }
源文件(.cpp)代码:
#include "第三次作业.h" void main() { int choice=0; do { printf("\t1、加法练习\t2、减法练习\n"); printf("\t3、乘法练习\t4、除法练习\n"); printf("\t5、综合练习\t0、退出系统\n"); printf("===================================================\n"); printf("请输入你的选择(0--5):"); int choice; scanf("%d",&choice); while(choice<0 || choice>5) { printf("你的输入有误,请重新输入:"); scanf("%d",&choice); } if(choice==0) break; //用户选择0,退出循环(退出系统) doExercise(choice); //做什么练习,并启动评分 }while(true); printf("尚清丽和徐镇制作\n"); printf("谢谢使用本软件,再见\n"); }
——运行效果:
——两人合作步骤:
本次作业是在第二次作业的基础上进一步修改与完善的,徐镇和尚清丽同学组成了一组进行了相应的讨论与改进。
1、需求分析,建立在第一次作业的基础上,没有做太多的改动;
2、代码规范设计方面,我们认真阅读教材Page57:4.2-4.3节中内容,进行了风格讨论,了解之后修改了一下我们的原程序,使之符合 “代码风格和设计规范”的基本要求,并 采用模块化的思想,我们将函数封装起来,将函数声明存放在头文件(.h),具体实现存放在源文件(.cpp)中;
3、我们认真阅读教材Page21:2.1.1节内容,并进行了相关测试;
4、对该软件的功能进行了扩展,每一次测试结束会给出本次测试的时间,或者在120秒时间内未完成给出的题目,则会显示时间已到,不能答题!;
5、我们进行的每一步,两个人分工合作,你做我看,互相监督并指出相应的问题等等,同时也进行了PSP项目耗时记录。
——PSP:
——总结:
本次作业对于我们来说还是有一定的难度,我们也努力认真的去对待,认真阅读了书籍,了解到代码规范和两人合作的相关内容,体会到了软件工程这门课的魅力。当然,我们的作业依然存在很多不足,我们深知我们的编程能力和设计能力都还远远不够,相信以后在老师的指导下能够进一步的去提高自己。同时,也希望老师针对我们的作业给出宝贵的意见,我们会针对老师提出的问题再去进一步的讨论!!!谢谢!!
作者: 徐镇、尚清丽
时间:2015年4月19日
标签:
原文地址:http://www.cnblogs.com/xuzhen1992/p/4439592.html