问题 问答题

请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
例如:若输入17,则应输出9和4,6,8,9,10,12,14,15,16。
注意:部分源程序在文件PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
文件PROG1.C内容如下:
#include<stdio.h>
void fun(int m,int *k,int xx[])


void main( )
int m,n,zz[100];
printf("\nPlease enter an integer number between 10 and 100:");
scanf("%d",&n);
fun(n,&m,zz);
printf("\nThere are%d non-prime numbers less than%d:\n",m,n);
for(n=0;n<m;n++)printf("%4d",zz[n]);
printf("\n"):

答案

参考答案:void fun(int m,int *k,int xx[]){
int i,j,n=0;
for(i=2;i<m;i++){
for(j=2;j<=i/2;i++)
if(i%j==0) break;
if(j<=i/2) {
xx[n]=i;n++;
}
}
*k=n;
}

解析: 本题虽然是要求求出非素数,实际也是考查素数的判定算法。对于变量i取出的每一个值,变量j都从2开始循环到i/2,在变量j的这个范围内,能找到一个j,i能够整除它,则i是非素数,将i赋值到数组xx中。循环结束后,将数组的长度n赋值给*k,通过指针k带回数组xx的长度。
[归纳总结] 本套试题的程序填空和程序设计题考查的是素数的判定算法。考题中通常要求对某个范围内的素数进行一定的处理。此类题目的常用程序段如下:
for(i=m;i<=n;i++){ /*求出m到n之间的素数*/
for(j=2;j<=i/2;j++)
if(i%j==0)break;
if(j>i/2){
…/*若条件成立,则i是素数,根据程序要求补充后面的语句*/
}

单项选择题
问答题