结对编程(尝试)


一、实验目的

1、体验敏捷开发中的两人合作。

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

二、实验环境

硬件:

实验室电脑

软件:

Dev C++

VS 2019

三、实验内容

1.小学老师要每周给同学出300道四则运算练习题

两个运算符,100以内数字,不需要答案。【估计时间1

估计写程序需要的时间

把代码写出来

需要写答案,并且保证答案在0~100之间 【估计时间2

  1. 学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
  2. 编程语言不限

实验步骤(图文方式叙述)

1.代码规范(参考了其他博客)

1)使用语言

C语言

(2)函数定义
每个函数的定义和说明应该从第一列开始书写。函数名(包括参数表)和函数体的 花括号应该各占一行。

(3)编码格式
i.空格与空行

ii.缩进与折行

iii.嵌套语句(语句块)的格式

(4)注释

C语言中使用一组(/* */)作为注释界定符。

i.出现位置

在要说明的内容之前,尽量不使用行末的注释方式。

ii.说明内容

变量的用途和语言块末尾使用的注释

注明复杂的算法的出处。

注明容易出错的代码段。

iii.注:不可过多地使用注释。

(5)命名规范
i.常量、变量命名

多个单词组成的变量名,除第一个单词外的其他单词首字母应该大写;

如果符号常量由多个单词构成,两个不同的单词之间可以用下划线连接;

符号常量的命名用大写字母表示

ii.函数命名

选择与函数功能相关的有意义的英文组成函数名。

  1. 程序的总体设计
    和搭档根据题目要求分析后,决定分两阶段完成任务。
    阶段1一个运算符,答案在0~100内,300道四则运算,输出到文档(txt或者doc)中。
    阶段2两个运算符,答案在0~100内,300道四则运算,输出到文档(txt或者doc)中。
        

(1)数据结构

a:运算数1

b:运算数2

c:运算数3

Ans_1:中间答案

Ans_2:最终答案

i_1:运算符1

i_2:运算符2

(2)产生运算数

i.对于第一个运算符,随机出一个运算数和一个答案(为了保证答案在0~100之间),得出另外一个运算数,减法和除法则通过加法和乘法的运算特点逆运算得出。

ii.对于第二个运算符,通过i中得出的答案和一个随机数,将问题转化为i,算出第三个运算符。

Create()

Plus()

Times()

(3)输出到文档

一般情况下每个数字占3位,根据运算符占位特点可调整为占2位。

PrintTxt()

四、实验结果及分析(遇到的问题与解决)
1.实验结果
在成功生成300道四则运算题后,输出over.表示成功生成,之后即可在对应目录文件下的txt(doc)文件中看到题目。(一个道题占一行)

2.遇到的问题与解决

(1)在实现两个运算符(4^2种组合方式)的前提下,满足答案在0~100以内

i.对于第一个运算符,随机出一个运算数和一个答案(中间答案,保证答案在0~100之间),得出另外一个运算数,减法和除法则通过加法和乘法的运算特点逆运算得出。

ii.对于第二个运算符,通过i中得出的答案(最终答案,保证答案在0~100之间)和一个随机数,将问题转化为i,算出第三个运算符。

(2)0xC0000094错误

一开始在DEVC++中编译运行。有时会发生运行不通过(但程序本身并不报错),无法显示完成标志“over.”(当然也没有数据写入文档),因为反复多次运行之后就会成功所以并没有在意。之后在使用VS2019编译时,编译器提示出现0xC0000094错误,就知道原因是因为在生成除法时候,没有顾虑到除数为0的可能。限制除数不为0即可解决。

(3)文件输出fprintffor循环的问题

如下图这种写法,

会出现Debug Assertion Failed

通过查询得出产生Debug Assertion Failed的原因主要有两种:野指针和内存泄露

最终的解决办法是再设置一个局部变量去作为桥梁,如图

 

五、实验体会

体验了敏捷开发中的两人合作,进一步提高了个人编程技巧与实践。在编写代码解决bug的过程中也深刻理解到了结对编程的优越性:

1程序员互相帮助,可以得到各方面能力上的互补。

2增强代码和产品质量,并有效的减少低级BUG的出现

3降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。

4在编程中,相互讨论,某种情况下可能更快更有效地解决问题。

当然在此过程中也感受到了结对编程的局限性,出现类似因编程习惯而产生矛盾,或是因交谈其他事情而导致工作精力不能集中的情况等。