zoukankan      html  css  js  c++  java
  • 四则运算3结对开发

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

    二、设计思路

        既然能判断对错,和接受用户的输入,那就必须能保存这些题目的结果,和用户输入的结果。因此我用了两个数组,其中一个由前边的运算符控制直接保存结果,另一组数组由用户输入,在将两数组进行比对,对了输出正确且变量加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/)

  • 相关阅读:
    HDU5418.Victor and World(状压DP)
    POJ2686 Traveling by Stagecoach(状压DP)
    POJ3254Corn Fields(状压DP)
    HDU5407.CRB and Candies(数论)
    CodeForces 352D. Jeff and Furik
    CodeForces 352C. Jeff and Rounding(贪心)
    LightOj 1282 Leading and Trailing
    Ural 1057. Amount of Degrees(数位DP)
    HDU 2089 不要62 (数位DP)
    HDU5366 The mook jong (DP)
  • 原文地址:https://www.cnblogs.com/wulun/p/5296374.html
Copyright © 2011-2022 走看看