• 软件工程课堂作业(六)——结对开发(二)


    一、题目及要求:

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

          ②结对人员:焦燕    胡亚宝

    二、设计思想:

          首先我们想到的是在我们原来的一维数组基础上进行升级,进行二维数组的运算,在进行设计的过程中,我们出现了几个问题:

          ①输入二维数组。我们没有用老师给的在文件中存放数组的思路,而是让用户直接进行输入,然后进行运算。再输入的过程中,开始没有运用循环,而是一行输入,当我我们发现这样界面不美观,而后进行改进,用了一个for循环,每输入一行就输出一个换行回车,这样可进行每行每列的输入;

          ②在进行加和和比较大小这一模块中,我们遇到了困难。首先我们延续了一维数组的第一种方法,用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列二维数组:
    ");
    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("
    ");
    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 }

    四、心得体会:

          首先我们对没有完成这个任务深表遗憾。

          在解决这个问题的时候,我们开始很有自信,计划将一维数组的方法进行扩充,认为很容易。但是在实现的过程中,总会出现这样那样的错误,比如,加的和并不都是矩阵;遍历的顺序和边界值不确定;求和后将行和列统一起来等等。有的我们能够解决,但是有的想不到办法。

          其实,在进行到这个程度上后,我们想到用课上李明同学提供的思路接着解决,可是我们发现,就算确定了最大行数组的位置,还要分情况进行验证,验证它周围的数组是否小于零,但是情况有很多种,如果一一列出来列不完;如果要循环遍历,我们想不出好的办法。

  • 相关阅读:
    GCC内联汇编 Hello
    稳定性调试汇总 Hello
    Logback配置异步输出日志
    Linux查看java进程开启的线程数量
    解决Host key verification failed.
    Linux解压tar.xz文件
    Linux在移动文件到挂载的的SD卡或者镜像时,出现 mv: failed to preserve ownership for ‘***’: Permission denied
    Linux 挂载已有的 img 镜像
    sed命令修改文本内容,可在脚本中使用
    Jmeter 性能测试 Stepping Thread Group 术语解析
  • 原文地址:https://www.cnblogs.com/huyabaoboke/p/4357240.html
Copyright © 2020-2023  润新知