实验二 结对编程 阶段二

一、实验目标
 (1)体验敏捷开发中的两人合作。

 (2)进一步提高个人编程技巧与实践。

二 、实验内容

 (1)根据以下问题描述,练习结对编程(pair programming)实践;

 (2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。

 (3)要求在结对编程工作期间,两人的角色至少切换 4 次;

 (4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

      实验分析:

      问题:开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生四则运算,然后用户回答,并且进行判断正误打分。

      规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除)。

      要求:总计输出10个运算式,每输出一个运算式,等待输入结果,然后进行对错判断并输出。最后输出统计答对的题数与分。

     

实验内容应该包括:

     1、代码规范
     2、程序的总体设计(附图说明模块之间的关系)
     3、程序结对编程过程(附图)及功能实现情况(附代码和图)
     4、项目github地址(附图)
     5、实验总结

三、实验过程

1  代码规范:代码规范化基本上有七大原则,体现在空行、空格、成对书写、缩进、对齐、代码行、注释七方面的书写规范上。

1) 空行:空行起着分隔程序段落的作用。空行得体将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序会多消耗一些纸张,但是值得。

规则一:定义变量后要空行。尽可能在定义变量的同时初始化该变量,即遵循就近原则。如果变量的引用和定义相隔比较远,那么变量的初始化就很容易被忘记。若引用了未被初始化的变量,就会导致程序出错。

规则二:每个函数定义结束之后都要加空行。

总规则:两个相对独立的程序块、变量说明之后必须要加空行。比如上面几行代码完成的是一个功能,下面几行代码完成的是另一个功能,那么它们中间就要加空行。这样看起来更清晰。

2) 空格

规则一:关键字之后要留空格。像 const、case 等关键字之后至少要留一个空格,否则无法辨析关键字。像 if、for、while 等关键字之后应留一个空格再跟左括号(,以突出关键字。

规则二:函数名之后不要留空格,应紧跟左括号(,以与关键字区别。

规则三:(向后紧跟;),;这三个向前紧跟;紧跟处不留空格。

规则四:,之后要留空格。如果;不是一行的结束符号,其后要留空格。

规则五:赋值运算符、关系运算符、算术运算符、逻辑运算符、位运算符,如 =、==、!=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=、>、<=、>、>=、+、-、*、/、%、&、|、&&、||、<<、>>、^ 等双目运算符的前后应当加空格。

注意,运算符“%”是求余运算符,与 printf 中 %d 的“%”不同,所以 %d 中的“%”前后不用加空格。

规则六:单目运算符 !、~、++、--、-、*、& 等前后不加空格。

规则七:像数组符号[]、结构体成员运算符.、指向结构体成员运算符->,这类操作符前后不加空格。

规则八:对于表达式比较长的 for 语句和 if 语句,为了紧凑起见,可以适当地去掉一些空格。但 for 和 if 后面紧跟的空格不可以删,其后面的语句可以根据语句的长度适当地去掉一些空格。

3) 成对书写:成对的符号一定要成对书写,如 ()、{}。不要写完左括号然后写内容最后再补右括号,这样很容易漏掉右括号,尤其是写嵌套程序的时候。

4) 缩进:缩进是通过键盘上的 Tab 键实现的,缩进可以使程序更有层次感。原则是:如果地位相等,则不需要缩进;如果属于某一个代码的内部代码就需要缩进。

5) 对齐:对齐主要是针对大括号{}说的:

规则一:{}分别都要独占一行。互为一对的{}要位于同一列,并且与引用它们的语句左对齐。

规则二:{}之内的代码要向内缩进一个 Tab,且同一地位的要左对齐,地位不同的继续缩进。

6) 代码行

规则一:一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且便于写注释。

规则二:if、else、for、while、do 等语句自占一行,执行语句不得紧跟其后。此外,非常重要的一点是,不论执行语句有多少行,就算只有一行也要加{},并且遵循对齐的原则,这样可以防止书写失误。

7) 注释:C语言中一行注释一般采用//…,多行注释必须采用/*…*/。注释通常用于重要的代码行或段落提示。在一般情况下,源程序有效注释量必须在 20% 以上。虽然注释有助于理解代码,但注意不可过多地使用注释。

规则一:注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多会让人眼花缭乱。

规则二:如果代码本来就是清楚的,则不必加注释。


规则三:边写代码边注释,修改代码的同时要修改相应的注释,以保证注释与代码的一致性,不再有用的注释要删除。

规则四:当代码比较长,特别是有多重嵌套的时候,应当在段落的结束处加注释,这样便于阅读。

规则五:每一条宏定义的右边必须要有注释,说明其作用。

2、程序的总体设计

      问题:开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生四则运算,之后用户回答,并且进行判断正误打分。

      规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除)。

      要求:总计输出10个运算式,每输出一个运算式,等待输入结果,然后进行对错判断并输出。最后输出统计答对的题数与分。

      本次实验使用C语言操作,先进行了变量的定义,包括操作数、运算符等,之后循环输出运算式。

      用户根据屏幕显示的运算式进行计算并输入结果,程序判断对错。10道题目完成后,统计结果。

      程序流程图:

                      

       3、程序结对编程过程及功能实现情况

     (1)结对编程的过程

       我们先进行了讨论,决定放弃Java以c语言作为为编程工具,最后一起研究了实验的需求,讨论了代码各模块的具体运行

       最后采用在线讨论和远程控制,一起完成实现了程序的编写。

               

      (2)功能实现

        实验截图

        

附源代码:

      #include <stdio.h>
      #include <time.h>

      int main()
      {
      int a,b,m,n; //a,b为操作数,m为运算结果,n为用户输入结果
      char c; //c为四则运算操作
      int i,sum=0; //i为题目数量,sum为正确数目
      srand(time(0)); //初始化随机数发生器

      //**主界面显示
      printf(" 亓帅 & 王旭 ");
      printf(" ********************欢迎使用小学四则运算******************** ");

      //**生成随机题目
      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<b)
      {
      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<b)
      {
      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(" 正确 ");
      }
      else
      printf(" 错误 ");
      }

      //**结果统计
      printf(" 答对 %d 题,得分:%d",sum,sum*10);
      if(sum == 10)
      printf(" 恭喜你取得满分!!! GREAT ");
      else if(sum>=60 & sum<100)
      printf(" 成绩不错,继续保持!");
      else
      printf(" 再接再厉,给自己加加油吧!");
      printf(" ");
      return 0;
      }

      4、项目github地址

      源仓库的地址为:https://github.com/3170701304wx/sizeyunsuan

     项目成员:王旭,亓帅;

      仓库截图:

      

实验小结:

通过本次实验,我对编程方式有了新的发现。不再是一个人去完成整个任务的实现,而是两人共同协作,共同努力完成任务。结对编程的好处就在于身边有个领航员角色的存在,在编写代码时,一旦出现输入错误,就会有人及时的提醒。并且,在设计代码时,有个同伴可以一起讨论,融合两个人不同的见解和观点,我们往往可以得出更加准确且更加高效的设计思路。这一切都为我们在完成代码的过程省去了大量的时间和精力。同时,通过这次实验,复习了c语言的知识,同时也了解了github的一些基本操作,受益匪浅。通过协作完成实验,也使我的团队协作能力有了进一步的提升。

原文地址:https://www.cnblogs.com/wxqaq/p/12643345.html