C语言菜鸟问题............求解

来源:百度知道 编辑:UC知道 时间:2024/06/25 19:06:54
问题:判断一个输入的数是不是质数

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

请教高手哪里出问题了,以及正确的程序是什么样?
谢!本人初学C语言.

经改正编译通过。
1、判断语句最好封装为函数,否则因为a的作用域问题。
很多时候不能正常判断。如n = 2, 3,4,5,7.。。。
2、i的初值应为2.不能为1.因为质数是除了1和它本身外,没有其它约数的大于1的自然数。

#include <stdio.h>

int zhishu(int n)
{
int i;
for( i = 2 ;i < n ; i++ )
{
if(n%i == 0) return 0;
}
return 1;
}

int main()
{

int n ;
scanf("%d",&n);

if( zhishu( n ) == 1 )
printf("%d是质数",n);
else
printf("%d不是质数",n);

return 0;
}

貌似你在for 后面加了一个分号。
c把分号看成一个空语句,所以你
{if(n%i==0)
a++;
}
没有执行。把分号去掉看看。
还有i的初值为2.如果为1,则每个数都符合n%i==0

你的a++用的是不对的,把for语句改为
头文件补上#include <<math.h>>
k=sprt(n);
for(i=2;i<=k;i++)
{if(n%i==0)
a=1;
}
其余不变,你应用%5d输出,这样看起来会比较方便。还有没输出5个自动换行。

错在for循环语句
应为for(i=2;i<n;i++)
如果i的初值为1
那么a不可能是0,输出的结果都是*不是素数