## 结对编程【第二次作业】

``` #include<stdio.h>
2 #include<stdlib.h>
3 #include <time.h>
4 int main(){
5     srand(time(NULL));
6     int sum=0,sum1,x,y;
7     float an[100000],a,b,c;
8     printf("请输入要随机几道计算题：");
9     scanf("%d",&sum1);
10     printf("1.不带乘除法 2.带乘除法   请输入你的选择：");
11     scanf("%d",&y);
12     if(y==1){
13         while(sum<sum1){
14             a=rand()%100;
15             b=rand()%100;
16             c=rand()%100;
17             switch(rand()%4){
18                 case 0:an[sum]=a+b+c;
19                     if(an[sum]>100||an[sum]<0)break;
20                        else{
21                            printf("%d：%.1f+%.1f+%.1f=\n",sum+1,a,b,c);
22                            sum++;
23                            break;
24                        }
25                 case 1:an[sum]=a+b-c;
26                     if(an[sum]>100||an[sum]<0)break;
27                        else{
28                            printf("%d：%.1f+%.1f-%.1f=\n",sum+1,a,b,c);
29                            sum++;
30                            break;
31                        }
32                 case 2:an[sum]=a-b-c;
33                     if(an[sum]>100||an[sum]<0)break;
34                        else{
35                            printf("%d：%.1f-%.1f-%.1f=\n",sum+1,a,b,c);
36                            sum++;
37                            break;
38                        }
39                 case 3:an[sum]=a-b+c;
40                     if(an[sum]>100||an[sum]<0)break;
41                        else{
42                            printf("%d：%.1f-%.1f+%.1f=\n",sum+1,a,b,c);
43                            sum++;
44                            break;
45                        }
46             }
47         }
48         printf("答案如下：\n");
49         for(int i=0;i<sum;i++)printf("%d:%.1f\n",i+1,an[i]);
50     }
51     if(y==2){
52         while(sum<sum1){
53             a=rand()%100+1;
54             b=rand()%100+1;
55             c=rand()%100+1;
56             switch(rand()%16){
57                 case 0:an[sum]=a+b+c;
58                     if(an[sum]>100||an[sum]<0)break;
59                        else{
60                            printf("%d：%.1f+%.1f+%.1f=\n",sum+1,a,b,c);
61                            sum++;
62                            break;
63                        }
64                 case 1:an[sum]=a+b-c;
65                     if(an[sum]>100||an[sum]<0)break;
66                        else{
67                            printf("%d：%.1f+%.1f-%.1f=\n",sum+1,a,b,c);
68                            sum++;
69                            break;
70                        }
71                 case 2:an[sum]=a-b-c;
72                     if(an[sum]>100||an[sum]<0)break;
73                        else{
74                            printf("%d：%.1f-%.1f-%.1f=\n",sum+1,a,b,c);
75                            sum++;
76                            break;
77                        }
78                 case 3:an[sum]=a-b+c;
79                     if(an[sum]>100||an[sum]<0)break;
80                        else{
81                            printf("%d：%.1f-%.1f+%.1f=\n",sum+1,a,b,c);
82                            sum++;
83                            break;
84                        }
85                 case 4:an[sum]=a+b*c;
86                     if(an[sum]>100||an[sum]<0)break;
87                        else{
88                            printf("%d：%.1f+%.1f*%.1f=\n",sum+1,a,b,c);
89                            sum++;
90                            break;
91                        }
92                 case 5:an[sum]=a+b/c;
93                     if(an[sum]>100||an[sum]<0||c==0)break;
94                        else{
95                            printf("%d：%.1f+%.1f/%.1f=\n",sum+1,a,b,c);
96                            sum++;
97                            break;
98                        }
99                 case 6:an[sum]=a-b*c;
100                     if(an[sum]>100||an[sum]<0)break;
101                        else{
102                            printf("%d：%.1f-%.1f*%.1f=\n",sum+1,a,b,c);
103                            sum++;
104                            break;
105                        }
106                 case 7:an[sum]=a-b/c;
107                     if(an[sum]>100||an[sum]<0||c==0)break;
108                        else{
109                            printf("%d：%.1f-%.1f/%.1f=\n",sum+1,a,b,c);
110                            sum++;
111                            break;
112                        }
113                 case 8:an[sum]=a*b+c;
114                     if(an[sum]>100||an[sum]<0)break;
115                        else{
116                            printf("%d：%.1f*%.1f+%.1f=\n",sum+1,a,b,c);
117                            sum++;
118                            break;
119                        }
120                 case 9:an[sum]=a*b-c;
121                     if(an[sum]>100||an[sum]<0)break;
122                        else{
123                            printf("%d：%.1f*%.1f-%.1f=\n",sum+1,a,b,c);
124                            sum++;
125                            break;
126                        }
127                 case 10:an[sum]=a*b*c;
128                     if(an[sum]>100||an[sum]<0)break;
129                        else{
130                            printf("%d：%.1f*%.1f*%.1f=\n",sum+1,a,b,c);
131                            sum++;
132                            break;
133                        }
134                 case 11:an[sum]=a*b/c;
135                     if(an[sum]>100||an[sum]<0||c==0)break;
136                        else{
137                            printf("%d：%.1f*%.1f/%.1f=\n",sum+1,a,b,c);
138                            sum++;
139                            break;
140                        }
141                 case 12:an[sum]=a/b+c;
142                     if(an[sum]>100||an[sum]<0||b==0)break;
143                        else{
144                            printf("%d：%.1f/%.1f+%.1f=\n",sum+1,a,b,c);
145                            sum++;
146                            break;
147                        }
148                 case 13:an[sum]=a/b-c;
149                     if(an[sum]>100||an[sum]<0||b==0)break;
150                        else{
151                            printf("%d：%.1f/%.1f-%.1f=\n",sum+1,a,b,c);
152                            sum++;
153                            break;
154                        }
155                 case 14:an[sum]=a/b*c;
156                     if(an[sum]>100||an[sum]<0||b==0)break;
157                        else{
158                            printf("%d：%.1f/%.1f*%.1f=\n",sum+1,a,b,c);
159                            sum++;
160                            break;
161                        }
162                 case 15:an[sum]=a/b/c;
163                     if(an[sum]>100||an[sum]<0||b==0||b==0)break;
164                        else{
165                            printf("%d：%.1f/%.1f/%.1f=\n",sum+1,a,b,c);
166                            sum++;
167                            break;
168                        }
169                 }
170
171             }
172             printf("答案如下：\n");
173                 for(int i=0;i<sum;i++)printf("%d:%.1f\n",i+1,an[i]);
174         }
175     return 0;
176 }```

