• 第三次作业:个人项目小学四则运算 “软件”


    本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166

    我的github远程仓库的地址:https://github.com/879539613/IT-apk

    第一部分:要求

    具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:23 - 3 * 4 = 11

    第二部分:设计

    1.需求分析

        1.实现以正整数组成的3个运算符的四则等式
        2.结果必须大于0,结果精确到小数点后一位。
        3.可以随用户输入具体的题目数
          4.可判断用户输入值的对错,并给出用户的正确题目数和准确率
          5.要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题
    2.功能设计
          1.给定一个参数,由用户自定义,进行循环输出随机四则运算
          2.判断用户输入值对错
          3.计算用户的正确题目数和准确率
     

    第三部分:实现

          运算方法:四则运算的的优先级,即确定优先*,/,后+,-
                           同时,还要判断用户输入对错,若对则Y++(计算正确条数+1)
          运算符和运算操作方法:
                           为了让运算符为1-4,即+,-,*,/,
                           同时定义两参数,根据运算符的不同进行运算操作
    示例:
     
    一.在主函数中,定义参数n,由用户输入,while(counter<n)时停止,运用jisuan()函数来判断优先级
    void main()
    {
    int counter=0,n,Y=0,Z;
    float last;
    printf("请输入四则运算题目数:");
    scanf("%d",&n);
    do{
    Z=jisuan();
    counter++;/*对计算条数的加一*/
    if(Z==1)
    {
    Y++;
    }
    }while(counter<n);
    last=(float)Y/(float)n*100;
    printf("你答对的题目条数为:%d。\n准确值:%.1f%。\n",Y,last);//对最后结果的输出
    system("pause");
    }

    二.在jisuan()函数中,通过用if()优先判断①是否*,/ ,再判断②是否*,/,即可优先运算

    if(c>2){//先判断第一个运算符是否乘,除}
    
    else
        {
        if(f>2)//再判断第二个运算符是否乘,除
    
    else{}
    
    }

    在逻辑思考中,我认为如果四则运算中有(),可利用switch()方法,用case罗列更简单些,目前需求中不需要括号,就不用了

    在判断用户输入对错时,用if(fabs(e-d)>0.1)结果比较精确一位即可。

    三.由于程序比较简单,代码亦有注释,就不多说了

    第四部分:解决

    问题1:当exe文件脱离c++环境而单独打开时,往往在最后运行时直接关闭

    解决:在main函数末尾加 system("pause"); 使得程序执行完毕之后可以停留。

    问题2:结果的值与用户输入值的对比,精确度不高

    解决:为保持结果除法时的正确性用了绝对值fabs(),使结果精确到小数点后一位

    问题3:运算符优先级逻辑思维不一样,导致本来的代码更冗长一些

    解决:初始想法,2个运算符有4种情况,即以switch(),case方法

    ① +,- ②+,-

    ① +,- ②*,/

    ①*,/   ② +,-

    ①*,/   ②*,/

    后改成

    用if()优先判断①是否*,/ ,再判断②是否*,/,这样的话,代码尽可能少一些。

    问题4:容错率低,如果用脸滚键盘的话,肯定报错

    解决:由于只是初步设计,需要不断更新才能进一步优化,需要以后改进。。。

    附图:统计表

    PSP2.1

    Personal Software Process Stages

    Time Senior Student(h)

    Time(h)

    Planning

    计划

    0.5

    0.5

    · Estimate

    估计这个任务需要多少时间

    5

    6

    Development

    开发

    1

    1.5

    · Analysis

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

    0.01

    0.01

    · Design Spec

    生成设计文档

    0.5

    0.5

    · Design Review

    设计复审

    0.1

    0.1

    · Coding Standard

    代码规范

    0.1

    0.1

    · Design

    具体设计

    0.5

    0.3

    · Coding

    具体编码

    3

    3.5

    · Code Review

    代码复审

    0.1

    0.3

    · Test

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

    0.1

    0.1

    Reporting

    报告

    0.5

    0.6

    Test Report

    测试报告

    0

    0

    ·workload

    计算工作量

    0

    0.3

    ·correction

    并提出过程改进计划

    0

    0

  • 相关阅读:
    Oracle学习
    WPF中获取DataGrid列表的选中行Id的方法
    调用MySql存储过程的方法 '增删改查'
    MySql中存储过程的基本增删改查操作
    在WinForm中遍历获取TreeView的节点及其子节点
    WinForm获取MySql数据的基本增删改查
    WinForm中的用户控件实现分页功能
    NGUI之自适应屏幕
    快速排序法
    Array,ArrayList、List<T>、HashSet<T>、LinkedList<T>与Dictionary<K,V>
  • 原文地址:https://www.cnblogs.com/yuanzhenpeng/p/9752214.html
Copyright © 2020-2023  润新知