一、题目:在原程序的基础之上让程序能接受用户输入答案,并判定对错。最后给出总共对/错 的数量。

二、设计思路

    既然能判断对错,和接受用户的输入,那就必须能保存这些题目的结果,和用户输入的结果。因此我用了两个数组,其中一个由前边的运算符控制直接保存结果,另一组数组由用户输入,在将两数组进行比对,对了输出正确且变量加1,错误亦然。但是遇到了余数的问题,后又设置两个数组分别保存正确的余数和用户输入的余数,在后边用户输入中通过判断正确余数是否等于0来判断if函数,将程序的功能实现。

三、源代码

#include<iostream.h>

#include<stdlib.h>

#include<time.h>

int main()

{  

    srand(time(NULL)); 

    int sm;              //sm 即题目的数量

    char cc;             //cc 即算式中有无乘除

    char ys;             //ys即有无余数

    int sz;              //sz 即数值取值范围

    char zf;             //zf即加法运算出不出现正负

    char fh;             //fh即四则运算中的加减乘除

    int ls;              //ls即输出的列数

    int dui=0;

    int cuo=0;

    cout<<"请输入您需要的题目数目:   ";

    cin>>sm;

    int ans1[1000];      //ans1存放答案

    int ans2[1000];      //ans2存放用户输入的答案

    int ans3[1000]={0};  //存放余数

    int ans4[1000];      //存放用户输入的余数

    cout<<"运算中需要乘除法吗?(y/n";

    cin>>cc;

    if(cc=='y')

    {

        cout<<"除法中需要出现余数吗?(y/n)";

        cin>>ys;

    }

    cout<<"请输入运算数的最大取值范围:";

    cin>>sz;

    cout<<"减法中出现负数吗?(y/n";

    cin>>zf;

    cout<<"您想输出几列?";

    cin>>ls;

    cout<<"***********************************************"<<endl;

    for(int i=0;i<sm;i++)          //for循环中用sm来控制循环次数

    {   

        int a=rand()%sz;     

        int b=rand()%sz; 

        int c;

        if(cc=='y')                //此处判断用不用到乘除法

            c=rand()%4;   

        else if(cc=='n')

            c=rand()%2;

        if(c==0)                   //此处判断运算符号

        {           

            fh='+';   

            ans1[i]=a+b;

        }     

        if(c==1)   

        {           

            fh='-'; 

            ans1[i]=a-b;

        }  

        if(c==2)   

        {           

            fh='*'; 

            ans1[i]=a*b;

        }    

        if(c==3)   

        {           

            fh='/';  

            ans1[i]=a/b;

            ans3[i]=a-b*ans1[i];

        }

        if(c==3&&b==0)            //除数不能为0

        {

            i--;

            continue;

        }

        if(c==1&&zf=='n'&&a<b)     //减法结果不为负数

        {

            i--;

            continue;

        }

        if(c==3&&ys=='n'&&a%b!=0)  //除法结果不产生余数

        {

            i--;

            continue;

        }

        cout<<i+1<<""<<a<<fh<<b<<'='<<"         ";

        if((i+1)%ls==0)            //控制输出的列数

        {

            cout<<endl;

        }

    }

    cout<<"***********************************************"<<endl;

    cout<<"请输入答案:"<<endl;

    for(int k=0;k<sm;k++)

    {

        if(ans3[k]==0)              //没余数状态下的输入答案即返回结果

        {

            cout<<k+1<<":";

            cin>>ans2[k];

            if(ans2[k]==ans1[k])

            {

                cout<<"正确"<<endl;

                dui=dui+1;

            }

            else

            {

                cout<<"错误"<<endl;

                cuo=cuo+1;

            }

        }

        if(ans3[k]!=0)                 //有余数状态下的输入答案即返回结果

        {

            cout<<k+1<<"商为:";

            cin>>ans2[k];

            cout<<"余数为:";

            cin>>ans4[k];

            if((ans2[k]==ans1[k])&&(ans3[k]==ans4[k]))

            {

                cout<<"正确"<<endl;

                dui=dui+1;

            }

            else

            {

                cout<<"错误"<<endl;

                cuo=cuo+1;

            }

        }

    }

    cout<<"***********************************************"<<endl;

    cout<<"共做对  "<<dui<<"  道题"<<endl;

    cout<<"共做错  "<<cuo<<"  道题"<<endl;

    return 0;

}

四、运行结果截图

 

五、经验总结

    在这个小程序里我们遇到了好几个困难,比如说除法那里有余数和没余数是来两个情况的判断,同时余数的保存和输入也让我觉得比较棘手,后来一想余数不就是本身减去最大约数吗,同时可以用数组的方式对其进行保存。思路有了,再来写代码,就会变得很轻松。同时编程也要让自己严禁起来,每一种情况和后果都得考虑出来,以后还要常加练习。

结对小组成员:吴论20133047,丁官甲20133088(http://www.cnblogs.com/dgj1314/)

posted on 2016-03-19 21:23  Sirinotsilly  阅读(239)  评论(1编辑  收藏  举报