题目要求:生成简单的四则运算,且不超过两位数,包含分数,且为真分数,随机生成30道题目。
问题细化:
1.随机生成第一个数。
2.随机生成加减乘除。
3.随机生成第二个数。
4.循环30次输出四则运算。
具体实现:
1.利用随机函数(rand()%(b-a+1))+a,随机生成[a,b]范围的数,设定范围为[1,100],由于题目要求四则运算范围为两位数,所以,当num_1为两位数时,直接将其输出,当生成的随机值为num_1=100时,让num_1生成真分数,具体实现为:让num_1再次生成一次作为分子,让num_11生成的范围为[num_1,99],作为分母。最后将其以(num_1/num_11)真分数的形式输出。至此第一个随机数输出完毕。
2.利用随机函数生成num_3,使其范围为[0,100]之间的整数,然后对num_3除4取余数,判断其余数的值,若为0,则输出运算符为“+”;若为1,则输出运算符为“-”;若为2,则输出运算符为“*”;若为3,则输出运算符为“/”。至此符号已经输出。
3.随机生成第二个随机数的方式与生成第一个随机数的方式一样。
4.循环30次,由于循环30次时,输出的四则运算时可能相同,所以将srand((unsigned)time(NULL))时间种子,放在for循环之外,避免了生成四则运算式相同。
具体代码:
1 #include<iostream> 2 #include<string> 3 #include<stdlib.h> 4 #include<time.h> 5 #include<iomanip> 6 7 using namespace std; 8 void main() 9 { 10 int i; 11 srand((unsigned)time(NULL)); 12 for (i = 1; i < 31; i++) 13 { 14 string fu; 15 int num_1, num_2,num_3; 16 int num_11, num_21; 17 num_1 = (rand() %(100))+1 ;//生成第一个随机数 18 if (num_1 == 100){ 19 num_1 = (rand() % 99)+1; 20 num_11 = num_1 + (rand() %( 99-num_1+1)); 21 cout << "(" << num_1 << "/" << num_11 << ")"; 22 } 23 else cout << num_1; 24 num_3 = (rand() % 100)%4;//生成运算符 25 if (num_3 == 0) fu = ‘+‘; 26 else if (num_3 == 1) fu = ‘-‘; 27 else if (num_3 == 2) fu = ‘*‘; 28 else fu = ‘/‘; 29 cout << fu; 30 num_2 = 1+rand() % (100);//生成第二个随机数 31 if (num_2 == 100){ 32 num_2 = (rand() % 99)+1; 33 num_21 = num_2 + (rand() % (99-num_2+1)); 34 cout << "(" << num_2 << "/" << num_21 << ")"; 35 } 36 else cout << num_2; 37 cout << "="; 38 cout << "\t"; 39 cout << endl; 40 } 41 42 }
运算结果:
至此,一个简单的四则运算生成式,就生成了,采用分割的办法化整为零,大大降低了编程的难度。
时间: 2024-11-09 07:40:14