用程序实现用户要求的若干道2年级四则运算题升级版

一、题目

用程序实现用户要求的若干道2年级四则运算题,允许用户答题并判断对错。

二、设计思想

建立两个数组,一个存正确运算结果,一个存用户输入的结果,比较后得出是否正确。

三、源代码

#include<iostream.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int num1,num2,num0,c;
    int limit[8];
    double num3,num4;
    srand((int)time(0));         //  不同的时间,产生不同的随机数,但不保证缩小范围后是不是一样的数,是缺陷
    cout<<"输入题目的数量:";
    cin>>num0;
    cout<<endl;
    double sum[num0];
    double result[num0];
    cout<<"输入打印中每行的间隔:";
    cin>>limit[0];
    cout<<endl;
    cout<<"输入打印中每行的题目数:";
    cin>>limit[1];                                //每次都输入太麻烦了,这个设置一般是一样的,可否改为设置一次即可
    cout<<endl;
    cout<<"输入操作数的数值范围的最小值和最大值:";
    cin>>limit[2]>>limit[3];
    cout<<endl;
    cout<<"是否有乘除法,有输入1,没有输入0:";
    cin>>limit[4];
    cout<<endl;
    cout<<"加减有无负数,有输入1,没有输入0:";
    cin>>limit[5];
    cout<<endl;
    if(limit[4]==1)
    {
        cout<<"除法有无余数,有输入1,没有输入0:";
        cin>>limit[6];
        cout<<endl;
    }
    if(limit[4]==0)
    {
        cout<<"是否支持小数,有输入1,没有输入0:";
        cin>>limit[7];
        cout<<endl;
        if(limit[7]==1)
        {
            cout<<"若支持小数,精确到多少位:";
            cin>>limit[8];
            cout<<endl;
        }
    }
    for(int i=0;i<num0;i++)              //输出题目的循环
    {
        num1=limit[2]+(int)(limit[3]*rand()/(RAND_MAX+1.0));
        num2=limit[2]+(int)(limit[3]*rand()/(RAND_MAX+1.0));
        c=1+(int)(4*rand()/(RAND_MAX+1.0));
        if(limit[4]==1)
        {
            if(c%4==0)
            {
                if(limit[6]==0)
                {
                    if(num1%num2==0)
                    {
                        sum[i]=num1/num2;
                        cout<<""<<i+1<<"道:"<<num1<<"/"<<num2<<"="<<"    ";
                    }
                    else
                    {
                        while(num1%num2!=0)
                        {
                            num2=num2-num1%num2;
                        }
                        sum[i]=num1/num2;
                        cout<<""<<i+1<<"道:"<<num1<<"/"<<num2<<"="<<"    ";

                    }
                }
            }                                    //输出有无余数的除法
            if(c%4==1)
            {
                sum[i]=num1+num2;
                cout<<""<<i+1<<"道:"<<num1<<"+"<<num2<<"="<<"    ";
            }
            if(c%4==2)
            {
                sum[i]=num1-num2;
                cout<<""<<i+1<<"道:"<<num1<<"-"<<num2<<"="<<"    ";
            }
            if(c%4==3)
            {
                sum[i]=num1*num2;
                cout<<""<<i+1<<"道:"<<num1<<"*"<<num2<<"="<<"    ";
            }
        }                                   //输出有乘除法的题目
        else
        {
            if(limit[7]==1)
            {
                num3=pow(0.1,limit[8])+(int)(1*rand()/(RAND_MAX+1.0))+num1;
                num4=pow(0.1,limit[8])+(int)(1*rand()/(RAND_MAX+1.0))+num2;
            }
            if(limit[5]==1)
            {
                if(c%2==0)
                {
                    sum[i]=pow(-1,i)*num3-pow(-1,i+1)*num4;
                    cout<<""<<i+1<<"道:"<<pow(-1,i)*num3<<"-"<<pow(-1,i+1)*num4<<"="<<"    ";
                }
                if(c%2==1)
                {
                    sum[i]=pow(-1,i)*num3+pow(-1,i+1)*num4;
                    cout<<""<<i+1<<"道:"<<pow(-1,i)*num3<<"+"<<pow(-1,i+1)*num4<<"="<<"    ";
                }
            }           //输出有小数的题目
            else
            {
                if(c%2==0)
                {
                    sum[i]=num3-num4;
                    cout<<""<<i+1<<"道:"<<num3<<"-"<<num4<<"="<<"    ";
                }
                if(c%2==0)
                {
                    sum[i]=num3+num4;
                    cout<<""<<i+1<<"道:"<<num3<<"+"<<num4<<"="<<"    ";
                }
            }                                //输出有无负数的加减
        }
        if((i%limit[1])+1==limit[1])     //每行打印的题目数
        for(int k=0;k<=limit[0];k++)
            cout<<endl;                //每行打印的间隔
    }
    for(int j=0;j<num0;j++)
    {
        cout<<"输入第"<<j+1<<"道题的答案:";
        cin>>result[j];
        if(result[j]==sum[j])
        {
            cout<<"正确"<<endl;
        }
        else
        {
            while(result[j]!=sum[j])
            {
                cout<<"错误,请重试"<<endl;
                cout<<"输入第"<<j+1<<"道题的答案:";
                cin>>result[j];
                if(result[j]==sum[j])
                {
                    cout<<"正确"<<endl;
                }
            }
        }
    }
    return 0;
}

四、结果截图

五、实验总结

创建sum和数组是int型后发现小数相加是double型的,而double转换成int会丢失精度,所以把sum数组变成了double型。

以后要注意变量类型的要求。

posted @ 2015-03-22 12:51  weaponX  阅读(157)  评论(1编辑  收藏  举报