📅  最后修改于: 2023-12-03 15:26:03.003000             🧑  作者: Mango
本文讨论了2015年12月UGC NET计算机科学和应用科学-II考试中的第39个问题。
考虑下面的5个程序段P1, P2, P3, P4和P5:
P1:
for (i = 1; i ≤ n; i = 2 ∗ i)
printf("1");
P2:
for (i = n; i > 1; i = i / 2)
printf("1");
P3:
for (i = 1; i * i ≤ n; i++)
printf("1");
P4:
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j = 2 ∗ j)
printf("1");
P5:
for (i = 1; i <= n; i = i ∗ i)
printf("1");
在程序段P1, P2, P3, P4和P5中的任何一个中,当n增大时,输出的“1”的数量将如何迅速增加?
A) 仅程序段P5
B) 仅程序段P1和P5
C) 仅程序段P2, P3和P5
D) 仅程序段P1, P2, P3和P4
答案:B
程序段P1,P2,P3,P4和P5都是循环,但它们采用了不同的循环控制变量和参数。对于上述程序的每个循环,我们将计算输出的“1”的数量。
P1中的循环条件是i ≤ n,每次i翻倍,因此循环内的语句将执行log2(n)次,输出的“1”的数量是log2(n)。
在P2中,循环的条件是i > 1,i每次折半,因此循环将执行log2(n)次,输出的“1”的数量是log2(n)。
P3中的循环条件是i * i ≤ n,i每次递增1,因此循环将执行sqrt(n)次,输出的“1”的数量是sqrt(n)。
在P4中,i和j都从1开始,i递增1,j翻倍增加。内部循环的次数是log2(n),因此外部循环的总次数是nlog2(n)。因此,输出的“1”的数量是nlog2(n)。
最后,在P5中,循环条件是i ≤ n,每次i翻倍使得循环内的语句将执行log2(log2(n))次,输出的“1”的数量是log2(log2(n))。
因此,当n增大时,P1,P2和P5中输出的“1”的数量将快速增加,而P3和P4中的输出数量将增加得更慢。因此,答案是B,即仅程序段P1和P5中的“1”数量将快速增加。
Markdown 格式代码片段:
## 解答
程序段P1,P2,P3,P4和P5都是循环,但它们采用了不同的循环控制变量和参数。对于上述程序的每个循环,我们将计算输出的“1”的数量。
1. P1中的循环条件是i ≤ n,每次i翻倍,因此循环内的语句将执行log2(n)次,输出的“1”的数量是log2(n)。
2. 在P2中,循环的条件是i > 1,i每次折半,因此循环将执行log2(n)次,输出的“1”的数量是log2(n)。
3. P3中的循环条件是i * i ≤ n,i每次递增1,因此循环将执行sqrt(n)次,输出的“1”的数量是sqrt(n)。
4. 在P4中,i和j都从1开始,i递增1,j翻倍增加。内部循环的次数是log2(n),因此外部循环的总次数是n*log2(n)。因此,输出的“1”的数量是n*log2(n)。
5. 最后,在P5中,循环条件是i ≤ n,每次i翻倍使得循环内的语句将执行log2(log2(n))次,输出的“1”的数量是log2(log2(n))。
因此,当n增大时,P1,P2和P5中输出的“1”的数量将快速增加,而P3和P4中的输出数量将增加得更慢。因此,答案是B,即仅程序段P1和P5中的“1”数量将快速增加。