zoukankan      html  css  js  c++  java
  • 四则运算进化版

    一、题目要求:

    1、题目避免重复;

    2、可定制(数量/打印方式);

    3、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、

    否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;

    二、设计思想

    1、题目避免重复

    (1)调用随机函数发生器,将生成的运算式用数组存储,将新的运算式与已生成式子做比较,若相同则不输出,不同则输出

    2、可定制(数量/打印方式)

    (1)提示用户输入题目数量,打印方式,从键盘输入

    3、(1)是否有乘除法

    在输入之前提示用户是否有乘除法,若没有,则只输出加减法

    (2)是否有括号

    (3)数值范围

    由用户设置数值范围,如果输入不合法,提示输入错误,请重新输入,在随机生成数中保证随机数在用户设置的数值范围

    (4)加减有无负数

    如果没有负数,比较生成的两个数,保证做减法时被减数不小于减数

    (5)乘除有无余数

    首先判断除数是否为零,若为零则终止,若不为零则继续。对做除法的两个操作数做取余运算,若为零则没有余数

    三、原程序代码

    #include<iostream.h>
    #include<stdlib.h>
    #include<time.h>
    void display(int number,int l,int mul,int num,int neg,int remainder)//打印方式控制输出列数
    {
        int a[1000],b[1000],c[1000];
        int m;//控制题目避免重复
        int t;//中间变量
        for(int i=0;i<number;i++)//随机两个生成运算操作数
        { 
            m=1;//初始化
            a[i]=rand()%num;
            b[i]=rand()%num;
            if(mul==0)//没有乘除法
            {   
                c[i]=rand()%2;//随机生成0-1的数字,分别表示加减
            }
            if(mul==1)//有乘除法
            {
                c[i]=rand()%4;//随机生成0-3的数字,分别表示加减乘除
            }
            for(int j=0;j<i;j++)
            {
                if(a[j]==a[i]&&b[j]==b[i]&&c[j]==c[i])//比较新生成的操作数与原来的是否相同
                {
                    i=i-1;
                    m=0;
                }
            }
            while(m)//若不同则输出
            {
                switch(c[i])
                {
                case 0:
                    cout<<a[i]<<"+"<<b[i]<<"=";break;
                case 1:
                    if(neg==0)//减法没有负数
                    {
                        if(a[i]<b[i])
                        {
                            t=a[i];
                            a[i]=b[i];
                            b[i]=t;
                        }
                        cout<<a[i]<<"-"<<b[i]<<"=";break;
                    }
                    else
                    {
                        cout<<a[i]<<"-"<<b[i]<<"=";break;
                    }
                case 2:
                    cout<<a[i]<<"*"<<b[i]<<"=";break;
                case 3:
                    if(b[i]==0)//分母为零则不计入总数
                    {  
                        i=i-1;break;
                    }
                    else if(remainder==0)//除法没有余数
                    {
                        if(a[i]%b[i]==0)
                        {
                            cout<<a[i]<<"/"<<b[i]<<"=";break;
                        }
                        else
                        {
                            i=i-1;break;
                        }
                    }
                    else if(remainder==1)//除法有余数
                    {
                        if(a[i]%b[i]!=0)
                        {
                            cout<<a[i]<<"/"<<b[i]<<"=";break;
                        }
                        else
                        {
                            i=i-1;break;
                        }
                    }
                }
                if((i+1)%l==0)
                {
                    cout<<endl;
                }
                else
                {
                    cout<<" "<<" ";
                }
                break;//跳出循环
            }
        }
    }
    void main()
    {
        int number;//题目数量
        int l;//输出的列数
        int mul;//乘除法
        int num;//数值范围
        int neg;//负数
        int remainder;//余数
        srand((unsigned) time(NULL));//调用随机函数发生器
        cout<<"---------------------------------"<<endl;
        cout<<"            四则运算             "<<endl;
        cout<<"---------------------------------"<<endl;
        cout<<"请输入要打印的题目数量:"<<endl;
        cin>>number;
        cout<<"请输入要输出的列数(1-10):"<<endl;
        cin>>l;
        cout<<"是否有乘除法(0表示没有;1表示有)"<<endl;
        cin>>mul;
        if(mul==1)
        {
            cout<<"除法有无余数(0表示没有;1表示有)"<<endl;
            cin>>remainder;
        }
        cout<<"请输入正整数的数值范围(即最大数):"<<endl;
        cin>>num;
        cout<<"减法有无负数(0表示没有;1表示有)"<<endl;
        cin>>neg;
        display(number,l,mul,num,neg,remainder);
    }

    程序截图

    #include<iostream.h>
    #include<stdlib.h>
    #include<time.h>
    void display(int number,int l,int mul,int num,int neg,int remainder)//打印方式控制输出列数
    {
        int a[1000],b[1000],c[1000];
        int m;//控制题目避免重复
        int t;//中间变量
        for(int i=0;i<number;i++)//随机两个生成运算操作数
        { 
            m=1;//初始化
            a[i]=rand()%num;
            b[i]=rand()%num;
            if(mul==0)//没有乘除法
            {   
                c[i]=rand()%2;//随机生成0-1的数字,分别表示加减
            }
            if(mul==1)//有乘除法
            {
                c[i]=rand()%4;//随机生成0-3的数字,分别表示加减乘除
            }
            for(int j=0;j<i;j++)
            {
                if(a[j]==a[i]&&b[j]==b[i]&&c[j]==c[i])//比较新生成的操作数与原来的是否相同
                {
                    i=i-1;
                    m=0;
                }
            }
            while(m)//若不同则输出
            {
                switch(c[i])
                {
                case 0:
                    cout<<a[i]<<"+"<<b[i]<<"=";break;
                case 1:
                    if(neg==0)//减法没有负数
                    {
                        if(a[i]<b[i])
                        {
                            t=a[i];
                            a[i]=b[i];
                            b[i]=t;
                        }
                        cout<<a[i]<<"-"<<b[i]<<"=";break;
                    }
                    else
                    {
                        cout<<a[i]<<"-"<<b[i]<<"=";break;
                    }
                case 2:
                    cout<<a[i]<<"*"<<b[i]<<"=";break;
                case 3:
                    if(b[i]==0)//分母为零则不计入总数
                    {  
                        i=i-1;break;
                    }
                    else if(remainder==0)//除法没有余数
                    {
                        if(a[i]%b[i]==0)
                        {
                            cout<<a[i]<<"/"<<b[i]<<"=";break;
                        }
                        else
                        {
                            i=i-1;break;
                        }
                    }
                    else if(remainder==1)//除法有余数
                    {
                        if(a[i]%b[i]!=0)
                        {
                            cout<<a[i]<<"/"<<b[i]<<"=";break;
                        }
                        else
                        {
                            i=i-1;break;
                        }
                    }
                }
                if((i+1)%l==0)
                {
                    cout<<endl;
                }
                else
                {
                    cout<<" "<<" ";
                }
                break;//跳出循环
            }
        }
    }
    void main()
    {
        int number;//题目数量
        int l;//输出的列数
        int mul;//乘除法
        int num;//数值范围
        int neg;//负数
        int remainder;//余数
        srand((unsigned) time(NULL));//调用随机函数发生器
        cout<<"---------------------------------"<<endl;
        cout<<"            四则运算             "<<endl;
        cout<<"---------------------------------"<<endl;
        cout<<"请输入要打印的题目数量:"<<endl;
        cin>>number;
        cout<<"请输入要输出的列数(1-10):"<<endl;
        cin>>l;
        cout<<"是否有乘除法(0表示没有;1表示有)"<<endl;
        cin>>mul;
        if(mul==1)
        {
            cout<<"除法有无余数(0表示没有;1表示有)"<<endl;
            cin>>remainder;
        }
        cout<<"请输入正整数的数值范围(即最大数):"<<endl;
        cin>>num;
        cout<<"减法有无负数(0表示没有;1表示有)"<<endl;
        cin>>neg;
        display(number,l,mul,num,neg,remainder);
    }

    日期 听课 编程 阅读资料 网上查找 总计
    星期一 120 20 50 50 240
    星期二   50   50 100
    星期三          
    星期四 120 70     190
    星期五          
    星期六   120   100 220
    星期日   120     120
    总计 240      

    870

  • 相关阅读:
    数据结构与算法之美-二分查找(下)
    数据结构与算法之美-二分查找(上)
    数据结构与算法之美-排序优化
    数据结构与算法之美-线性排序
    DRF框架之路由Routers
    DRF框架之视图集(ModelViewSet)简介
    DRF框架之视图子类简介
    DRF框架之视图的扩展类简介
    DRF框架之视图基类APIView和GenericAPIView简介
    DRF框架之ModelSerializer序列化器
  • 原文地址:https://www.cnblogs.com/0jiajia1/p/5268477.html
Copyright © 2011-2022 走看看