四则运算(三)

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

二、设计思路

    既然能判断对错,和接受用户的输入,那就必须能保存这些题目的结果,和用户输入的结果。因此我用了两个数组,其中一个由前边的运算符控制直接保存结果,另一组数组由用户输入,在将两数组进行比对,对了输出正确且变量加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函数的判断里,好几次都是在那里出现了错误,以后还要常加练习。

原文地址:https://www.cnblogs.com/fan123/p/4355807.html