📜  门|门 IT 2008 |第 49 题

📅  最后修改于: 2021-09-26 04:38:28             🧑  作者: Mango

考虑下面给出的 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 提供。

这个问题的测验