2

对于哪个 f 值,输出将是“世界”?

#include<stdio.h>
int main(){
  float f= ... ;
  if(f==f)
     printf("hello\n");
  else
     printf("world\n");
 return 0;
}

什么将替换为三个点 (...)

4

4 回答 4

4

尝试这个:

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

int main(){
  float f = nanf("0.0");
  printf("%f\n", f);

  if(f==f)
     printf("hello\n");
  else
     printf("world\n");
 return 0;
}
于 2012-10-14T16:07:08.847 回答
2

IEEE 754 浮点数可以表示正数或负数infinityNaN(不是数字)。这 3 个值来自结果未定义或无法准确表示的计算。NaN始终通过表达式传播。NaN 即任何包含将评估的表达式NaN

您也可以故意将浮点变量设置为NaN. 例如,以下完全有效的浮点表达式可以解决问题:

 sqrtf(-1.0f) // NaN

有关浮点数中无穷大NaN的更多信息。


PS:我很想忽略这一点,因为它看起来像一个简单的作业 Q。但是不推荐使用作业标签和所有...

于 2012-10-14T16:12:31.483 回答
2

简单的。

float f = (puts("world"), exit(0), 0.0f);

编辑:是的,我知道您正在寻找不同的答案。但我会变得很可爱,因为这看起来像是家庭作业或带回家测验中的一个问题,甚至还没有分解成各个部分。

于 2012-10-14T16:00:53.813 回答
0

您可以使用NAN来自 的宏math.h

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

int main(void)
{
  float f = NAN;
  if (f == f)
     printf("hello\n");
  else
     printf("world\n");
}

请注意,此宏已在 C99 中引入,如果实现不支持该float类型的安静 NaN,则不存在此宏。

于 2012-10-14T16:13:34.327 回答