阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。 [说明] 函数Printprime(int UpBound)的功能是输出1到UpBound以内的全体素数。 [函数2.1] void PrintPrime(int UpBound)

admin2009-02-15  31

问题 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。
[说明]
   函数Printprime(int UpBound)的功能是输出1到UpBound以内的全体素数。
[函数2.1]
void PrintPrime(int UpBound)
   printf("2," );
   for(i=3; i<UpBound; i+ =2) {
     int k = sqrt(i);
     for(j=3; j<= k;(1))   /*检查i是否有3到k以入的奇因数*/
        if((2)) break;
     fi((3)) printf("%d", i);
[函数2.2说明]
   递归函数invert(int a[],int k),int k)的功能是将数组a中的前k个元素逆置。
[函数2.2]
void invert(int a[ ], int k)
{  int t;
   if ((4)) {
        invert((5));
        t=a[0];
     a[0] =a[k-1];
        a[k-l]=t;
   }
}

选项

答案(1)j+=2 (2)i%j==0 (3)j>k (4)k>1 (5)a+1,k-2

解析 (1)~(3)由于(1)处循环只检查i是否能被3到k以内的奇数所整除,因此循环增量应该是2。并且一旦i被某个3到k以内的奇数整除,那么内层for应当立即终止,此时j<=k。相反的,若内层for循环结束后j>k,则表明i没有3到k以内的奇因数,即i是一素数,应该输出;
(4)由于函数递归的终止条件是k不大于1,于是仅在 k>1时需要继续进行递归;
(5)为了将数组a的前k个元素a[0]、……、a[k-1]置逆,只需先将a[1]、……、a[k-2]这k-2个元素置逆,即调用invert(a+1,k-2),再交换a[0]和a[k-1]的值即可。
转载请注明原文地址:https://kaotiyun.com/show/ZojZ777K
0

最新回复(0)