标签:
1.任务要求:对之前的自动出题系统提出了新的要求:
(1)、题目避免重复;(2)、可定制(数量/打印方式);(3)可以控制下列参数:是否有乘除法、是否有括号(最多可以支持是个数参与计算)、数值范围、加减有无负数、 除 法有无余数、
2.设计思路:(1)主函数中有一个大循环,其中主框架是一个switch语句构成的,可以在四中运算中设置不同的要求并加以 实现。并使程序可以循环运行,即用户可以循环使用;
(2)避免重复:可以使用srand函数确保产生的随机数不相同;
(3)定制数量/打印方式:每一次循环会出n道题目,每行有num道题目,添加变量N,num,其数值由用户确定;
(4)乘除法选择:有无乘除法,加一个变量mul,设置其值并在switch语句中使用,若有乘除法则执行rand()%4,产生 四种运算符号,反之产生加减两种运算;
(5)数值范围:两个运算数为可以随便设置范围,其中用判断语句确保除法中除数不等于0;减法中被减数大于减数;
(6)除法是否有余数/是否支持分数:添加函数,利用判断语句设定,当题目是除法时如果不能除尽则重新生成题目,直到余数为零,在主函数合适位置处调用添加函 数,使用户可以进行选择题目中是否包含分数的运算数,如果包括可以重新设置两个运算数变量的格式改为分数,反之不用做处理,并对此函数进行调用。
3 源代码
1 #include <iostream> 2 #include<stdlib.h> 3 #include <time.h> 4 #include<iomanip> 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;k++) 36 { 37 int a = rand()%(max-min+1) + min ; 38 int b = rand()%(max-min+1) + min ; 39 if (mul == ‘Y‘) 40 { 41 j = rand()%4 + 1; 42 } 43 if (mul == ‘N‘) 44 { 45 j = rand()%2 + 1; 46 } 47 switch(j) 48 { 49 case 1: 50 cout << setw(3) << a << "+" << setw(3) << b << "=" ; 51 break; 52 case 2: 53 if (neg == ‘N‘) 54 { 55 while (a <= b) 56 { 57 a = rand()%(max-min+1) + min ; 58 b = rand()%(max-min+1) + min ; 59 } 60 cout << setw(3) << a << "-" << setw(3) << b << "=" ;break; 61 } 62 else 63 { 64 cout << setw(3) << a << "-" << setw(3) << b << "=" ;break; 65 } 66 case 3: 67 cout << setw(3) << a << "*" << setw(3) << b << "=" ; 68 break; 69 case 4: 70 while (b == 0) 71 { 72 b = rand()%(max-min+1) + min ; 73 } 74 if (rem == ‘N‘) 75 { 76 while((a % b)!= 0) 77 { 78 a = rand()%(max-min+1) + min ; 79 b = rand()%(max-min+1) + min ; 80 } 81 cout << setw(3) << a << "/" << setw(3) << b << "=" ;break; 82 } 83 else 84 { 85 cout << setw(3) << a << "/" << setw(3) << b << "=" ;break; 86 } 87 } 88 if ( (k+1) % num == 0) 89 { 90 cout << endl; 91 } 92 else 93 { 94 cout << " "; 95 } 96 } 97 } 98 else 99 { 100 int N,max,min,num,j; 101 char mul,neg; 102 srand((unsigned)time(NULL)); 103 cout << "请输入要生成的题目数量N:"; 104 cin >> 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<N;k++) 116 { 117 int a1 = rand()%(max-min+1) + min ; 118 int a2 = rand()%(max-min+1) + min ; 119 int b1 = rand()%(max-min+1) + min ; 120 int b2 = rand()%(max-min+1) + min ; 121 while(a2==0 || b2==0) 122 { 123 a2 = rand()%(max-min+1) + min ; 124 b2 = rand()%(max-min+1) + min ; 125 } 126 if (mul == ‘Y‘) 127 { 128 j = rand()%4 + 1; 129 } 130 if (mul == ‘N‘) 131 { 132 j = rand()%2 + 1; 133 } 134 switch(j) 135 { 136 case 1: 137 cout << "(" << setw(2) << a1 << "/" << setw(2) << a2 << ")" << "+" << "(" << setw(2) << b1 << "/" << setw(2) << b2 << ")" << "="; 138 break; 139 case 2: 140 cout << "(" << setw(2) << a1 << "/" << setw(2) << a2 << ")" << "-" << "(" << setw(2) << b1 << "/" << setw(2) << b2 << ")" << "="; 141 break; 142 case 3: 143 cout << "(" << setw(2) << a1 << "/" << setw(2) << a2 << ")" << "*" << "(" << setw(2) << b1 << "/" << setw(2) << b2 << ")" << "="; 144 break; 145 case 4: 146 while (b1 == 0) 147 { 148 b1 = rand()%(max-min+1) + min ; 149 } 150 cout << "(" << setw(2) << a1 << "/" << setw(2) << a2 << ")" << "*" << "(" << setw(2) << b1 << "/" << setw(2) << b2 << ")" << "="; 151 break; 152 } 153 if ( (k+1) % num == 0) 154 { 155 cout << endl; 156 } 157 else 158 { 159 cout << " "; 160 } 161 } 162 } 163 cout << "您是否要继续答题?请输入:(Y(是)or N(否))"; 164 cin >> g; 165 cout << "*****************************************" << endl; 166 } 167 168 cout << "感谢您的使用,再见!"; 169 }
由于时间有限、自己能力欠缺、 在是否有括号这一功能上并没有显现。在以后的时间里自己会对这程序做出改进。
标签:
原文地址:http://www.cnblogs.com/Lw-1573/p/5268967.html