填空题  
    用筛选法可得到2~n(n<10000)的所有素数。方法:从素数2开始,将所有2的倍数从数表中删除(把数表中相应位置的值置成0);接着,从数表中找下一个非0数,并从数表中删去该数的所有倍数;依次类推,直到所找的下一个数等于n为止。这样会得到一个序列:
   
2,3,5,7,11,13,17,19,23,…

    函数fun的作用:用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。
    请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。
    注意:源程序存入在文件BLANK1.C中,不得增选或删行,也不得更改程序的结构!
    给定源程序如下:
#include  <stdio.h>
int fun(int  n)
{  int  a[10000], i,j, count=0;
  for (i=2; i<=n; i++)  a[i] = i;
  i = 2;
  while (i<n) {
/**********found**********/
      for (j=a[i]*2; j<=n; j+=___1___)
        a[j] = 0;
      i++;
/**********found**********/
      while (___2___==0)
        i++;
  }
  printf('\nThe prime number between 2 to %d\n', n);
  for (i=2; i<=n; i++)
/**********found**********/
    if (a[i]!=___3___)
      {  count++;    printf( count%15?'%5d':'\n%5d',a[i]);  }
  return  count;
}
main()
{  int  n=20, r;
  r = fun(n);
  printf('\nThe number of prime is  :  %d\n', r);
}
 
【正确答案】
【答案解析】(1)根据本题的程序,从素数2开始,将所有2的倍数的数从中删除(把数表中的相应位置置零),可知本空应填a[i]。 (2)while循环表示接着从数表中找下一个非零数,并从表中删除该数的所有倍数,此空填a[i]。 (3)因为要统计表中素数个数,所以只需把置零的数排除,因而此空填0。