GIT地址 | https://github.com/JusticeXu |
---|---|
GIT用户名 | JusticeXu |
学号后五位 | 61409 |
博客地址 | https://www.cnblogs.com/codingbyjusticexu/ |
做业连接 | https://edu.cnblogs.com/campus/xnsy/Autumn2019SoftwareEngineeringFoundation/homework/7590 |
《现代软件工程基础》如今留下了这样一份做业,熟悉GIT还有Gitpub的基本操做。c++
由于电脑是MacBook,运行的是osX系统,所以对比于PC端上的Windows,使用Visual studio会有各类水土不服的状况存在。所以用Xcode来代替,语言为C++git
1)班级的项目被放到了Github上,须要注册Gitpub帐号并将项目Fork到本身的同名仓库里程序员
2)下载并安装GIT工具github
3)在Terminal中输入如下代码数组
git clone https://github.com/Cherish599/AchaoCalculator.git
出现如下界面,则说明项目已经被clone到电脑上数据结构
题目:阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个做业:家长天天要给孩子出一些合理的,但要有些难度的四则运算题目,而且家长要对孩子的做业打分记录。框架
做为程序员的阿超心想,既然天天都须要出题,那何不作一个能够自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就造成了这个软件的需求:dom
程序接收一个命令行参数 n,而后随机产生 n
道加减乘除(分别使用符号+-*/
来表示)练习题,每一个数字在 0
和 100
之间,运算符在 2
个 到 3
个之间。函数
因为阿超的孩子才上一年级,并不知道分数。因此软件所出的练习题在运算过程当中不得出现非整数,好比不能出现 3÷5+2=2.6
这样的算式。
练习题生成好后,将生成的 n
道练习题及其对应的正确答案输出到一个文件 subject.txt
中。
当程序接收的参数为4时,如下为一个输出文件示例。
13+17-1=29 11*15-5=160 3+10+4-16=1 15÷5+3-2=4
分析:从题目中能够获得,该程序中有两步操做。
1)接受一个命令行参数n,而后随机产生n道题目。
2)练习题生成后,将生成的练习题和正确答案输出到一个文件subject.txt中
注意事项:运算数应该在0
到100
之间,运算符在2
到3
个之间,在运算过程当中不得出现非整数。
#include <iostream> #include <time.h> #include <stdio.h> #include <stdlib.h> #include <iomanip> #include <math.h> #include <fstream> #include <string> #define random()(rand()%1000) using namespace std; //数字转换为字符串 string int_string(int number) { int value = abs(number);//取绝对值 char str[100]; itoa(value, str, 10); //运用itoa()函数将int型整数转换为字符串 string str_= str; return str_; } //算式转换为字符串 string group(string str1, string str2, char m) // group:算式组合 { string Equation; // equation:算式 Equation = str1 + m + str2; return Equation; } //生成运算符 char mark(int opt) { int opt1, a; char symbol[1]; // 符号数组 if (opt == 0) { opt1 = 2; } if (opt == 1) { opt1 = 4; } a = random() % opt1+1; //随机生成1-2或1-4的数,随opt的值而定,opt意为是否含有乘除法 if (a == 1) symbol[0] = '+'; if (a == 2) symbol[0] = '-'; if (a == 3) symbol[0] = '*'; if (a == 4) symbol[0] = '/'; return symbol[0]; } //主函数 int main() { std::__1::string str_num1,str_num2; srand((int)time(NULL)); //设置时间种子,每次执行种子不一样,生成不一样的随机数 int num1, num2,minus; int opt, bracket, output, max, min, amount, control, b, c,d; cout << "请输入你想要的出题数量:" << endl; cin >> amount; string equation[1000]; //定义数组 char symbol; ofstream fout; if (opt == 1) { cout << "除法有无余数,1(有),0(无)" << endl; cin >> output; } if ( output == 1 ) { fout.open("output.txt"); fout << amount << "道四则运算题以下:" << endl; } else { cout << amount << "道四则运算题以下:" << endl; } for (int i = 0; i<amount; i++) //为输出规定题数 { num1 = random() % (max - min + 1) + min;// 随机生成min-max的整数 num2 = random() % (max - min + 1) + min;// 随机生成min-max的整数 control = random() % 9 + 2; //控制是几个数的运算式,最多支持10个数的运算式 symbol = mark(opt); if (minus == 0) //原本要加负数的,思路有点不清晰,之后改进 { str_num1 = int_string(num1); str_num2 = int_string(num2); } if (minus == 1) { d = random() % 2; //随机生成0-1的数 if (d == 0) { str_num1 = int_string(num1); str_num2 = '-' + str_num2; } } str_num1 = int_string(num1); str_num2 = int_string(num2); equation[i] = group(str_num1, str_num2, symbol); if (control >= 2) { for (; control >= 2; control--) { symbol = mark(opt); str_num1 = equation[i]; if (bracket == 1) { b = random() % 2; //随机生成0-2的数 if (b == 0) //若是b=0,就在字符串str_num1的左右加上括号 { str_num1 = '(' + str_num1 + ')'; } } symbol = mark(opt); num2 = random() % (max - min + 1) + min;// 随机生成min-max的整数 str_num2 = int_string(num2); b = random() % 2; std::__1::string value; if (b == 0) { value = str_num1; str_num1 = str_num2; str_num2 = value; } equation[i] = group(str_num1, str_num2, symbol); } } //判断是否重复 int repeat = 0; //repeat:重复 for (c = 0; c<i; c++) { if (equation[c] == equation[i]) { i = i - 1; repeat = 1; break; } } if (repeat != 1)//若不重复,则输出 { if (output == 1) { fout << equation[i] << "=" << endl; } else { cout << equation[i] << "=" << endl; } } } if (output == 1) //输出到文件 { fout.close(); } }
输入结果:
最后将代码上传:
OCUnit是苹果Xcode中自带的测试框架,它是一个可视化的测试框架,简单的单元测试以下图所示。
1.新建项目:
2.最简单的测试
进入到这个类,setUp是每一个测试方法调用前执行,tearDown是每一个测试方法调用后执行。testExample是测试方法,和咱们新建的没有差异。不过测试方法必须testXXX的格式,且不能有参数,否则不会识别为测试方法。测试方法的执行顺序是字典序排序。按快捷键Command + U进行单元测试,这个快捷键是所有测试。
3.出现以下结果(因为咱们断言a是等于0的,而a等于3,因此测试没有经过。固然有其它的,用到再看,demo里都有。)
此次做业消耗的精力真的是很大的,首先是GIT这个非可视化界面的使用,须要一次又一次不断地百度,才懂得了一点点皮毛。而后是从GitHub上面fork下来的代码……真的看不懂orz。没办法只好本身全盘推倒从新写,在写代码的过程,我发现我对数据结构中栈的知识掌握得还不是很熟练,不断地翻书翻书翻书…
总的来讲这一次做业发现很多新的世界,包括简单使用Github与GIT(甚至我以为在GitHub上下载速度真的是太慢了,还了解到了一些hosts文件的知识,能够算得上是意外收获了)。所以虽然私下我骂了这个做业无数次,但完成后的喜悦是难以用语言归纳的,一个字:爽!