软件工程—四则运算

设计四则运算:

1、题目避免重复; 2、可定制(数量/打印方式); 3、可以控制下列参数: 是否有乘除法、数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …);

思路:

1.题目避免重复:随机产生三个数m,n,k,k用来判断是哪种运算,先判断是否重复(m,n,k同时进行判断),如果与前面的题目不重复就输出题目,将三个数都输入数组内,T用作记录存入题目个数,存入一个+1

2.I表示总题目数,J表示每页输出题目数

3.通过输入1 0决定是否有乘除法、数值范围、加减有无负数、除法有无余数,如果不满足要求就i-1进入下个i++循环

程序:

 

 

#include<iostream>
#define N 100          //控制在0-100之内
using namespace std;

void main()
 {
     cout<<"欢迎来做四则运算!"<<endl<<endl;
     double m,n,m1=0,n1=0,a[100000];       //m1,n1用于分数时
     int k,I,J,j=0,page=1,T=0;  //i,j是总题数和每页题数,一个T说明存入了一个题目
     cout<<"请输入你想输出的总题数和每页的题数:"<<endl;
     cin>>I>>J;
     cout<<"——————1.是否有乘除法?——————"<<endl;
     cout<<"——————2.加减是否有负数?——————"<<endl;
     cout<<"——————3.除法是否有小数?——————"<<endl;
     cout<<"——————4.是否支持分数?——————"<<endl;
     cout<<"——————有输入1,没有输入0,请依次输入:"<<endl;
     int chengchu,fushu,xiaoshu,fenshu;
     cin>>chengchu>>fushu>>xiaoshu>>fenshu;
     cout<<endl;
     for(int i=0;i<I;i++)
     {
         int t=0;
         if(j==J)                              //每页限定题数
         {
             cout<<endl<<endl<<endl<<endl;     
             j=0;           //下一页题数置为0
             page++;
         }
         if(j==0) cout<<""<<page<<"页:"<<endl;
         m=rand()%N;  //rand()随机产生一个数,范围在0-N之间
         n=rand()%N;
         do
         {
             m1=rand()%N;
             n1=rand()%N;
         }while(m1==0 || n1==0);
         int m_int=(int)m , n_int=(int)n;
         k=rand()%4;
         if(T!=0)
            for(int t=0;t<T;t++)
                if(m==a[3*t] && k==a[3*t+1] && n==a[3*t+2]) {t=1; break;} 
         if(t==1)   {i--;  continue;} //有相同题目产生 
         if(chengchu==0 && (k==2 || k==3)) {i--;  continue;}    //控制有无乘除法
         if(fushu==0 && (m<0 || n<0))   {i--;  continue;}         //控制有无负数
         if(k==3 && xiaoshu==0 && ( (m-m_int)!=0 || (n-n_int)!=0 ))  {i--;  continue;}  //除法是否有小数
         switch(k)
         {
             case 0:
            {
                if(j==1 && fushu==1)
                    cout<<"("<<j+1<<") (-"<<m<<")+(-"<<n<<")="<<endl;
                else if(j==3 && fenshu==1)
                    cout<<"("<<j+1<<") "<<m<<"/"<<m1<<" + "<<n<<"/"<<n1<<" ="<<endl;
                else cout<<"("<<j+1<<") "<<m<<"+"<<n<<"="<<endl;
                a[3*T]=m;  a[3*T+1]=k;  a[3*T+2]=n;          //将题目存入数组中
                j++;
                T++;
                break;
             }                    //需要中括号吗?还要break?
             case 1:
            {
                if(j==1 && fushu==1)
                    cout<<"("<<j+1<<") (-"<<m<<")-(-"<<n<<")="<<endl;
                else if(j==3 && fenshu==1)
                    cout<<"("<<j+1<<") "<<m<<"/"<<m1<<" - "<<n<<"/"<<n1<<" ="<<endl;
                else cout<<"("<<j+1<<") "<<m<<"-"<<n<<"="<<endl;
                a[3*T]=m;  a[3*T+1]=k;  a[3*T+2]=n;
                j++;
                T++;
                break;
             }
             case 2:
            {    
                if(j==2 && xiaoshu==1)
                    cout<<"("<<j+1<<") "<<m/10<<"*"<<n/10<<"="<<endl;
                else if(j==3 && fenshu==1)
                    cout<<"("<<j+1<<") "<<m<<"/"<<m1<<" * "<<n<<"/"<<n1<<" ="<<endl;
                else cout<<"("<<j+1<<") "<<m<<"*"<<n<<"="<<endl;
                a[3*T]=m;  a[3*T+1]=k;  a[3*T+2]=n;
                j++;
                T++;
                break;
             }
              case 3:
            {
                if(n!=0)
                {
                     if(j==2 && xiaoshu==1)
                        cout<<"("<<j+1<<") "<<m/10<<"/"<<n/10<<"="<<endl;
                     else if(j==3 && fenshu==1)
                    cout<<"("<<j+1<<") "<<m<<"/"<<m1<<" / "<<n<<"/"<<n1<<" ="<<endl;
                      else cout<<"("<<j+1<<") "<<m<<"/"<<n<<"="<<endl;
                    a[3*T]=m;  a[3*T+1]=k;  a[3*T+2]=n;
                    j++;
                    T++;
                }
                else i--;
             }
         }
     }
}

 

 

 截图:

 

posted @ 2015-03-18 16:07  hy叶子  阅读(374)  评论(0编辑  收藏  举报