gjsgjslovegtt 发表于 2013-7-18 11:35:43

这个程序有点小问题请帮忙解答一下啊!

#include<stdio.h>
void main()
{
char c='k';
int i=1,j=2,k=3;
unsigned e;
float x=3e+5,y=0.85;
printf("%d,%d\n",!x*!y,!!!x);
printf("%d,%d\n",x||i&&j-3,i<j&&x<y);
printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);
}


程序里面红色的第二个判断语句为什么是0啊,i<j是1,x<y也有可能为1啊,因为x中的e不确定为正的值还是负的值啊!如果x是负值的hua请帮忙解答一下啊!

格式天下 发表于 2013-7-18 11:54:28

本帖最后由 格式天下 于 2013-7-18 12:02 编辑

首先上图

然后上程序,当略微的改了下哈
#include<stdio.h>
void main()
{
char c='k';
int i=1,j=2,k=3;
unsigned e;
float x=3e+5,y=0.85;
printf("%f\n" ,x );
printf("%d,%d\n",!x*!y,!!!x);
printf("%d,%d\n",x||(i&&(j-3)),(i<j)&&(x<y));
printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);
}

由运行结果可以看出,x = 300000.000000
这显然想x < y不成立 嘛,你的问题出在了 x = 3e +5
这是浮点数,而x = 3e+5 也就是 x = 3 X (10^5) 哦,至于e是一个关键字,慎用^_^

当然如果x是负数的话x<y就成立,那结果自然是1啦
上图!!

当然啦,还有对应的程序:
#include<stdio.h>
void main()
{
char c='k';
int i=1,j=2,k=3;
unsigned e;
float x=-(3e+5),y=0.85;//这里把x变为负数
printf("%f\n" ,x );
printf("%d,%d\n",!x*!y,!!!x);
printf("%d,%d\n",x||(i&&(j-3)),(i<j)&&(x<y));
printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);
}
还有一个问题:假设把e换成其他字母,只是定义 unsigned的话就没意义了,因为你不知道它的只是多少,未定义行为
希望对你有帮助

小号4 发表于 2013-7-18 22:59:41

是不是优先级乱了?

刀下留人 发表于 2013-7-19 02:19:56

是不是3e的问题?3*e?

刀下留人 发表于 2013-7-19 02:25:39

你的问题解决了没?

刀下留人 发表于 2013-7-19 03:01:19

人在不?来了说下。解决的问题是在哪!

gjsgjslovegtt 发表于 2013-7-21 14:04:48

就是说e是指数的意思呗,在这个里面

玉宁417 发表于 2013-9-27 07:56:27

新人,路过学习一下{:1_1:}

阔怀 发表于 2015-8-23 10:34:46

帮顶

桃花飞舞 发表于 2015-8-23 10:49:24

:call路过
页: [1]
查看完整版本: 这个程序有点小问题请帮忙解答一下啊!