zoukankan      html  css  js  c++  java
  • 四则运算4

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

    二、设计思路

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

     四、运行结果截图

    五、经验总结

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

     

    结对小组成员:丁官甲20133088,吴论20133047hhttp://home.cnblogs.com/u/wulun/

     

  • 相关阅读:
    基于MySQL提供的Yum repository安装MySQL5.6
    CentOS中无法使用setup命令 -bash:setup: command not found
    jdk8新特性-亮瞎眼的lambda表达式
    Git branch 分支与合并分支
    (转)Hashtable与ConcurrentHashMap区别
    java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition的解决方案
    一些面试问题以及一些解法
    ipython的使用
    复习点算法知识,水仙花数加冒泡排序,以及一道算法题
    一些部署django用到的linux命令
  • 原文地址:https://www.cnblogs.com/dgj1314/p/5296506.html
Copyright © 2011-2022 走看看