问答题 请编写函数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{{U}} {{/U}}{ 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是素数,根据程序要求补充后面的语句*/ }