P008 所有大于1小于整数m的非素数

03-程序设计题 软件121, 唐鼎威 1110浏览

所属年份:2010.9;2011.9;2012.3
编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k返回。

例如,若输入17,则应输出:4 6 8 9 10 12 14 15 16。

#include <stdio.h>

void fun( int m, int *k, int xx[] )
{

}

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

【考点分析】
本题考查:如何判断非素数;循环判断结构;数组的引用。

【解题思路】
题目要求将1~m之间的非素数存入数组中,应使用循环判断结构。循环语句用来遍历1~m之间的每个数,判断语句用来判断该数是否素数,若不是素数,则将其存入数组中。这道题目是考查一个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。

【解题宝典】
判定一个数是否为素数,即该数除了能被1和它本身外,不能被任何数整除。

代码实现为:

       for(j=2;j<i;j++)
           if(i%j==0)  /*如余数为0,证明i不是素数*/

……

此语句需要熟记,很多判断素数的题目也可通过此法解决。

【参考答案】

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;                          /*返回非素数的个数*/
}