结对编程--第二阶段

一、实验目标:

 

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<b;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<a-3&&j==10) b=10;
        else b=rand()%4; break;
       case 1: printf("-"); math[m]='-';m++;
        if(i<a-3&&j==10) b=10;
        else b=rand()%4; break;
       case 2: printf("*"); math[m]='*';m++;
        if(i<a-3&&j==10) b=10;
        else b=rand()%4; break;
       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视频电话与屏幕分享,当一个人编写程序的时候,另一个人检查纠错检查

 

 

我们用了一晚上的时间,初步完成了这次试验,后期还有些细枝末节的修改

实验总结

在结对编程中,我承担驾驶员的角色,我的队友是领航员的角色,我主要负责代码的输入,如代码文件的创建及配置等,我的队友主要起到引领的作用,由于我们对基础知识都掌握的不是很牢固,想实现一些功能时,总是不知道使用什么方法,这时候队友的工作就很起作用,在旁边搜查相关知识点的资料,告诉我下一步要实现什么功能,然后我们一起讨论解决过程中遇到的问题我们的默契度有了一定的提高,但是有时候想问题,思想还是不会同步,但是我相信我们的默契度以后还会得到更大的提高。

 

成员博客地址&仓库地址

周宗逸:https://www.cnblogs.com/zzynb/

周乐天 https://www.cnblogs.com/alanandpython/


仓库地址:https://github.com/zhoudashuaibi/my-travel-plans

 

 

 

 

 

 

 

 

posted @ 2020-04-05 23:06  周大仙的小宠  阅读(168)  评论(0编辑  收藏  举报