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

    运行结果如下:

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

  • 相关阅读:
    利用wsdl.exe自动将wsdl文档转换为C#代码
    VS2008中C#开发webservice简单实例
    VS2012环境下C#调用C++生成的DLL
    VS2012 C#生成DLL并调用
    .NET在VS2008中生成DLL并调用
    面试题----寻找比一个N位数大的“下”一个数
    VS2008生成DLL并使用
    VS2008 生成静态链接库并使用
    一天一道练习题--2014年3月8日19:35:07
    C/C++中extern关键字详解
  • 原文地址:https://www.cnblogs.com/wsqJohn/p/5245256.html
Copyright © 2011-2022 走看看