C语言--数组的运行结果

来源:百度知道 编辑:UC知道 时间:2024/06/09 08:30:36
15. #include <stdio.h>
void fun1(int n,int a[][3]) 输出结果:
{ for(int i=0;i<n;i++)
for(int j=0;j<n;j++) a[i][j]=a[i][j]/a[i][i];
}
void main()
{ int a[3][3]={{6,4,2},{8,6,4},{9,6,3}};
fun1(3,a);
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) printf("%d ",a[i][j]);
printf("\n");
}
}
我的答案是 1 0 0
1 1 0
3 2 1

标准答案是 1 4 2
1 1 4
3 2 1
为什么呢?

程序可以去运行一下啊,这样不就知道答案了,我运行了,标准答案是对的

主要是在这个函数
void fun1(int n,int a[][3])
里面的这句话
a[i][j]=a[i][j]/a[i][i];
也就是说每行里的各个元素都等于该元素除以该行对应的对角线元素
比如说第一行,第一个是6,那么6/6=1,之后的元素都除以1,所以都没变
所以第一行是1 4 2
第二行呢就是第一个数除以6,由于是整数除法,所以8/6=1,其它的同理..
最后结果是
1 4 2
1 1 4
3 2 1

你的程序原封不动复制,调制结果和标答相同
你得到的答案么有办法实现,无法帮你解释

标准答案是正确的。

你用的是什么编译器?

6 4 2
8 6 4
9 6 3
这是上面的数组
你刚开始执行a[i][j]=a[i][j]/a[i][i]; 的时候
当i=0,j=0时候,a[0][0]=a[0][0]/a[0][0],当j变为1的时候a[0][0]就已经是1了所以,对a[0][1],a[0][2]的除法相当于除了1,关键你错在,忘记了在a[0][0]=a[0][0]/a[0][0],之后a[0][0]的值已经改变,下次当被除数时,是修改后的值,而不是你刚开始的值,所以,你答案出错率
同理对8 6 4 8/6=1,6/6=1,4/1=1(当对a[1][2]/a[1][1]时,a[1][1]的值已经改变了)
和 9 6 3 的操作可以做类似操作