20194621 自动生成四则运算题第一版报告

时间:2019-09-16
本文章向大家介绍20194621 自动生成四则运算题第一版报告,主要包括20194621 自动生成四则运算题第一版报告使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、需求分析

1.1目标用户需求分析

四则运算是小学数学的重要内容,也是学习其它各有关知识的基础;利用自动生成四则运算题程序可以进一步培养小学生计算能力,提高运算能力,并且减少老师和家长出题工作量。

1.2功能需求分析

(1)编写小的学四则运算测试系统,要求完成两位数以内(包括两位数)的加,减,乘,除四则运算。

(2)题目数量、难度(是否包含乘除法、是否包含负数)、操作数数值可定制。

(3)能够将生成的运算题存储记事本中。

二、功能设计

2.1基本功能

(1)自动生成10道100以内的2个操作数的四则运算算式(+ - *  /),运算结果在100以内。

(2)剔除重复算式。

(3)题目数量可定制(范围在1~1000道)。

(4)相关参数可控制

          是否包含乘法和除法。

          操作数数值范围可控(如操作数在10以内还是100以内)。

          操作数是否含负数。    

  (5)生成的运算题存储到外部文件result.txt中。

2.2扩展功能

(1)判断输入是否越界或错误,若出现错误,进行提醒并可再次输入。

(2)是否显示运算结果。

三、 设计实现

3.1语言与工具

使用C语言并运用C-Free 5程序进行编码。

3.2实现方法

此四则运算程序只使用了主函数一个函数。将所有功能放在了一个主函数体内(方式需要改进)。

四、测试运行

4.1自动生成10道100以内的2个操作数的四则运算算式(+ - *  /)

输入需要题目为10道,并操作数为2个(运行成功)。

 4.2剔除重复算式

先将输入的题目数量设置大一些,在控制乘除法,负数计算等变量,再将数值的范围设置能够计算的范围内(以1与2为测试),能够出现所有非重复的算式(运行成功)。

4.3题目数量可定制

设定题目数量分别为28与15,其他控制参数不变(运行成功)。

 4.4相关参数可控制

在特定的题目数量,是否包含乘法和除法、操作数数值范围可控(如操作数在10以内还是100以内)、操作数是否含负数都可执行(运行成功)。  

4.5生成的运算题存储到外部文件result.txt中

运行成功

 4.6判断输入是否越界或错误,若出现错误,进行提醒并可再次输入

将题目数量,是否加入乘除法,是否加入负数,是否显示答案故意输错或越界,程序会提醒并可以再次输入并对之后结果无影响(运行成功)。

 4.7是否显示运算结果

运行成功

 五、代码片段

5.1输入与控制输入异常

while(1)
        {
       printf("请输入您需要的题目数量(范围在10~100以内):\n");
       scanf("%d",&judge_1);
       if(judge_1>100||judge_1<10)
       printf("\n输入错误,请重新输入\n\n");
       else break; 
    }
    while(1)
        {
    printf("是否需要加入乘除法(1:是 0:否):\n");
    scanf("%d",&judge_2);
    if(judge_2!=1&&judge_2!=0)
       printf("\n输入错误,请重新输入\n\n");
       else break; 
    } 
    while(1)
        {
    printf("请输入操作数数值的范围(如:10或100):\n");
    scanf("%d",&judge_3); 
    if(judge_3>1000||judge_3<=0)
       printf("\n输入错误,请重新输入\n\n");
       else break; 
    } 
    while(1)
        {
    printf("是否需要负数计算(1:是 0:否):\n");
    scanf("%d",&judge_4); 
    if(judge_4!=1&&judge_4!=0)
       printf("\n输入错误,请重新输入\n\n");
       else break; 
    } 
        while(1)
        {
    printf("是否需要答案(1:是 0:否):\n");
    scanf("%d",&judge_5); 
        if(judge_5!=1&&judge_5!=0)
       printf("\n输入错误,请重新输入\n\n");
       else break; 
    } 

5.2剔除重复

int t=0;
        fg_1[i]=figure_1;
        law[i]=s;
        fg_2[i]=figure_2;
        for(a=i;a>0;a--)
        {
            if((fg_1[i]==fg_1[a-1])&&(law[i]==law[a-1])&&(fg_2[i]==fg_2[a-1]))
           {
              t=1;    
            }      
        }  

