课堂上老师要求我们做这样一个题目,题目要求是自动生成30道四则运算题目,要求除整数加减乘除外,还有真分数加减乘除。刚开始听到这个题目一头雾水,有点复杂,但仔细拆分这个题目不难发现,这个题目可以简化成三个小问题,分别是随机数自动生成两个数,自动生成符号,还有输出结果。对于随机数自动生成两个数可以简化为随机数生成整数,随机数生成真分数,生成真分数可以简化到随机数生成分子和分母。对于自动生成符号,也可以简化为随机数生成1,2,3,4,分别代表+,—,*,/,输出结果可以用一个for循化,实现输出30道题,另外还有几个小问题,例如第一是,真分数分子小于分母,第二是,生成的数中有0存在,不能做分母,需要用if语句做判断。
下面是实现问题的代码:
1 //课堂练习,题目自动生成四则运算题目,题目要求除整数加减乘除外,还有真分数加减乘除。2016.3.3,杨超群 2 #include<iostream> 3 #include<time.h> 4 using namespace std; 5 float num[6]; 6 void sort(){ //生成随机数 7 num[0]=rand()%100; 8 num[1]=rand()%100; 9 num[2]=rand()%100; 10 num[3]=rand()%100; 11 for(int i=0;i<4;i++){ 12 for(int j=0;j<i;j++){ 13 if(num[i]>num[j]) 14 { 15 int temp=0; 16 temp=num[i]; 17 num[i]=num[j]; 18 num[j]=temp; 19 } 20 } 21 } 22 } 23 void main(){ 24 srand((unsigned)time(NULL)); 25 for(int i=0;i<30;i++){ 26 sort(); 27 num[4]=rand()%4+1; 28 num[5]=rand()%2+1; 29 if(num[4]==1){ 30 if(num[5]==1) 31 cout<<num[1]<<"+"<<num[2]<<"="<<endl; 32 else{ 33 for(;;){ 34 if(num[0]==0||num[1]==0) 35 sort(); 36 else{ 37 cout<<"("<<num[2]<<"/"<<num[0]<<")"<<"+"<<"("<<num[3]<<"/"<<num[1]<<")"<<"="<<endl; 38 break; 39 } 40 } 41 } 42 } 43 else if(num[4]==2){ 44 if(num[5]==1) 45 cout<<num[1]<<"-"<<num[2]<<"="<<endl; 46 else{ 47 for(;;){ 48 if(num[0]==0||num[1]==0) 49 sort(); 50 else{ 51 cout<<"("<<num[2]<<"/"<<num[0]<<")"<<"-"<<"("<<num[3]<<"/"<<num[1]<<")"<<"="<<endl; 52 break; 53 } 54 } 55 } 56 } 57 else if(num[4]==3){ 58 if(num[5]==1) 59 cout<<num[1]<<"*"<<num[2]<<"="<<endl; 60 else{ 61 for(;;){ 62 if(num[0]==0||num[1]==0) 63 sort(); 64 else{ 65 cout<<"("<<num[2]<<"/"<<num[0]<<")"<<"*"<<"("<<num[3]<<"/"<<num[1]<<")"<<"="<<endl; 66 break; 67 } 68 } 69 } 70 } 71 else if(num[4]==4){ 72 if(num[5]==1){ 73 for(;;){ 74 if(num[2]==0) 75 sort(); 76 else{ 77 cout<<num[1]<<"/"<<num[2]<<"="<<endl; 78 break; 79 } 80 } 81 } 82 else{ 83 for(;;){ 84 if(num[0]==0||num[1]==0||num[3]==0) 85 sort(); 86 else{ 87 cout<<"("<<num[2]<<"/"<<num[0]<<")"<<"/"<<"("<<num[3]<<"/"<<num[1]<<")"<<"="<<endl; 88 break; 89 } 90 } 91 } 92 } 93 } 94 }