zoukankan      html  css  js  c++  java
  • 随机生成30道四则运算-NEW

       补充:紧跟上一个随机生成30道四则运算的题目,做了一点补充,可以有真分数之间的运算,于是需要在原来的基础上做一些改进。

    首先指出上一个程序中的几个不足:1.每次执行的结果都一样,所以不能每天给孩子出30道一样的题吧!2.没有考虑,如果随机出的是除法,且除数为0的情况。3.没有实现生成真分数的四则运算的功能。

       经过分析,决定依次进行改进:

       针对问题1:在程序中设置时间种子,即可使得每次程序运行的结果不同。

       针对问题2:当判断要生成除法运算时,做一个判断,若除数为0,则重新生成。

       针对问题3:定义一个变量m,m也是随机数,当m为偶数时,生成整数之间的四则运算;当m为奇数时,生成真分数之间的四则运算。那么问题又来了,真分数的条件为,分子小于分母。所以还得判断分子与分母的大小,若能生成真分数,则进行运算。否则重新生成。当真分数之间进行的是除法运算时,还得考虑除数是否为0的情况,若是,重新生成,若不是则进行运算!

       几番周折之后,终于把还算符合条件的程序修改好!代码如下:

    // 随机生成30道100以内的四则运算,可以出现真分数  王世强 2015/3/4
    #include<iostream>
    #include<stdlib.h>
    #include<iomanip>
    #include<time.h>
    using namespace std;
    #define random() (rand()%100) 
    int main()
    {
        int i,j,m,a,b,c,d;
        char k;
        srand((int)time(NULL));  //设置时间种子 ,使得程序每次运行的结果都不同 
        for(i=0;i<30;i++)
        {
            a=random();
            b=random();
            c=random();
            d=random();
            
            j=random();
            m=random();
        
            j=j%4;
            m=m%2;
            if(m==0)  //m=0时,生成整数四则运算 
            {
                if(j==0) k='+';
                else if(j==1) k='-';
                else if(j==2) k='*';
                else
                {
                    for(;;)
                    {
                        if(b==0) b=random();
                        else break;
                    }
                    k='/';
                 } 
                
                cout<<setw(3)<<a<<setw(2)<<k<<setw(3)<<b<<setw(3)<<"= "<<endl;    
            }
            else  //m=1时,生成真分数四则运算 
            {
                for(;;) //位于分母的c不能为0 
                {
                    if(c<=a)
                    {
                        c=random();
                    } 
                    else break;
                }
                for(;;)  //位于分母的d不能为0 
                {
                    if(d<=b)
                    {
                        d=random();
                    } 
                    else break;
                }
                if(j==0) k='+';
                else if(j==1) k='-';
                else if(j==2) k='*';
                else  //当b为0时,b/d为除数,所以b也不能为0 
                {
                    for(;;)
                       {
                          if(b==0) 
                        {
                            b=random();
                        }
                        else if(b<=d)
                        {
                            d=random();
                        }
                         else break;
                    }    
                      k='/';
                }
            
                cout<<setw(3)<<a<<"/"<<c<<setw(2)<<k<<setw(3)<<b<<"/"<<d<<setw(3)<<"= "<<endl;
            }
            
        }
        return 0;
    }

    运行结果如下:

    感悟:一下子就完成相对符合要的程序,对我来说还是有一些难度的。但是,这次的练习,让我懂得了,好的程序的不是一下子就成功的,有时把它分解为小的模块慢慢解决,算是一个明智的选择。当然还有经过多次的修改,才能做的更好!加油~_~

  • 相关阅读:
    docker 安装mysql
    Java web项目搭建系列之二 Jetty下运行项目
    Java web项目搭建系列之一 Eclipse中新建Maven项目
    Maven 添加其他Maven组件配置问题
    C# 中定义扩展方法
    Oracle 函数
    【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name
    Linux精简版系统安装网络配置问题解决
    Rsync 故障排查整理
    Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.
  • 原文地址:https://www.cnblogs.com/wsqJohn/p/5245256.html
Copyright © 2011-2022 走看看