四则运算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的主要内容,如果未能解决你的问题,请参考以下文章

Java基础知识 自增自减运算符

如何在 python 中并行化以下代码片段?

20个简洁的 JS 代码片段

获取 badarith,[erlang,'+',[error,0],[],同时使用 Erlang 片段在 TSUNG 中执行算术运算

20194626 自动生成四则运算题第一版报告

20个简洁的 JS 代码片段