1203081549 发表于 2023-4-2 21:53:10

求矩阵的边缘和

void main()
                      {
                        int a,h,l,i,j,sum;
                        scanf("%d%d",&h,&l);
                        for(i=0;i<h;i++)
                        for(j=0;j<l;j++)
                        scanf("%d",&a);
                        for(i=0;i<h;i++)
                        {
                              for(j=0;j<l;j++)
                              {
                                  if(i==0)
                                  sum=sum+a;
                                  else if(j==0)
                                  sum=sum+a;
                                  else if(i==(h-1))
                                  sum=sum+a;
                                  else if(j==(l-1))
                                  sum=sum+a;
                                 
                              }
                        }
                           sum=sum-a-a-a-a;   
                        printf("%d",sum);
                        }
                     求大佬帮忙看看错误在哪

isdkz 发表于 2023-4-2 21:56:59

这段代码的目的是计算一个给定矩阵的边缘元素之和。经过检查,我发现了以下几个问题。

请参考以下修订后的代码:

#include <stdio.h>

void main() {
    int a, h, l, i, j, sum = 0;
    scanf("%d%d", &h, &l);
    for (i = 0; i < h; i++)
      for (j = 0; j < l; j++)
            scanf("%d", &a);
    for (i = 0; i < h; i++) {
      for (j = 0; j < l; j++) {
            if (i == 0 || j == 0 || i == (h - 1) || j == (l - 1)) {
                sum = sum + a;
            }
      }
    }
    if (h > 1 && l > 1) {
      sum = sum - a - a - a - a;
    }
    printf("%d", sum);
}



[*]初始化 sum = 0,避免使用未初始化的变量。
[*]使用逻辑运算符简化了 if 语句,使代码更清晰。
[*]添加了一个条件语句 if (h > 1 && l > 1),以确保矩阵的行数和列数都大于1。如果矩阵的行数或列数为1,边角元素只会被计算一次,所以无需减去它们。


这应该修复了代码中的错误。现在,这段代码应该可以正确地计算矩阵边缘元素的和。

1203081549 发表于 2023-4-2 22:06:39

isdkz 发表于 2023-4-2 21:56
这段代码的目的是计算一个给定矩阵的边缘元素之和。经过检查,我发现了以下几个问题。

请参考以下修订后 ...

您好,您的代码跟我的都有一个同样的问题就是把删除语句注释掉之后才能正确执行

isdkz 发表于 2023-4-2 22:26:01

1203081549 发表于 2023-4-2 22:06
您好,您的代码跟我的都有一个同样的问题就是把删除语句注释掉之后才能正确执行

那是因为之前的代码忽略了角落的元素,你可以试试这个代码:

#include <stdio.h>

void main() {
    int a, h, l, i, j, sum = 0;
    scanf("%d%d", &h, &l);
    for (i = 0; i < h; i++)
      for (j = 0; j < l; j++)
            scanf("%d", &a);
    for (i = 0; i < h; i++) {
      for (j = 0; j < l; j++) {
            if (i == 0 && j > 0 && j < l - 1) {
                sum += a;
            } else if (j == 0 && i > 0 && i < h - 1) {
                sum += a;
            } else if (i == h - 1 && j > 0 && j < l - 1) {
                sum += a;
            } else if (j == l - 1 && i > 0 && i < h - 1) {
                sum += a;
            }
      }
    }
    // Add the corner elements
    sum += a + a + a + a;
    printf("%d", sum);
}
页: [1]
查看完整版本: 求矩阵的边缘和