题目
写一个能自动生成小学四则运算题目的命令行"软件",分别满足下列各种需求。下面这些需求都可以用命令行参数的形式来指定:
A)除了整数以外,还支持真分数的运算。(例如1/6+1/8=7/24)。
B)让程序能接受用户输入的答案,并判断对错。最后给出总对/错的数量。
C)逐步扩展功能和可以支持的表达式类型,最后希望能支持下面类型的题目(最多10个运算符,括号的数量不限制):
25-3*4-2/2+89=? 1/2+1/3-1/4=? (5-4)*(3+28)=?
D)一次可以批量出100道以上的题目,保存在文本文件中,并且保证题目不能重复,(1+2)和(2+1)是重复的题目,怎么保证题目不能重复呢,请看详细题目要求。
和同学们比较一下各自程序的功能、性能、实现方法的异同等等。
解:首先接到这个题目的时候,我还比较开心的。因为我之前做过类似的题目,即计算器的MFC的应用。所以,这道题对于我来说难度还是一般的。但是其中的一些细节问题我处理的不是很好,我放弃了MFC设计方案,转为结构化程序的编辑。
第一:解题。这是一个四则运算的题目。其中包括随机数和随机运算符的生成、对其进行计算、列出题目、回答正确和错误的打印信息。
第二:写代码。这里我只列出了回答正确打印信息的代码,主要是自己代码写的不是很漂亮,还需要进一步地加强。
void correctPrint(int number)
{switch(num)
{case 1:
printf("You're right!\n");break;
case 2:
printf("It's OK!\n");break;
case 3:
printf("Correct!\n");break;
case 4:
printf("Perfect!\n");break;
case 5:
printf("Good!\n");break;
default:
printf("Powerful!\n");break;
}
}
第三:以下是我参考的一些文献,我看了之后有了想法。
程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
第四:生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。生成的题目中如果存在形如e1 ÷e2的子表达式,那么其结果应是真分数。每道题目中出现的运算符个数不超过3个。
第五:生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下: 1. 四则运算题目1 2. 四则运算题目2 …… 其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。