• 二柱子的四则运算(3.0)


    目录

    • 结对对象
    • 任务要求
    • 分工说明
    • 设计思路
    • 遇到的问题
    • 源代码
    • 运行成果
    • 总结

    结对对象

    •  姓名:   侯熙磊  
    •  班级:  土1603-1班、
    •  学号:  20160672

    •  简介: 性别男。爱好下象棋,踢足球。在组内负责程序修改和测试,一般都是有很多BUG的,还要改进一下,显得更加美观。

    任务要求

    •  实现在线答题。
    •  答题结束后,可以判断对错。
    •  并将错题的结果保存起来。

    分工说明

    • 黄睿麒:前期大部分代码的编写,中期文件处理的代码实现,后期软件图标的设计,解决了负数和正负数计算分开问题、将答题过程导出保存TXT文件、统计错题给出百分制分数的及格和不及格问题。
    • 侯熙磊:前期小部分代码的编写文件处理和测试类的思路提供,后期修改和完善代码内容和规范。提供了两个数运算时正负时除数不为零的代码;测试代码和选择正数运算时,除法有负数的BUG修复;测试代码和BUG提出和修改。

    设计思路

         本次实验运用选择和循环将运算分开简化。首先将所需四则运算中的负数分割出来,运用switch和case进行选择。在生成随机数时运用srand配合rand()生成真随机数,和运算符号。出题和答案则使用if选择和for循环进行这次难点在我看来是在将数据输出上,运用fprintf()函数将所需结果导入到txt格式文件中。

    源代码

    复制代码
      1 #include <stdio.h> 
      2 #include <stdlib.h>
      3 #include <time.h>
      4 int main()
      5  { 
      6     FILE *fpt;
      7     fpt = fopen("四则运算.txt","w");
      8     fprintf(fpt,"四则运算在线答题错题记录
    ");
      9     int k,n,m,i,s,j,g,h;
     10     n=5;
     11     float score=0;
     12     int a,b;
     13     int answers[1000]={0},user_answer[1000]={0};
     14     a=0;
     15     b=0; 
     16     printf("
    请输入数字类型(1.正数 2.正负数) -1或其他数字为退出程序: ");
     17     scanf("%d",&h);
     18     fprintf(fpt,"
    请输入数字类型(1.正数 2.正负数) -1或其他数字为退出程序:  %d ",h);
     19     
     20     
     21     switch(h)
     22     {
     23     case 1:
     24         {
     25             printf("请输入题目数(1-1000)");
     26             scanf("%d",&k);    
     27             if (k<1||k>1000)   
     28             { 
     29                 printf("
    超出允许范围
    "); 
     30                 printf("请再次输入题目数
    "); 
     31                 scanf("%d",&k); 
     32             } 
     33             printf("请选择出题方式:0.加法 1.减法 2.乘法 3.除法 4.随机
    ");
     34             scanf("%d",&m); 
     35             if (m<0||m>4)   
     36             { 
     37                 printf("
    出题方式选择错误
    "); 
     38                 printf("请再次输入出题方式前序号
    "); 
     39                 scanf("%d",&m); 
     40             } 
     41             printf("
    ********************开始答题************************
    ");  
     42             fprintf(fpt,"
    ********************开始答题************************
    ");  
     43             srand((int)time(0));
     44             for (i=0;i<k;i++)
     45             {  
     46                 a=rand()%100;   
     47                 b=rand()%100;
     48                 while(a<-100||a>100||b<-100||b>100)   
     49                 {    
     50                     a=rand()%201-100;   
     51                     b=rand()%201-100;
     52                 }
     53                 a=a;
     54                 b=b;
     55                 if(m==4)    
     56                     n=rand()%4;  
     57                 if (m==0||n==0)                              
     58                 {    
     59                     printf("
    第%d题:%d+%d=",i+1,a,b);
     60                     fprintf(fpt,"
    第%d题:%d+%d=",i+1,a,b);
     61                     scanf("%d",&user_answer[i]);
     62                     answers[i]=a+b;  
     63                 }   
     64                 if (m==1||n==1)
     65                 {   
     66                     if (a>b)  
     67                     {   
     68                         printf("
    第%d题:%d-%d=",i+1,a,b);
     69                         fprintf(fpt,"
    第%d题:%d-%d=",i+1,a,b);
     70                         scanf("%d",&user_answer[i]);    
     71                         answers[i]=a-b;  
     72                     } 
     73                     else   
     74                     {       
     75                         printf("
    第%d题:%d-%d=",i+1,b,a);
     76                         fprintf(fpt,"
    第%d题:%d-%d=",i+1,b,a); 
     77                         scanf("%d",&user_answer[i]);  
     78                         answers[i]=b-a;
     79                     } 
     80                 }
     81                 if (m==2||n==2)    
     82                 {    
     83                     printf("
    第%d题:%d*%d=",i+1,a,b); 
     84                     fprintf(fpt,"
    第%d题:%d*%d=",i+1,a,b); 
     85                     scanf("%d",&user_answer[i]);   
     86                     answers[i]=a*b;   
     87                 } 
     88                 if (m==3||n==3)  
     89                 {      
     90                     s=a*b;        
     91                     while(s<-100||s>100||a==0)   
     92                     {
     93                         a=rand()%100;   
     94                         b=rand()%100;
     95                         s=a*b;
     96                     }   
     97                     printf("
    第%d题:%d/%d=",i+1,s,a);
     98                     fprintf(fpt,"
    第%d题:%d/%d=",i+1,s,a);
     99                     scanf("%d",&user_answer[i]);
    100                     answers[i]=s/a;
    101                 } 
    102             } 
    103             printf("
    答题结果和正确答案:
    ");  
    104             fprintf(fpt,"
    答题结果和正确答案:
    ");  
    105             for (i=0;i<k;i++)                                                  
    106             { 
    107                 if (user_answer[i]==answers[i]) 
    108                 { 
    109                     printf("%d:正确 %d
    ",i+1,answers[i]);
    110                     fprintf(fpt,"%d:正确 %d
    ",i+1,answers[i]);
    111                     score++; 
    112                 }
    113                 else printf("%d:错误 %d
    ",i+1,answers[i]);
    114                 fprintf(fpt,"%d:错误 %d
    ",i+1,answers[i]);
    115             }  
    116             score=100*score/k;  
    117             printf("
    总得分(百分制):%f
    ",score);
    118             fprintf(fpt,"
    总得分(百分制):%f
    ",score);
    119             if (score<60) {printf("很遗憾!你的分数不及格,继续努力
    "); 
    120             fprintf(fpt,"很遗憾!你的分数不及格,继续努力
    "); 
    121             }
    122             else 
    123             {
    124                 printf("恭喜!你的成绩合格
    "); 
    125                 fprintf(fpt,"恭喜!你的成绩合格
    "); 
    126             }
    127             printf("*****************************************************
    ");
    128             fprintf(fpt,"*****************************************************
    ");
    129             fclose(fpt);
    130             printf("继续答题请输入任意数字
    结束请点击右上角关闭程序
    ");
    131             scanf("%d",&g);
    132             return main();
    133 }
    134 case 2:
    135     {
    136         printf("请输入题目数(1-1000)");
    137         scanf("%d",&k);    
    138         if (k<1||k>1000)   
    139         { 
    140             printf("
    超出允许范围
    "); 
    141             printf("请再次输入题目数
    "); 
    142             scanf("%d",&k); 
    143         } 
    144         printf("请选择出题方式:0.加法 1.减法 2.乘法 3.除法 4.随机
    ");
    145         scanf("%d",&m); 
    146         if (m<0||m>4)   
    147         { 
    148             printf("
    出题方式选择错误
    "); 
    149             printf("请再次输入出题方式前序号
    "); 
    150             scanf("%d",&m); 
    151         } 
    152         printf("
    ********************开始答题************************
    ");  
    153         fprintf(fpt,"
    ********************开始答题************************
    ");  
    154         srand((int)time(0));
    155         for (i=0;i<k;i++)
    156         {  
    157             a=rand()%201-100;   
    158             b=rand()%201-100;
    159             while(a<-100||a>100||b<-100||b>100)   
    160             {    
    161                 a=rand()%201-100;   
    162                 b=rand()%201-100;
    163             }
    164             a=a;
    165             b=b;
    166             if(m==4)    
    167                 n=rand()%4;  
    168             if (m==0||n==0)                              
    169             {    
    170                 printf("
    第%d题:%d+%d=",i+1,a,b);
    171                 fprintf(fpt,"
    第%d题:%d+%d=",i+1,a,b);
    172                 scanf("%d",&user_answer[i]);
    173                 answers[i]=a+b;  
    174             }   
    175             if (m==1||n==1)
    176             {   
    177                 if (a>b)  
    178                 {   
    179                     printf("
    第%d题:%d-%d=",i+1,a,b);
    180                     fprintf(fpt,"
    第%d题:%d-%d=",i+1,a,b);
    181                     scanf("%d",&user_answer[i]);    
    182                     answers[i]=a-b;  
    183                 } 
    184                 else   
    185                 {       
    186                     printf("
    第%d题:%d-%d=",i+1,b,a);
    187                     fprintf(fpt,"
    第%d题:%d-%d=",i+1,b,a); 
    188                     scanf("%d",&user_answer[i]);  
    189                     answers[i]=b-a;
    190                 }
    191             }
    192             if (m==2||n==2)    
    193             {    
    194                 printf("
    第%d题:%d*%d=",i+1,a,b); 
    195                 fprintf(fpt,"
    第%d题:%d*%d=",i+1,a,b); 
    196                 scanf("%d",&user_answer[i]);   
    197                 answers[i]=a*b;   
    198             } 
    199             if (m==3||n==3)  
    200             {      
    201                 s=a*b;        
    202                 while(s<-100||s>100||a==0)   
    203                 {
    204                     a=rand()%201-100;   
    205                     b=rand()%201-100;
    206                     s=a*b;
    207                 }   
    208                 printf("
    第%d题:%d/%d=",i+1,s,a);
    209                 fprintf(fpt,"
    第%d题:%d/%d=",i+1,s,a);
    210                 scanf("%d",&user_answer[i]);
    211                 answers[i]=s/a;
    212             } 
    213         } 
    214         printf("
    答题结果和正确答案:
    ");  
    215         fprintf(fpt,"
    答题结果和正确答案:
    ");  
    216         for (i=0;i<k;i++)                                                  
    217         { 
    218             if (user_answer[i]==answers[i]) 
    219             { 
    220                 printf("%d:正确 %d
    ",i+1,answers[i]);
    221                 fprintf(fpt,"%d:正确 %d
    ",i+1,answers[i]);
    222                 score++; 
    223             } 
    224             else printf("%d:错误 %d
    ",i+1,answers[i]);
    225             fprintf(fpt,"%d:错误 %d
    ",i+1,answers[i]);
    226         }  
    227         score=100*score/k;  
    228         printf("
    总得分(百分制):%f
    ",score);
    229         fprintf(fpt,"
    总得分(百分制):%f
    ",score);
    230         if (score<60) {printf("很遗憾!你的分数不及格,继续努力
    "); 
    231         fprintf(fpt,"很遗憾!你的分数不及格,继续努力
    "); 
    232         }
    233         else 
    234         {
    235             printf("恭喜!你的成绩合格
    "); 
    236             fprintf(fpt,"恭喜!你的成绩合格
    ");
    237         }
    238         printf("*****************************************************
    ");
    239         fprintf(fpt,"*****************************************************
    ");
    240         fclose(fpt);
    241         printf("继续答题请输入任意数字
    结束请点击右上角关闭程序
    ");
    242         scanf("%d",&g);
    243         return main();
    244      }
    245      while(h!=-1);
    246 }
    247 }
    复制代码

    遇到的问题

         本程序在刚开始调试时有许多错误,出现过不能运行、不能随机出现四则运算、不会输出正确结果、选择乘法却出现减法等等问题。耗费时间最多是在于运用fprintf函数上,之前没使用过用的时候就抓麻了。在生成随机数的时侯最开始忘记使用srand函数,导致出的题目每次都是一样的也就是伪随机数,最后百度上查到原因和解决方法才改好。

    运行结果

         

            

           

           

    总结

          写程序时必须要细心,不能输错一个字符标点。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。这次代码编写在反反复复检查排错修改中给了手残的我很大的教训。

  • 相关阅读:
    在operator =中要处理“自我赋值”
    delete指针以后应赋值为NULL
    【转】C++对成员访问运算符->的重载
    【转】浅析SkipList跳跃表原理及代码实现
    【KakaJSON手册】05_JSON转Model_05_动态模型
    【KakaJSON手册】04_JSON转Model_04_值过滤
    【KakaJSON手册】03_JSON转Model_03_key处理
    【KakaJSON手册】02_JSON转Model_02_数据类型
    【KakaJSON手册】01_JSON转Model_01_基本用法
    利用eclipse调试JDK源码
  • 原文地址:https://www.cnblogs.com/xilei123/p/9865818.html
Copyright © 2020-2023  润新知