注册 登录
编程论坛 C语言论坛

简单浮点问题

qazxsw321 发布于 2019-10-25 15:56, 1835 次点击
输入只有一行,为三个用空格分隔的浮点数a,b,c(0<a,b,c<100)
输出也只有一行,如果 a - b 等于c ,则输出yes,否则输出no。
#include<stdio.h>

int main()
{
    float a,b,c,d;
    scanf("%f %f %f",&a,&b,&c);
    if(0<a,b,c<100)
{
    d=a-b;
    if(d==c)
    printf("yes");
    else
    printf("no");
}
   else
 {
 }
    return 0;
}
为何提交后显示答案错误
5 回复
#2
纯蓝之刃2019-10-25 16:08
程序代码:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    float a,b,c,d;
    scanf("%f %f %f",&a,&b,&c);

    d=a-b;
    if(abs(d-c)<0.1)
    printf("yes");
    else
    printf("no");

    return 0;
}

浮点数不能用‘==’比较
#3
rjsp2019-10-25 16:19
为何提交后显示答案错误
你贴出网页链接,让大家看看完整的题目要求
你自己可以试试将 float 改为 double (当然%f就要改为%lf了)

另外,代码中有几个低级错误,虽然这些低级错误与“提交后显示答案错误”无关。

scanf("%f %f %f",&a,&b,&c);
%f 本身就会忽略前导的空白字符,因此加空格是无意义的。而且你第一个%f前没加,那我猜你根本不懂scanf的format字符串中空格是什么作用,它不是要求输入一个空格,而是略过0个或数个空白字符。

if(0<a,b,c<100)
它等同于 if( c<100 ),因为 0<a 和 b 无副作用。可见你不懂C语言中的逗号操作符。
当然了,这一句根本没意义,因为题目中的“0<a,b,c<100”是说它的测试用例本身就满足0<a,b,c<100。

最后,题目本身也烂得很,要求判断 a-b 是否 c,那以什么标准来判断?自己模拟实数,那要求太高;用浮点数,是不是相等根本没规定。
#4
rjsp2019-10-25 16:31
随便举个例子,输入 0.3  0.2  0.1 后,是应该输出 yes 还是 no ?

double a, b, c;
scanf( "%lf%lf%lf", &a, &b, &c );
执行时输入 0.3  0.2  0.1,那么
a 可能是 0.299999999999999988897769753748434595763683319091796875
b 可能是 0.200000000000000011102230246251565404236316680908203125
c 可能是 0.1000000000000000055511151231257827021181583404541015625
a-b 可能是 0.09999999999999997779553950749686919152736663818359375
也就是在浮点数眼中,0.3-0.2 != 0.1
#5
自学的数学2019-10-25 16:38
  else
 {
 }里面怎么没内容啊??
#6
qazxsw3212019-10-25 17:18
回复 2楼 纯蓝之刃
http://10.105.242.83/contest/1040/problem/C
1