一、实验目标
(1)体验敏捷开发中的两人合作。
(2)进一步提高个人编程技巧与实践。
二 、实验内容
(1)根据以下问题描述,练习结对编程(pair programming)实践;
(2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
(3)要求在结对编程工作期间,两人的角色至少切换 4 次;
(4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
实验分析:
问题:开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生四则运算,然后用户回答,并且进行打分。
规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除)。
要求:总计输出10个运算式,每输出一个运算式,等待输入结果,然后进行对错判断并输出。最后输出统计答对的题数与分。
实验内容应该包括:
1、代码规范
2、程序的总体设计(附图说明模块之间的关系)
3、程序结对编程过程(附图)及功能实现情况(附代码和图)
4、项目github地址(附图)
5、实验总结
三、实验过程
1、代码规范
本次实验采用C语言实现,实验前查找了有关C语言的相关代码规范。
程序块要采用缩进风格编写,缩进的空格数为4个
相对独立的程序块之间、变量说明之后必须加空行
较长的语句要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当缩进,使排版整齐,语句可读。
不允许把多个短语句写在一行中,即一行只写一条语句。
if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。
对齐只使用空格键,不使用TAB键。
函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
一行程序以小于80字符为宜,不要写得过长。
此外,还有注释规范,函数,标识符等规范。
参考资料:https://blog.csdn.net/qq_39759656/article/details/82289019
2、程序的总体设计
问题:开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生四则运算,然后用户回答,并且进行打分。
规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除)。
要求:总计输出10个运算式,每输出一个运算式,等待输入结果,然后进行对错判断并输出。最后输出统计答对的题数与分。
本次实验使用C语言操作,先进行了变量的定义,包括操作数、运算符等,之后循环输出运算式。
用户根据屏幕显示的运算式进行计算并输入结果,程序判断对错。10道题目完成后,统计结果。
程序流程图:
3、程序结对编程过程及功能实现情况
(1)结对编程的过程
我们先进行了讨论,决定使用C语言为编程工具,最后一起研究了实验的需求,讨论了代码各模块的具体运行
最后采用在线讨论和远程控制,一起完成实现了程序的编写。
(2)功能实现
实验截图
源代码:
#include
#include
int main()
{
int a,b,m,n; //a,b为操作数,m为运算结果,n为用户输入结果
char c; //c为四则运算操作
int i,sum=0; //i为题目数量,sum为正确数目
srand(time(0)); //初始化随机数发生器
//**主界面显示
printf("\n 亓帅 & 王旭 \n");
printf(" ********************欢迎使用小学四则运算********************\n\n");
//**生成随机题目
for(i=0;i<10;i++)
{
a=rand()%100+1;
b=rand()%100+1;
c=rand()%4; //0+,1-,2×,3÷
printf(" 第%d题:",i+1);
switch(c)
{
case 0: //约束和
while((m=a+b)>100)
{
a=rand()%100+1;
b=rand()%100+1;
}
printf("%d + %d = ",a,b);
break;
case 1: //约束差
while(a>100||b>100)
{
a=rand()%100+1;
b=rand()%100+1;
}
if(a
{
m=a;
a=b;
b=m;
}
m=a-b;
printf("%d - %d = ",a,b);
break;
case 2: //约束积
while((m=a*b)>100)
{
a=rand()%100+1;
b=rand()%100+1;
}
printf("%d × %d = ",a,b);
break;
case 3: //约束商
while(a>100||b>100||(a*b==0))
{
a=rand()%100+1;
b=rand()%100+1;
}
if(a
{
m=a;
a=b;
b=m;
}
a=(a/b)*b;
m=a/b;
printf("%d ÷ %d = ",a,b);
break;
}
//**用户输入计算结果
scanf("%d",&n);
if(m==n)
{
sum++;
printf(" 正确\n");
}
else
printf(" 错误\n");
}
//**结果统计
printf("\n 答对 %d 题,得分:%d",sum,sum*10);
if(sum == 10)
printf(" 恭喜你取得满分!!! GREAT ");
else if(sum>=60 & sum<100)
printf(" 成绩不错,继续保持!");
else
printf(" 再接再厉,给自己加加油吧!");
printf("\n\n ");
return 0;
}
4、项目github地址
源仓库的地址为:https://github.com/3170701304wx/sizeyunsuan
仓库截图:
5、实验总结
本次实验让我明白了结对编程的操作,以及结对编程的意义。通过团队的合作,进行代码的构思,以及程序的编写,大大提高了编程的效率和容错率。
实验采用了C语言进行操作,使我对C语言的规范以及C语言的应用有了进一步的掌握。
感谢我的队友,以及同学的帮助,相信在之后的实验中,我将会更好的发挥。