题目详情

阅读以下说明和C程序,填充程序中的空缺,将解答填入答题纸的对应栏内。

【说明】

埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去; 2是素数,取出2(输出),然后将2的倍数都划去:剩下的数中最小者为3,3 是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5,5是素数,再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数所构成的序列就是不超过N的全部质数。

下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sieve[i](i>0)的下标i对应自然数i,sieve[i]的值为1/0分别表示i在/不在序列中,也就是将i划去(去掉)时,就将sieve[i]设置为0。

【C 程序】

*include <stdio.h>

*define N 10000

int main ()

{

char sieve[N+1] = {0};

int i = 0,k;

/*初始时2~N都放入sieve数组*/

for(i=2; (1) ; i++)

sieve[i] = 1;

for( k = 2; ;){

/*找出剩下的数中最小者并用k表示*/

for( ; k<N+1&& sieve[k]==0; (2) );

if ( (3) ) break;

printf("%d\t",k); /*输出素数*/

/*从sieve中去掉k及其倍数*/

for( i=k; i<N+1; i= (4) )

(5) ;

}/*end of for*/

return 0;

} /*end of main*/

正确答案及解析

正确答案
解析

(1)i<N+1或其等价形式

(2)k++或++k或其等价形式

(3)k>N或k==N+1或其等价形式

(4)i+k或其等价形式

(5)sieve[i]=0或其等价形式

本题考查 C 程序的运算逻辑,应用案例是埃拉托斯特尼筛法求素数。

显然,空(1)所在的for语句用于设置 sieve()的初始值,根据题目描述,一开始1~N范围内的自然数 i 都在序列中,因此对应的数组元素 sieve[i]都要设置为 1。因此,空(1)处应填入 "i<N+1 "或其等价形式。

根据注释,空 (2) 所在的for语句要找出剩下数中的最小者,也就是要找出sieve中第一个值不等于0 的数组元素sieve[K],顺序地考查sieve 的元素即可,因此空 (2)处应填入 "k++"。

空(3)应填入"k>N" 或其等价形式,表示要找的最小素数已经大于 N,应结束处理。

空 (4) 和 (5) 所在for 语句用于将刚找出的素数 k 及其倍数从序列中去掉,用 i 表示 k 的倍数(包括 k 自己)时,i 的取值为 k. 2k. 3k, ...,在 i 的初值已设置为k 的情况下,i 的迭代方式为 i=i+k,因此空 (4) 处应填入“i+k” ,空 (5) 处应填入" sieve[i]=0"

你可能感兴趣的试题

单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.0
  • B.1
  • C.2
  • D.3
查看答案
单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.1、1
  • B.1、2
  • C.2、2
  • D.2、3
查看答案
单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.3
  • B.4
  • C.5
  • D.6
查看答案
单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.V(S3)和V(S5)V(S6)
  • B.P(S3)和V(S5)V(S6)
  • C.V(S3)和P(S5)P(S6)
  • D.P(S3)和P(S5)P(S6)
查看答案
单选题

中级软件设计师,章节练习,中级软件设计师系统开发运行知识

  • A.243ms
  • B.246ms
  • C.254ms
  • D.280ms
查看答案

相关题库更多 +