求C大神找个Bug

code_data7 2013-01-22 03:52:29
#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);
}
...全文
201 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
code_data7 2013-01-22
  • 打赏
  • 举报
回复
谢谢你的回答,我刚才用VC编译没问题,但调试的时候显示一个错误
ardayoyo 2013-01-22
  • 打赏
  • 举报
回复
这不是一个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;
}
图灵狗 2013-01-22
  • 打赏
  • 举报
回复
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);
} 

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