📜  门| Gate IT 2008 |第49章

📅  最后修改于: 2021-07-02 18:24:00             🧑  作者: 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 */ 

(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提供。

这个问题的测验