四则运算2
设计思想:
编写函数产生操作数、运算符、括号。
随机表达式长度 随机加括号 加随机操作数 运算符 。
加括号时,必须先有左括号 才有可能有右括号。
注: 除法有无余数功能没有及时实现,我会稍后补上。
打印功能在功能完善后一并补上。
1 /*2013/3/12 李萌 20133079 */ 2 #include <iostream> 3 #include <ctime> 4 using namespace std; 5 void Opreands_1() /*产生操作数 (-9 -- 9)除0*/ 6 { 7 while(int f=1) 8 { 9 int Oper=rand()%19-9; 10 if(Oper>0) /*没有0*/ 11 { 12 cout<<Oper; 13 break; 14 } 15 if(Oper<0) 16 { 17 cout<<"("<<Oper<<")"; 18 break; 19 } 20 } 21 } 22 void Operands_2()/*-9到9 有0*/ 23 { 24 while(int f=1) /*产生操作数 (-9 -- 9)*/ 25 { 26 int Oper=rand()%19-9; 27 if(Oper>=0)/*有0*/ 28 { 29 cout<<Oper; 30 break; 31 } 32 else 33 { 34 cout<<"("<<Oper<<")"; 35 break; 36 } 37 } 38 } 39 void Operator_1()/*随机产生运算符 有乘除*/ 40 { 41 int f=rand()%4; 42 if(f==0) 43 { 44 cout<<"+"; 45 } 46 if(f==1) 47 { 48 cout<<"-"; 49 } 50 if(f==2) 51 { 52 cout<<"*"; 53 } 54 if(f==3) 55 { 56 cout<<"÷"; 57 } 58 } 59 void Operator_2()/*随机产生运算符 无乘除*/ 60 { 61 int f=rand()%2; 62 if(f==0) 63 { 64 cout<<"+"; 65 } 66 if(f==1) 67 { 68 cout<<"-"; 69 } 70 } 71 int Bracket_l(int left) /*随机产生左括号*/ 72 { 73 int f=rand()%3; 74 if(f<2) 75 { 76 return left; 77 } 78 if(f==2) 79 { 80 cout<<"("; 81 return left+1; 82 } 83 } 84 int Bracket_r(int right) /*随机产生右括号*/ 85 { 86 int r=rand()%5; 87 if(r==0) 88 { 89 return right; 90 } 91 if(r>0) /*产生右括号的概率大 */ 92 { 93 cout<<")"; 94 return right+1; 95 } 96 } 97 void Way_1() /*最多可支持10个数参与计算 有乘除 有括号 10以内 加减有负数 除法有余数*/ 98 { 99 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 100 int left=0,right=0,flag=0,left_1; 101 for(int i=0;i<length-1;i++) 102 { 103 left_1=left; 104 left=Bracket_l(left); 105 if(left_1!=left) /*产生了左括号 flag=i*/ 106 { 107 flag=i; 108 } 109 Opreands_1(); 110 if(left>right&&flag!=i) /*左括号大于右括号的个数 and 产生左括号和右括号不在一个循环里 即不会产生“(随机数)” 这种无效情况*/ 111 { 112 right=Bracket_r(right); 113 } 114 Operator_1(); /*有乘除*/ 115 } 116 Opreands_1(); /*因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/ 117 for(int i=0;i<left-right;i++) 118 { 119 cout<<")"; 120 } 121 cout<<" = "<<endl; 122 } 123 void Way_2()/*最多可支持10个数参与计算 无乘除 有括号 10以内 加减有负数 除法有余数*/ 124 { 125 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 126 int left=0,right=0,flag=0,left_1; 127 for(int i=0;i<length-1;i++) 128 { 129 left_1=left; 130 left=Bracket_l(left); 131 if(left_1!=left) /*产生了左括号 flag=i*/ 132 { 133 flag=i; 134 } 135 Operands_2(); /*产生操作数 (-9 -- 9)*/ 136 if(left>right&&flag!=i) /*左括号大于右括号的个数 and 产生左括号和右括号不在一个循环里 即不会产生“(随机数)” 这种无效情况*/ 137 { 138 right=Bracket_r(right); 139 } 140 Operator_2();/*无乘除*/ 141 } 142 Operands_2(); /*因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/ 143 for(int i=0;i<left-right;i++) 144 { 145 cout<<")"; 146 } 147 cout<<" = "<<endl; 148 } 149 void Way_3() /*最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数*/ 150 { 151 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 152 int left=0,right=0,flag=0,left_1; 153 for(int i=0;i<length-1;i++) 154 { 155 Opreands_1(); /*-9-9除0*/ 156 Operator_1(); /*有乘除*/ 157 } 158 Opreands_1(); /* 因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/ 159 cout<<" = "<<endl; 160 } 161 void Way_4() /*最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数*/ 162 { 163 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 164 int left=0,right=0,flag=0,left_1; 165 for(int i=0;i<length-1;i++) 166 { 167 Operands_2(); /*产生操作数 (-9 -- 9)*/ 168 Operator_2(); /*无乘除*/ 169 } 170 Operands_2(); /* 因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/ 171 cout<<" = "<<endl; 172 } 173 void Way_5() /*最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) 0-9 加减有负数 除法有余数*/ 174 { 175 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 176 int left=0,right=0,flag=0,left_1; 177 for(int i=0;i<length-1;i++) 178 { 179 cout<<rand()%9+1; /*1-9除0*/ 180 Operator_1(); /*有乘除*/ 181 } 182 cout<<rand()%9+1; /* 因为 一个操作数一个运算符 还缺少一个操作数 (1 -- 9)*/ 183 cout<<" = "<<endl; 184 } 185 void Way_6() /*最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) 0到9 加减有负数 除法有余数*/ 186 { 187 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 188 int left=0,right=0,flag=0,left_1; 189 for(int i=0;i<length-1;i++) 190 { 191 cout<<rand()%10; /*产生操作数 (0-- 9)*/ 192 Operator_2(); /*无乘除*/ 193 } 194 cout<<rand()%10; /* 因为 一个操作数一个运算符 还缺少一个操作数 (0-- 9)*/ 195 cout<<" = "<<endl; 196 } 197 void main() /*主函数*/ 198 { 199 srand((unsigned)time(0)); 200 cout<<"--------------------------------------------------------------------------"<<endl; 201 cout<<"最多可支持10个数参与计算 有乘除 有括号 -9到9 加减有负数 除法有余数"<<endl; 202 for(int num=0;num<30;num++) 203 { 204 cout<<num+1<<"、 "; 205 Way_1(); 206 } 207 cout<<"--------------------------------------------------------------------------"<<endl; 208 cout<<"最多可支持10个数参与计算 无乘除 有括号 -9到9 加减有负数 除法有余数"<<endl; 209 for(int num=0;num<30;num++) 210 { 211 cout<<num+1<<"、 "; 212 Way_2(); 213 } 214 cout<<"--------------------------------------------------------------------------"<<endl; 215 cout<<"最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数"<<endl; 216 for(int num=0;num<30;num++) 217 { 218 cout<<num+1<<"、 "; 219 Way_3(); 220 } 221 cout<<"--------------------------------------------------------------------------"<<endl; 222 cout<<"最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数"<<endl; 223 for(int num=0;num<30;num++) 224 { 225 cout<<num+1<<"、 "; 226 Way_4(); 227 } 228 cout<<"最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) 0到9 加减有负数 除法有余数"<<endl; 229 for(int num=0;num<30;num++) 230 { 231 cout<<num+1<<"、 "; 232 Way_5(); 233 } 234 cout<<"最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) 0到9 加减有负数 除法有余数"<<endl; 235 for(int num=0;num<30;num++) 236 { 237 cout<<num+1<<"、 "; 238 Way_6(); 239 } 240 }
/*2013/3/12 李萌 20133079 */
#include <iostream>
#include <ctime>
using namespace std;
void Opreands_1() /*产生操作数 (-9 -- 9)除0*/
{
while(int f=1)
{
int Oper=rand()%19-9;
if(Oper>0) /*没有0*/
{
cout<<Oper;
break;
}
if(Oper<0)
{
cout<<"("<<Oper<<")";
break;
}
}
}
void Operands_2()/*-9到9 有0*/
{
while(int f=1) /*产生操作数 (-9 -- 9)*/
{
int Oper=rand()%19-9;
if(Oper>=0)/*有0*/
{
cout<<Oper;
break;
}
else
{
cout<<"("<<Oper<<")";
break;
}
}
}
void Operator_1()/*随机产生运算符 有乘除*/
{
int f=rand()%4;
if(f==0)
{
cout<<"+";
}
if(f==1)
{
cout<<"-";
}
if(f==2)
{
cout<<"*";
}
if(f==3)
{
cout<<"÷";
}
}
void Operator_2()/*随机产生运算符 无乘除*/
{
int f=rand()%2;
if(f==0)
{
cout<<"+";
}
if(f==1)
{
cout<<"-";
}
}
int Bracket_l(int left) /*随机产生左括号*/
{
int f=rand()%3;
if(f<2)
{
return left;
}
if(f==2)
{
cout<<"(";
return left+1;
}
}
int Bracket_r(int right) /*随机产生右括号*/
{
int r=rand()%5;
if(r==0)
{
return right;
}
if(r>0) /*产生右括号的概率大 */
{
cout<<")";
return right+1;
}
}
void Way_1() /*最多可支持10个数参与计算 有乘除 有括号 10以内 加减有负数 除法有余数*/
{
int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/
int left=0,right=0,flag=0,left_1;
for(int i=0;i<length-1;i++)
{
left_1=left;
left=Bracket_l(left);
if(left_1!=left) /*产生了左括号 flag=i*/
{
flag=i;
}
Opreands_1();
if(left>right&&flag!=i) /*左括号大于右括号的个数 and 产生左括号和右括号不在一个循环里 即不会产生“(随机数)” 这种无效情况*/
{
right=Bracket_r(right);
}
Operator_1(); /*有乘除*/
}
Opreands_1(); /*因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/
for(int i=0;i<left-right;i++)
{
cout<<")";
}
cout<<" = "<<endl;
}
void Way_2()/*最多可支持10个数参与计算 无乘除 有括号 10以内 加减有负数 除法有余数*/
{
int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/
int left=0,right=0,flag=0,left_1;
for(int i=0;i<length-1;i++)
{
left_1=left;
left=Bracket_l(left);
if(left_1!=left) /*产生了左括号 flag=i*/
{
flag=i;
}
Operands_2(); /*产生操作数 (-9 -- 9)*/
if(left>right&&flag!=i) /*左括号大于右括号的个数 and 产生左括号和右括号不在一个循环里 即不会产生“(随机数)” 这种无效情况*/
{
right=Bracket_r(right);
}
Operator_2();/*无乘除*/
}
Operands_2(); /*因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/
for(int i=0;i<left-right;i++)
{
cout<<")";
}
cout<<" = "<<endl;
}
void Way_3() /*最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数*/
{
int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/
int left=0,right=0,flag=0,left_1;
for(int i=0;i<length-1;i++)
{
Opreands_1(); /*-9-9除0*/
Operator_1(); /*有乘除*/
}
Opreands_1(); /* 因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/
cout<<" = "<<endl;
}
void Way_4() /*最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数*/
{
int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/
int left=0,right=0,flag=0,left_1;
for(int i=0;i<length-1;i++)
{
Operands_2(); /*产生操作数 (-9 -- 9)*/
Operator_2(); /*无乘除*/
}
Operands_2(); /* 因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/
cout<<" = "<<endl;
}
void Way_5() /*最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) 0-9 加减有负数 除法有余数*/
{
int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/
int left=0,right=0,flag=0,left_1;
for(int i=0;i<length-1;i++)
{
cout<<rand()%9+1; /*1-9除0*/
Operator_1(); /*有乘除*/
}
cout<<rand()%9+1; /* 因为 一个操作数一个运算符 还缺少一个操作数 (1 -- 9)*/
cout<<" = "<<endl;
}
void Way_6() /*最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) 0到9 加减有负数 除法有余数*/
{
int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/
int left=0,right=0,flag=0,left_1;
for(int i=0;i<length-1;i++)
{
cout<<rand()%10; /*产生操作数 (0-- 9)*/
Operator_2(); /*无乘除*/
}
cout<<rand()%10; /* 因为 一个操作数一个运算符 还缺少一个操作数 (0-- 9)*/
cout<<" = "<<endl;
}
void main() /*主函数*/
{
srand((unsigned)time(0));
cout<<"--------------------------------------------------------------------------"<<endl;
cout<<"最多可支持10个数参与计算 有乘除 有括号 -9到9 加减有负数 除法有余数"<<endl;
for(int num=0;num<30;num++)
{
cout<<num+1<<"、 ";
Way_1();
}
cout<<"--------------------------------------------------------------------------"<<endl;
cout<<"最多可支持10个数参与计算 无乘除 有括号 -9到9 加减有负数 除法有余数"<<endl;
for(int num=0;num<30;num++)
{
cout<<num+1<<"、 ";
Way_2();
}
cout<<"--------------------------------------------------------------------------"<<endl;
cout<<"最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数"<<endl;
for(int num=0;num<30;num++)
{
cout<<num+1<<"、 ";
Way_3();
}
cout<<"--------------------------------------------------------------------------"<<endl;
cout<<"最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数"<<endl;
for(int num=0;num<30;num++)
{
cout<<num+1<<"、 ";
Way_4();
}
cout<<"最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) 0到9 加减有负数 除法有余数"<<endl;
for(int num=0;num<30;num++)
{
cout<<num+1<<"、 ";
Way_5();
}
cout<<"最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) 0到9 加减有负数 除法有余数"<<endl;
for(int num=0;num<30;num++)
{
cout<<num+1<<"、 ";
Way_6();
}
}