问答题 [说明]
函数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]的值即可。