• 30道四则运算<2>


    #include<iostream>
    #include<time.h>
    #include<fstream>
    #define random() (rand()%100)
    using namespace std;
    
    void main()
    {
        ofstream outfile;
        outfile.open("a.txt");
        char add='+';
        char sec='-';
        char min='*';
        char div='/';
        int length;
        cout<<"请输入题目数量:";
        cin>>length;
        
        bool printway;
        cout<<"请选择打印方式  <1>txt文档  <0>屏幕:";
        cin>>printway;
        
        bool divsion;
        cout<<"请选择是否有除法<1>有除法  <0>无除法:";
        cin>>divsion;
        
        bool bracket;
        cout<<"请选择是否有括号<1>有括号  <0>无括号:";
        cin>>bracket;
    
        bool negative;
        cout<<"加减有无负数<1>有负数  <0>无负数:";
        cin>>negative;
        
        bool remainder;
        cout<<"除法有无余数<1有余数>  <0>无余数:";//先计算结果,再根据条件输出
        cin>>remainder;
        
        int widestart;
        int wideend;
        cout<<"数值范围(起始---终止):";
        cin>>widestart;
        cin>>wideend;
    
        int i;//循环参数
        int j;//循环参数
        int firstnum;
        int secondnum;
        int thirdnum;
        int fourthnum;
        int fifthnum;
         srand((int)time(NULL));
        
          
         for( i=0;i<length;i++)                       //循环输出length个算式
         {
             firstnum=rand()%wideend+widestart;        
            secondnum=rand()%wideend+widestart;    
            thirdnum=rand()%wideend+widestart;    
            fourthnum=rand()%wideend+widestart;
            fifthnum=rand()%wideend+widestart;
    
    
            if(negative)/*if negative =1   当加减存在负数时*/   
            {    
                if(printway)           //若输出到txt
                {
                    outfile<<firstnum;
                    outfile<<add;
                }
                else
                {
                    cout<<firstnum;   
                    cout<<add;        
                }        
                if(bracket)         //若选择有括号输出左括号
                {
                    if(printway)
                    {
                        outfile<<"(";
                    }
                    else
                    {
                        cout<<"(";    
                    }
                }                //输出左括号结束
                if(printway)
                {
                    outfile<<secondnum;
                    outfile<<sec;
                    outfile<<thirdnum;    
                    outfile<<min;
                    outfile<<fourthnum;
                }
                else
                {
                    cout<<secondnum;    
                    cout<<sec;
                    cout<<thirdnum;    
                    cout<<min;
                    cout<<fourthnum;
                }                              //输出除法之前的数
                if(bracket)        
                {
                    if(printway)
                    {
                        outfile<<")";
                    }
                    else
                    {
                        cout<<")";    
                    }
                }               //输出右括号
    
    
                /*******************************************************************************************有除法有括号没有余数**/
                if(divsion)            //有除法的情况
                {
                        if(bracket)//if have bracket,panduan shifou you yushu
                        {
                            if (!remainder)           //如果没有余数
                            {
                                for(i=0;;)
                                {
                                    int result=( secondnum-thirdnum*fourthnum )   /fifthnum;
                                    if( result==0)    
                                    {
                                        if(printway)
                                        {
                                            outfile<<div<<fifthnum;
                                        }
                                        else
                                        {
                                            cout<<div<<fifthnum;
                                        }
                                        break;
                                    }
                                    else
                                    {
                                        fifthnum=rand()%wideend+widestart;
                                    }
                                }
                            }
                        }
    
    
                        /**************************************************************************************有除法无括号无余数********/
                        else//meiyou kuohao panduan shifou you yushu
                        {
    
                            if (!remainder)  //没有余数的情况
                            {
    
                                for(i=0;;)
                                {
                                    int result1=(thirdnum*fourthnum  )  /   fifthnum;
                                    if(   result1 ==0)   //判断是否有余数,若没有,则输出
                                    {
                                        if(printway)
                                        {
                                            outfile<<div<<fifthnum<<"="<<endl;
                                        }
                                        else
                                        {
                                            cout<<div<<fifthnum<<"="<<endl;
                                        }
                                        break;
                                    }    
                                    else
                                    {
                                        fifthnum=rand()%wideend+widestart;   //若有余数。则重新生成除数
                                    }
                                }
                            }
                            
                        }            
                }
        
                if(printway)
                {
                    outfile<<"="<<endl;
                }
                else
                {
                    cout<<"="<<endl;
                }
                
            }
    
    
    
            else/* negative=0               没有负数的情况*/
            {
                if(printway)
                {
                    outfile<<firstnum;    
                    outfile<<add;        
                }
                else
                {
                    cout<<firstnum;    
                    cout<<add;        
                }
                if(bracket)        
                {
                    if(printway)
                    {
                        outfile<<"(";
                    }
                    else
                    {
                        cout<<"(";    
                    }
                }
                if(printway)
                {
                    outfile<<secondnum;    
                    outfile<<sec;
                    outfile<<thirdnum;    
                    outfile<<min;
                    outfile<<fourthnum;
                }
                else
                {
                    cout<<secondnum;    
                    cout<<sec;
                    cout<<thirdnum;    
                    cout<<min;
                    cout<<fourthnum;
                }
                for(j=0;;)       /*  a+b-c*d/e 则判断b-c*d不能有负数 ,若有负数则循环至 没有*/
                {    
                    secondnum=rand()%wideend+widestart;
                    if(secondnum>(thirdnum*fourthnum))
                    {
                        if(printway)
                        {
                            outfile<<firstnum<<add;
                        }
                        else
                        {
                            cout<<firstnum<<add;
                        }
                        if(bracket)
                        {
                            if(printway)
                            {
                                outfile<<"(";
                            }
                            else
                            {
                                cout<<"(";
                            }
                        }
                        if(printway)
                        {
                            outfile<<secondnum<<sec<<thirdnum<<min<<fourthnum;
                        }
                        else
                        {
                            cout<<secondnum<<sec<<thirdnum<<min<<fourthnum;
                        }
                    }                    //循环结束
                                        
                    if(divsion)
                    {
                        if(printway)
                        {
                            outfile<<")"<<div;
                        }
                        else
                        {
                            cout<<")"<<div;
                        }
                        if(bracket)//if have bracket,panduan shifou you yushu
                        {
                            if (!remainder)
                            {
                                for(i=0;;)
                                {
                                    int flag=firstnum+( secondnum-thirdnum*fourthnum ) /fifthnum ;//有括号的情况下判断是否有余数
                                    if( flag ==0)
                                    {
                                        if(printway)
                                        {
                                            outfile<<fifthnum;
                                        }                            
                                        else
                                        {
                                            cout<<fifthnum;
                                        }
                                        break;
                                    }
                                    else
                                    {
                                        fifthnum=rand()%wideend+widestart;
                                    }
                                }
                            }
                            else
                            {
                                if(printway)
                                {
                                    outfile<<")";
                                    outfile<<div<<fifthnum;
                                }
                                else
                                {
                                    cout<<")";
                                    cout<<div<<fifthnum;
                                }
                            }
                        }
                        else//meiyou kuohao panduan shifou you yushu
                        {
                            if (!remainder)
                            {
                                for(i=0;;)
                                {
                                    int flag1= (thirdnum*fourthnum  )/fifthnum;
                                    if( flag1 ==0)                         //没有括号的情况下判断余数是否为0
                                    {
                                        if(printway)
                                        {
                                            outfile<<div<<fifthnum;
                                        }
                                        else
                                        {
                                            cout<<div<<fifthnum;
                                        }
                                        break;
                                    }    
                                    else
                                    {
                                        fifthnum=rand()%wideend+widestart;
                                    }
                                }
                            }
                            else
                            {
                                if(printway)
                                {
                                    outfile<<")";
                                    outfile<<div<<fifthnum;
                                }
                                else
                                {
                                    cout<<")";
                                    cout<<div<<fifthnum;
                                }
                            
                            }
                        }
                        break;
                    }        
                    
                    if(printway)
                    {
                        outfile<<"="<<endl;
                    }
                    else
                    {
                        cout<<"="<<endl;
                    }                
                }
                
            }
        }
        outfile.close();
    }

    我的设计思路是:

    先输出一个菜单:多少道题目,输出到屏幕还是文档,是否有除法,是否有括号,是否有负数,是否有余数,以及随机数的范围这几个方面。这几个方面的控制是由bool类型控制的,是为“1”,否为“2”。

    我的主函数里面最外层是用一个循环来控制题目的数量。

    接下来是一个if。。。else语句,将加减是否有负数进行分类,有负数进入if语句,没有负数进入else语句。

    我所设置的括号位置是固定的,都是a+(b-c*d)/e=的样式。有括号的就输出,不选择有括号就输出a+b-c*d/e。

    范围带入到rand函数就可以了,输出到屏幕用的是outfile输出,还剩除法和余数两项。

    有除法才会有余数,括号又可以影响运算顺序,所以得到嵌套:

    if(有负数)

    {

          if(有除法)

              if(有括号)

                  if(没有余数)

    }

    else

    {

           if(有除法)

              if(有括号)

                  if(没有余数)

    }

  • 相关阅读:
    HttpModule与HttpHandler详解
    未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。
    javascript的escape()函数
    温故知新 javascript 正则表达式
    大爽Python入门教程 53 文件读写
    大爽Python入门教程 62 变量进阶 局部变量`local`与全局变量`global`
    大爽Python入门教程 61 变量进阶 可变`mutable`、不可变`immutable`
    大爽Python入门教程 57 思路与答案
    大爽Python入门教程 65 函数进阶 内置函数(Builtin Functions)
    大爽Python入门教程 55 实践演示 控制台版本——简易成绩管理系统
  • 原文地址:https://www.cnblogs.com/WS1004/p/5269274.html
Copyright © 2020-2023  润新知