考虑下面给出的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 */
(A) 2、3
(B) 2、4
(C) 3、2
(D) 3、3答案: (C)
说明:请注意i的范围,
有两个名为:i的变量,具有不同的作用域。
解决此问题时,有2个要点要考虑。变量i和整数除法的范围。
第一个for循环将在i = 0、2和4时运行,因为i在循环内递增两次,结果数组将是a = 2、2、4、4、5、6、7、8(循环将在i = 4终止)
在那之后,我的值是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提供。
这个问题的测验