#includeint main() { int prime(int); int n; printf("请输入一个整数:"); scanf("%d",&n); if______________________ printf("%d 是素数。n",n); else printf("%d 不是素数。n",n); return 0; } int prime(int n) { int flag=1,i; for(i=2;i 经分析,以上代码使用flag的值来判断输入的n是否为素数,flag=1,n为素数;flag=0,n不是素数。完善if条件语句,第一个if, 主函数中的if调用函数,需要填入一个参数,即prime(n); 第二个if,是判断什么情况下flag=0,即输入的整数不为素数,即(n/i==0),余数为0,可以整除;最后返回flag的值,return flag。
但是经过运行可以知道,n=4的时候,程序判断4是素数,明显是错误的,n取0和1的时候同理,程序存在漏洞。分析得知,在定义函数的过程中,for循环条件语句,i<=n/2&&flag==1才能正确运行,同时添加if语句对0和1判断。(前提输入的n>=0,如果为负整数,另加判断条件,略)
正确代码如下:
#includeint main() { int prime(int);//函数声明 int n; printf("请输入一个整数:n"); scanf("%d",&n); if(prime(n)) { printf("%d 是素数。n",n); }else { printf("%d 不是素数。n",n); } return 0; } int prime(int n) //函数定义 { int flag = 1,i; if (n <= 1) //判断0和1,需要先排除 flag = 0; //返回0值 for(i=2;i <= n/2 && flag == 1;i++) //n无法整除比n/2大的数,flag=1为真,即为素数,继续执行 if (n%i == 0) //如果取余为0,则其可以整除,不是素数。 flag=0; //标记flag=0,非素数。 return flag; }



