• 软件工程课堂作业(五)——终极版随机产生四则运算题目(C++)


    一、升级要求:让程序能接受用户输入答案,并判定对错。最后给出总共对/错的数量。

    二、设计思想:

          1、首先输入答案并判断对错。我想到的是定义两个数组,一个存放用户算的结果,另一个存放正确答案。每输出一道题目,就算出该题目正确答案存入数组中,当所有题目出完,用户输入结果时,再将结果与答案对比,并为用户输出提示,提醒正确或错误。

          2、最后给出总共对/错的数量。在比较用户输入的结果和答案时,若相等,输出提示时,将正确计数器加1;若不等,将错误提示器加1。最后输出两个计数器的值,并提示用户正确/错误的数值。

    三、源代码:

      1 //信1201-1   胡亚宝
      2 
      3 #include "stdafx.h"
      4 #include "stdlib.h"
      5 #include <time.h>
      6 
      7 int _tmain(int argc, _TCHAR* argv[])
      8 {
      9     srand(time(NULL)); //避免题目重复
     10 //存放正确答案和用户结果的数组
     11     int daan[100000],jieguo[100000];
     12     int x1,x2,flag,i,j,k;
     13     int x3,x4;
     14 //正确计数器和错误计数器
     15     int count1=0;
     16     int count2=0;
     17     int a[10];
     18     printf("---------------------------欢迎使用本系统打印题目!----------------------------
    ");
     19     //可定制打印的题目数
     20     printf("请输入要打印的题目数:");   
     21     scanf("%d",&a[0]);
     22     while(a[0]<=0)  //题目数必须为正数
     23     {
     24         printf("请重新输入有效的题目数:");
     25         scanf("%d",&a[0]);
     26     };
     27     //可定制运算数的范围
     28     printf("请输入运算数的范围:");
     29     scanf("%d",&a[2]);
     30     while(a[2]<=0)  //运算数必须为正数
     31     {
     32         printf("请重新输入有效的范围:");
     33         scanf("%d",&a[2]);
     34     };
     35     //可定制题目中是否有乘除法
     36     printf("请选择否有乘除法(是->1;否->0):");
     37     scanf("%d",&a[1]);
     38     while((a[1]!=1)&(a[1]!=0)) //只能选择1或0
     39     {
     40         printf("请重新输入有效的数值:");
     41         scanf("%d",&a[1]);
     42     };
     43     //可定制题目结果是否有负数
     44     printf("请选择结果有无负数(是->1;否->0):");
     45     scanf("%d",&a[3]);
     46     while((a[3]!=1)&(a[3]!=0))  //只能选择1或0
     47     {
     48         printf("请重新输入有效的数值:");
     49         scanf("%d",&a[3]);
     50     };
     51     //可定制结果是否有余数
     52     printf("请选择结果有无余数(是->1;否->0):");
     53     scanf("%d",&a[4]);
     54     while((a[4]!=1)&(a[4]!=0))  //只能选择1或0
     55     {
     56         printf("请重新输入有效的数值:");
     57         scanf("%d",&a[4]);
     58     };
     59     
     60     //可定制是否支持小数
     61     printf("请选择是否支持小数(是->1;否->0):");
     62     scanf("%d",&a[5]);
     63     while((a[5]!=1)&(a[5]!=0))  //只能选择1或0
     64     {
     65         printf("请重新输入有效的数值:");
     66         scanf("%d",&a[5]);
     67     };
     68     
     69     //可定制是否加括号
     70     printf("请选择是否加括号(是->1;否->0):");
     71     scanf("%d",&a[6]);
     72     while((a[6]!=1)&(a[6]!=0))  //只能选择1或0
     73     {
     74         printf("请重新输入有效的数值:");
     75         scanf("%d",&a[6]);
     76     };
     77 
     78     //循环打印符合要求的题目
     79     for(i=0;i<a[0];i++)
     80     {
     81         switch(a[1]) 
     82         {
     83         case 1:j=rand()%4;break;  //有乘除法
     84             case 0:j=rand()%2;break;  //无乘除法
     85             }
     86             x1=rand()%a[2]+1;
     87                 x2=rand()%a[2]+1;
     88           
     89         //循环打印
     90             if(j==0)
     91         {
     92             
     93             switch(a[6])
     94             {
     95             case 0:
     96                 switch(a[5])
     97                 {
     98                 case 0:printf("%d+%d=		",x1,x2);break;
     99                 case 1:
    100                     x3=rand()%9+1;
    101                     x4=rand()%9+1;
    102                     printf("%d.%d+%d.%d=		",x1,x3,x2,x4);break;
    103                 }
    104                 break;
    105                 
    106             case 1:
    107                 switch(a[5])
    108                 {
    109                 case 0:printf("(%d+%d)=	",x1,x2);break;
    110                 case 1:
    111                     x3=rand()%9+1;
    112                     x4=rand()%9+1;
    113                     printf("(%d.%d+%d.%d)=	",x1,x3,x2,x4);break;
    114                 }
    115                 break;
    116             }
    117 //计算当运算法则为加法时的正确结果,并存入数组
    118             jieguo[i]=x1+x2;
    119         }
    120         if(j==1)
    121         {
    122                         switch(a[3])
    123                         {
    124                 case 1: 
    125                                 break;
    126                     case 0:                   //结果无负数
    127                             if(x1<x2)            //被减数比减数小则交换
    128                             {
    129                                 flag=x1;
    130                                 x1=x2;
    131                                 x2=flag;
    132                              }
    133                         break;
    134                     }
    135             switch(a[6])
    136             {
    137             case 0:
    138                 switch(a[5])
    139                 {
    140                 case 0:printf("%d-%d=		",x1,x2);break;
    141                 case 1:
    142                     x3=rand()%9+1;
    143                     x4=rand()%9+1;
    144                     printf("%d.%d-%d.%d=		",x1,x3,x2,x4);break;
    145                 }
    146                 break;
    147                 
    148             case 1:
    149                 switch(a[5])
    150                 {
    151                 case 0:printf("(%d-%d)=	",x1,x2);break;
    152                 case 1:
    153                     x3=rand()%9+1;
    154                     x4=rand()%9+1;
    155                     printf("(%d.%d-%d.%d)=	",x1,x3,x2,x4);break;
    156                 }
    157                 break;
    158             }
    159 //计算当运算法则为减法时的正确结果,并存入数组
    160             jieguo[i]=x1-x2;
    161         }
    162         if(j==2)
    163         {
    164             
    165             switch(a[6])
    166             {
    167             case 0:
    168                 switch(a[5])
    169                 {
    170                 case 0:printf("%d*%d=		",x1,x2);break;
    171                 case 1:
    172                     x3=rand()%9+1;
    173                     x4=rand()%9+1;
    174                     printf("%d.%d*%d.%d=		",x1,x3,x2,x4);break;
    175                 }
    176                 break;
    177                 
    178             case 1:
    179                 switch(a[5])
    180                 {
    181                 case 0:printf("(%d*%d)=	",x1,x2);break;
    182                 case 1:
    183                     x3=rand()%9+1;
    184                     x4=rand()%9+1;
    185                     printf("(%d.%d*%d.%d)=	",x1,x3,x2,x4);break;
    186                 }
    187                 break;
    188             }
    189 //计算当运算法则为乘法时的正确结果,并存入数组
    190             jieguo[i]=x1*x2;
    191         }
    192         if(j==3)
    193         {    
    194             switch(a[4])
    195             {
    196             case 1:                         //结果可有余数
    197                 break;
    198             case 0:                        //结果无余数
    199                 while(x1%x2!=0)            //如果不能整除,则重新生成
    200                 {
    201                     x1=rand()%a[2]+1;   
    202                     x2=rand()%a[2]+1; 
    203                    };
    204                 break;
    205                }
    206             switch(a[6])
    207             {
    208             case 0:
    209                 switch(a[5])
    210                 {
    211                 case 0:printf("%d/%d=		",x1,x2);break;
    212                 case 1:
    213                     x3=rand()%9+1;
    214                     x4=rand()%9+1;
    215                     printf("%d.%d/%d.%d=		",x1,x3,x2,x4);break;
    216                 }
    217                 break;
    218                 
    219             case 1:
    220                    switch(a[5])
    221                 {
    222                 case 0:printf("(%d/%d)=	",x1,x2);break;
    223                 case 1:
    224                       x3=rand()%9+1;
    225                     x4=rand()%9+1;
    226                     printf("(%d.%d/%d.%d)=	",x1,x3,x2,x4);break;
    227                   }
    228                 break;
    229             }
    230 //计算当运算法则为除法时的正确结果,并存入数组
    231             jieguo[i]=x1/x2;
    232         }
    233     }
    234 
    235     for(k=0;k<a[0];k++)
    236     {
    237         
    238         printf("请输入第%d个答案:",k+1);
    239         scanf("%d",&daan[k]);
    240 //比较结果是否正确,并计数
    241         if(daan[k]==jieguo[k])
    242         {
    243             printf("正确!
    ");
    244                 count1++;    
    245         }
    246         else
    247         {
    248             printf("错误!
    ");
    249                 count2++;
    250         }
    251 
    252 
    253     }
    254     printf("
    正确答案有%d个,",count1);   
    255     printf("错误答案有%d个。
    ",count2);
    256     printf("------------------------------出题完毕,欢迎再次使用!--------------------------
    ");
    257     return 0;
    258 }

    四、运行结果:

    五、心得体会:

          1、首先看到这个要求时,我首先想到的是在现有的循环中加判断条件,每确定一种运算法则就计算出结果并比较,但是在实现的过程中,我发现这样非常繁琐,而且输出时每出一道题就会要求输出答案,这样页面很不美观。于是我新加了for循环,在所有题目出完后,一起写答案。

          2、我发现在代码编写的过程中,出现的语法问题大大减少,并不像开始的时候那样有很多细小错误,之前出现的错误我也有意识注意。但是还是有两个小问题:使用数组没有提前定义、计算数值的算式位置放错,通过编译也都解决。

    六、PSP0级相关日志:

    1、项目计划日志

    周活动总结表

    姓名:胡亚宝                                                                    日期:3/20

    日期任务 听课     编写程序 阅读书本 考研复习  安装软件 日总计  
    周日            
    周一            
    周二            
    周三            
    周四  300  50  30  90  80  550
    周五  200  60  30      290
    周六            
    周总结  500  110  60  90  80  840

    阶段时间和效率                                                                      周数:1

    不包括上一周在内的累计时间                                                                

    总计                         
    平均          
    最大          
    最小          

     以前各周的累计时间                                                                         

    总计 500 110 60 90 80 840
    平均 500 110 60 90  80 840 
    最大 500 110 60 90 80 840
    最小 500  110 60  90  80 840 

    2、时间记录日志

    学生:胡亚宝                                                                     日期:3/20

    教师:王建民                                                                      课程:PSP

    日期 开始时间 结束时间 中断时间 净时间 活动 备注
    3/19 08:00 12:00 40 200 听课(嵌入式系统、接口技术) 课间休息
      14:00 15:50 10  100 听课(嵌入式软件开发技术) 课间休息
      16:00 17:30   90 考研复习  
      18:30 20:00 10 80 安装软件 休息
      20:10 21:00   50 编写程序(终极版四则运算)  
      21:00 21:30   30 阅读(梦断代码)  
     3/20 08:00 12:00 40  200 听课(软件工程、操作系统) 课间休息 
      14:30 15:40 10  60 编写程序(升级版四则运算) 休息、问题 
      21:00 21:30   30  阅读(梦断代码)   

    3、缺陷记录日志

    学生:胡亚宝                                                                日期:3/20

    教员:王建民                                                                程序号:02

    日期 编号 类型    引入阶段 排除阶段 修复阶段 修复缺陷
    3/19  1  001  设计 编译  20min  
    描述:判断语句位置错误
      002  编码  编译 1min   
    描述:使用数组之前没有定义
     3/20  3 003  设计 编译  5min   
    描述:计算数值的算式位置放错
  • 相关阅读:
    tp5使用外部类的三种方法
    thinkphp5中php7中运行会出现No input file specified. 这个你改个东西
    21.Yii2.0框架多表关联一对多查询之性能优化--模型的使用
    20.Yii2.0框架多表关联一对多查询之hasMany
    19.Yii2.0框架模型删除记录
    18.Yii2.0框架模型修改记录 和 修改点击量
    17.Yii2.0框架模型添加记录
    15.Yii2.0框架where单表查询
    14-15.Yii2.0模型的创建/读取数据使用,框架防止sql注入
    12.Yii2.0框架视图模版继承与模版相互调用
  • 原文地址:https://www.cnblogs.com/huyabaoboke/p/4351379.html
Copyright © 2020-2023  润新知