C++小学生四则运算_余伟淇_郑鉴

 

https://github.com/kielingpao/sizeyunsuan

项目相关要求

1题目:实现一个自动生成小学四则运算题目的命令行程序

2说明

自然数:0, 1, 2, …。
• 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …。
• 运算符:+, −, ×, ÷。
• 括号:(, )。
• 等号:=。
• 分隔符:空格(用于四则运算符和等号前后)。
• 算术表达式:
e = n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e),
其中e, e1和e2为表达式,n为自然数或真分数。
• 四则运算题目:e = ,其中e为算术表达式。

3需求:
1. 使用 -n 参数控制生成题目的个数,例如

Myapp.exe -n 10

将生成10个题目。
2. 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如

Myapp.exe -r 10

将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。
3. 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。
4. 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
5. 每道题目中出现的运算符个数不超过3个。
6. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
生成的题目存入执行程序的当前目录下的Exercises.txt文件。
其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。
7. 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:
特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。
8. 程序应能支持一万道题目的生成。
9. 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,输入参数如下:

Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt

统计结果输出到文件Grade.txt,格式如下:

Correct: 5 (1, 3, 5, 7, 9)
Wrong: 5 (2, 4, 6, 8, 10)

其中“:”后面的数字5表示对/错的题目的数量,括号内的是对/错题目的编号。为简单起见,假设输入的题目都是按照顺序编号的符合规范的题目。

 

解题思路

实现部分:

1.要通过命令行运行,输入指令而且带有 使用 -n 参数控制生成题目的个数、使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围的参数,所以程序用使用命令行参数的main函数。

2.生成的题目存入执行程序的当前目录下的Exercises.txt文件,所以要使用文件操作,创建题目文件,写入文件,还要创建答案的文件。

 3.程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。需要通过有限次交换来判断是否是同一个题目。

 

测试部分:

1.需要考虑到各种文件字符、各种输入的情况,创建0道题等等保证程序的鲁棒性。

 

 

设计实现过程

命令行运行Myapp.exe该程序,可以通过命令行参数,可以通过

Myapp.exe -n 10

Myapp.exe -r 10

Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt

等命令运行程序。

遇到的困难及解决方法

1.一开始没分工好,导致我们两人做的功能有重复。解决办法:好好沟通。

关键代码or设计说明

所有操作都在dos命令行下操作即可。不用IDE,只用记事本写代码,用命令行编译运行即可。

在命令行使用Myapp.exe以及几个可选参数进行工作。

可以与dos的命令配合,例如CD、type指令这些通通都可以使用,Myapp.exe(或Myapp.exe)已然成为DOS命令行下一个指令。

测试运行

 

PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

一小时

一小时

· Estimate

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

一周

一周

Development

开发

3h  

3h

· Analysis

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

2d  

2d

· Design Spec

· 生成设计文档

3h

3h

· Design Review

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

1h

1h

· Coding Standard

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

2h

2h

· Design

· 具体设计

5h

5h

· Coding

· 具体编码

4h

4h

· Code Review

· 代码复审

1h

1h

· Test

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

2h

2h

Reporting

报告

1h

1h

· Test Report

· 测试报告

1h

1h

· Size Measurement

· 计算工作量

20min

20min

· Postmortem & Process Improvement Plan

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

30min

30min

合计

 

 

 

 

项目小结与结对感受

1.程序员要吃饭,如何才能吃饭并吃好饭,那就是自己必须比别人强。如果才能显得自己比别人强,那就要做到自己写的代码有自己的个性在里面。其实不然,目前,单兵作战只能适用于小型项目,对于大型的项目,组件化的开发,各个模块的接口,都需要定义,单靠单兵作战,无法成就强大而稳定的系统。

2.闭关自守,不交流。自己在那里Coding,只管自己的一摊子。殊不知,自己做了改动,会影响到别人的程序。

3.听不见别人的意见。程序员都认为自己很牛,对于别人的提出的意见都很难虚心地接受。

4.认为项目的成功不是自己的功劳而是大家的功劳,自己的地位很难在Team中体现。

5.过高地估计自己的能力。觉得自己什么都比别人好。

然而,开发一个项目就像踢足球一样,光有前锋是不够的,还要有教练(架构师)、队长(Team leader)。后卫踢得好的话,也能够有机会进球。自己有机会进球,虽然彰显了自己的能力,整个Team输了比赛,结果一样是失败。

所以,对于程序员来说,和足球运动员一样,只有彰显自己的个性,同时能够团结周围的Team的成员,一起去踢好一场球,做到双赢,才能够真正发挥自己的价值和作用。

 

posted @ 2018-09-29 19:37  3116005208  阅读(816)  评论(0编辑  收藏  举报