zoukankan      html  css  js  c++  java
  • 2017年秋季学期软件工程第二次作业

    源代码链接:https://github.com/FredaCao/homework1.git

    一. PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 10 10
    Estimate 估计这个任务需要多少时间 255 260
    Development 开发 150 165
    Analysis 需求分析 10 暂无
    Design Spec 生成设计文档 10 暂无
    Design Review 设计复审 10 暂无
    Coding Standard 代码规范 10 5
    Design 具体设计 10 30
    Coding 具体编码 100 130
    Code Review 代码复审 10  
    Test 测试(自我测试,修改代码,提交修改) 20 30
    Reporting 报告 30 30
    Test Report 测试报告    
    Size Measurement 计算工作量 5 5
    Postmortem&Process Improvement Plan 事后总结,并提出过程改进计划 30 20
    合计   255 910

    二. 解题思路

     软件基本功能

    1. 参与运算的操作数(operands)除了100以内的整数以外,还要支持真分数的四则运算,例如:1/6 + 1/8 = 7/24。操作数必须随机生成
    2. 运算符(operators)为 +, −, ×, ÷ (如运算符个数固定,则不得小于3)运算符的种类和顺序必须随机生成
    3. 要求能处理用户的输入,并判断对错,打分统计正确率。
    4. 使用 -n 参数控制生成题目的个数,或通过用户交互过程确定题目个数,例如执行下面命令将生成5个题目
      • (以C/C++/C#为例) calgen.exe -n 5
      • (以python为例) python3 calgen.py -n 5

     实现思路

    1. 四则运算采用将中序表达式转化为后缀表达式
    2. 将原来四则运算中的整数换成分数,抽象出分数的类,并实现+,-,x三个运算符的重载
    3. 计算后缀表达式的过程中将字符串转化为分数的类实例,然后使用重载的运算符进行计算
    4. 使用getopt方法来获取命令行中的参数
    5. 处理用户的输入并转化为分数类实例,通过==运算符判断是否正确

    三. 设计过程

    1. 分数类 包含分子分母两个类成员,+,-,x运算符实现过程中进行约分,先获得计算之后的分子分母最大公约数,再同时除以这个约数即可

    2. 中序表达式转化后缀表达式 使用栈来存储优先级较低的运算符,当遇到运算符时,将相同和更高优先级的操作符出栈,并加入string流中,另外把带数字和带有分号的分数作为一个整体直接加入string流中,使用空格来分割

    3. 后缀表达式计算,将字符串使用空格作为分隔符split,如果是代表数的字符串则构造分数对象,并入栈,如果是操作符则使用栈顶的第一个和第二个元素进行计算,计算完之后栈顶元素出栈,迭代后栈中只有一个元素即为所求

    四. 代码说明

    1. 乘法运算符重载

    • 分子与分子相乘,分母与分母相乘
    • 计算最大公约数,分子分母同时除以最大公约数

    2. 计算后缀表达式

    • 将字符串使用空格作为分隔符split,如果是代表数的字符串则构造分数对象,并入栈,
    • 如果是操作符则使用栈顶的第一个和第二个元素进行计算,
    • 迭代之后最后一个元素即为所求

    五. 代码截图

    六. 项目小结

      中序表达式转化为后缀表达式的迭代过程结束之后,栈内可能还有操作符,此时需要注意一下先输入空格再依次出栈其他操作符。单元测试的编写应该采用更加自动化的过程,以后会尝试使用googletest框架。

  • 相关阅读:
    判断单链表中是否有环,找到环的入口节点的理论证明
    交叉熵代价函数(作用及公式推导)
    C#调用C++、Opencv的Dll
    腾讯机器学习一面面经
    C#调用C++类库的几种方式
    2017年腾讯基础研究笔试感受
    关于开源库或者SDK的文档问题
    卷积神经网络Lenet-5实现
    NULL、0、nullptr 区别分析
    C++中,new/delete和malloc/free的区别
  • 原文地址:https://www.cnblogs.com/fredacao-123/p/8146732.html
Copyright © 2011-2022 走看看