📜  门| GATE-CS-2003 |第 88 题

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

在下面的 C 程序片段中,j、kn 和 TwoLog_n 是整数变量,A 是整数数组。变量n初始化为≥3的整数,TwoLog_n初始化为2*⌈log2(n)⌉的值

for (k = 3; k < = n; k++)
    A[k] = 0;
for (k = 2; k < = TwoLog_n; k++)
    for (j = k + 1; j < = n; j++)
        A[j] = A[j] || (j % k);
for (j = 3; j < = n; j++)
    if (!A[j]) printf("%d", j);

这个程序片段打印的一组数字是
(A) {米| m ≤ n, (∃ i) [m = i!]} 这里 i! i 的平均阶乘
(B) {米| m ≤ n, (∃ i) [m = i 2 ]}
(C) {米| m ≤ n,m 是素数}
(D) {}答案: (D)
说明:选项 (D) 是正确的,因为如果取 n=4,则 TwoLog_n 值为 4。
第一个循环最初 A[3]=A[4]=0;
然后两个循环 k = 2 到 4 和 j = 3 到 4

if k=2 
         j=3  A[3] = A[3] || (3%2) 
                          = 0 || 1
                  A[3] = 1 
       j=4  A[4] = A[4] || (4%2)
                         = 0 || 0
                A[4] = 0
K=3
         j=4  A[4] = A[4] || (4%3)

                        = 0 || 1
               A[4] = 1
K=4
     J=5 condition false means terminate
 A[3] = A[4] = 1

意味着最后一个打印循环永远不会执行。这个问题的测验