1 #include<iostream> 2 #include<string> 3 #include<stdlib.h> 4 #include<time.h> 5 using namespace std; 6 int randnum2(int min,int max) //获得随机数 7 { 8 int ranum=0; 9 ranum=rand(); 10 while(ranum>max) 11 { 12 ranum%=max;//保证min<b<max 13 if(ranum<min) 14 { 15 ranum=rand(); 16 } 17 } 18 return ranum; 19 } 20 double answer(int ope,double num1,double num2) 21 { 22 double ans=0; 23 if(ope==0) 24 { 25 ans=num1+num2; 26 } 27 if(ope==1) 28 { 29 ans=num1-num2; 30 } 31 if(ope==2) 32 { 33 ans=num1*num2; 34 } 35 if(ope==3) 36 { 37 ans=num1/num2; 38 } 39 return ans; 40 } 41 double question(int max,int min,int numam) 42 { 43 int a[100],i=2,j=0,num=0; 44 double b[100]; 45 string str="+-*/"; 46 num=randnum2(i,numam); 47 i=0; 48 while(i<=num*3) // 初始化数组 49 { 50 a[i]=randnum2(min,max); 51 b[i]=a[i]; 52 i++; 53 } 54 while(j<=num*3) 55 { 56 a[j]%=4;//运算符 57 a[j+1]%=2;//括号 58 if(a[j+1]==1) 59 { 60 a[j+4]=-1; 61 } 62 j+=3; 63 } 64 65 //测试 66 int t=0; 67 //测试1111111111111111 68 i=0; 69 j=1; 70 while(j<=num*3) //输出式子 71 { 72 if(a[j]==1&&j<num*3-3&&a[j+2]!=2&&a[j+2]!=3)cout<<"("; 73 cout<<a[j+1]; 74 if(a[j-3]==1&&j>3&&a[j-1]!=2&&a[j-1]!=3)cout<<")"; 75 if(j<(num*3-3))cout<<str[a[j+2]]; 76 j+=3; 77 } 78 79 j=1; 80 while(j<=num*3-3) //计算括号 81 { 82 if(a[j]==1&&j<num*3-3&&a[j+2]!=2&&a[j+2]!=3) 83 { 84 b[j+1]=answer(a[j+2],b[j+1],b[j+4]); 85 a[j+1]=b[j+1]; 86 for(int i=j+2;i<num*3-3;i++) 87 { 88 a[i]=a[i+3]; 89 b[i]=b[i+3]; 90 } 91 num-=1; 92 } 93 j+=3; 94 } 95 j=1; 96 while(j<=num*3-3) //计算乘除 97 { 98 if(a[j+2]==2||a[j+2]==3) 99 { 100 101 b[j+1]= answer(a[j+2],b[j+1],b[j+4]); 102 for(int i=j+2;i<num*3-3;i++) 103 { 104 a[i]=a[i+3]; 105 b[i]=b[i+3]; 106 } 107 num-=1; 108 j-=3; 109 } 110 j+=3; 111 } 112 j=1; 113 double ans=0,m=0; 114 while(j<=num*3) 115 { 116 m=b[j+1]; 117 if(a[j+2]==1) 118 { 119 ans=ans-m; 120 } 121 else 122 { 123 ans=ans+m; 124 } 125 j+=3; 126 } 127 return ans; 128 } 129 int main() 130 { 131 int quam=5,max=9, min=3,numam=5; 132 //输入生成题目的条件 133 cout<<"一共出几道题:"; 134 cin>>quam; 135 cout<<"最多几个数(10个数之间):"; 136 cin>>numam; 137 cout<<"数值范围:\n最大值:"; 138 cin>>max; 139 cout<<"最小值:"; 140 cin>>min; 141 //结束输入生成题目的条件 142 int i=1; 143 double ansin; 144 while(quam--) //循环一次生成一道题 145 { 146 cout<<"No."<<i++<<":"; //题目计数器 147 double ans=question( max, min,numam); 148 cout<<"="; 149 cin>>ansin; 150 cout<<"你输入的数为:"<<ansin<<endl; 151 ansin=ansin-ans; 152 if(ansin<0) 153 { 154 ansin=-ansin; 155 } 156 if(ansin<0.1) 157 { 158 cout<<"good!!"<<endl; 159 } 160 else 161 { 162 cout<<"回答错误!!!正确答案为:"<<ans<<endl; 163 } 164 } 165 return 0; 166 }
实验结果:
1.生成3道最多5个数取值范围在2~9之间的四则运算式
2.生成3道最多6个数取值范围在4~9之间的四则运算式
注:结队开发组员:刘伟
原文:http://www.cnblogs.com/jiajun1/p/5295364.html