zoukankan      html  css  js  c++  java
  • 第三次作业-徐镇、尚清丽

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

    ——需求分析:

                此“软件”主要面向小学生,考虑到小学生对计算机的使用和掌握程度有限,所以此“软件”的操作应尽量简单,易使用;

                用户能在此"软件"上练习简单的四则运算;

                此“软件”能提交用户的答案,并判断对错;

               在使用此 “软件”后及时给出正确与错误的题目数。

    ——基本功能要求:

              对于该题目,首先该设计一个程序能自动生成两个0-100之间的整数;

              其次,在键盘上要选择哪种运算,需要做一个判断选择代码;

              再次,用户在控制窗口输入自己的答案,该程序能够判断用户所输入的答案对错;

              最后,程序能给出最后所做题目的数量以及所做题目对与错的数量。

    ——扩展功能:

           1.用户答题结束以后,程序可以显示用户答题所用的时间;

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


    ——设计:

             考虑到小学生的计算能力有限,本“软件”随机生成百以内的操作数;

             考虑学生的年级跨越较大,且各年级的学生掌握的知识水平有差异。本“软件”采用菜单的方式,可由用户选择所要练习的运算法则;

             考虑到小学生在小学阶段没有接受过负数知识,本“软件”确保在用户进行减法练习时,随机生成的两个操作数相减不会出现负数;

             另外,考虑到用户进行除法练习时对无法整除的运算结果输入不便,本“软件”确保在用户进行除法练习时,随机生成的两个操作数相除不会出现分数或小数;

             对年级较高的学生,本“软件”设计了四则混合运算,方便用户进行综合练习;

             最后,本“软件”在设计上使用C语言实现,在VC++6.0运行。

    ——代码实现:

           采用模块化设计思想,修改之前的code,将 “计算功能” 封装起来在C语言环境下,将函数声明与具体实现分别存放在头文件(.h)和源文件(.c)中;

           

           

    函数声明declare.h  

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int calc(const char operation,int num1,int num2);
    int test(int n);
    void doExercise(int n);

    主函数main.cpp:

    #include "declare.h"
    
    void main()
    {
        int choice=0;
        do
        {
            printf("	1、加法练习	2、减法练习
    ");
            printf("	3、乘法练习	4、除法练习
    ");
            printf("	5、综合练习	0、退出系统
    ");
            printf("===================================================
    ");
            printf("请输入你的选择(0--5):");
            
            int choice;
            scanf("%d",&choice);
            
            while(choice<0 || choice>5)
            {
                printf("你的输入有误,请重新输入:");
                scanf("%d",&choice);
            }
            if(choice==0)
                break;                    //用户选择0,退出循环(退出系统)
            
            doExercise(choice);        //做什么练习,并启动评分
            
        }while(true);
        printf("尚清丽和徐镇制作
    ");
        printf("谢谢使用本软件,再见
    ");
    }

    计算函数calc.h

    #include "declare.h"
    int calc(const char operation,int num1,int num2)
    {
        switch(operation)
        {
        case '+':
            return num1+num2;
            break;
            
        case '-':
            return num1-num2;
            break;
            
        case '*':
            return num1*num2;
            break;
            
        case '/':
            return num1/num2;
            break;
        }
    }
    int test(int n)
    {
        int ranswer=0;            //正确答案
        int uanswer=0;            //用户输入的答案
        int t=0;            //临时变量
        char operation;            //运算类别
        int num1=0;            //操作数1
        int num2=0;            //操作数2
        
        srand(time(NULL));        //初始化随机数种子
        num1=rand()%100;        //取0—100之间的随机数
        num2=rand()%100;
        
        //进入程序功能,如果选择5就随机产生1-4所代表的每一种运算方式
        if(n==5)
        {
            n=rand()%4+1;
        }
        
        switch(n)
        {
        case 1:
            operation='+';
            break;
        case 2:
            operation='-';
            break;
        case 3:
            operation='*';
            break;
        case 4:
            operation='/';
            break;
        }
        
        if((operation=='-') && (num1<num2))//当减数大于被减数数时,交换
        {
            t=num1;
            num1=num2;
            num2=t;
        }
        
        if(operation=='/')
        {
            if(num2==0)
                num2=1;//当除数随机取0时,就将除数置为1
            num1=num1*num2;//为确保整除将被除数与除数的乘积赋值给被除数
        }
        
        //输出测试题本身、提示用户输入
        printf("%d%c%d= ",num1,operation,num2);
        scanf("%d",&uanswer);
        
        //程序计算正确结果
        ranswer=calc(operation,num1,num2);
    
        //评判,做对返回1,做错返回0
        if(uanswer==ranswer)
        {
            printf("回答正确!
    ");
            return 1;
        }
        else 
        {
            printf("回答错误!
    ");
            return 0;
        }
    }
    void doExercise(int n)
    {
        clock_t start,end;
        double use=0;
        int score=0;        //练习得分,初始化为0
        int i=0;            //练习题数的计数器
        start=clock();//记录开始时间    
        for(i=1;i<=10;i++)
        {        
            end=clock();//记录结束时间
            if((double)(end-start)/CLK_TCK<120)
            {
                score=score+test(n);
            }
            else 
            {
                printf("时间已到,不能答题!
    ");
                break;
            }
        }
        if(i==11)
        {
            end=clock();//记录结束时间
            use=(double)(end-start)/CLK_TCK;
            printf("耗时%lf秒
    ",use);
        }
        printf("本次练习%d道题,你答对了%d道,答错了%d道
    ",i-1,score,i-1-score);
        printf("========================================================
    ");
    }

    测试代码test.h

    #include "declare.h"
    #include "assert.h"
    void main()
    {
        int result=0;
        result=calc('+',4,2);
        assert(result==6);
    
        result=calc('-',4,2);
        assert(result==2);
    
        result=calc('*',4,2);
        assert(result==8);
    
        result=calc('/',4,2);
        assert(result==2);
    }

    ——运行效果:

     

    ——两人合作步骤:

         本次作业是在第二次作业的基础上进一步修改与完善的,徐镇和尚清丽同学组成了一组进行了相应的讨论与改进。

         1、需求分析,建立在第一次作业的基础上,没有做太多的改动;

         2、代码规范设计方面,我们认真阅读教材Page57:4.2-4.3节中内容,进行了风格讨论,了解之后修改了一下我们的原程序,使之符合 “代码风格和设计规范”的基本要求,并          采用模块化的思想,我们将函数封装起来,将函数声明存放在头文件(.h),具体实现存放在源文件(.cpp)中;

         3、我们认真阅读教材Page21:2.1.1节内容,并进行了相关测试;编写test.c文件对加减乘除进行相关测试;

         4、对该软件的功能进行了扩展,每一次测试结束会给出本次测试的时间,或者在120秒时间内未完成给出的题目,则会显示时间已到,不能答题!;

         5、我们进行的每一步,两个人分工合作,你做我看,互相监督并指出相应的问题等等,同时也进行了PSP项目耗时记录。

     ——PSP:

    ——总结:

         本次作业对于我们来说还是有一定的难度,我们也努力认真的去对待,认真阅读了书籍,了解到代码规范和两人合作的相关内容,体会到了软件工程这门课的魅力。当然,我们的作业依然存在很多不足,我们深知我们的编程能力和设计能力都还远远不够,相信以后在老师的指导下能够进一步的去提高自己。同时,也希望老师针对我们的作业给出宝贵的意见,我们会针对老师提出的问题再去进一步的讨论!!!谢谢!!

                                                 

                                                                                                                                                                              作者: 徐镇、尚清丽

                                                                                                                                                                              时间:2015年4月19日

      

    【永不言弃】
  • 相关阅读:
    洛谷 P1080 [NOIP2012 提高组] 国王游戏
    洛谷 P4370 [Code+#4]组合数问题2
    洛谷 P4369 [Code+#4]组合数问题
    洛谷 P3311 [SDOI2014] 数数
    implicit关键字详解
    模式匹配
    option[T]、Any、Nothing、Null类型的介绍
    高阶函数
    函数的介绍
    集合
  • 原文地址:https://www.cnblogs.com/xuzhen1992/p/4439592.html
Copyright © 2011-2022 走看看