C语言,求过程。
main()
{int i,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++) printf("%d",t[2-i][i]);
}
程序执行后的输出结果是( )。
(A)7 5 3 (B)3 5 7 (C)3 6 9 (D)7 5 1 展开
答案选B,你给的代码在输出语句中并没有输出空格,而答案每个选项的相邻两个数之间都用一个空格隔开,所以应该在输出的地方补上一个空格。
分析:
这题考查对二维数组的理解。
声明一个二维数组时,如果给出了初始化列表,那么第一维的 [] 括号中的数字可以忽略不写,由编译器来计算初始化列表值的个数来完成。但第二维的 [] 括号中的数字不能忽略。例如这题二维数组的初始化列表值共有 9 个值,第二维是 3,那么编译器就会用 9 除以 3 来计算第一维数字的值。所以相当于 int t[3][3]。
二维数组跟一维数组一样,第一维和第二维的下标也是从 0 开始。
二维数组相当于一个二维矩阵。所以 t[3][3] 的结果如下:
a[0][0] = 9 a[0][1] = 8 a[0][2] = 7
a[1][0] = 6 a[1][1] = 5 a[1][2] = 4
a[2][0] = 3 a[2][1] = 2 a[2][2] = 1
此时有了以上的概念,再看循环,主要是算出每次循环 i 的值,从而得出第一维和第二维的值,这样就能得到最终结果。
运算过程:
i = 0,i < 3 为真,执行 printf 输出,那么 t[2-i][i] 相当于 t[2][0],t[2][0] 的值为 3。
i = 1,i < 3 为真,执行 printf 输出,那么 t[2-i][i] 相当于 t[1][1],t[1][1] 的值为 5。
i = 2,i < 3 为真,执行 printf 输出,那么 t[2-i][i] 相当于 t[0][2],t[1][1] 的值为 7。
i = 3,i < 3 为假,退出循环。