结对编程------四则运算
此次体验结对编程编写四则运算程序。
一:两个运算符,100以内的数字,不用输出答案。
版本一:定义三个int型随机变量表示需要运算的数字,两个flag(0-3)随机变量来分别表示加、减、乘、除等四个运算符,使用if语句直接将运算表示出来。
具体代码为:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main(){ int x1,x2,x3,flag1,flag2; srand((unsigned)time(NULL)); x1=rand()%100; x2=rand()%100; x3=rand()%100; flag1=rand()%3; flag2=rand()%3; if(flag1==0){ if(flag2==0) printf("%d+%d+%d=",x1,x2,x3); else if(flag2==1) printf("%d+%d-%d=",x1,x2,x3); else if(flag2==2) printf("%d+%d*%d=",x1,x2,x3); else if(flag2==3) printf("%d+%d/%d=",x1,x2,x3);} else if(flag1==1){ if(flag2==0) printf("%d-%d+%d=",x1,x2,x3); else if(flag2==1) printf("%d-%d-%d=",x1,x2,x3); else if(flag2==2) printf("%d-%d*%d=",x1,x2,x3); else if(flag2==3) printf("%d-%d/%d=",x1,x2,x3); } else if(flag1==2){ if(flag2==0) printf("%d*%d+%d=",x1,x2,x3); else if(flag2==1) printf("%d*%d-%d=",x1,x2,x3); else if(flag2==2) printf("%d*%d*%d=",x1,x2,x3); else if(flag2==3) printf("%d*%d/%d=",x1,x2,x3); } else if(flag1==3){ if(flag2==0) printf("%d/%d+%d=",x1,x2,x3); else if(flag2==1) printf("%d/%d-%d=",x1,x2,x3); else if(flag2==2) printf("%d/%d*%d=",x1,x2,x3); else if(flag2==3) printf("%d/%d/%d=",x1,x2,x3); } return 0; }
运行结果:(代码中没有控制数量的while语句,实际运行时已加上)

版本二:因为不需要输出答案,只需要表示出运算式子即可,则将四个运算符放入到一个字符数组中,定义两个个随机变量flag来确定,最后输出即可。定义变量 i 来控制需要输出式子的数量。
具体代码为:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main(){ int x1,x2,x3;//随机数字 char a[]={'+','-','*','/'};//运算符数组 int flag1,flag2,i; srand((unsigned)time(NULL)); for(i=1;i<=300;i++){ x1=rand()%100; x2=rand()%100; x3=rand()%100; flag1=rand()%3; flag2=rand()%3; printf("%d%c%d%c%d=\n",x1,a[flag1],x2,a[flag2],x3); } return 0; }
运行结果:

二:两个运算符,运算答案为0到100,输出答案。
在第一题版本一的基础上修改:因为要输出答案,所以定义一个变量answer来确定运算答案,并用if来控制是否输出。定义变量 i 和 j 来控制输出的数量。
具体代码为:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main(){ int x1,x2,x3,flag1,flag2; int i,j; double answer; i=1; j=0; answer=0; srand((unsigned)time(NULL)); while(i!=-1&&j<=300){ x1=rand()%100; x2=rand()%100; x3=rand()%100; flag1=rand()%3; flag2=rand()%3; if(flag1==0){ if(flag2==0) answer=x1+x2+x3; else if(flag2==1) answer=x1+x2-x3; else if(flag2==2) answer=x1+x2*x3; else if(flag2==3) answer=x1+x2/x3; } else if(flag1==1){ if(flag2==0) answer=x1-x2+x3; else if(flag2==1) answer=x1-x2-x3; else if(flag2==2) answer=x1-x2*x3; else if(flag2==3) answer=x1-x2/x3; } else if(flag1==2){ if(flag2==0) answer=x1*x2+x3; else if(flag2==1) answer=x1*x2-x3; else if(flag2==2) answer=x1*x2*x3; else if(flag2==3) answer=x1*x2/x3; } else if(flag1==3){ if(flag2==0) answer=x1/x2+x3; else if(flag2==1) answer=x1/x2-x3; else if(flag2==2) answer=x1/x2*x3; else if(flag2==3) answer=x1/x2/x3; } if(answer>=0&&answer<=100){ if(flag1==0){ if(flag2==0){ j++; printf("%d+%d+%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==1){ j++; printf("%d+%d-%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==2){ j++; printf("%d+%d*%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==3){ j++; printf("%d+%d/%d=%.2f\n",x1,x2,x3,answer); } } else if(flag1==1){ if(flag2==0){ j++; printf("%d-%d+%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==1){ j++; printf("%d-%d-%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==2){ j++; printf("%d-%d*%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==3){ j++; printf("%d-%d/%d=%.2f\n",x1,x2,x3,answer); } } else if(flag1==2){ if(flag2==0){ j++; printf("%d*%d+%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==1){ j++; printf("%d*%d-%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==2){ j++; printf("%d*%d*%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==3){ j++; printf("%d*%d/%d=%.2f\n",x1,x2,x3,answer); } } else if(flag1==3){ if(flag2==0){ j++; printf("%d/%d+%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==1){ j++; printf("%d/%d-%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==2){ j++; printf("%d/%d*%d=%.2f\n",x1,x2,x3,answer); } else if(flag2==3){ j++; printf("%d/%d/%d=%.2f\n",x1,x2,x3,answer); } } } } return 0; }
运行结果:

小结:
结对编程是一种比较有趣的编程方式,两个人使用同一台电脑一个人编另一个人看,同时两个人还有语言,信息上的交流,这样看似浪费了一个程序员的时间,但实际上提高了编程的效率,即看的那个人可以及时的发现代码中出现的潜在问题,不需要等到代码写完后才调试修改。
本次的项目是一个比较简单的项目,三个数字进行四则运算的算法并不难,只是判断答案并输出的时候会使代码变的冗长,这时候就要进行算法的优化,比如第一问我们最终代码比第一版代码长度少了一半多。我们切实体会到了代码优化的问题。

浙公网安备 33010602011771号