关于IF判断的问题(一个有趣的事情)(分支-08. 高速公路超速处罚(15))

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:57   2196   0

首先,这里的问题很简单,题目如下:

分支-08. 高速公路超速处罚(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈建海(浙江大学)

按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:

输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:

在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

输入样例1:
65 60
输出样例1:
OK
输入样例2:
110 100
输出样例2:
Exceed 10%. Ticket 200
输入样例3:
200 120
输出样例3:
Exceed 67%. License Revoked
因此,我就编写了如下的代码:

#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;

int main()
{
    double v, c;
    cin >> v >> c;
//    cout << "v = " << v << "  c+0.1c = " << c+0.1*c << endl;
    if (v >= c+0.1*c && v < c+0.5*c)
    {
        cout << "Exceed " <<setiosflags(ios::fixed)<<setprecision(0) << v*100/c -100 << "%. Ticket 200" << endl;
    }else if (v >= c+0.5*c){
        cout << "Exceed " <<setiosflags(ios::fixed)<<setprecision(0) << v*100/c -100 << "%. License Revoked" << endl;
//        Exceed x%. License Revoked
    }else{
        cout << "OK" << endl;
    }
//    cout << "Hello world!" << endl;
    return 0;
}

是不是很简单?但是当我输入110 和100的时候,这个结果出来的不对了

我们理论上的结果应该是超速了吧,但是这里的结果确实显示“OK!”!!!


这让我非常费解啊。

此时,我觉得你可能会猜测,怀疑这是codeblock这个编译器的问题,那我要告诉你的是我已经用dev C++ 和visual studio 也运行过了,一样会出现这个问题。

除非。。。所有编译器都有问题???(我觉得这个可能性是比较小的)

因此我暂且就讲问题放在这里,以后我再回来看看吧。。。

如果有哪位牛人知道这其中的原因请一定不吝赐教!!!

------------------------------------------------------------------

这个问题放在这里好久了。。。都没有人给留言讨论一下。。。。/(ㄒoㄒ)/~~

不过,这几天在看书刷题的过程中,猛然觉醒,浮点数在计算机中的表示是不精确的!!!所以才会导致上述事情的发生! 恩就是这样的!


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP