首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求C大神找个Bug,该怎么处理

2013-01-28 
求C大神找个Bug#includestdio.h#includemath.hmain(){int m,i,kscanf(%d,&m)ksqrt(m)for(i2i

求C大神找个Bug
#include<stdio.h>
#include<math.h>
main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++);
  if(m%i==0)break;
if(i>k) printf("%d is a prime number\n",m);
else printf("%d is a not prime number\n",m);
}
[解决办法]
for语句后面多了一个;号:


#include<stdio.h>
#include<math.h>
main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)//;
  if(m%i==0)break;
if(i>k) printf("%d is a prime number\n",m);
else printf("%d is a not prime number\n",m);


[解决办法]
这不是一个bug吧,太多了
1.k=sqrt(m);
这句,sqrt的返回值是double,你必须在前面加上强制转换,即
k=(int)sqrt(m);

2.for(i=2;i<=k;i++);
后面的分号去掉

3.循环体必须加上{}号,这是规范,你的代码里就因为这个出错!

4.main函数没有设置返回值,默认为int,因此在函数的最后必须加上 return 0;

5.条件限制不完善,当m的平方根小于2时(例如m=3),根本进不到循环中去!

6.最最核心的,你的求质数算法是错误的!
完整修改如下

#include<stdio.h>
#include<math.h>

int main()
{
int m,i,k;
printf("请输入一个大于1的正整数:");
scanf("%d",&m);
if ((m<=1))
{
printf("\n输入数据有误,请输入一个大于1d的正整数:");
scanf("%d",&m);
}
k=(int)sqrt(m);
for(i=2;i<=k;i++)
{
if((m%i==0))
{
printf("%d is a not prime number\n",m);
return 0;
}
}
printf("%d is a prime number\n",m);
return 0;
}

热点排行