王鑫君1759105和程雯丽1759104一块儿结对完成的代码编写程序员
/*博客写咱们写代码时的过程(流程)和结队编程的收获,观点,以为好仍是很差,和你一我的编有什么区别,用了多久时间*/算法
题目:小学老师要每周给同窗出四则运算练习题。编程
两个运算符,100之内的数字,不须要写答案。【估计时间1】小程序
如今估计写这个程序须要的时间。数组
须要写答案【估计时间2】编程语言
//以后扩展开,加括号,限制数值范围,乘除法,支持分数等函数
//估计作好这个软件须要多长时间学习
摘要:测试
·结对编程过程观点6条 ·改进代码3次过程 ·总结网站
作100之内的四则运算是相比较而言比较基础的代码编写,可是较为新奇的是两人结对的代码编写过程。以前就据说过两人合做编写代码可以更高效,一人敲代码,一人作代码测试;一人缺失灵感,一人提供建议,两两合做听起来真的给敲代码这个较为枯燥的事注入了新活力。可是,咱们在尝试结对编程过程当中仍是有许多问题和争议的。
结对敲代码过程1:选编程语言的争议
结对敲代码观点1:和我本身编代码区别有点大
通常而言,本身敲代码不会有争议,我本身习惯哪一个或者擅长哪一个就用哪一个敲代码,可是是两人结对,因此咱们在一开始选择哪一种编程语言上就有了歧义。我以为想用C++,她想用C语言,尽管在我概念里这两个至关“兼容”,但相比而言我以为C++比C简单不少。
C语言是面向过程的编程,它最重要的特色是函数,经过main函数来调用各个子函数。
C++是面向对象的编程,类是它的主要特色,在程序执行过程当中,先由主main函数进入,定义一些类,根据须要执行类的成员函数,过程的概念被淡化了,以类驱动程序运行,类就是对象,因此咱们称之为面向对象程序设计。面向对象在分析和解决问题的时候,将涉及到的数据和数据的操做封装在类中,经过类能够建立对象,以事件或消息来驱动对象执行处理。
因此本质上仍是有区别的,最后咱们仍是决定用C语言来敲这个小程序。
结对敲代码过程2:编程变量的命名争议
结对敲代码观点2:我以为变量命名能够长一些,可是最好能好识别
不知道是否是由于没有过结对敲代码的经验,因此许多小的问题上都有些争议,对于她的变量命名上,我老是会不认同她,我以为她经常在变量上的命名让我看不懂,我以为若是是较长的代码量,这个变量是什么?那个变量是什么?我老是认不出来,记不住的,我以为一点也不方便代码的阅读,是个不太好的习惯呀。
结对敲代码过程3:与平时遇代码bug的习惯不一样
结对敲代码观点3:我好像仍是习惯一我的啃bug,专一力不太集中得起来
其次,在日常的时候咱们也会遇到别人问咱们“这段代码哪里有错啊,帮忙找找呀。”之类的问题,我习惯是把代码发给我看看,而后本身调试修改,改完了后再发回去给他,因此在结对这个代码编写时,就不自主地会“发给我我看看”这样,以为两我的挤在一个电脑前纠错不习惯,脖子也不太舒服,并且可能也是由于不习惯吧,因此感受没有一我的调试的时候的那种专一感,感受注意力集中不起来。
结对敲代码过程4:与平时遇代码bug后的小偷懒不一样
结对敲代码观点4:这个效率提升得好多啊,棒!
平时我在敲了大段代码,满怀期待地运行后,发现出了一些难以看出的错误,就会“啊!累死了,先玩会儿吧。”这样,而后看似一直坐在桌前面对着电脑,可是只是无用功,效率极低。可是结对编程就不同了,当连续一两个小时一直面对着电脑时,就已经以为累了,想歇会儿,可是做为观察员,驾驶员还在勤勤恳恳地敲代码,我一个在旁边提意见,看看是否有错的喊累,彷佛太说不过去了,因而继续坚持,很快错误就解决了,代码也敲得很快。我以为百度百科说的就是我这类的“懒人”,嘿嘿~
“结对编程使得程序员被迫提升了工做效率。若是单独工做,在遇到困难的时候,并非全部人都马上积极地去解决问题,这时或许会上网和网友聊聊天,看看无关的网站等等。有可能由于工做的打断,大半天的时间都浪费了。看起来,程序员天天都在加班,实际有效工做时间每每还达不到6个小时。而结对编程有一种相互督促的做用,在一边工做疲惫状态很差时,另外一边会起一个鼓励和激发斗志的做用。
并且两我的共用一台电脑,略带私人性质的聊天活动都会很自觉地不去进行了。结果一天下来,新实验结对编程的程序员都会喊累,神经紧绷8个小时的工做不累才怪。” ——来自百度百科“结对编程”
结对敲代码过程5:一些新的编程技巧
结对敲代码观点5:三个臭皮匠顶个诸葛亮
这个是个我一开始就知道的事了,确实在编程过程当中,我本身的想法有些绕路了,她提出本身的想法,我以为不足的地方加以改进,加入本身的想法,竟比我当初的想法更方便,固然这也在个人意料之中。我在这个结对编程的尝试中,确实学到了一些新的编程技巧,受益良多。
结对敲代码过程6:习惯队友的习惯
结对敲代码观点6:结对编程必定会有歧义,但站在别人的习惯上分析也会发现这很正常
在一开始的代码学习上,每一个人的理解代码都是不同的,那么在敲代码时必定也会有着与本身理解相近的敲代码习惯方式。咱们分享关于代码细节上的知识,而且互相学习队友的编程技巧,同时也渐渐地理解了队友的习惯。
这是最初的代码,可以随机出四则运算的题目,总共10题。
代码1:计算考查【估计时间:30分钟】
1 #include"stdio.h" 2 #include<stdlib.h> 3 #include<time.h> 4 #include<ctype.h> 5 6 int sy[10],sr[10],jd[10],jg[10]; 7 int fs=0; 8 char fh[10]; 9 void chufa(int *s1,int *s2,int *s3) 10 { 11 int i,b=1,c,jg; 12 int cs[20]={0},sy,sr; 13 srand((unsigned)time(NULL)); 14 FA:sy=rand()%100; 15 if(sy==0) goto FA; 16 for(i=1;i<=sy;i++) 17 { 18 if(sy%i==0) { cs[b]=i; b++;} 19 else continue; 20 } 21 c=rand()%b; 22 if(c==0) c=c+1; 23 sr=cs[c]; 24 jg=sy/sr; 25 *s1=sy; 26 *s2=sr; 27 *s3=jg; 28 } 29 void jisuan() 30 { 31 int p; 32 int i,gh; 33 printf("将进行100之内数字的四则运算!\n"); 34 srand((unsigned)time(NULL)); 35 36 for(i=0;i<10;i++) 37 { 38 sy[i]=rand()%100; 39 sr[i]=rand()%100; 40 p=rand()%4; 41 42 if(p==0) 43 { 44 fh[i]='+';jg[i]=sy[i]+sr[i];} 45 else if(p==1) 46 { 47 fh[i]='-'; 48 if(sy[i]<sr[i]) 49 { gh=sy[i]; 50 sy[i]=sr[i]; 51 sr[i]=gh; 52 } 53 jg[i]=sy[i]-sr[i]; 54 } 55 else if(p==2) 56 { 57 fh[i]='*'; 58 jg[i]=sy[i]*sr[i]; 59 } 60 else if(p==3) 61 { 62 fh[i]='/'; 63 chufa(&sy[i],&sr[i],&jg[i]); 64 } 65 printf("第%2d题:%2d %c %2d=?",i+1,sy[i],fh[i],sr[i]); 66 scanf("%d",&jd[i]); 67 if(jd[i]==jg[i]) fs+=10; 68 } 69 printf("\n测试结束\n\n"); 70 } 71 int main() 72 { 73 jisuan(); 74 return 0; 75 }
运算结果:
以后,咱们但愿可以进行计算考查以后,给出正确答案能让咱们知道本身是否计算正确。
代码2:计算考查+正确答案显示【估计时间:15分钟】
1 #include"stdio.h" 2 #include<stdlib.h> 3 #include<time.h> 4 #include<ctype.h> 5 6 int sy[10],sr[10],jd[10],jg[10]; 7 int fs=0; 8 char fh[10]; 9 void chufa(int *s1,int *s2,int *s3) 10 { 11 int i,b=1,c,jg; 12 int cs[20]={0},sy,sr; 13 srand((unsigned)time(NULL)); 14 FA:sy=rand()%100; 15 if(sy==0) goto FA; 16 for(i=1;i<=sy;i++) 17 { 18 if(sy%i==0) { cs[b]=i; b++;} 19 else continue; 20 } 21 c=rand()%b; 22 if(c==0) c=c+1; 23 sr=cs[c]; 24 jg=sy/sr; 25 *s1=sy; 26 *s2=sr; 27 *s3=jg; 28 } 29 void jisuan() 30 { 31 int p; 32 int i,gh; 33 printf("将进行100之内数字的四则运算!\n"); 34 srand((unsigned)time(NULL)); 35 36 for(i=0;i<10;i++) 37 { 38 sy[i]=rand()%100; 39 sr[i]=rand()%100; 40 p=rand()%4; 41 42 if(p==0) 43 { 44 fh[i]='+';jg[i]=sy[i]+sr[i];} 45 else if(p==1) 46 { 47 fh[i]='-'; 48 if(sy[i]<sr[i]) 49 { gh=sy[i]; 50 sy[i]=sr[i]; 51 sr[i]=gh; 52 } 53 jg[i]=sy[i]-sr[i]; 54 } 55 else if(p==2) 56 { 57 fh[i]='*'; 58 jg[i]=sy[i]*sr[i]; 59 } 60 else if(p==3) 61 { 62 fh[i]='/'; 63 chufa(&sy[i],&sr[i],&jg[i]); 64 } 65 printf("第%2d题:%2d %c %2d=?",i+1,sy[i],fh[i],sr[i]); 66 scanf("%d",&jd[i]); 67 if(jd[i]==jg[i]) fs+=10; 68 } 69 printf("\n测试结束\n\n"); 70 } 71 void dajuan() 72 { 73 int j; 74 printf("你的答卷为:\n"); 75 for(j=0;j<10;j++) 76 printf("%2d %c %2d=%2d\n",sy[j],fh[j],sr[j],jd[j]); 77 printf("\n\n"); 78 } 79 int main() 80 { 81 jisuan(); 82 dajuan(); 83 return 0; 84 }
运行结果:
最后,咱们但愿可以更直观得告诉咱们对了哪些,错了哪些,不须要本身与正确答案一一对比
代码3:咱们提出了菜单式,有一二三四的选项供选择【估计时间:60分钟】
1 #include"stdio.h" 2 #include<stdlib.h> 3 #include<time.h> 4 #include<ctype.h>//字符操做函数 5 //定义全局变量 6 int sy[10],sr[10],jd[10],jg[10];//sy,sr,jd,jg分别为第一运算数,第二运算数,输入结果,正确结果 7 int fs=0; 8 char fh[10];//fh保存运算符号 9 10 void chufa(int *s1,int *s2,int *s3) 11 { 12 int i,b=1,c,jg;//i为控制循环变量 13 int cs[20]={0},sy,sr;//cs为除数数组,sy保存被除数,sr为从cs中抽取的除数 14 srand((unsigned)time(NULL)); 15 FA:sy=rand()%100; 16 if(sy==0) goto FA; 17 for(i=1;i<=sy;i++)//产生除数数组的循环 18 { 19 if(sy%i==0) { cs[b]=i; b++;} 20 else continue; 21 }//循环结束 22 c=rand()%b;//随机抽取除数 23 if(c==0) c=c+1; 24 sr=cs[c]; 25 jg=sy/sr; 26 *s1=sy;//指针变量 27 *s2=sr; 28 *s3=jg; 29 } 30 /* 自动生成10道运算题,数值在0-99之间 31 每出一道题后等待操做者输入运算结果 32 判断输入的结果是否正确,正确加10分 33 给出最终得分 34 */ 35 /* 算法:用随机函数rand()产生0-32767之间的整数,与100取余数后获得0-99之间的整数 36 运算符也由随机数产生,rand%4获得0-3之间的随机数,约定0:减法,1:加法 37 2:乘法,3:除法。for循环控制题目数量,每次循环先产生题目并显示出来,将计算结果保存在jg中再等到作题的人从键盘输入计算结果保存在s中,将jg与s进行比较断定正确性 38 作完十道题后(循环结束),显示测试结果并进行评价 39 */ 40 void jisuan() 41 { 42 int p;//p为随机产生的运算符号,规定0为加法,1为减法,2为乘法,3为除法 43 int i,gh;//i为循环控制变量,gh用于临时交换数据 44 printf("将进行100之内数字的四则运算!\n"); 45 srand((unsigned)time(NULL));//随机数由系统时间函数产生 46 47 //循环产生10道100以内的加减乘除法运算题目 48 for(i=0;i<10;i++) 49 { 50 sy[i]=rand()%100;//随机产生第一个操做数(1-99) 51 sr[i]=rand()%100;//随机产生第二个操做数(1-99) 52 p=rand()%4;//随机产生运算符(0-3) 53 54 if(p==0)//转换成运算符号,p为0表示作加法 55 { 56 fh[i]='+';jg[i]=sy[i]+sr[i];}//fh为‘+’,jg为sy[i]+sr[i] 57 else if(p==1)//p为1表示作减法 58 { 59 fh[i]='-'; 60 if(sy[i]<sr[i]) 61 { gh=sy[i]; 62 sy[i]=sr[i]; 63 sr[i]=gh; 64 }//若是sy<sr,则交换sy,sr,以保证结果为正数 65 jg[i]=sy[i]-sr[i]; 66 } 67 else if(p==2)//p为2表示作乘法 68 { 69 fh[i]='*'; 70 jg[i]=sy[i]*sr[i]; 71 }// fh为'*',jg为sy*sr 72 else if(p==3)//p为3表示作除法 73 { 74 fh[i]='/'; 75 chufa(&sy[i],&sr[i],&jg[i]); 76 } 77 printf("第%2d题:%2d %c %2d=?",i+1,sy[i],fh[i],sr[i]);//显示题目 78 scanf("%d",&jd[i]); 79 if(jd[i]==jg[i]) fs+=10; 80 }//循环结束 81 printf("\n测试结束\n\n"); 82 } 83 /*主菜单选项,分为显示答卷、错题正解、系统评估、系统退出 84 算法:使用printf()函数显示菜单项,用scanf()函数接受选项字符 85 while条件限定选项的合法性,非法字符则从新输入并返回主函数 86 */ 87 char caidan() 88 { 89 char c='0';//定义变量 90 printf("\n*******数学四则运算*******\n\n\n"); 91 printf(" 1.显示答卷 2.错题正解\n\n"); 92 printf(" 3. 系统评估 4.系统退出 \n\n"); 93 printf("\n***********************************"); 94 printf("\n请输入选项(1-4):");//提示输入选项 95 do 96 { 97 scanf("%c",&c);//输入选项 98 } 99 while(!(c>='1'&&c<'5'));//检验选项是否合法,若不然重输 100 return c;//返回选择项 101 } 102 /*对成绩结果进行评价,便于作题了解本身的状况,按分数的不一样层次进行评价 103 算法:用条件函数switch对成绩score进行分段并给出相应的评价,结果score的数据从主函数得到 104 */ 105 void pingjia() 106 { 107 printf("你的成绩是%d分.\n",fs); 108 switch(fs) 109 { 110 case 100:printf("真棒!\n ");break; 111 case 90: printf("优秀!\n");break; 112 case 80: 113 case 70: printf("良好!请继续努力~\n"); break; 114 case 60: printf("及格!再接再励~!\n"); break; 115 case 50: 116 case 40: 117 case 30: 118 case 20: 119 case 10: printf("你可长点心吧~\n"); break; 120 case 0: printf("太差劲了!\n"); break; 121 122 } 123 printf("\n\n"); 124 } 125 /*显示答卷 126 各数据从主函数中得到 127 */ 128 void dajuan() 129 { 130 int j; 131 printf("你的答卷为:\n"); 132 for(j=0;j<10;j++) 133 printf("%2d %c %2d=%2d\n",sy[j],fh[j],sr[j],jd[j]); 134 printf("\n\n"); 135 } 136 /*对错题给出正确的答案 137 各数据从主函数中得到 138 */ 139 void zhengjie() 140 { 141 int k; 142 printf("你答错的题的正确答案为:\n"); 143 for(k=0;k<10;k++) 144 { 145 if(jd[k]==jg[k]) continue; 146 else 147 { 148 printf("%2d %c %2d = %2d\n",sy[k],fh[k],sr[k],jg[k]); 149 } 150 } 151 printf("\n\n"); 152 } 153 /*主函数*/ 154 int main() 155 { 156 int key=1; 157 jisuan(); 158 while(key) 159 { 160 switch(caidan()) 161 { 162 case '1': { printf("\n\n\n");dajuan(); } break; 163 case '2': { printf("\n\n\n");zhengjie(); } break; 164 case '3': { printf("\n\n\n");pingjia(); } break; 165 case '4': key=0; 166 } 167 } 168 return 0; 169 }
运行结果:
总结:
总之,用时相加大概105分钟左右,我以为结对编程确实比本身编程好不少。在一开始,我确实不习惯结对编程,有许多地方的歧义和妥协,这个我在前面边结对编程边写的过程观点中有写。可是毋庸置疑,在效率上,代码的正确性和紧凑度上,结对编程的优势十分醒目。这也就是为何结对编程可以成为一个较为流行的编程方式的缘由。关于结对编程,仍是有一些新的受益之处。首先,它能够促进参与项目的程序员自身的提升,一对程序员工做的时候,水平较低的一方会潜移默化地受水平略高的程序员影响,学到一些新的东西。而水平高的一方一样由于不断地把本身的想法说出来而整理了本身的思路。我以为这个是我当初本身编程时所没有的大特色,我学到了不少,在这里感谢队友!