判断素数的题,系统报错说少了一个分号,请问哪错了

来源:百度知道 编辑:UC知道 时间:2024/09/24 12:36:45
#include <stdio.h>
void main()
{
int a,b;
scanf("%d",&a);
int sushu();
if(b=0)
{
printf("%d不是素数\n",a);
}
if(b=1)
{
printf("%d是素数\n",a);
}

}

void sushu()
{
int a,b,i;
for(i=2;i<a/2;i++)
{
if(a/i==0)
{
b=0;
}
else
{
b=1;
}
}
}
#include <stdio.h>
void main()
{
int a,b;
scanf("%d",&a);
int sushu();
if(b=0)
{
printf("%d不是素数\n",a);
}
if(b=1)
{
printf("%d是素数\n",a);
}

}

sushu()
{
int a,b,i;
for(i=2;i<a/2;i++)
{
if(a/i==0)
{
b=0;
}
else
{
b=1;
}
}
}
改成这样但还是有一个错,系统说少个分号,怎么回事?

这个程序有两个问题:
第一、这里用到了函数调用,在不同的函数中可以用采用相同的变量名,但是代表的是不同的变量,如果你要从主函数中获取,就要进行相应的值传递,被调用的函数也应该有个返回值,而不是空返回;
修改:主函数中int sushu();改为 int sushu(a);
调用函数的函数首部void sushu()改成int sushu(int a),并把后面的定义中的a去掉;

第二、sushu函数中的i会一直增加到i=a/2;
假如a=9,当i=3时,我们就可以判断出a不是素数,此时应该停止循环,否则 程序会再往下循环;i=4,此时得到的b=1,又把之前得到的结论“不是素数”改成“是素数”,所以在这里面有问题;
修改方法有两种,第一种:在if语句中添加break语句;
if(a/i==0)
{
b=0;
break;
}

第二:给b赋上初值1,在判断中,去掉else语句;
int sushu(int a)
{
int b=1,i;
for(i=2;i<a/2;i++)
{
if(a/i==0)
{
b=0;
}
}
}

#include <stdio.h>
int main() //这里改为int
{
int a,b;
scanf("%d",&a);
int sushu();
if(b=0);//这里缺少一个分号
{
printf("%d不是素数\n",a);
}
if(b=1)
{
printf("%d是素数\n",a);
}

}

void sushu()
{
int a,b,i;