GIT地址 | 我的github |
GIT用戶名 | haveadate |
學號后五位 | 62329 |
博客地址 | l往事隨風l |
作業鏈接 | 第二次作業-熟悉使用工具 |
1. 配置環境變量
說到配置環境變量,也是個體力活兒,我的環境變量很久以前就配置好了,所以這次就直接跳過了那一步驟。在這里我就說一下以前配置環境變量的經驗吧。
令我印象深刻的時當時大一配置Java環境變量。當時接觸計算機不是很久,不懂的地方總是喜歡去問學長,第一次配置環境變量都是讓別人幫忙配置的,后來出問題了,人家不在,想着一直麻煩別人也不好。況且無論是老師還是學長學姐,強調的都是自己上網查,自己動手。剛開始,通過上網查,發現網上這類問題很多,剛開始或許很慢,搞半天也沒弄下來,但是現在已經我已經好多了,懂得自己動手能解決的問題就不要麻煩別人,耐着性子仔細去閱讀也是種能力。這是百度如何配置Java環境變量的截圖,相信自己,你也行!
2.設計思路
看到題目,首先要求的是自動生成n道四則運算題。這么多題,這么多數字,不可能讓我們一個一個的手動輸入,那么數字的來源肯定是隨機數;同樣,運算符的個數是兩個or三個,是不是也是隨機數?然后運算符‘+’、‘-’、‘*’、‘/’的產生是不是也是隨機產生的呢?比如讓它們存儲在數組中,它們的下標也是隨機數,嘿嘿,可能你已經看到了,隨機數的需求這么多,為什么我們不用一個類專門用於產生隨機數呢?所以,我先定義了一個隨機數類,用於產生隨機數。
是不是有點感覺了呢?然后生成計算式就是靠循環結構將數字和符號拼接成字符串即可,最重要的就是我想就是四則運算,這個計算就要用到我們的棧結構,中綴表達式和后綴表達式,具體的操作還是比較復雜的,我們就可以把它也封裝在一個類里,這樣也便於操作。核心代碼如下
這是我參考的代碼(C語言)大家可以參考一下。最后的操作就是寫文件了,你是否還記得曾經的操作?忘了的話(小聲bb,早就忘了)就翻一下以前的書,或者上網查一查就ok了喔!
1 #include "pch.h" 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 6 #define OK 10000001 7 #define ERROR 10000002 8 9 10 struct node 11 { 12 int data; 13 struct node *next; 14 }; 15 typedef struct node Node; 16 17 18 struct stack 19 { 20 Node *top; 21 int count; 22 }; 23 typedef struct stack Stack; 24 25 26 int InitStack(Stack *S) 27 { 28 S->top = NULL; 29 S->count = 0; 30 31 32 return OK; 33 } 34 35 36 int EmptyStack(Stack *S) 37 { 38 return (S->count == 0) ? OK : ERROR; 39 } 40 41 42 int Push(Stack *S, int e) 43 { 44 Node *p = (Node *)malloc(sizeof(Node)); 45 if (p == NULL) 46 { 47 return ERROR; 48 } 49 p->data = e; 50 p->next = S->top; 51 S->top = p; 52 S->count++; 53 54 55 return OK; 56 } 57 58 59 int GetTop(Stack *S) 60 { 61 if (NULL == S->top) 62 { 63 return ERROR; 64 } 65 return (S->top->data); 66 } 67 68 69 int Priority(char s) 70 { 71 switch (s) 72 { 73 case '(': 74 return 3; 75 case '*': 76 case '/': 77 return 2; 78 case '+': 79 case '-': 80 return 1; 81 default: 82 return 0; 83 } 84 } 85 86 87 int Pop(Stack *S) 88 { 89 int e; 90 91 92 if (NULL == S->top) 93 { 94 return ERROR; 95 } 96 97 98 Node *p = S->top; 99 e = p->data; 100 S->top = p->next; 101 free(p); 102 S->count--; 103 104 105 return e; 106 } 107 int main() 108 { 109 Stack num, opt; 110 char str[100] = { 0 }; 111 int i = 0, tmp = 0, j; 112 113 114 if (InitStack(&num) != OK || InitStack(&opt) != OK) 115 { 116 printf("Init Failure!!\n"); 117 } 118 119 120 printf("Please Input Operator :\n"); 121 scanf("%s", str); 122 123 124 while (str[i] != '\0' || EmptyStack(&opt) != OK) 125 { 126 if (str[i] >= '0' && str[i] <= '9') 127 { 128 tmp = tmp * 10 + str[i] - '0'; 129 i++; 130 if (str[i] < '0' || str[i] > '9') 131 { 132 Push(&num, tmp); 133 tmp = 0; 134 } 135 } 136 else 137 { 138 if ((EmptyStack(&opt) == OK) || (GetTop(&opt) == '(' && str[i] != ')') || Priority(str[i]) > Priority(GetTop(&opt))) 139 { 140 Push(&opt, str[i]); 141 i++; 142 continue; 143 } 144 145 146 if (GetTop(&opt) == '(' && str[i] == ')') 147 { 148 Pop(&opt); 149 i++; 150 continue; 151 }if ((str[i] == '\0' && EmptyStack(&opt) != OK) || (str[i] == ')' && GetTop(&opt) != '(') || Priority(str[i]) <= Priority(GetTop(&opt))) 152 { 153 switch (Pop(&opt)) 154 { 155 case '+': 156 Push(&num, Pop(&num) + Pop(&num)); 157 break; 158 case '-': 159 j = Pop(&num); 160 Push(&num, Pop(&num) - j); 161 break; 162 case '*': 163 Push(&num, Pop(&num) * Pop(&num)); 164 break; 165 case '/': 166 j = Pop(&num); 167 Push(&num, Pop(&num) / j); 168 break; 169 } 170 continue; 171 } 172 173 174 } 175 } 176 printf("result is %d\n", Pop(&num)); 177 178 179 return 0; 180 }
引用自---------author
3.Github克隆項目和提交代碼所遇到的一些問題
初次使用github這個工具,面對的問題很多。做這第二次作業其實很早就着手開始做啦,但是遲遲到現在才基本上做完,先來說說我遇到的一些問題。剛開始審題不清,克隆的項目是詳細鏈接里面的Calculator,按照流程,將Java分支改成C++分支。按照要求要用C#,我當時頭鐵的一直嘗試,是git checkout C#,還是git checkout c#,還是git checkout Csharp?本來就是剛開始接觸到github這個工具,折騰了一下午,多次想放棄,然后又硬着頭皮去做。最后,想到,做學問,不能閉門造車啊!交流也是很重要的,於是一個含糊不清的向助教請教問題就開始了,剛開始助教說的那些名詞根本搞不懂,弄了半天(佩服助教耐心,我輩楷模),原來是審題錯了,到最后才明白,我們是沒有源代碼的,一切都是靠自己。說了這么多,其實我想表達的重點就是,我們在使用Github工具時,先按照鏈接步驟走,仔細閱讀,可能有些個人差異,有問題就百度。分享一個技巧,把錯誤提示復制下來百度,解決問題更加有效率,很多東西都需要自行解決,實在不行也不要怕去麻煩別人!
4.項目進行單元測試和回歸測試過程遇到的問題
按照鏈接的步驟走,它的某些操作也是在編譯C#中不同的,如下:
就沒有對應的選項,我自己是這樣做的(有不對的地方歡迎指正),大家可以參考一下:
后面的操作就大同小異了,主要就是斷言的引用,需要注意,這里我分享一個C#的API,希望對大家有幫助。
5.本次工具的熟悉過程的感想和分享學習到的新知識
對於本次工具的熟悉過程,我想說的是還好沒有放棄。弄完以后感覺對團隊合作了解更加深入了,不知道你注意倒沒有
看到這些東西,弄完以后心里也挺開興的,對於這個流程(單元測試-性能分析),感覺還挺不錯的。嘿,是不是覺得挺高大上的呢?沒有,噢,打擾了。
最最最最最后,通過此次作業,我學到的知識就是關於這樣一套團隊開發流程以及github基本知識的了解,感覺學到了東西,自己付出的努力沒有白費啦,希望這篇博客對你有幫助吧,同時也要相信自己的能力噢!阿里嘎多.................................