问题 填空题

给定程序MODI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,并作为函数值返回。
请改正程序中的错误,使程序能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
文件MODI1.C内容如下:
#include<stdio.h>
int fun(int m)
int i, k;
for(i=m+1;;i++)
for(k=2;k<i;k++)
/***********found***********/
if(i%k!=0)break;
/***********found***********/
if(k<i)return(i);


void main( )
int m,n;
printf("Please enter an integer number:\n"):
scanf("%d",&m);
n=fun(m);
printf("The prime number after m:\n");
printf("%d\n",n);

答案

参考答案:第1处:将“if(i%k!=0)”改为“if(i%k==0)”。
第2处:将“if(k<i)”改为“if(k>=i)”。

解析: 程序中的两处错误均是逻辑上的错误,所以必须分析程序使用的算法。i循环从m+1开始循环,对每一个i,内层循环k都从2开始,循环到i(不包括i本身),如果找到一个k能被i整除,则说明i不是素数应该结束本轮循环,取出下一个i值进行判断。所以第1处应该将“!=”改为“==”。k循环有两个出口,如果通过break中断循环,此时k<i;如果始终都没有一个k能被i整除,则当k>=i时也可跳出循环,所以跳出k循环后要返回i的值,条件一定是“k>=i”的情况,所以第2处应该将“<”改为“>=”。

单项选择题
单项选择题