软件工程课堂练习--结对初体验

结队人员 信1201-1班 曹美娜 袁亚姣

一、题目要求与结对开发要求

1、题目:
     返回一个整数数组中最大子数组的和。
2、要求:
    输入一个整形数组,数组里有正数也有负数。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    求所有子数组的和的最大值。要求时间复杂度为O(n)。 
3、结对开发要求 
    两人结对完成编程任务。
    一人主要负责程序分析,代码编程。
    一人负责代码复审和代码测试计划。
   发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。
二、程序设计思想
  该程序的主要问题是如何找到所有的子数组并求和,我们采用的方法是依次找出包含数组中第i个元素的所有连续的子数组,求出每次的最大值保存在另外一个数组中,最后求出该数组中的最大值,图解步骤如下:
 用户输入数组:(a1,a2,a3,a4)
包含第一个元素的所有子数组集合{(a1),(a1,a2),(a1,a2,a3),(a1,a2,a3,a4)} 
包含第二个元素的所有子数组集合{(a2),(a2,a3),(a2,a3,a4)}
包含第三个元素的所有子数组集合{(a3),(a3,a4)}
包含第四个元素的所有子数组集合{(a4)}
依次求出以上集合各数组元素和的中最大值
三、程序源代码
 1 //程序开发者:曹美娜、袁亚姣
 2 //程序开发时间:2015/3/18
 3 
 4 #include "stdio.h"
 5 #include "stdafx.h"
 6 #define N 1000 
 7 int compare( int arry[],int length)
 8 {
 9     int max[N],max1;
10     for(int j=0;j<length;j++)
11     {
12         int sum=0;
13         max1=-12345;
14         for(int i=j;i<length;i++)
15         {
16             sum=sum+arry[i];
17             if(sum>=max1)
18                 max1=sum;
19         }
20         max[j]=max1;
21         printf("包含数组中第%d个数的所有子数组中和最大的值为:%d\n",j+1,max[j]);
22     }
23     int fmax=max[0];
24     for(int i=0;i<length;i++)
25     {    
26         if(max[i]>fmax)
27             fmax=max[i];
28     }
29     printf("所有子数组的和的最大值为:%d\n",fmax);
30     return 0;
31 }
32 int main(int argc, char* argv[])
33 {
34     int arry[N];
35     int length;
36     printf("请输入要比较整数的个数:");
37     scanf("%d",&length);
38     printf("请输入整数");
39     for(int i=0;i<length;i++)
40     {
41         scanf("%d",&arry[i]);
42     }
43     compare(arry,length);
44     return 0;
45 }
View Code

四、运行结果

五、心得体会

  这次结队开发体会很多,我们小组就2个人,由于程序简单,所以没有代码分工,主要就是一人编程一人测试检查;开始我们想到的不是以上的实现方法,后来觉得循环次数太多,而且拓展性不高,然后又重新讨论方法;在编程过程中我绝得我俩配合很默契,效率也很高,有时我丢落“;”号或起变量名不友好时,我的小伙伴总是能及时提醒,当遇到逻辑错误时,我俩经过讨论也最终能将问题解决;很多人绝得团队合作自己的想法会受局限,可是通过这次的经验我觉得要有正确的方式方法对待自己的伙伴,当进入编程气氛时,你会肯定会感觉到效率的提高,2个人的想法总该比一个人的想法多。

最后po工作合照一张

 

 
  
posted @ 2015-03-18 13:28  。泡沫。。  阅读(166)  评论(0编辑  收藏  举报