C语言阅读程序,写出运行结果

来源:百度知道 编辑:UC知道 时间:2024/06/06 18:53:00
#include <stdio.h>
main()
{
int a[6][6],i,j;
for (i=1;i<6;i++)
for (j=1;j<6;j++)
a[i][j]=(i/j)*(j/i);
for (i=1;i<6;i++)
{ for (j=1;j<6;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}

答案是 1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

我原来做的是是
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

不懂 不是每个元素都是1吗?

有a[i][j]=(i/j)*(j/i)这个语句,当i比j小时(i/j)是0,当j比i小时(j/i)是0,只有i,j相等时才都是1,从而a[1][1]a[2][2]a[3][3]a[4][4]a[5][5]是1,其它是0

a[i][j]=(i/j)*(j/i);
上面这个表达式,就是限定了,
只有当i==j时,a[i][j]的值才为1

因为,i,j都为int型,对于int来说,/是取整处理,
当i,j不相等时,i/j,j/i必有一个为0。

所以这一个循环赋值,也就是让数组对角线(i==j)上的元素为1,其他都为0