四则运算3

题目:在四则运算2的基础上添加如下功能:让程序能接受用户输入答案,并判定对错。最后给出总共对/错的数量。

一、设计思路

在四则运算2的基础上,添加了接收用户输入答案的函数,存入数组,当遇到运算是除法时,若用户选择有余数,则除法运算需要接收两个答案,一个为商,一个为余数。

当商和余数都和答案相同时,此题才判断为对。

二、源代码

#include<iostream.h>
#include<stdlib.h>
int a[100],b[100],c[100];             //两个数和运算符
int answer[100]={0};                  //答案
int huida[100]={0};                   //用户输入的答案
int huiday[100]={0};                  //用户输入的余数
int y[100]={0};                       //正确的余数
int i;
void Input(int timu,int yushu)        //用户输入函数
{
     int k;
     int rcount=0;                     //正确题数
     int wcount=0;                     //错误题数
     cout<<"请输入答案:"<<endl;
     for(k=0;k<timu;k++)
     {
          if(c[k]==3&&yushu==0)         //有余数除法则先输入商再输入余数
          {
               cout<<k+1<<". 商为:";
               cin>>huida[k];
               cout<<"余数为:";
               cin>>huiday[k];
          }
          else
      {
               cout<<k+1<<". ";
               cin>>huida[k];
          }
     }
     for(k=0;k<timu;k++)
     {
          if(c[k]==3&&yushu==0)        //有余数除法,商和余数都正确才正确
          {
               if(huida[k]==answer[k]&&huiday[k]==y[k])
               {
                   rcount++;
               }
               else
               {
                   cout<<"第"<<k+1<<"道题出错;"<<endl;
                   wcount++;
               }
          }
          else
          {
               if(huida[k]==answer[k])
               {
                   rcount++;
               }
               else
               {
                   cout<<"第"<<k+1<<"道题出错;"<<endl;
                   wcount++;
               }
          }
     }
     cout<<"答对"<<rcount<<"道题,"<<"答错"<<wcount<<"道题。"<<endl;
}
void Display(int f,int yushu)                               //输出题目的函数
{
     if(f==0)                                                //判断打印要求
     {
          if(c[i]==0)
          {
              cout<<i+1<<". "<<a[i]<<'+'<<b[i]<<'='<<endl;
              answer[i]=a[i]+b[i];
          }
          if(c[i]==1)
          {
              cout<<i+1<<". "<<a[i]<<'-'<<b[i]<<'='<<endl;
              answer[i]=a[i]-b[i];
          }
          if(c[i]==2)
          {
              cout<<i+1<<". "<<a[i]<<'*'<<b[i]<<'='<<endl;
              answer[i]=a[i]*b[i];
           }
           if(c[i]==3)
           {
               cout<<i+1<<". "<<a[i]<<'/'<<b[i]<<'='<<endl;
               answer[i]=a[i]/b[i];
               if(yushu==1)
               {         
                   y[i]=a[i]%b[i];
               }
            }

     }
     else
     { 
          if(c[i]==0)
          {
              cout<<i+1<<". "<<a[i]<<'+'<<b[i]<<'='<<' ';
              answer[i]=a[i]+b[i];
          }
          if(c[i]==1)
          {
              cout<<i+1<<". "<<a[i]<<'-'<<b[i]<<'='<<' ';
              answer[i]=a[i]-b[i];
          }
          if(c[i]==2)
          {
              cout<<i+1<<". "<<a[i]<<'*'<<b[i]<<'='<<' ';
              answer[i]=a[i]*b[i];
          }
          if(c[i]==3)
          {
              cout<<i+1<<". "<<a[i]<<'/'<<b[i]<<'='<<' ';
              answer[i]=a[i]/b[i];
              if(yushu==1)
              {
                  y[i]=a[i]%b[i];
              }
          }
          if((i+1)%f==0)
              cout<<endl;
     }
}
void Carry()                                             //主要执行函数
{
     int j,t;
     int cc,fw,zf,ys,tm,dy,an;
     cout<<"请选择是否有乘除法:(0为是,1为否)"<<endl;
     cin>>cc;
     if(cc!=0&&cc!=1)
     {
         cout<<"输入错误,请重新输入!"<<endl;
         Carry();
         exit(0);
     }
     cout<<"请输入取值范围:(0-?)"<<endl;
     cin>>fw;
     cout<<"请选择加减有无负数:(0为有,1为无)"<<endl;
     cin>>zf;
     if(zf!=0&&zf!=1)
     {
          cout<<"输入错误,请重新输入!"<<endl;
          Carry();
          exit(0);
     }  
     if(cc==0)
     {
          cout<<"请选择除法有无余数:(0为有,1为无)"<<endl;
          cin>>ys;
          if(ys!=0&&ys!=1)
          {
               cout<<"输入错误,请重新输入!"<<endl;
               Carry();
               exit(0);
          }
     }
     cout<<"请输入题目个数:"<<endl;
     cin>>tm;
     if(tm<=0)
     {
          cout<<"输入错误,请重新输入!"<<endl;
          Carry();
          exit(0);
     }
     cout<<"请选择打印方式:(0为逐行打印,输入其他数字则为该行几道题)"<<endl;
     cin>>dy;
     if(dy<0)
     {
          cout<<"输入错误,请重新输入!"<<endl;
          Carry();
          exit(0);
     }
     for(i=0;i<tm;i++)
     {
          a[i]=rand()%fw;
          b[i]=rand()%fw;
          c[i]=rand()%4;
          for(j=0;j<i;j++)                               //避免重复
               if(a[j]==a[i]&&b[j]==b[i]&&c[j]==c[i])
                    a[i]++;
          if(c[i]==3&&b[i]==0)
               b[i]++;
          if(cc==0&&zf==0&&ys==0)
          {
              Display(dy,ys);
          }

          else if(cc==1)                                 //无乘除法
         {
              if(c[i]>=2)
              c[i]=c[i]-2;
              Display(dy,ys);
         }
         else if(cc==0&&zf==1&&ys==0)
         {      
              if(a[i]<b[i])                              //无负数
              {
                  t=a[i];
                  a[i]=b[i];
                  b[i]=t;
              }
              Display(dy,ys);
          }
          else
         {
              if(c[i]==3)
              {
                  if(a[i]<b[i])
                  {
                      t=a[i];
                      a[i]=b[i];
                      b[i]=t;
                  }
                  if(a[i]%b[i]!=0)                       //无余数,能够整除
                  {
                       a[i]=b[i]*(rand()%10);
                  }
              }
              Display(dy,ys);
          }
     }
     cout<<"请输入是否要输入答案:(0为是,其他为否)"<<endl;
     cin>>an;
     if(an==0)
         Input(tm,ys);
     else
         exit(0);
}
void main()
{
     Carry();
}

