四则运算2
Posted 小青年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四则运算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 cout<<" = "<<endl; 118 } 119 void Way_2()/*最多可支持10个数参与计算 无乘除 有括号 10以内 加减有负数 除法有余数*/ 120 { 121 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 122 int left=0,right=0,flag=0,left_1; 123 for(int i=0;i<length-1;i++) 124 { 125 left_1=left; 126 left=Bracket_l(left); 127 if(left_1!=left) /*产生了左括号 flag=i*/ 128 { 129 flag=i; 130 } 131 Operands_2(); /*产生操作数 (-9 -- 9)*/ 132 if(left>right&&flag!=i) /*左括号大于右括号的个数 and 产生左括号和右括号不在一个循环里 即不会产生“(随机数)” 这种无效情况*/ 133 { 134 right=Bracket_r(right); 135 } 136 Operator_2();/*无乘除*/ 137 } 138 Operands_2(); /*因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/ 139 for(int i=0;i<left-right;i++) 140 { 141 cout<<")"; 142 } 143 cout<<" = "<<endl; 144 } 145 void Way_3() /*最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数*/ 146 { 147 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 148 int left=0,right=0,flag=0,left_1; 149 for(int i=0;i<length-1;i++) 150 { 151 Opreands_1(); /*-9-9除0*/ 152 Operator_1(); /*有乘除*/ 153 } 154 Opreands_1(); /* 因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/ 155 cout<<" = "<<endl; 156 } 157 void Way_4() /*最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数*/ 158 { 159 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 160 int left=0,right=0,flag=0,left_1; 161 for(int i=0;i<length-1;i++) 162 { 163 Operands_2(); /*产生操作数 (-9 -- 9)*/ 164 Operator_2(); /*无乘除*/ 165 } 166 Operands_2(); /* 因为 一个操作数一个运算符 还缺少一个操作数 (-9 -- 9)*/ 167 cout<<" = "<<endl; 168 } 169 void Way_5() /*最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) 0-9 加减有负数 除法有余数*/ 170 { 171 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 172 int left=0,right=0,flag=0,left_1; 173 for(int i=0;i<length-1;i++) 174 { 175 cout<<rand()%9+1; /*1-9除0*/ 176 Operator_1(); /*有乘除*/ 177 } 178 cout<<rand()%9+1; /* 因为 一个操作数一个运算符 还缺少一个操作数 (1 -- 9)*/ 179 cout<<" = "<<endl; 180 } 181 void Way_6() /*最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) 0到9 加减有负数 除法有余数*/ 182 { 183 int length=rand()%9+2; /*随机产生表达式中操作数的个数 2-10 个*/ 184 int left=0,right=0,flag=0,left_1; 185 for(int i=0;i<length-1;i++) 186 { 187 cout<<rand()%10; /*产生操作数 (0-- 9)*/ 188 Operator_2(); /*无乘除*/ 189 } 190 cout<<rand()%10; /* 因为 一个操作数一个运算符 还缺少一个操作数 (0-- 9)*/ 191 cout<<" = "<<endl; 192 } 193 void main() /*主函数*/ 194 { 195 srand((unsigned)time(0)); 196 cout<<"--------------------------------------------------------------------------"<<endl; 197 cout<<"最多可支持10个数参与计算 有乘除 有括号 -9到9 加减有负数 除法有余数"<<endl; 198 for(int num=0;num<30;num++) 199 { 200 cout<<num+1<<"、 "; 201 Way_1(); 202 } 203 cout<<"--------------------------------------------------------------------------"<<endl; 204 cout<<"最多可支持10个数参与计算 无乘除 有括号 -9到9 加减有负数 除法有余数"<<endl; 205 for(int num=0;num<30;num++) 206 { 207 cout<<num+1<<"、 "; 208 Way_2(); 209 } 210 cout<<"--------------------------------------------------------------------------"<<endl; 211 cout<<"最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数"<<endl; 212 for(int num=0;num<30;num++) 213 { 214 cout<<num+1<<"、 "; 215 Way_3(); 216 } 217 cout<<"--------------------------------------------------------------------------"<<endl; 218 cout<<"最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) -9到9 加减有负数 除法有余数"<<endl; 219 for(int num=0;num<30;num++) 220 { 221 cout<<num+1<<"、 "; 222 Way_4(); 223 } 224 cout<<"最多可支持10个数参与计算 有乘除 无括号(负数用括号括起来) 0到9 加减有负数 除法有余数"<<endl; 225 for(int num=0;num<30;num++) 226 { 227 cout<<num+1<<"、 "; 228 Way_5(); 229 } 230 cout<<"最多可支持10个数参与计算 无乘除 无括号(负数用括号括起来) 0到9 加减有负数 除法有余数"<<endl; 231 for(int num=0;num<30;num++) 232 { 233 cout<<num+1<<"、 "; 234 Way_6(); 235 } 236 }
以上是关于四则运算2的主要内容,如果未能解决你的问题,请参考以下文章
获取 badarith,[erlang,'+',[error,0],[],同时使用 Erlang 片段在 TSUNG 中执行算术运算