当前位置: 首页 > article >正文

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.
最后,以图说明:
在这里插入图片描述


http://www.kler.cn/a/460104.html

相关文章:

  • vue中的设计模式
  • 文件本地和OSS上传
  • 2、pycharm常用快捷命令和配置【持续更新中】
  • 从企业级 RAG 到 AI Assistant,阿里云 Elasticsearch AI 搜索技术实践
  • STM32拓展 低功耗案例1:睡眠模式 (register)
  • yolov5核查数据标注漏报和误报
  • TCP-IP入门
  • 架构与通信机制:深入解析JMediaDataSource的JNI实现
  • 【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽
  • 静默模式下安装Weblogic 14.1.1.0.0
  • 医院大数据平台建设:基于快速流程化工具集的考察
  • Ashy的考研游记
  • u3d中JSON数据处理
  • 服务器部署LLM、Embedding
  • 罗德与施瓦茨ZN-Z51,8.5G网分校准件
  • 计算机网络 (12)物理层下面的传输媒体
  • C# 标准数字格式字符串
  • Pytorch使用手册-DCGAN 指南(专题十四)
  • Notepad++:下载安装及使用指南
  • C++通透讲解设计模式:开闭原则(1)
  • Python软体中使用 Kafka 实现高吞吐量的任务队列
  • 结合华为云实现人证核验
  • C++ 设计模式:抽象工厂(Abstract Factory)
  • pyqt5 设计pdf 和word文件互相转换小程序
  • 二、SQL语言,《数据库系统概念》,原书第7版
  • 【Redis】万字整理 Redis 非关系型数据库的安装与操作