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语言.
#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,输出的结果都是*不是素数