软件工程课堂训练——结对开发Ⅱ

一、题目及要求:

      ①要求求出一个二维数组中和值最大的二维子数组。

      ②结对人员:胡亚宝  焦燕

二、设计思想:

      这一次的实验是在以前的基础上做的,是在二维数组中找出行中最大的和,然后再捆绑上下或前后的数。由于可能性太多,时间不够充分。所以没有继续做下去。

      在进行加和和比较大小这一模块中,我们遇到了困难。首先我们延续了一维数组的第一种方法,用for循环嵌套,每行每列加和并比出最大值,但是开始我们没有在运算完每一行时,将sum值初始化为0,这样不能保证我们运算的都是矩形,而是单纯的一个一个相加。后来我们发现了这个问题,在内层循环中加了一个sum的初始化,这样就实现了能求出3行3列数组中,3行的每一行的最大子数组,并且求出在这3个中最大的那一个。

      在求出行中的最大子数组之后,我们想的是借鉴课上李明同学的思路。确定好行中最大子数组的位置后,遍历它周边的子数组,若它周边的子数组的和值小于零,则它是最大子数组;若周边子数组和值大于等于零,则加上该大于等于零的子数组。但是由于技术原因,我们还没有实现。。

三、部分源代码

1 //结对开发  胡亚宝  焦燕
 2 
 3 #include "stdafx.h"
 4 
 5 
 6 int _tmain(int argc, _TCHAR* argv[])
 7 {
 8     int a[3][3];
 9     int i,j,k,m,n;
10     int max,sum;
11     
12     int flag1,flag2; //定位行中最大子数组位置
13 
14     printf("请输入一个3行3列二维数组:\n");
15 
16     for(m=0;m<3;m++)
17     {
18         for(n=0;n<3;n++)
19         {
20             scanf("%d",&a[m][n]);
21         }
22         //printf("\n");
23     }
24     max=a[0][0];
25     for(k=0;k<3;k++)    //包含第k列的最大行
26     {
27         
28         for(i=0;i<3;i++)   //第i行
29         {
30             sum=0;
31             for(j=k;j<3;j++)  //第i行的第j个
32             {
33                 sum=sum+a[i][j];
34                 if(sum>=max)
35                 {
36                     max=sum;
37                     flag1=i; //定位
38                     flag2=j; 
39                 }
40             }
41         }
42         
43     }
44 
45 
46     return 0;
47 }

四、心得体会:

      因为好多原因,包括技术上和自身原因,没有把这个程序做完整。真的是挺遗憾的。在进行的过程中我们也想过很多解决方法,效果却不尽人意。得不到理想的结果。

     我们的想法是一行一行一列一列的比较出大小然后求出最大值。但是这样上下或者左右的和就没有考虑进去。后来课上听了几位同学的思路后,我们也决定那样试试,可视情况太多太复杂,两人的能力有限,就没有得到一个完整的程序。

     不过这次合作经过上一次后,我感觉越来越默契。知道如何避免冲突,想法也能想到一块去,效率也高了很多。

 

附合照一张:

 

posted @ 2015-03-25 19:29  就是jy  阅读(156)  评论(1编辑  收藏  举报