小甲鱼的迷妹zbb 发表于 2017-10-26 16:47:24

求大佬帮我看看我的程序哪里出错了

有两道题,但是我的程序都有问题,实在想不出哪错了也不知道怎么改,求大佬帮忙
题目是
题目描述:
设置一个n*m的二维数组,使其最后一行元素值是其所对应列的元素和,最后一列元素值是其所对应行的元素和,而表中最后一个元素是除最后一行和一列外的所有元素的总和。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a={{1,2,0},{4,5,0},{0,0,0}};
    int i,j;
    for(i=0;i<3;i++)
      for(j=0;j<3;j++)
    {

            if(i==0)
               if(j==0||j==1)
                  a=a+a;


            if(j==0)
                if(i==0||i==1)
                  a=a+a;

      if(i+j==0||i+j==1||i+j==2)
            a=a+a+a+a;

    }

      printf("%d\n",a);

    return 0;
}

BngThea 发表于 2017-10-26 22:26:22

本帖最后由 BngThea 于 2017-10-26 22:27 编辑

printf("%d\n",a);
上述语句在执行的时候, i 和 j 已经都等于3
所以你其实在打印a,显然已经越界,结果应该是一个随机的数

而且lz代码没有完成题目的要求,我给一个简单粗暴的参考写法:
#include <stdio.h>

int main(void)
{
      int a={{1,2,0},{4,5,0},{0,0,0}};
      int i,j;

      printf("Before calculated, the array is :\n");
      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 3; j++)
                {
                        printf("%d\t",a);
                }

                printf("\n");
      }

      
      for (i = 0; i < 2; i++)//循环遍历前两行
      {
                for (j = 0; j < 2; j++)
                {
                        a += a;
                }
                a += a;
      }
      for (i = 0; i < 2; i++)//循环遍历前两列
      {
                for (j = 0; j < 2; j++)
                {
                        a += a;
                }
                a += a;
      }

      printf("After calculated, the array is :\n");
      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 3; j++)
                {
                        printf("%d\t",a);
                }

                printf("\n");
      }

      getchar();
      return 0;
}

小甲鱼的迷妹zbb 发表于 2017-10-28 16:16:16

BngThea 发表于 2017-10-26 22:26
printf("%d\n",a);
上述语句在执行的时候, i 和 j 已经都等于3
所以你其实在打印a,显然已经越 ...

怎么会越界呢?我不太懂,我想知道我哪里错了

BngThea 发表于 2017-10-28 16:42:01

小甲鱼的迷妹zbb 发表于 2017-10-28 16:16
怎么会越界呢?我不太懂,我想知道我哪里错了

你定义a的时候是一个3X3的数组,数组下标索引都是从0开始的,所以最后一个值只能是a
上面你的程序对 i 和 j 进行循环后都等于3,所以越界了
页: [1]
查看完整版本: 求大佬帮我看看我的程序哪里出错了