C语言for函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 12:07:53
题目求一个3*3的整型矩阵对角线元素之和。
我编了以下程序
#include "stdio.h"
void main()
{
int c[3][3];
int i=0,j=0,sum=0;
for(;i<3;i++)
for(;j<3;j++)
scanf("%d",&c[i][j]);
sum=c[0][0]+c[1][1]+c[2][2];
printf("%d",sum);
}
输入1 2 3 4 5 6 7 8 9enter
得到1245200
不明白看答案
答案只是把
for(;i<3;i++)
for(;j<3;j++)
改为
for(i=0;i<3;i++)
for(j=0;j<3;j++)
运行1 2 3 4 5 6 7 8 9enter
得到15
为什么要那么改,我编的那个有什么问题,麻烦哪位高手赐教

for(;i<3;i++)
for(;j<3;j++)
这么写的话,i的循环是没问题,但j的循环就出问题了.i从0到1,2后,j还是保持3,j循环不执行了.

条件都不全,电脑不知道.
也可以这么写
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
这样前面就不用定义I J了

sum函数没说明在for循环的外面,所以每次循环都会出现一个累加.而第一和第2次循环都是还没有c[2][2]或c[1][1],系统就取地址来运算.运行结果就出现那么大的数字了.

主要是循环之后,没有重新对j进行初始化,具体执行是这样的:
首先,对i=0,执行for(;j<3;j++),执行完之后,j=3了,这个时候i+1变成1,
然后依旧执行for(;j<3;j++),从前面的可以得出,j=3,到这来之后,没能回到0
,所以不执行取址操作,也就是说,这个循环本质上只有一个 i 的循环,也就是你仅仅给c[0][0],c[01][],c[0][2],取地址了,无法预知对角线其他的两个数是多少,所以才会出现这样的情况。
祝好运!

问题就出在内循环里的j=0上。
for(;i<3;i++)
for(;j<3;j++)
这样写的话,当i从0增为1时,再进入内循环时j不是0而是3了,此时j<3不成立,不再执行scanf("%d",&c[i][j]); 语句。c数组只有c[0][0]、c[0][1]、c[0][2]被用户赋值。
改成:
for(i=0;i<3;i++)
for(j=0;j<3;j++) ,j每次都从0开始了,就正确了。