| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 587 人关注过本帖
标题:[求助]这个程序错在哪里?
只看楼主 加入收藏
皮皮鲁
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-7-27
收藏
 问题点数:0 回复次数:8 
[求助]这个程序错在哪里?
刚学C语言,刚刚接触win-tc软件,用这个程序试验一下这个软件,结果系统总是提示有错误,请大家看看错在哪里。
#include<math.h>
int main()
{
int m, k, i, n=0;
for(m=101; m<=200;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k; i++)
if(m%i= =0)break;
if(i>=k+1){printf("%d", m);n=n+1;}
if(n%10= =0)printf("\n");
}
printf("\n");
getch();
}
搜索更多相关主题的帖子: include C语言 软件 
2006-07-31 17:45
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
以下是引用皮皮鲁在2006-7-31 17:45:52的发言:
刚学C语言,刚刚接触win-tc软件,用这个程序试验一下这个软件,结果系统总是提示有错误,请大家看看错在哪里。
#include<math.h>
int main()
{
int m, k, i, n=0;
for(m=101; m<=200;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k; i++)
if(m%i= =0)break; 等号之间不能有空格
if(i>=k+1){printf("%d", m);n=n+1;}
if(n%10= =0)printf("\n");
}
printf("\n");
getch();
}


人生没有彩排,每天都是现场直播~~~
2006-07-31 18:02
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
顺便说一下,一直以来,论坛上有很多类似求质数的帖子,一直都是用sqrt(num)来控制循环的次数,从纯数学的角度来讲,这是没问题的,
但在c中却有一定的风险,实际上,大家都知道,sqrt()的开方运算在计算机并不是精确的,举个例子,如果num=169,在数学上,理所当然,开方后就是13,然而计算机的开方运算却不是按人的思维来的,它算出来的结果很可能是12.9999999,于是,去除num的数就是2,3,5,7,11而不含13,因此按照楼上的程序就变成169是质数了.
解决的办法很简单,不用开方,用平方即可,用a*b<num来控制循环,程序执行的正确率不仅可以提高,还可以省去开方这种复杂的运算,从而提高程序的运行速率

对不礼貌的女生收钱......
2006-07-31 18:47
皮皮鲁
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-7-27
收藏
得分:0 


谢谢大家的指点,我知道错在哪里了。本来自学C觉得很无助,有你们的帮助,感觉有信心多了。
按二楼朋友的指点,我运行了一遍,编译成功。
三搂版主的建议让我大开眼界,我看课本上总是用开方,以为只有这一种方法呢。现在知道C还是很灵活的。不过,我还是刚刚看到循环这一章,对于版主的方法并不知道如何操作,还是谢谢你的指点。

2006-07-31 20:01
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
for(i=2;i*i<=m; i++)
这样,斑竹对吧.

倚天照海花无数,流水高山心自知。
2006-07-31 20:14
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

呵呵,正是,楼上是聪明的人,楼主不妨再仿写个程序练练


对不礼貌的女生收钱......
2006-07-31 20:26
皮皮鲁
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-7-27
收藏
得分:0 






谢谢指教!

2006-07-31 20:41
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用soft_wind在2006-7-31 18:47:12的发言:

但在c中却有一定的风险,实际上,大家都知道,sqrt()的开方运算在计算机并不是精确的,举个例子,如果num=169,在数学上,理所当然,开方后就是13,然而计算机的开方运算却不是按人的思维来的,它算出来的结果很可能是12.9999999,

以前为了这个问题..feng和牧羊吵过一次

虽然我不知道sqrt的具体算法

可是..sqrt(169) 你能举例给出他不等于13的时候吗?

用你的机器截图也可!


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-31 20:52
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
我记得计算机里面好象是按二分法算的,用泰勒公式算的,不断精确,直到达到某一精度,计算机就停止计算了,
至于举例,我无能为力,169既然计算机算出的结果是13.00000000,那任由再算N次,也还是13的,
不过,当数大的时候,存在这种可能,而丢掉小数部分。

对不礼貌的女生收钱......
2006-07-31 21:04
快速回复:[求助]这个程序错在哪里?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022188 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved