四则运算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();
    }
}

原文地址:https://www.cnblogs.com/L-Damon-v/p/5269525.html