结对编程
结对成员:2152211,2052643
一、实验目的:
通过两位同学组队用结对编码(一位同学coding,另一个同学在旁边审核代码,之后再交换角色)的方式完成本次实验。
本次实验需要设计一个四则运算练习题的随机出题程序,
可以通过C/C++/Java/Python等语言进行实现,
四则运算练习题需要一或两个运算符,100以内的数字,不需要写答案,
但是需要再输入答案之后检查答案是否正确并保证答案在0-100之间。
二、设计过程:
1.明确需求和目标:我们需要编写一个程序来反馈小学生的算术题目答案的正确性,并提供相应的解释。我们需要先确定支持的运算符、运算数的范围,以及反馈策略等。
2.确定数据结构和算法:我们需要设计数据结构来表示算术题目和答案,并编写算法来计算正确答案并与学生的答案进行比较。我们可以使用数学表达式树或者字符串表达式来表示算术题目,并使用栈或者递归算法来计算答案。
3.编写代码:根据设计的数据结构和算法,我们可以编写出程序的主要逻辑和功能,并进行测试和调试。我们需要考虑各种可能的输入和输出情况,并确保程序的健壮性和可维护性。
4.优化和改进:我们可以通过代码重构、优化算法和数据结构等方式来提高程序的性能和可读性,同时也可以添加新的功能和改进用户体验
三、代码:(C语言)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void exercises(){
int t=0;
char op1,op2,b[4]={'+','-','*','/'};
float result,result1,result2;
int num[3];
srand(time(0));
do{
for(int i=0;i<3;i++){
num[i]=rand()%100;
}
num[1]=rand()%100+1;
switch(rand()%4+1){
case 1:result1=(float)num[0]*num[1],op1='*';break;
case 2:result1=(float)num[0]/num[1],op1='/';break;
case 3:result1=(float)num[0]+num[1],op1='+';break;
case 4:result1=(float)num[0]-num[1],op1='-';break;
}
switch(rand()%4+1){
case 1:result2=(float)result1+num[2],op2='+';break;
case 2:result2=(float)result1-num[2],op2='-';break;
case 3:result2=(float)result1*num[2],op2='*';break;
case 4:result2=(float)result1/num[2],op2='/';break;
}
if(op1=='+' && op2=='*'){
result1=(float)num[1]*num[2];
result2=num[0]+result1;
}
else if(op1=='+' && op2=='/'){
result1=(float)num[1]/num[2];
result2=num[0]+result1;
}
else if(op1=='-' && op2=='*'){
result1=(float)num[1]*num[2];
result2=num[0]-result1;
}
else if(op1=='-' && op2=='/'){
result1=(float)num[1]/num[2];
result2=num[0]-result1;
}
else
result=result2;
result=result2;
if(result>=0 && result<=100){
printf("第%d个题目:%2d %c %2d %c %2d = \n",t+1,num[0],op1,num[1],op2,num[2],result);
t=t+1;
}
}while(t<300);
}
int main(){
exercises();
system("pause");
}
四、运行结果:
五、可优化点:
可以进一步设计算法输入结果以及对其及时进行验证,同时也可添加菜单程序界面使其更加美观。
六、实验总结:
我们绝大部分的代码都是结对一起写的,一些单元测试和一些小修小改是分开进行的,然后结对的时候交流更改了什么。结对编程确实大大提高了攻坚的效率,而且代码的质量确实更高了,单元测试很少测出错误。但是在我们的实践中并没有提高对需求的覆盖,仍旧时不时遗忘一些不重要的需求。而对于这一次结对编程,队友之间的相互配合真的很重要,三人完成自己的部分从而可以顺利的组合会让整个过程变得更加的流程。再者,函数的正确命名以及适当的注释非常重要,利于代码组合以后的修改与维护。