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文件的知識,能夠算得上是意外收穫了)。所以雖然私下我罵了這個做業無數次,但完成後的喜悅是難以用語言歸納的,一個字:爽!