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