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

题目:

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

一:基本要求

    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:编写过程中,不仅要有基本的编写能力,遇到不懂的地方要学会利用资源、查阅资料。

    

原文地址:https://www.cnblogs.com/122zy/p/4441128.html