一、实验目标:
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容:
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三 需求分析
1.能够自动出题
2.包含“+,—,*,/,()” 的四则运算。
3.能够自定义出题目的数量
4.能够判别答案的正确与否
5.能根据所答情况打分
四 结构设计
1.自动出题用随机数生成语句实现:包括随机生成数字、运算符号和
2.用变量约束左右括号顺序和同时存在的特点。
3.将题目输出并用字符串存储
4 . 对字符串入栈进行运算。
五 程序流程图
五 部分代码
主函数控制题目数量:
char ans[]="\0";
int b,i;
srand(time(0));
while(1)
{
printf("当前功能:生成题库\n");
printf("请输入所需题目数量:");
scanf("%d",&b);
for(i=0;i
exp();
printf("%d\n",CalcExp(math)); }
}
利用栈对表达式进行计算:
采用符号优先值对五种运算符号进行控制。
while(c!='='||x!='=') //循环处理表达式中的每一个字符 {
if(isOperator(c)) //如果是运算符 {
if(flag){
seqStackPush(StackData,q); //表达式入栈
q=0; //操作数清零
flag=0; //标志清零,表示操作数已经入栈 }
switch(PRI(x,c)) //判断运算符优先级 {
case -1:
seqStackPush(StackOper,c); //运算符进栈
c=exp[i++];
break;
case 0:
c=seqStackPop(StackOper); //运算符括号,等号出栈,被抛弃
c=exp[i++]; //取下一个 字符
break;
case 1:
oper=seqStackPop(StackOper); //运算符出栈
b=seqStackPop(StackData);
a=seqStackPop(StackData); //两个操作数出栈
t=Calc(a,oper,b); //计算结果
seqStackPush(StackData,t); //将运算结果入栈
break;
}
}else if(c>='0'&&c<='9') //如果输出的字符在0到9之间 {
c-='0'; //把字符转换成数字
q=q*10+c; //多位数的进位处理
c=exp[i++]; //取出下一位字符
flag=1; //设置标志,表示操作数未入栈 }
else {
printf("输入错误\n");
getch();
exit(0);
}
x=seqStackPeek(StackOper); //获取栈顶操作符 }
q=seqStackPop(StackData);
seqStackfree(StackOper);
seqStackfree(StackData); //释放内存占用空间
return q; //出栈,返回结果
}
随机生成数字及符号:
c=rand()%19+1; //数字
printf("%d",c);
b=rand()%4; //符号
switch(b)
{
case 0: printf("+"); math[m]='+';m++;
if(i
case 1: printf("-"); math[m]='-';m++;
if(i
case 2: printf("*"); math[m]='*';m++;
if(i
case 3: printf("/"); math[m]='/';m++;
b=20; break;
}
if(b==10)
{
printf("(");
math[m]='(';m++;
j=3;
b=rand()%4;
}
if(j!=10)
j--;
if(j==0){
printf(")");
math[m]=')';
m++;
b=rand()%3;
j=10;
}
运行结果:
六 运行结果截图
1)主界面
2)超出预设范围报错
3)从文件调出题目答题
4)结果与答案的比对
5)题目做完和计时结束
七 结对编程过程
本次实验我们因为疫情原因不能在学校面对面互相协助,所以我们采用了qq视频电话与屏幕分享,当一个人编写程序的时候,另一个人检查纠错检查
我们用了一晚上的时间,初步完成了这次试验,后期还有些细枝末节的修改
八 实验总结
在结对编程中,我承担驾驶员的角色,我的队友是领航员的角色,我主要负责代码的输入,如代码文件的创建及配置等,我的队友主要起到引领的作用,由于我们对基础知识都掌握的不是很牢固,想实现一些功能时,总是不知道使用什么方法,这时候队友的工作就很起作用,他在旁边搜查相关知识点的资料,告诉我下一步要实现什么功能,然后我们一起讨论解决过程中遇到的问题。我们的默契度有了一定的提高,但是有时候想问题,思想还是不会同步,但是我相信我们的默契度以后还会得到更大的提高。
成员博客地址&仓库地址
1 周宗逸:https://www.cnblogs.com/zzynb/
2 周乐天 https://www.cnblogs.com/alanandpython/
3 仓库地址:https://github.com/zhoudashuaibi/my-travel-plans