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


    作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

    我的github地址:https://github.com/ShumeiHe/FourArithmetic

     

    一、需求分析
        
    具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。并且要求能处理用户的输入,并判断对错,打分统计。

    二、功能设计

      1.  输出相应数目的四则运算(加减乘除)题目及答案;

      2. 随机产生具有三个操作数和两个运算符的四则运算;

      3. 四则运算的答案不能为负数,如果为负数则重新输入该道题目;

      4. 对用户的输入答案进行判断,正确则加分,错误则不加分,并予以提示。满分为100分;

      5. 输出用户的总分数。

    三、详细设计

      1. 数据处理:因为除法运算的缘故,所以输出结果全部为保留小数两位的浮点数。

      随机产生三个操作数并且保存至操作数数组中:

    private static int[] number = new int[3];  //操作数数组。

       随机产生两个运算符并且保存至运算符数组中:

    private static int[] operate = new int[2];  //运算符数组,以两个运算符操作

      将产生的操作数与运算符按一定的顺序存至题目数组中:

    private static String[][] topic = new String[100][7];  //题目数组。
    for (int jnum = 0; jnum < 3; jnum++) {
        topic[i][2 * jnum] = String.valueOf(number[jnum]); //题目数组与操作数数组索引值关系。
    }
    for (int jop = 0; jop < 2; jop++) {
        topic[i][2 * jop + 1] = getOp(operate[jop]);
    }

      2.运算符的优先级:

     //加减乘除运算,优先级运算。
        public static double operation(int randomop, double num1, double num2) {
            if (randomop == 0) {
                return num1 + num2;
            }
            if (randomop == 1) {
                return num1 - num2;
            }
            if (randomop == 2) {
                return num1 * num2;
            }
            if (randomop == 3) {
                return num1 / num2;
            }
            return 0;

      3.运算:遍历运算符数组,

      ①  若第二个运算符operate[1]为乘法或者除法运算,则第二个操作数number[1]与第三个操作数number[2]进行运算得出的结果再与第一个操作数number[0]运算;

      ②  若第二个运算符operate[1]不为乘法或者除法运算,则按顺序运算。

    public static double getResult() {
            //第二个运算符为乘法或者除法运算。
            if (operate[1] >= 2) {
                double result = operation(operate[1], number[1], number[2]);
                result = operation(operate[0], number[0], result);
                result=Double.valueOf(String.format("%10.2f", result));//保留两位小数。
                return result;
            }
            //顺序运算。
            else {
                double result = operation(operate[0], number[0], number[1]);
                result = operation(operate[1], result, number[2]);
                result=Double.valueOf(String.format("%10.2f", result));
                return result;
            }

      4.输入运算结果:判断答案与输入的结果是否相等,若相等则加分,若不相等则不加分。

     

    四、运行结果

        随机产生五道四则运算:

          

    五、问题及解决办法

           1. 该项目的核心是运算符的优先级运算。本次所使用的方法仅考虑到两个运算符运算,并未考虑到两个以上的运算符的运算。在此之前,我考虑到两个以上的运算符运算的需求,但是本人发现代码复杂逻辑混乱,而且使用的是java编程语言,并没有c语言的指针好用,短时间内没有找到解决方法,所以就放弃了该需求。

    如下图:(使用指针明显更方便,如果使用数组直接置空,空值是不能进行运算)

    六、过程耗时估计统计表

    PSP2.1

    Personal Software Process Stages

    Time Senior Studenh

    Timeh

    Planning

    计划

    0.5

    0.5

    Estimate

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

    5

    4

    Development

    开发

    4

    3

    Analysis

    需求分析

    0.5

    0.5

    Design Spec

    生成设计文档

    0

    0

    Design Review

    设计复审

    0.5

    0.5

    Coding Standard

    代码规范

    0.5

    0.5

    Design

    具体设计

    0.5

    1

    Coding

    具体编码

    4

    3

    Code Review

    代码复审

    1

    0.5

    Test

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

    0.5

    1

    Reporting

    报告

    1

    1

    测试报告

    0

    0

    计算工作量

    5

    4

    并提出过程修改计划

    0

    0

  • 相关阅读:
    kyeremal-bzoj2038-[2009国家集训队]-小z的袜子(hose)-莫队算法
    移位操作之旋转移位
    leetcode 二分查找 Search in Rotated Sorted Array
    背包算法练习--求小于某数字的数组最大和:
    Splunk 会议回想: 大数据的关键是机器学习
    CSDN个人空间、问答频道停站维护公告
    HDFS主要节点解说(一)节点功能
    24点
    【Nginx】事件驱动框架和异步处理
    OC中字符串的提取与替换-四种不同方法实现
  • 原文地址:https://www.cnblogs.com/bufengdianbuchengmo/p/9788011.html
Copyright © 2020-2023  润新知