• 软件工程—四则运算


    设计四则运算:

    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--;
                 }
             }
         }
    }

     截图:

     

  • 相关阅读:
    《大话设计模式》ruby版代码:工厂方法模式
    《大话设计模式》ruby版代码:代理模式
    redis ruby客户端学习(一)
    《大话设计模式》ruby版代码:装饰模式
    打卡2
    打卡1
    分块题集
    2018 Multi-University Training Contest 7
    2018 Multi-University Training Contest 6
    2018 Multi-University Training Contest 4
  • 原文地址:https://www.cnblogs.com/hongyedeboke/p/4347483.html
Copyright © 2020-2023  润新知