作业要求的博客链接:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2266
git仓库地址:https://git.coding.net/pipifan/f4.git
本次作业是结对作业,我的结对伙伴是樊友朋同学,他的博客地址是:http://www.cnblogs.com/pipifan/p/9918250.html
项目概要:
本次项目实现的是一个用于四则运算的控制台程序,目前已实现的功能如下:
1)支持整数和不含括号的四则运算且表达式可以重复。
2)支持小数和含小括号的四则运算且表达式可以重复。
3)表达式不重复且输出结果显示在控制台,然后将控制台显示的结果输出到指定位置的txt文件中。
项目详情:
一、本次作业采用c/c++进行编程。首先分析项目要求概括功能:
1)按照控制台输入的N ,生成N道由随机生成的整数与合法运算符组成的四则运算,并判断用户输入答案的对错。(输入 f4 -n N)
2)按照控制台输入的N ,生成N道由随机生成的整数、小数与合法运算符和括号组成的四则运算,并判断用户输入答案的对错。(输入 f4 -c N )
3)按照控制台输入的N 、文件路径M,生成N道由随机生成的整数、小数与合法运算符和括号组成的不重复的四则运算,给出答案打印在控制台,输出到文件M中。(输入 f4 -c N -f M)
4)如果输入的N不合法会输出相应的警告。
二、根据分析规划函数模块:
1)字符串转化为数字。
2)判断运算符号的优先级。
3)处理四则运算表达式,计算表达式的值。
4)处理控制台输入输出,产生随机数,随机运算符号和随机括号。
5)主函数,负责调用各个模块,控制流程。
三、部分模块代码实现过程:
1)处理四则运算表达式。
首先分配两个栈sp,sv,分别存储运算符和运算数字,从左到右读取中缀表达式,遇到操作数就入栈sv,遇到左括号或者当前运算符比sp栈顶优先级高的符号就入栈sp,遇到比sp栈顶优先级低的符号就出栈两个操作数和栈顶操作符,结果再入栈sv,遇到右括号同时栈顶是左括号就出栈左括号。最后sv栈顶就是该表达式的结果。
具体代码如下:
double solve(string s ) { stack<double> sv; stack<char> sp; char c; int k = 0, flag = 1; double x, y; sp.push('