求大佬帮我看看我的程序哪里出错了
有两道题,但是我的程序都有问题,实在想不出哪错了也不知道怎么改,求大佬帮忙题目是
题目描述:
设置一个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: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;
} BngThea 发表于 2017-10-26 22:26
printf("%d\n",a);
上述语句在执行的时候, i 和 j 已经都等于3
所以你其实在打印a,显然已经越 ...
怎么会越界呢?我不太懂,我想知道我哪里错了 小甲鱼的迷妹zbb 发表于 2017-10-28 16:16
怎么会越界呢?我不太懂,我想知道我哪里错了
你定义a的时候是一个3X3的数组,数组下标索引都是从0开始的,所以最后一个值只能是a
上面你的程序对 i 和 j 进行循环后都等于3,所以越界了
页:
[1]