结对编程(尝试)
一、实验目的
1、体验敏捷开发中的两人合作。
2、进一步提高个人编程技巧与实践。
二、实验环境
硬件:
实验室电脑
软件:
Dev C++
VS 2019
三、实验内容
1.小学老师要每周给同学出300道四则运算练习题
两个运算符,100以内数字,不需要答案。【估计时间1】
估计写程序需要的时间
把代码写出来
需要写答案,并且保证答案在0~100之间 【估计时间2】
- 学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
- 编程语言不限
四、实验步骤(图文方式叙述)
1.代码规范(参考了其他博客)
(1)使用语言
C语言
(2)函数定义
每个函数的定义和说明应该从第一列开始书写。函数名(包括参数表)和函数体的 花括号应该各占一行。
(3)编码格式
i.空格与空行
ii.缩进与折行
iii.嵌套语句(语句块)的格式
(4)注释
C语言中使用一组(/* … */)作为注释界定符。
i.出现位置
在要说明的内容之前,尽量不使用行末的注释方式。
ii.说明内容
变量的用途和语言块末尾使用的注释
注明复杂的算法的出处。
注明容易出错的代码段。
iii.注:不可过多地使用注释。
(5)命名规范
i.常量、变量命名
多个单词组成的变量名,除第一个单词外的其他单词首字母应该大写;
如果符号常量由多个单词构成,两个不同的单词之间可以用下划线连接;
符号常量的命名用大写字母表示。
ii.函数命名
选择与函数功能相关的有意义的英文组成函数名。
- 程序的总体设计
和搭档根据题目要求分析后,决定分两阶段完成任务。
阶段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)文件输出fprintf与for循环的问题
如下图这种写法,
会出现Debug Assertion Failed,
通过查询得出产生Debug Assertion Failed的原因主要有两种:野指针和内存泄露
最终的解决办法是再设置一个局部变量去作为桥梁,如图
五、实验体会
体验了敏捷开发中的两人合作,进一步提高了个人编程技巧与实践。在编写代码解决bug的过程中也深刻理解到了结对编程的优越性:
(1)程序员互相帮助,可以得到各方面能力上的互补。
(2)增强代码和产品质量,并有效的减少低级BUG的出现
(3)降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。
(4)在编程中,相互讨论,某种情况下可能更快更有效地解决问题。
当然在此过程中也感受到了结对编程的局限性,出现类似因编程习惯而产生矛盾,或是因交谈其他事情而导致工作精力不能集中的情况等。