这是一个两层的嵌套循环与二维数组的组合问题。
这个代码是存在问题的。只有理解嵌套循环和二维数组的组合使用,就能找出正确答案。
错误的地方最少有一处,其中for(j=0;i<3;j++)肯定不对,应该把i<3改为j<3。
1. 执行外层循环(以下用i循环来代表外层循环)。
2. 执行内层循环(以下用j循环来代表外层循环)。
3. 执行k+=a[i][j]语句。
4. 回到j循环继续判断,如果条件为真,则继续执行k+=a[i][j]语句;如果为假,则跳出。
5. 回到i循环继续判断,如果条件为真,则继续执行for(j=0;j<3;j++),即j循环;如果为假,则执行printf("%d",k)语句。
总结:
1. 当i循环第1次时(i=0),j循环中共循环了3次(j=0、1、2)
2. 当i循环第2次时(i=1),j循环中共循环了3次(j=0、1、2)
3. 当i循环第3次时(i=2),j循环中共循环了3次(j=0、1、2)
外层循环i<3没有问题,循环了3次(i=0、1、2)
内层循环也是i<3就有问题,变成死循环。即无限循环执行k+=a[i][j]语句。
既然这题答案中没有死循环的选项,所以代码肯定有错。
1. 第一个3是第一维,第二个3是第二维,共9个元素(3×3=9)。
2. 而这里只有6个值,那么剩余3个默认赋值为0。
3. 每一个维度下标都从0开始。
3. 其中:
a[0][0]=1,a[0][1]=2,a[0][2]=3
a[1][0]=4,a[1][1]=5,a[1][2]=6
a[2][0]=0,a[2][1]=0,a[2][2]=0
4. 二维数组常用矩阵来描述:
1 2 3
4 5 6
0 0 0
1. 上面矩阵共3行3列,其中每一行的第一维数字不变,每一列的第二维数字不变。
2. 其中i循环对应第一维,j循环对应第二维。
3. 当i循环第1次时(i=0),j循环中共循环了3次(a[0][0]=1,a[0][1]=2,a[0][2]=3)
4. 当i循环第2次时(i=1),j循环中共循环了3次(a[1][0]=4,a[1][1]=5,a[1][2]=6)
5. 当i循环第3次时(i=2),j循环中共循环了3次(a[2][0]=0,a[2][1]=0,a[2][2]=0)
那么这9个数依次相加赋给变量k,所以变量k的值为21,答案选A。
如果代码还存在错误,那么变量k的值可能会不一样。
理解了嵌套循环与二维数组的组合使用才是重点,答案自然就出来了。
如果还有不明白之处,可随时提问。
源码
这段程序的作用是将二维数组里每个数加起来求和
k+a[0][0]+a[0][1]+a[0][2]+a[1][0]+a[1][1]+a[1][2]+a[2][0]+a[2][1]+a[2][2]
1+2+3+4+5+6=21
所以答案选择A
望采纳!
选A 。
数组初值个数不完全对应,按地址顺序赋值,没有对应值的取默认值0。
这里二维数组a在内存中连续地址是a[0][0],a[0][1],a[0][2]........一直到最后a[2][2],前6个地址赋初值1,2,3,4,5,6。后面的地址值都是0。
所以下面嵌套循环累加所有元素值就是21。
ps:你帖的代码,j循环里条件错了,应是j<3。
楼主看来真是 初学者
内循环 里 变量时 j,怎么比较 的 变为 i?
for(j=0;i<3;j++)
改为 for(j=0;j<3;j++) 就行了