24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2856  |  回复: 21

fengxingwang

新虫 (初入文坛)

[求助] C++编程,关于循环结构的,大家看看我这程序哪里错了?

#include
void main()
{
        double x,y,t,e,p,f,z;
               x=1;
                   y=2;
                   z=128;
                   for(t=1;t<6;t=t+0.01)
                   {
                          e=x*t;
                          p=y*t;
                                                  f=e*p*t;
                          if(f==z)
                                  break;
                   }
                   printf("%f,%f\n",t,f);
}
运行结果是:6.01  ,432
应该是t=4.   f=128 啊,
编译的时候没显示错误,但是结果却显示的不对,是怎么回事啊??
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
余泽成(金币+2): 谢谢参与应助! 2012-03-04 01:44:07
楼主可以把for语句改成这样,我都是这样做的

在stdio.h的下一行,添加:
CODE:
#include

for 语句改成:
CODE:
for( t=1;  fabs(t-6) < 0.005;  t=t+0.01)

在对浮点数作大小比较的时候,都要添加精度范围,在几乎所有编程教科书上都是这样强调的
很女子很弓虽大
9楼2012-02-29 16:37:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★
余泽成(金币+2): 谢谢参与应助! 2012-03-04 01:44:18
CODE:
if(f==z)

改成
CODE:
if(fabs( f-z ) < 0.005)

很女子很弓虽大
10楼2012-02-29 16:38:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

★ ★
余泽成(金币+2): 谢谢参与应助! 2012-03-11 23:24:46
引用回帖:
13楼: Originally posted by lijie169 at 2012-02-29 17:00:42:
1 为什么不给我金币?
2、不用定义成一种类型,可以把if(f==z)改成 if(abs(f-z)<0.00001)类似这样,就可以了!!!

lijie169的回答是对的!~~~ 楼主要给的。哈哈!

代码(这次,我运行过),结果是 4.000000,128.000000
CODE:
#include
#include
void main()
{
                double x,y,t,e,p,f,z;
                x=1;
                y=2;
                z=128;
                for(t=1;t<6;t=t+0.01)
                {
                                e=x*t;
                                p=y*t;
                                f=e*p*t;
                                if(fabs(f-z)<0.005)
                                                break;
                }
                printf("%f,%f\n",t,f);
}

很女子很弓虽大
18楼2012-03-01 18:31:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

ataoyo

至尊木虫 (职业作家)

【答案】应助回帖


感谢参与,应助指数 +1
余泽成(金币+1): 谢谢参与应助! 2012-03-04 01:35:24
应该是t=t+1吧,而不是t=t+0.01
2楼2012-02-29 14:12:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengxingwang

新虫 (初入文坛)

引用回帖:
: Originally posted by ataoyo at 2012-02-29 14:12:36:
应该是t=t+1吧,而不是t=t+0.01

那我要是想每次都给t加上0.01该怎么写啊??
3楼2012-02-29 14:19:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengxingwang

新虫 (初入文坛)

引用回帖:
: Originally posted by ataoyo at 2012-02-29 14:12:36:
应该是t=t+1吧,而不是t=t+0.01

现在要各个变量都定义成整数。。int定义,那结果运行对,可是我要是想得到的结果是小数怎么写啊?
4楼2012-02-29 14:21:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
余泽成(金币+1): 谢谢参与应助! 2012-03-04 01:35:50
fengxingwang(金币+4): ★★★★★最佳答案 2012-03-06 11:57:51
首先浮点数和整数不可能相等的,即使一个是6,另一个是6.0,建议取break条件f-z的绝对值小于某一个值
5楼2012-02-29 14:34:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengxingwang

新虫 (初入文坛)

引用回帖:
: Originally posted by lijie169 at 2012-02-29 14:34:21:
首先浮点数和整数不可能相等的,即使一个是6,另一个是6.0,建议取break条件f-z的绝对值小于某一个值

恩,你知道怎么把这些变量都定义成同一种形式的吗?我想让各个变量都是小数点后几位的。是不int,该改成double或float之类的啊?
#include
void main()
{
        double x,y,t,e,p,f,z;
               x=1.3562;
                   y=2.4358;
                   z=128.0000;
                   for(t=1.0000;t<6.0000;t=t+0.01)
                   {
                          e=x*t;
                          p=y*t;
              f=e*p*t;
                          if(f==z)
                                  break;
                   }
                   printf("%f,%f\n",t,f);
}
6楼2012-02-29 14:43:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文俊点点

木虫 (著名写手)

【答案】应助回帖


感谢参与,应助指数 +1
余泽成(金币+1): 谢谢参与应助! 2012-03-04 01:43:48
这样f和z永远不可能相等的·······
这个应该是小于一个范围········
这是你所拥有的时间·····这是你所能改变的生活·········
7楼2012-02-29 16:31:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lt292

金虫 (正式写手)

Holy Shit


余泽成(金币+1): 谢谢参与应助! 2012-03-04 01:43:57
f==z
这个有点问题
一般都是写f-z的绝对值小于某个数量级,比如e-6,这就看你程序的精度了
记忆中的颜色,慢慢褪去,变成一缕缕的黑丝,最终消失在茫茫的空白里,一去不返```
8楼2012-02-29 16:37:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fengxingwang 的主题更新
信息提示
请填处理意见