• 四则运算(三)


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

    二、设计思路

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

    三、源代码

      1 #include<iostream.h>
      2 #include<stdlib.h>
      3 #include<time.h>
      4 int main()
      5 {  
      6     srand(time(NULL)); 
      7     int sm;              //sm 即题目的数量
      8     char cc;             //cc 即算式中有无乘除
      9     char ys;             //ys即有无余数
     10     int sz;              //sz 即数值取值范围
     11     char zf;             //zf即加法运算出不出现正负
     12     char fh;             //fh即四则运算中的加减乘除
     13     int ls;              //ls即输出的列数
     14     int dui=0;
     15     int cuo=0;
     16     cout<<"请输入您需要的题目数目:   ";
     17     cin>>sm;
     18     int ans1[1000];      //ans1存放答案
     19     int ans2[1000];      //ans2存放用户输入的答案
     20     int ans3[1000]={0};  //存放余数
     21     int ans4[1000];      //存放用户输入的余数
     22     cout<<"运算中需要乘除法吗?(y/n)";
     23     cin>>cc;
     24     if(cc=='y')
     25     {
     26         cout<<"除法中需要出现余数吗?(y/n)";
     27         cin>>ys;
     28     }
     29     cout<<"请输入运算数的最大取值范围:";
     30     cin>>sz;
     31     cout<<"减法中出现负数吗?(y/n)";
     32     cin>>zf;
     33     cout<<"您想输出几列?";
     34     cin>>ls;
     35     cout<<"***********************************************"<<endl;
     36     for(int i=0;i<sm;i++)          //for循环中用sm来控制循环次数
     37     {   
     38         int a=rand()%sz;     
     39         int b=rand()%sz; 
     40         int c;
     41         if(cc=='y')                //此处判断用不用到乘除法
     42             c=rand()%4;   
     43         else if(cc=='n')
     44             c=rand()%2;
     45         if(c==0)                   //此处判断运算符号
     46         {           
     47             fh='+';   
     48             ans1[i]=a+b;
     49         }     
     50         if(c==1)   
     51         {           
     52             fh='-'; 
     53             ans1[i]=a-b;
     54         }  
     55         if(c==2)   
     56         {           
     57             fh='*'; 
     58             ans1[i]=a*b;
     59         }    
     60         if(c==3)   
     61         {           
     62             fh='/';  
     63             ans1[i]=a/b;
     64             ans3[i]=a-b*ans1[i];
     65         }
     66         if(c==3&&b==0)            //除数不能为0
     67         {
     68             i--;
     69             continue;
     70         }
     71         if(c==1&&zf=='n'&&a<b)     //减法结果不为负数
     72         {
     73             i--;
     74             continue;
     75         }
     76         if(c==3&&ys=='n'&&a%b!=0)  //除法结果不产生余数
     77         {
     78             i--;
     79             continue;
     80         }
     81         cout<<i+1<<""<<a<<fh<<b<<'='<<"         ";
     82         if((i+1)%ls==0)            //控制输出的列数
     83         {
     84             cout<<endl;
     85         }
     86     }
     87     cout<<"***********************************************"<<endl;
     88     cout<<"请输入答案:"<<endl;
     89     for(int k=0;k<sm;k++)
     90     {
     91         if(ans3[k]==0)              //没余数状态下的输入答案即返回结果
     92         {
     93             cout<<k+1<<":";
     94             cin>>ans2[k];
     95             if(ans2[k]==ans1[k])
     96             {
     97                 cout<<"正确"<<endl;
     98                 dui=dui+1;
     99             }
    100             else
    101             {
    102                 cout<<"错误"<<endl;
    103                 cuo=cuo+1;
    104             }
    105         }
    106         if(ans3[k]!=0)                 //有余数状态下的输入答案即返回结果
    107         {
    108             cout<<k+1<<"商为:";
    109             cin>>ans2[k];
    110             cout<<"余数为:";
    111             cin>>ans4[k];
    112             if((ans2[k]==ans1[k])&&(ans3[k]==ans4[k]))
    113             {
    114                 cout<<"正确"<<endl;
    115                 dui=dui+1;
    116             }
    117             else
    118             {
    119                 cout<<"错误"<<endl;
    120                 cuo=cuo+1;
    121             }
    122         }
    123     }
    124     cout<<"***********************************************"<<endl;
    125     cout<<"共做对  "<<dui<<"  道题"<<endl;
    126     cout<<"共做错  "<<cuo<<"  道题"<<endl;
    127     return 0;
    128 }

    四、运行结果截图

    五、经验总结

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

  • 相关阅读:
    ASCII对应码表-键值(完整版)
    node.js中使用路由方法
    关于vscode自动跳转回车的解决方法(关闭vscode自动保存功能;可能和其他插件有冲突)
    js中 !==和 !=的区别是什么
    spring 请求参数和路径变量
    PowerShell因为在此系统中禁止执行脚本解决方法
    SQL server 2008数据库的备份与还原(亲测,效果良好)注意采用单用户模式呀
    webpack-dev-server提示css模块解析失败,但已经装了css-loader
    webpack集成vue单文件模式的很多坑(研究了1个星期)
    npm全局模块卸载及默认安装目录修改方法
  • 原文地址:https://www.cnblogs.com/fan123/p/4355807.html
Copyright © 2020-2023  润新知