软件工程基础第二次作业

1.博客开头

GIT 地址
GIT用户名 liangtingyu520
学号后五位 61408
博客 地址
作业 链接

2.博客内容:

(1)配置环境

(2)申请注册一个 Github 账号,将阿超的四则运算库拷贝到自己的同名仓库中.

(3)在自己的电脑上安装 Git 软件,在 我的电脑 中任意找一个目录,打开 Git 命令行软件,输入 git clone .

在完成上述操作后,可在当前目录下看到一个与仓库同名的文件夹Calculator ,这就是克隆到本地的项目。进入项目文件夹,新建一个文件夹,重命名为我的 Github 账号名。

  • 程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0100 之间,运算符在 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* tempStack = new vector();
stack* operatorStack = new 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* calcStack = new 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的最最基本的操作。

posted @ 2019-09-23 21:25  cykablyat  阅读(137)  评论(1编辑  收藏  举报