第二次作業-熟悉使用工具


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基本知識的了解,感覺學到了東西,自己付出的努力沒有白費啦,希望這篇博客對你有幫助吧,同時也要相信自己的能力噢!阿里嘎多................................. 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM