2017年秋季学期软件工程第二次作业

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

一. PSP表格

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

二. 解题思路

 软件基本功能

  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框架。

转载于:https://www.cnblogs.com/fredacao-123/p/8146732.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值