c++表达范围勿用数学符号

目的

遇上了一个C++基础问题,一下子陷到里面,不知怎么回事了,知道后,又感觉太可笑。
这也许就是成长的代价。
下面就是细说说所遇上的问题。
关于C++逻辑的一些知识点:
定义:
用逻辑运算符将两个表达式链接起来的式子称为逻辑表达式。
注意说明:
(1)c语言编译系统在给出逻辑运算结果时,以数字1表示 “真” ,以数字0表示 “假” 。
(2)在判断一个量是否为 “真” 时,以0表示 “假” ,以非0表示 “真” 。

问题分析

一段代码总是结果不是自己所预想的(我是想着b的值应该在a值与c值的中间),输出结果却不是在中间,非常的奇怪:

int main()
{
    double a = 0.0;
    double b = 0.123;
    double c = 0.1433;
    if (a <= b < c)
    {
        cout <<"b is between a and c"<<endl;
    }
    else
    {
        cout << "b is not between a and c" << endl;
    }
}

运行结果如下:
在这里插入图片描述

我就是感觉奇怪了,b明明就是在a和c中间啊,b是0.123,显然大于0.0,而小于0.1433,怎么程序的结果竟然是:
b is not between a and c
这也是真奇怪了!
真是想不明白了!
问了问群里的高手们,交流如下:
在这里插入图片描述

基础中的基础,太不好意思了。
继续问:
在这里插入图片描述
在这里插入图片描述

根据上面的提醒改成这样就可以了:

int main()
{
    /*
    double y = 0.0;
    vector<double> score = {60, 70, 100};
    vector<double> bonus= {1, y, 10 };
    cout << "bonus is: " << calcLinearValue(bonus[2], score[2], bonus[0], score[0], score[1]) << endl;
    */
    double a = 0.0;
    double b = 0.123;
    double c = 0.1433;
    if ((a <= b) && (b < c))
    {
        cout <<"b is between a and c"<<endl;
    }
    else
    {
        cout << "b is not between a and c" << endl;
    }
}

输出结果:
在这里插入图片描述

这样就与预想的一样了,哈哈!

总结

这种错误,其实就是把数学的表达,带到程序来了。
在C++ primer plus书籍中P157,专门提到了这一点:
取值范围的测试的每一部分都使用AND操作符将两个完整的关系表达式组合起来。
if(age > 17 && age < 35) //OK
不要使用数学符号将其表示为:
if(17 < age <35) //Don’t do this!
编译器不会捕获这种错误,因为它仍然是有效的C++语句。<操作符从左到右结合,因此上述表达式的含义如下:
if((17<age) < 35)
但17<age的值要么为true(1),要么为false(0)。
不管是哪种情况,表达式17<age的值都小于25,因此整个测试的结果总是true.
最后,以图说明:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员如山石

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值