5.3是否需要负数

  if(judge_4==0)
     {            
        figure_1=rand()%judge_3+1;//正数随机操作数1 
        figure_2=rand()%judge_3+1;//正数随机操作数2 
    }
    else if(judge_4==1)
     {
        figure_1=rand()%(2*judge_3+1)-judge_3;//负数随机操作数1 
        figure_2=rand()%(2*judge_3+1)-judge_3;//负数随机操作数2 
    } 

5.4是否需要乘除法

    t=rand()%al;//随机计算 al在输入时进行赋值,输入0(否)赋值为2(不包含乘除法);输入1(是)赋值为4(包含乘除法)
        if(t==0)//加法 
        {
        result=figure_1+figure_2;
        s='+';
        }
    else if(t==1)//减法 
        {
        result=figure_1-figure_2;
        s='-';
        }
    else if(t==2)//乘法 
        {
        result=figure_1*figure_2;
        s='*';
        }
    else  if(t==3)//除法 
        {
        result=figure_1/figure_2;
        s='/';
        }

5.5是否需要显示答案与存储到外部文件

if(judge_5==1)//判断是否需要答案 
            {
            if(figure_2<0)//第二个数是负数加括号 
            { 
            printf("第%d题:%d%c(%d)=%d\n",i+1,figure_1,s,figure_2,result); 
            fprintf(fp,"第%d题:%d%c(%d)=%d\n",i+1,figure_1,s,figure_2,result);//存储到外部文件
            }
           else
            {
            printf("第%d题:%d%c%d=%d\n",i+1,figure_1,s,figure_2,result);
            fprintf(fp,"第%d题:%d%c%d=%d\n",i+1,figure_1,s,figure_2,result);
            }
        }
        else
        {
        if(figure_2<0){
            printf("第%d题:%d%c(%d)=\n",i+1,figure_1,s,figure_2); 
            fprintf(fp,"第%d题:%d%c(%d)=\n",i+1,figure_1,s,figure_2);
        }     
           else
           {
               printf("第%d题:%d%c%d=\n",i+1,figure_1,s,figure_2);
            fprintf(fp,"第%d题:%d%c%d=\n",i+1,figure_1,s,figure_2);    
           }
            
        }    
    }

六、总结

6.1项目总结

在本次项目的开发过程中,并没有使用除主函数以外的其他函数,功能实现都是在一个主函数下实现的,导致在代码中体现不出模块化。但是在功能上还是符合模块化原则的,以下是我程序的功能模块图。

首先我的程序中必须要有所需题目的数量,确定数量后,才能够进行操作数范围、是否包含乘除法、是否包含负数等功能进行判断,以及将每一个生成的运算题存入指定数组内,而后进行剔除重复功能。指定所需题目数量达成后,生成带有2个操作数的四则运算。最后,判断用户是否需要将答案打出,并将生成的四则运算存储在外部文件resul.txt中。

 6.2自我总结

此次的作业让我明白自身在程序设计上的不足,尤其在设计函数上没能体现出模块化来,还有在代码上比较冗杂,条理不清晰等问题。

七、PSP

PSP2.1

任务内容

计划共完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

10

8

·       Estimate

·  估计这个任务需要多少时间,并规划大致工作步骤

10

8

Development

开发

165

190

··       Analysis

  需求分析 (包括学习新技术)

10

15

·       Design Spec

·  生成设计文档

20

30

·       Design Review

·  设计复审 (和同事审核设计文档)

10

8

·       Coding Standard

  代码规范 (为目前的开发制定合适的规范)

5

3

·       Design

  具体设计

10

14

·       Coding

  具体编码

60

80

·       Code Review

·  代码复审

20

20

·       Test

·  测试(自我测试,修改代码,提交修改)

30

20

Reporting

报告

9

6

·       Test Report

·  测试报告

3

2

·       Size Measurement

  计算工作量

3

1

·       Postmortem & Process Improvement Plan

·  事后总结 ,并提出过程改进计划

3

3

原文地址:https://www.cnblogs.com/yuxi111/p/11523447.html