考虑下面给出的 C 程序。它打印什么?
#include
int main ()
{
int i, j;
int a [8] = {1, 2, 3, 4, 5, 6, 7, 8};
for(i = 0; i < 3; i++) {
a[i] = a[i] + 1;
i++;
}
i--;
for (j = 7; j > 4; j--) {
int i = j/2;
a[i] = a[i] - 1;
}
printf ("%d, %d", i, a[i]);
}
/* Add code here. Remove these lines if not writing code */
(一) 2、3
(二) 2, 4
(C) 3、2
(四) 3、3答案: (C)
说明:注意 i 的范围,
有两个变量名为:i,具有不同的作用域。
解决这个问题有两个要点需要考虑。变量 i 和整数除法的范围。
第一个 for 循环将针对 i = 0、2 和 4 运行,因为 i 在循环内递增两次,结果数组将为 a = 2、2、4、4、5、6、7、8(循环将在 i = 4 处终止) )
之后 i 值为 3,因为在 for 循环之后有一个递减操作。
下一个 for 循环运行 j = 7、6 和 5,相应的 i 值是 for 循环内部的局部变量,将是 3 (7/2)、3 (6/2) 和 2 (5/2)。此 for 循环之后的数组将是
a = 2, 2, 3, 2, 5, 6, 7, 8
在 for 循环之后,当前 i 值为 3,a[3] = 2 处的元素。
此解决方案由Pranjul Ahuja 提供。
这个问题的测验