• 第三次作业(张燕、毛茸)


    题目:

    •   请编写一个能自动生成小学四则运算题目的 “软件”。
    •   让程序能接受用户输入答案,并判定对错。 
    •   最后给出总共 对/错 的数量。

    一:基本要求

        1:题型选择界面设计,选择加、减、乘、除运算。

        2:系统随机产生一百以内的两个数进行运算。

        3:练习时,用户从键盘输入结果,正确和错误均有提示,按6,显示总题数和正确数。

    二:需求分析

         编写小学四则运算测试系统,要求完成两位数的加,减,乘,除四则运算。能根据用户的输入来选择运算种类,用户输入答案后可以判断正误,做完一次测试后,用户可以决定是否继续进行下一次运算。

    三:设计

        1:定义变量i,j,a,b,m其中i表示答对的题数,j表示答错的题数,a,b表示随机产生的数,m接收从键盘输入的运算结果。

        2:分别定义加,减,乘,除子函数,出错和正确都有提示。

        3:主函数用switch来实现用户的输入来选择运算种类,并输出答题的数目和正确的题数。

    四:扩展功能

        1:可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。

        2:程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。

        3:用户答题结束以后,程序可以显示用户答题所用的时间。

    五:代码风格

        1:代码风格的原则--简明,易读,无二义性。

        2:括号使用--在复杂的条件表达式中,用了括号清楚的表示逻辑优先级。

        3:使用断行与空白的{}行--在有多层控制嵌套时,每个“{”和“}”都独占一行,这样的格式就容易看清楚结构和对应关系。

        4:函数命名--对函数命名时,用具有实际生活意义的英文来命名,使人能一眼看出函数的作用(例如:在我们这次实验中,add函数所对应就是要实现的加法运算)

        5:注释--在我们的代码中,为了使读者能够清楚地读懂代码实现过程,为一些的语句作了相应的注释,增加了代码的可读性。

    六:代码设计规范

        1:函数--代码编写中,每一个子函数只对应一种相应的算法(例如:子函数add对应“+”运算、subtract对应“-”运算、multiply对应“*”运算、divide对应“/”运算)。

        2:函数声明与具体实现分别存放在头文件(.h)和源文件(.c)中。

    七:代码实现

    definition.h文件

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    void add(int a,int b) ;
    void subtract(int a,int b)  ;
    void multiply(int a,int b);
    void divide(int a,int b)   ;

      text.cpp文件

    /****************************************
    *程序名:test.cpp
    *作者:张燕、毛茸
    *功能:进行简单的四则运算测试
    *日期:2015-4-22
    *****************************************/
    #include "definition.h"
    int i=0,j=0;
    
    void add(int a,int b)                                                    //实现加法运算  
    {
        int m;
        srand(time(NULL));    
        a=1+rand()%100;                                                            //随机产生一个100以内的数
        b=1+rand()%100;                         
        printf("请输入运算结果:%d+%d=
    ",a,b);
        scanf("%d",&m);
        if(m==a+b)
        {
            printf("恭喜你答对了
    ");
            i++;                                                                //统计正确的个数
        }
        else
        {
            printf("你答案有错误
    ");
            j++;                                                                  //统计出错的题的个数
        }
         
    }
     
    void subtract(int a,int b)                                                     //实现减法运算  
    {
        int m;
        srand(time(NULL));
        a=1+rand()%100;
        b=1+rand()%100;
    
        if(a<b)                                                                  //随机产生的两个数,当a小于b时,交换两数的值
        {
            int t=0;   
            t=a;a=b;b=t;
        }
        printf("请输入运算结果:%d-%d=
    ",a,b);
        scanf("%d",&m);
        if(m==a-b)
        {
            printf("答对了,你真聪明
    ");
            i++;
        }
        else
        {
            printf("有错误,下次细心
    ");
            j++;
        }
         
    }
    
    void multiply(int a,int b)                                                       //实现乘法运算                                             
    {
        int m;
        srand(time(NULL));
        a=1+rand()%20;
        b=1+rand()%20;
        
        if(b%5==0)
        {
            b=b;
           printf("%d * %d =
    ",a,b);
        }
        else
        {
            b=-b;
            printf("%d * (%d) =
    ",a,b);
      
        }
        scanf("%d",&m);
        if(m==a*b)
        {
            printf("太好了,你答对啦!
    ");
            i++;
        }
        else
        {
            printf("错了,再接再励
    ");
            j++;
        }
         
    }
    
    void divide(int a,int b)                                                      //实现除法运算  
    {
        int m;
        srand(time(NULL));
        a=1+rand()%100;
        b=1+rand()%100;
        if(b==0)
        {
            b=1+rand()%100;
        }
        
        if(a<b)
        {
            int t=0;
            t=a;a=b;b=t;
        }
    
        while(a%b!=0)
        {
            a=1+rand()%100;
            b=1+rand()%100;
        }
     
        printf("请输入运算结果%d / %d =
    ",a,b);
        scanf("%d",&m);
        if(m==a/(float)b)
        {
            printf("恭喜你答对了
    ");
            i++;
        }
        else
        {
            printf("你答案有错误
    ");
            j++;
        }
    }

      text_main.cpp文件

    
    
    /****************************************
    *程序名:test_main.cpp
    *作者:张燕、毛茸
    *功能:进行简单的四则运算测试
    *日期:2015-4-22
    *****************************************/

    /*进行时间的统计,输出用户做题所用的时间,以及用户答题的总数和正确题数*/ #include "definition.h"
    #include "test.cpp" int main() { double start, finish; int time1; //定义运行时间 int select,select1;
    int a,b; start = clock(); //获取开始时间 while(1) { printf(" 欢迎进入四则运算系统: "); printf("你将进行100以内的四则运算: "); printf(" 1.加法运算 "); printf(" 2.减法运算 "); printf(" 3.乘法运算 "); printf(" 4.除法运算 "); printf(" 请选择"); scanf("%d", &select); //进行加、减、乘、除法的选择 switch(select) { case 1:add(a,b);break; case 2: subtract(a,b);break; case 3:multiply(a,b);break; case 4:divide(a,b);break; } printf("------------------------------------------------------- "); printf(" 5.请重新选择 "); printf(" 6.结束 "); scanf("%d", &select1); printf("------------------------------------------------------- "); if(select1==6) break; finish = clock(); //获取完成时间 time1 = (int)(finish - start) /CLOCKS_PER_SEC; if(time1>120) { printf( "时间已到,用户不能再答题 "); break; } } printf("你回答题的总数%d和正确的个数%d ",i+j,i); printf( "运行时间为:%d 秒 ",time1); //以秒为单位显示之 return 0; }

    calc.cpp文件(加、减、乘、除)

    #include "definition.h"

    int add(int a,int b)                                                  //加法运算
    {
    int result = a + b;
    return result;
    }

    int subtract(int a,int b)                                             //减法运算
    {
    int result = a - b;

    return result;
    }

    int multiply(int a,int b)                                                     //乘法运算

    {
    int result = a * b;
    return result;
    }


    float divide(int a,int b)                                                        //除法运算
    {
    int result = a /b;
    return result;
    }

     assert.c文件(进行加法测试)

      #include<stdio.h>
      #include<stdlib.h>
      #include<time.h>
      #include<assert.h>
      #include "definition.h"
      int testadd()                                                           //测试加法运算
      {
          assert(6==add(2,3));
          assert(30==add(14,16));
          assert(55==add(20,35));
         return 1;
     }
    
    

    八:系统测试

       (1) 加法运算界面,包括做的总题数和正确数

     

       (2)减法运算界面

     

       (3)乘法运算界面

     

       (4)除法运算界面

     

    九:PSP耗时统计

    序号 psp 耗时(min) 百分比(%)
    1 需求分析 35 17.1
    2 设计 60 29.3
    3 代码实现 80 39
    4 测试 20 9.8
    5 分析和总结 10 4.9

    十:合作步骤

      1:我们两人一起对实验要求进行分析、讨论,各自提出自己的观点。

      2:在写实验报告时,每一步都是合作完成的,我们先各自说怎么写,最后综合两人的观点。

      3:代码规范设计方面,我们认真阅读教材Page57:4.2-4.3节中内容,进行了风格、设计讨论,了解之后,一人说一人写。

      4:一起讨论如何采用模块化的思想,将函数封装起来。如:函数声明存放在头文件(.h),具体实现存放在源文件(.cpp)中。

      5:对该软件的功能进行了扩展, 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。每一次测试结束会      给出本次测试的时间,或者在120秒时间内未完成给出的题目,则会显示时间已到,不能答题!

    十一:事后分析和总结

        1:首先看到题目,对函数的封装和测试不了解,在老师的讲解下,大概知道了函数封装和测试的基本思想。

        2:码调试过程中,出现了一些细节性的小错误,通过仔细排查,找出错误并解决。

        3:在这次实验中我们了解了代码的风格和代码的设计规范。

        4:编写过程中,不仅要有基本的编写能力,遇到不懂的地方要学会利用资源、查阅资料。

        

  • 相关阅读:
    删除字符串中的所有相邻的重复项
    前序 中序 后序
    用栈构建数组
    字符串
    链表相交 走完自己的路去走他人的路 总会相交
    环形链表
    selenium的简单登录操作
    【Spring 从0开始】IOC容器的Bean管理
    Ubuntu系统的常用命令:ssh保活、用户管理、开机自启、后台运行
    远程访问安装xfce4的内网服务器
  • 原文地址:https://www.cnblogs.com/122zy/p/4441128.html
Copyright © 2020-2023  润新知