改错题
/*阅读以下程序,找出其中的5处错误,并改正之。*/
#include <math.h>//最基本错误,没有加上<stdio.h>;
int isprime(int m)//导致printf,scanf无法识别;
main()//养成习惯,把int main()写完;
{
int n,flag;
printf(“Input n:”);//这里的符号都是中文的,系统无法识别;
scanf(“%d”, n);
flag=isprime(n);
if(flag)
printf(Yes!\n”)
else
printf(“No!\n”);
}
/* 函数名: isprime
函数功能:判断m是否为素数
入口参数:整型数m
返回值: 返回值为1时,表示m是素数;
返回值为0时,表示m不是素数 */
int isprime(int *m)//不需要指针;
{/*素数-只能被1和他本身整除的数,1不是素数*/
int i;
if(m=1)//在if中要用双等号;
return 0; /*1不是素数,所以返回0值*/
for(i=2; i<=sqrt(m); i++)
{//如果 m 不能被 2 ~ 间任一整数整除,m 必定是素数。
if(m%i==0)
return 0;//由于没有把另一种情况放入if判断,
//所以无论输入何值,返回值都是0;
}
return 1; //应进入if判断体。
}
正确程序如下:
#include <math.h>
#include <stdio.h>
int isprime(int m);
int main()
{
int n,flag;//C语言中习惯用flag来存放事件的真假;
printf("Input n:");
scanf("%d", &n);
flag=isprime(n);
if(flag)//flag在此接受来自函数的返回值1或0,此条件表示如果flag为真;
printf("Yes!\n");
else
printf("No!\n");
}
/* 函数名: isprime
函数功能:判断m是否为素数
入口参数:整型数m
返回值: 返回值为1时,表示m是素数;
返回值为0时,表示m不是素数 */
int isprime(int m)
{
int i;
if(m==1)
{
return 0;
} /*1不是素数,所以返回0值*/
else if(m>=2)
{
for(i=2; i<=sqrt(m); i++)
{
if(m%i==0)/*如果m可被其他数整除,m不是素数*/
return 0;
else
return 1;
}
}
}
peace.