软件工程综合实践专题第二次作业———结对编程心得体会

软件工程综合实践专题第二次作业———结对编程

学习了软件工程综合实践专题这门课程,懂得了结对编程是指两个人一起,用一台电脑,鼠标,键盘的一种编程方式。

王文娟老师在课后留下了一道随机出三百道四则运算的题目并要求采用结对编程的方式和搭档共同完成

在这次的编程过程中,我和我的搭档第一次接触并采用结对编程的这种编程模式,也就是两个人同时在一台电脑上进行编程,下面是我们写出的代码以及一些在这个过程中体会到的对结对编程的心得体会:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<string.h>

char operatorarry[4]={'+','-','*','/'};//运算符数组

void NoAnswertitle();//随机出三百道无不重复答案的题目

void InAnswertitle();//随机出三百道不重复有答案的题目,且答案在0-100之间

void AddSubtitle();//仅有加减号的运算

void MulDivtitle();//仅有乘除号的运算

 

void NoAnswertitle(){//实现无答案出题功能

    int n=0;

srand((unsigned)time(NULL));//设置一个随机数种子,以防止伪随机数的不变化

for(int i=0;i<300;i++){//循环三百次,出三百个题 (while来控制题目不重复)

    printf("%d%c%d%c%d\n",rand()%100,operatorarry[rand()%4],rand()%100,operatorarry[rand()%4],rand()%100);//rand()%100随机生成100以内的数字

}

}

 

void InAnswertitle(){//实现有答案出题功能

    int k,n=0;//k用来放计算结果;n用来计算答案在0100之间的个数,判断是否到了300

srand((unsigned)time(NULL));//设置一个随机数种子,以防止伪随机数的不变化

while(n<300){//循环三百次,出三百个题

    int a=rand()%100;

    char b=operatorarry[rand()%4];

    int c=rand()%100;

    char d=operatorarry[rand()%4];

    int e=rand()%100;

    //下面开始穷举两个运算符的16种组合情况

    if((b==operatorarry[0])&&(d==operatorarry[0])){

     k=a+c+e;

}

if((b==operatorarry[0])&&(d==operatorarry[1])){

     k=a+c-e;

}

if((b==operatorarry[0])&&(d==operatorarry[2])){

     k=a+c*e;

}

if((b==operatorarry[0])&&(d==operatorarry[3])){

     k=a+c/e;

}

if((b==operatorarry[1])&&(d==operatorarry[3])){

     k=a-c+e;

}

if((b==operatorarry[1])&&(d==operatorarry[3])){

     k=a-c-e;

}

if((b==operatorarry[1])&&(d==operatorarry[3])){

     k=a-c*e;

}

if((b==operatorarry[1])&&(d==operatorarry[3])){

     k=a-c/e;

}

if((b==operatorarry[2])&&(d==operatorarry[3])){

     k=a*c+e;

}

if((b==operatorarry[2])&&(d==operatorarry[3])){

     k=a*c-e;

}

if((b==operatorarry[2])&&(d==operatorarry[3])){

     k=a*c*e;

}

if((b==operatorarry[2])&&(d==operatorarry[3])){

     k=a*c/e;

}

if((b==operatorarry[3])&&(d==operatorarry[3])){

     k=a/c+e;

}

if((b==operatorarry[3])&&(d==operatorarry[3])){

     k=a/c-e;

}

if((b==operatorarry[3])&&(d==operatorarry[3])){

     k=a/c*e;

}

if((b==operatorarry[3])&&(d==operatorarry[3])){

     k=a/c/e;

}

if(k<0||k>100)//如果算出结果不在0100之间,就舍取这一条运算

continue;

else{

printf("%d%c%d%c%d=%d\n",a,b,c,d,e,k);//rand()%100随机生成100以内的数字

n++;

}

 

}

}

 

void AddSubtitle(){

int n=0;

srand((unsigned)time(NULL));

for(int i=0;i<300;i++){

    printf("%d%c%d%c%d\n",rand()%100,operatorarry[rand()%2],rand()%100,operatorarry[rand()%2],rand()%100);

}

}

 

void MulDivtitle(){

int n=0;

srand((unsigned)time(NULL));

for(int i=0;i<300;i++){

    printf("%d%c%d%c%d\n",rand()%100,operatorarry[rand()%2+2],rand()%100,operatorarry[rand()%2+2],rand()%100);

}

}

 

int main(){

printf("*****四则运算练习随机出题程序*****\n");

printf("1、无答案出题\n");

printf("2、有答案出题\n");

printf("3、仅有加减号的题\n");

printf("4、仅有乘除号的题\n");

printf("请选择:");

int n;//用来存放选择的数字

scanf("%d",&n);

switch(n){

case 1:NoAnswertitle();

   break;

case 2:InAnswertitle();

   break;

case 3:AddSubtitle();

       break;

case 4:MulDivtitle();

       break;

}

}

运行结果:

