问答题 给定程序MODI1.C的功能是:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出2、3、5、7、11。
#include<stdio.h>
/**********found**********/
IsPrime(int n);
int i,m;
m=1;
for(i=2;i<n;i++)
/**********found**********/
if !(n%i)
m=0;break;
return(m);

main()
int j,k;
printf("/nPlease enter an integer number between 2 and 10000:");scanf("%d",&k);
printf("/n/nThe prime factor(s)of%d is(are):",k);
for(j=2;J<=k;j++)
if((!(k%j))&&(IsPrime(j)))printf("/n%4d",j);
printf("/n");


【正确答案】(1)IsPrime(int n) (2)if(!(n%i))
【答案解析】[解析] ①整数n的素数因子为整除n的所有素数,但不含n本身。
素数是只能被1和本身整除的正整数(>1),所以判别n是否为素数,只要用2、3、…、n-1这些数逐个去除n,观察余数是否为0即可。只要有一次相除余数为0,n就不是素数,否则n为素数。
因此,求整数n的素数因子,要从求整数n的因子和判断该因子是否为素数的两方面来看。
②从已给定源程序的main()主函数开始入手,核心部分是循环判断if((!(k%j))&&(IsPrime(j)))。其中,“!(k%j)”是判断j是否为k的因子;自定义函数IsPrime()的功能是判断j是否为素数;&&(逻辑与)表示当两个判断条件都为真时,j即为k的素因子。
①第一个标识下的“IsPrime(int n);”在程序中显然是一个函数,因此应将后面的分号去掉。
②第二个标识下的if语句后面缺少括号,因此if!(n%i)应改为if(!(n%i))。
[考点] if条件语句,函数定义。