软件工程基础第二次作业
1.博客开头
GIT | 地址 |
---|---|
GIT用户名 | liangtingyu520 |
学号后五位 | 61408 |
博客 | 地址 |
作业 | 链接 |
2.博客内容:
(1)配置环境
(2)申请注册一个 Github 账号,将阿超的四则运算库拷贝到自己的同名仓库中.
(3)在自己的电脑上安装 Git 软件,在 我的电脑 中任意找一个目录,打开 Git 命令行软件,输入 git clone .
在完成上述操作后,可在当前目录下看到一个与仓库同名的文件夹Calculator ,这就是克隆到本地的项目。进入项目文件夹,新建一个文件夹,重命名为我的 Github 账号名。
- 程序接收一个命令行参数 n,然后随机产生
n
道加减乘除(分别使用符号+-*/
来表示)练习题,每个数字在0
和100
之间,运算符在2
个 到3
个之间。 - 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现
3÷5+2=2.6
这样的算式。 - 练习题生成好后,将生成的
n
道练习题及其对应的正确答案输出到一个文件subject.txt
中。
设计思路:
用rand生成随机数
但是我的代码有问题,改了几天还是不对,总是有重复的,再加上我比较笨,所以到现在都没改出来,所以就把老师给的代码附上来我的垃圾代码就往后稍稍:
include "stdafx.h"
include
include
include
include "stdlib.h"
include
include
include "Calculator.h"
define random(a,b) (rand()%(b-a+1)+a)
using namespace std;
Calculator::Calculator() {}
string Calculator::MakeFormula() {
string formula = "";
srand((unsigned int)time(NULL));
int count = random(1, 3);
int start = 0;
int number1 = random(1, 100);
formula += to_string(number1);
while (start <= count) {
int operation = random(0, 3);
int number2 = random(1, 100);
formula += op[operation] + to_string(number2);
start++;
}
return formula;
};
string Calculator::Solve(string formula) {
vector
stack
int len = formula.length();
int k = 0;
for (int j = -1; j < len - 1; j++) {
char formulaChar = formula[j + 1];
if (j == len - 2 || formulaChar == '+' || formulaChar == '-' ||
formulaChar == '' || formulaChar == '/') {
if (j == len - 2) {
tempStack->push_back(formula.substr(k));
}
else {
if (k < j) {
tempStack->push_back(formula.substr(k, j + 1));
}
if (operatorStack->empty()) {
operatorStack->push(formulaChar);
}
else {
char stackChar = operatorStack->top();
if ((stackChar == '+' || stackChar == '-')
&& (formulaChar == '' || formulaChar == '/')) {
operatorStack->push(formulaChar);
}
else {
tempStack->push_back(to_string(operatorStack->top()));
operatorStack->pop();
operatorStack->push(formulaChar);
}
}
}
k = j + 2;
}
}
while (!operatorStack->empty()) {
tempStack->push_back(string(1, operatorStack->top()));
operatorStack->pop();
}
stack
for (int i = 0; i < tempStack->size(); i++) {
string peekChar = tempStack->at(i);
if (peekChar != "+" && peekChar != "-"
&& peekChar != "/" && peekChar != "") {
calcStack->push(peekChar);
}
else {
int a1 = 0;
int b1 = 0;
if (!calcStack->empty()) {
b1 = stoi(calcStack->top());
calcStack->pop();
}
if (!calcStack->empty()) {
a1 = stoi(calcStack->top());
calcStack->pop();
}
if (peekChar == "+") {
calcStack->push(to_string(a1 + b1));
}
else if (peekChar == "-") {
calcStack->push(to_string(a1 - b1));
}
else if (peekChar == "") {
calcStack->push(to_string(a1 * b1));
}
else if (peekChar == "/") {
calcStack->push(to_string(a1 / b1));
}
}
}
return formula + "=" + calcStack->top();
}
int main()
{
Calculator* calc = new Calculator();
string question = calc->MakeFormula();
cout << question << endl;
string ret = calc->Solve("11+22");
cout << ret << endl;
getchar();
}
(4)测试
关于测试
我跟着教程一步一步来的,但是由于自己蹩脚的理解能力,每次都会出错,所以我还需多加学习。
总结:
首先,多谢两天的延长时间,这次作业对我来说就一个字难!我也会多加学习,这次的收获可能就是会了点git的最最基本的操作。