①时间方面:我们在初步阶段预估的时间是一个小时写出最基本的随机出三百道题和可选择有无答案的出题方式两个功能,但实际我们花了超过一个小时,结对编程中由于思维冲突会消耗比预期结果多的时间,肯定没有一个人写的时候那么顺利。在第二个阶段我们编写可选这运算符号的时候,也比预期结果超了快20分钟,整个代码写下来共耗时2个小时左右。

分工合作:这次得结对编程主要由我(1759115岑拓望)负责主要代码得编写,例如整体框架得设计(先声明出所有要用到得成员函数,再经行实现,以及整体结构得编排),具体函数得实现编写,成员变量得定义。而我的搭档(1759117何昌霖)主要负责在我写的同时考虑代码优化得问题,比如占用内存空间得大小问题,代码执行效率得问题,以及逻辑得严密性考虑。整个代码编写过程为:我一边打代码,他一边做记录,分析整个代码得优化问题以及在我写不出来得时候进行帮助。

例如:在经行设置运算符数组这个问题上,我的初始想法是直接穷举两两组合得16中运算符得结合经行使用,而我的搭档则提出了使用运算符数组得标识与rand函数得结合可以有效得减少代码量以及提高代码得运行效率

出现的问题:结对编程虽然是两个人的工作,看似会比一个人轻松许多,但实际会有很多问题的出现,比如双方意见不合,在各自提出后,很难进行统一,就上面的代码而言:我们两一直在为如何对生成的题目进行答案的自动运算这个问题有着激烈的争论,我想的是直接用许多个if语句实现对运算符的判断,总而达到计算答案的目的,而他则希望可以用switch case语句取代if。此外还有许多问题,比如局部变量和全局变量的定义,一个变量到底是放在全局好,还是局部好,等等...

结对编程得利与弊:之前的时候我从没在其他地方练习过这种模式,一直以为编程大概就是一个人的游戏,但现在在学习了这门课程后,感受很深,想谈谈这种合作模式的利和弊,以及我对它的理解。

结对编程的利

最大的好处就是,两个人在一起写代码的时候由于思维的碰撞,写出的代码能够融合两种不同的思路,相比于一个人写的代码,不管是逻辑还是效率各方面都有明显的提高,一个人写的时候另一个人可以浏览,这样能够让代码准确性更高。

两个人一起写代码,便于两个人之间的相互学习,对其中的每个人来说,写出的代码都是一种新风格的尝试毕竟两个人在一起写,写出的代码不会完全偏向与一个人的风格

使得两人之间工作量平均。结对编程中两人的工作同时贯穿整个工程,不会出现分配工作多与少,难与易的问题

结对编程的弊

首先结对编程两个人同时写一份代码,但是写的速度并不会快出两倍,反而还可能会有些影响编程速度,因为要将两个人的思维拼接磨合成同一种思维,难免会耗费大量的时间,这样看起来可能会有些降低了开发效率

组员之间开发习惯不同容易引起冲突。比如在上面的代码行中,在出题的同时显示答案的代码段,我的想法是直接穷举两个运算符的十六种两两组合是最简单的方式,但我的搭档就不同意,他认为这样写代码量大,所以争吵和隔阂就会慢慢凸显出来

便于进行明确的分工,在某行代码上他比较懂,而在另一段代码上,可能你比较会写,这样就导致了一个问题,不能明确的定好两个人的工作范围,因为编出来的具体代码是怎样的谁也不能提前预知,细节方面只能走一步看一步。

心得体会:上所述我个人认为,结对编程并不是在所有情况下都适用,当开发的东西需要答题的框架结构设计、或者当需要写高精度的代码时适合使用结对编程。

当需要细致的分工开发,大规模开发的时候,是不适结对编程但就其本身而言,还是能比单人写出来的代码更具优良性,毕竟一份代码是经过了两次思考的

转载于:https://www.cnblogs.com/cetwag/p/10546786.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言实训心得总结.doc C语言实训心得 10903090113 李新程 在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写一个比较复杂的程序系统。在为期两周的时间中,我们同组的同学共同的感受是:C语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了C语言实训的复杂程序。在这里,我作为其中的参与者,感触良多。 在这次实训中,我对对C语言有了一个更深的了解认识,也对这个学期学的知识得到巩固,还尝试运行编程,每次运行程序成功,让我对下面的项目就充满信心。通过自己与同学合作编写程序,最终把最初的理论知识转化基本技能。这次的实训,使我对C语言的学习产生浓厚的兴趣。 还是这次实训,最令人激动的就是合作做项目,虽然那只是一个很小很小的项目。每天大家来得很早,大家在一起学习,取长补短,我们很好的在实训中长知识,提高我们的学习热情。实训中深切体会到了老师认真负责的伟大的精神和热情为同学指导的促学方式,虽然对有些时候老师没给我们指出解决问题的方法有些小抱怨,但是到了结束时才知道,这种教学让我们自己学会了自学,学会了去看懂别人的代码。更多是老师给的感动,每天在我们来之前就到了教室,在讲课中海给我们分享他在公司上班的一些心得和体会,还有那些我们应该注意的事项,这些是平时上课时无法学到的,是更深层次的巨大收获。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值