问答题 编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k返回。例如,若输入17,则应输出:4 6 8 9 10 12 14 15 16。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>void fun(int m,int*k,int xx[]){}main(){ int m,n,zz[100];void NONO(); printf(''\nPlease enter an integer number between 10 and 100:'');scanf(''%d'',&n)fun(n,&m,zz);prinff(''\n\nThere are%d non—prime numbers less than%d:'',m,n);for(n=0;n<m;n++)printf(''\n%4d'',zz[n]);NONO();}void NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/int m,n,zz[100];FILE*rf,*wf;rf=fopen(''in.dat'',''r'');Wf=fopen(''out.dat'',''w'');fscanf(rf,''%dt,&n);fun(n,&m,zz);fprintf(wf,''%d\n%d\n'',m,n);for(n=0;n<m;n++)fprintf(wf,''%dkn'',zz[n]);fclose(rf);fclose(wf);}
【正确答案】正确答案:void fun(int m,int*k,int xx[]) { int i,j,n=0; for(i=4;i<m;i++)/*找出大于1小于整数m的非素数*/ {for(j=2;j<i;j++)if(i%j==0)break; if(j<i)xx[n++]=i; } *k=n;/*返回非素数的个数*/ }
【答案解析】解析:题目要求将1~m的非素数存入数组中,应使用循环判断结构。循环语句用来遍历1~m的每个数,判断语句用来判断该数是否为素数,若不是素数,则将其存入数组中。这道题目是考查一个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。判定一个数是否为素数,即该数除了能被1和它本身整除外,不能被任何数整除。代码实现为:for(j=2;j<i;j++)if(i%j==0)/*如余数为0,证明i不是素数*/此语句需要熟记,很多判断素数的题目也可通过此法解决。