从整个程序的流程来看,依次进行的数据处理为:读取txt文档获得算式->打印输出->用户输入计算结果->比较计算结果,统计正误
<1>读取文档部分的问题
输入:txt文档
输出:表达式字符串
通过文件流,使用getline()函数实现文档的读取
参考博客:http://blog.csdn.net/stpeace/article/details/12404925
<2>输出
上一部分输出结果为字符串,直接用cout输出即可
<3>用户输入结果
在我自己测试时,正确结果都是分数,所在在编写程序时偷了懒。必须依次读入2个整数,分别作为分子分母。在助教检查时,发现了问题,用户不能输入整数作为结果。
解决方法:将用户输入的结果存入字符串,检查其中是否含有'/'。如果有,表示用户输入的是分数,分别提取'/'前后作为分子分母;没有代表用户输入的是个整数,直接提取即可。
<4>统计结果
用户回答正确,将正确个数的寄存器加1
用户回答错误,记录题号和答案,错误个数寄存器加1,在用户答完全部题目后,打印输出。
另外,关于加分任务随机生成算式,我进行了尝试,结果不太令人满意。
我的想法是:
<1> 随机生成操作数个数n 例如:4
<2> i=1:4 3+
随机生成操作数和运算符 3+(3/2)*
3+(3/2)*4-
3+(3/2)*4-(3/4)
<3>最后结尾加上'=' 3+(3/2)*4-(3/4)=
这样看起来没有什么问题,但是实际上少了一大类的算式,拿我的例子来说,这样不能生成
“(3+(3/2))*4-(3/4)=”、“ 3+(3/2)*(4-(3/4))=”、" (3+(3/2))*(4-(3/4))="
这样的算式。
对于低优先级的运算,不能通过加括号的方式提升至高优先级,而这一部分在计算中非常常用。类似“6*((1/2)+(1/3))=”这样的算式,可以考察用户对于乘法分配律的熟练程度。这些都需要括号参与其中。最后也没想到好方法实现。
程序的模块设计不太合理=、=
在进行下一个项目时,要进行大面积改动