1.任务要求:对之前的自动出题系统提出了新的要求:
(1)、题目避免重复;(2)、可定制(数量/打印方式);(3)可以控制下列参数:是否有乘除法、是否有括号(最多可以支持是个数参与计算)、数值范围、加减有无负数、 除 法有无余数、
2.设计思路:(1)主函数中有一个大循环,其中主框架是一个switch语句构成的,可以在四中运算中设置不同的要求并加以 实现。并使程序可以循环运行,即用户可以循环使用;
(2)避免重复:可以使用srand函数确保产生的随机数不相同;
(3)定制数量/打印方式:每一次循环会出n道题目,每行有num道题目,添加变量N,num,其数值由用户确定;
(4)乘除法选择:有无乘除法,加一个变量mul,设置其值并在switch语句中使用,若有乘除法则执行rand()%4,产生 四种运算符号,反之产生加减两种运算;
(5)数值范围:两个运算数为可以随便设置范围,其中用判断语句确保除法中除数不等于0;减法中被减数大于减数;
(6)除法是否有余数/是否支持分数:添加函数,利用判断语句设定,当题目是除法时如果不能除尽则重新生成题目,直到余数为零,在主函数合适位置处调用添加函 数,使用户可以进行选择题目中是否包含分数的运算数,如果包括可以重新设置两个运算数变量的格式改为分数,反之不用做处理,并对此函数进行调用。
3 源代码
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 7 void main() 8 { 9 cout << "欢迎进入四则运算出题系统!" << endl; 10 cout << "*****************************************" << endl; 11 char g='Y',mod; 12 while (g == 'Y') 13 { 14 cout << "此系统分为两个模块,请进行选择:(A.整数 or B.分数)"; 15 cin >> mod; 16 if (mod == 'A') 17 { 18 int N,max,min,num,j; 19 char mul,neg,rem; 20 srand((unsigned)time(NULL)); 21 cout << "请输入要生成的题目数量N:"; 22 cin >> N; 23 cout << "打印参数num(每一行有num道题目):"; 24 cin >> num; 25 cout << "运算数的范围上限max:"; 26 cin >> max; 27 cout << "运算数的范围下限min:"; 28 cin >> min; 29 cout << "您是否希望题目中出现乘除运算?(Y(是)or N(否)):"; 30 cin >> mul; 31 cout << "您是否希望减法题目中出现负数?(Y(是)or N(否)):"; 32 cin >> neg; 33 cout << "您是否希望除法题目中出现余数?(Y(是)or N(否)):"; 34 cin >> rem; 35 for (int k=0;k > N;105 cout << "打印参数num(每一行有num道题目):";106 cin >> num;107 cout << "运算数的分子和分母的范围上限max:";108 cin >> max;109 cout << "运算数的分子和分母的范围下限min:";110 cin >> min;111 cout << "您是否希望题目中出现乘除运算?(Y(是)or N(否)):";112 cin >> mul;113 cout << "您是否希望减法题目中出现负数?(Y(是)or N(否)):";114 cin >> neg;115 for (int k=0;k > g;165 cout << "*****************************************" << endl;166 }167 168 cout << "感谢您的使用,再见!";169 }
由于时间有限、自己能力欠缺、 在是否有括号这一功能上并没有显现。在以后的时间里自己会对这程序做出改进。