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

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基本知识的了解,感觉学到了东西,自己付出的努力没有白费啦,希望这篇博客对你有帮助吧,同时也要相信自己的能力噢!阿里嘎多................................. 

猜你喜欢

转载自www.cnblogs.com/haveadate/p/10597548.html
今日推荐