首先声明一下题目要求:中小学数学卷子自动生成程序。
提前已经设定好了一组用户数据,保存在了data.txt文档中,每个用户有自己的三个数据,账号,密码,对应的年级。输入账号和密码,若在data.txt中有此用户,则会在提醒用户输入生成题目数量。在题目数量输入完成后,会按照要求生成对应年级的数学公式,并为每一个账户创建一个文件夹,将生成的公式储存在以当前时间命名的txt文件中。例如18-9-25-10-30-59.txt,每次都会生成一个新的txt文件,文件生成后,可以将这个用户的年级切换到其他年级,并会再次要求生成题目数量,随后生成,和上述类似,这里不再重复。
小学题目
要求:只能有+,-,*./和(),每道题操作数个数1-5,操作数大小1-100,题目输入数量1-30。
我的结对编程合作者根据最多5个操作数入手,提前随机生成了5个1-100范围内的整型数据,之后,他根据操作数的个数,列举出了所有在已知操作数个数的情况下的括号可能存在的所有情况。如下:
switch(rand()%4){
case 0:
outfile<<num1<<" ";
User();
outfile<<num2<<" "<<"="<<endl;
break;
case 1:
(后面的的代码过长,就不显示了)至于运算符随机后case就行了。
初中题目
要求:题目中至少有一个平方或开根号的运算符。
其实和小学实现差不多,多了一个对操作数的操作,他的函数里switch(rand()%3),随机3种情况,第一种,返回^2,第二种,返回^0.5,第三种,返回本身。其余的仍按照小学的来做。
高中题目
要求:题目中至少有一个sin,cos或tan的运算符
好吧,其实初中和高中的差别并不大,同样的道理,同样的方法,同样的操作,更改一下里面的操作符和数学运算,高中的就搞定了。
总的要求:检查生成的题目,避免题目与本账号文件夹下的其他txt文档的内容重复。
没实现。
总的来看一下,他用的方法很简单,列举出所有的情况,一条一条的写就行了,看起来不是很高大上,但是很实用。我被()的放置折磨了好久,可就是没想到这种方法。但是很显然,缺点也是有的,这个程序的拓展性并不好。在操作数为1-5个的情况下还可以列举出来所有的括号,但是如果操作数的数量增加到了10个了呢?难道还是一一列举吗?当然不行,不过在题目要求的前提下,他的方法确实是我所见到的做好的。
原文地址:https://www.cnblogs.com/ant-jia/p/9709184.html