刚开始我和我的搭档写的软件是一个简单的可以随机显示加减法题目的软件，这种简单的软件对于我和搭档这样写了一年半代码的人来说根本不是问题，不用分工合作，我的搭档一个人五分钟就写出来了，刚开始我们都十分自信，因为我们都认为逐渐改进程序，增加新的功能不过就是多添加几个循环而已。

接下来我们尝试增加程序的几个功能，比如题目避免重复还有具体的定制，我们一人负责一部分，我的想法是创建两个数组来记录下生成的题目，在下一次生成题目之前和上一次进行比较，重复则另随机函数重新生成，于是我就开始我增加代码的工作。当我准备把我的代码和我的搭档的代码整合到一块儿时，我发现他的思路和我的思路，不一样，他为了程序可以具体选择是否可以加乘除法写了两个循环，这样的话我把我的循环套上去就会产生bug，无奈我们只能重新写。

我们总结了经验，这一次我们事先彼此之间交换了对于这个程序的意见，最终确定了放弃循环，用switch，case方法来修改，最后我们花了比预期多出好几倍的时间才完成。

在写程序的过程中，有一次电脑突然产生bug,我们没来得及备份，导致修改的代码完全被重置。如果应用程序需要修改系统设置，记着应用开始前先保存设置，应用结束后要恢复设置，千万别污染环境。

我们发现其实写程序最困难的并不是写出无bug的代码，而是没有在编写程序之前确定编写程序的方向，在一开始我们写最基础的程序之前就应该构思好框架，这样以后就算是修改程序我们也可以有条不紊，我们应该养成这种写代码时的小习惯，同时也是好习惯。

现在是模块化程序设计的天下，应用程序要实现的目标就是金字塔尖，进行程序设计规划的意义就在于，对构成金字塔的基础模块进行划分，规划得越详细，模块分工越明确，越容易明白下一步该做什么，这好比搭积木的游戏，我们可以把你的积木块组合成各种各样的形状，但首先要熟悉每个积木块的功能。中国人讲究对称之美，用在编程里也很合适，如果程序里用到A循环嵌套B判断，B判断又包含C循环之类的结构，我们最好是使用缩进法，让A:ENDDO对齐A:DO，B:ENDIF对齐B:IF……诸如此类，依次缩进，总之对称就等于美观加易读。

0条评论