三、运行结果

四、遇到错误

      相同类型,相同参数的函数不能有两个,除法运算有余数时需要有两个答案,一个为商,一个为余数,没有余数时,则只需输入一个答案。

五、工作表

缺陷日志表

                                                  姓名:郭庆樑                                                                                  日期:3.21.2015

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3.20.2015

01

程序

编码

编译

20min

相同类型,相同参数不能有两个

3.20.2015

02

程序

编码

编译

20min

在选择有余数时,需要接收用户两个答案,并且两个答案一致才能算此题正确

项目计划总结表

                                                  姓名:郭庆樑                                                                                  日期:3.21.2015

      任务

上课

编程

看书

日总计

周日

 

 

 

 

 

周一

400

 

 

 

400

周二

400

40

 

 

440

周三

100

 

60

 

160

周四

300

 

 

 

300

周五

200

120

 

 

320

周六

 

 

120

 

120

周总计

1400

160

180

 

1740

时间记录总结表

                                                姓名:郭庆樑                                                                                     日期:3.21.2015

日期

开始

结束

中断时间

净时间

活动

备注

C

U

3.17

8:00

9:50

10

100

上课

 

 

 

3.17

9:50

10:10

 

20

编程

 

 

 

3.18

14:00

15:00

10

50

看书

 

 

 

3.20

8:00

9:50

10

100

上课

 

 

 

3.20

14:00

16:00

 

120

编程

 

 

 

3.21

21:00

21:30

 

30

发博客

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/benboerba/p/4356359.html