项目场景:大学在读生完成课程设计
该算法要求我们做到算术题测试的一些功能,利用此程序能给反馈给用户想要的测试题目数量,并且能够实现给出的题目可以包含四则运算中的某些运算,获取用户输入的计算答案,并最终及时反馈给用户所得的测试分数,完善一下算法返回测试所用时长。
具体功能:
1.能随机出题, 题数由用户输入确定, 算术题包括加减乘除四则运算, 表达式项数应不限, 可以包含括号;
2.需要进行表达式的合法性验证;
3.用户交互输入答案;
4.计算机核对用户答案;
5.能对用户的测试评分;
设计要求:
1. 系统具有一定的容错性;
2. 要求具有较好的交互性。
问题描述:
对于上述功能的实现我们有可能会遇到以下一些问题:
1.随机出题意味着要让程序能够反馈给用户一些题目,这些题目是不确定的。
2.算术题包括加减乘除的四则运算,运算符号是随机的,包含括号的四则运算。
3.算术表达式的项数也是不确定的,表达式的合法性就是为了排除0作为运算的项。
4.括号的出现位置是不确定的,并且能够在获取用户输入的答案后,对此进行验证。
5.能够在用户输完答案后,反馈给用户测试分数,(反馈给用户做题时长,(选做))。
设计思路:
该程序需要做到随机出题(包含四则运算和括号),意味着我们需要写出一个能够生成随机数,随机运算符和随机位置添加括号的算法,最后通过三者衔接输出给用户,这样就做到随机出题,表达式合法性我们则需要避免项数0的出现即可,用户交互输入答案并且对答案进行核对,那么只需要先存储用户答案和计算机事先算好的答案后进行对比反馈给用户分数即可。
本程序的要求用户输入的内容包括:
(1) 题目的数量,也就是num的值;
(2) 用户计算后的结果,也就是user的值。
本程序要求输出的内容是包括
(1) 根据用户输入的num所反馈给用户的题目;
(2) 用户通过此次测试所得分数;
(3) 用户在此次测试中所用时长。
所以,根据上面的模型分析及输入输出参数分析,可以定义一种数据结构后进行算法实现。
解决方案:
(1) 算术表达式的出题过程Questions函数
void Questions(int num)
{//首先随机项数的出现次数要根据用户输入的num来确定
int q,n[20];//用n记录随机项数的多少(项数至少是两项)
int p,m,t[5];//t数组先存放0,1,2,3的数字用来实现加减乘除符号的随机
int flag=1;//标识符 &题目顺序
srand(time(NULL)); //设置随机种子
for(q=0;q<num;q++) n[q] = rand()%4 + 2;//此处n的取值为2-5
for(p=0;p<num;p++){
for(m=0;m<n[p];m++){
s[m] = rand() % 9 &#