C++ Primer Plus——第6章 分支语句和逻辑运算符

news2025/2/26 13:17:15

第6章 分支语句和逻辑运算符

  • 6.1 if语句
    • 6.1.1 if else语句
    • 6.1.2 格式化if else语句
    • 6.1.3 if else if else结构
  • 6.2 逻辑表达式
    • 6.2.1 逻辑OR运算符:||
    • 6.2.2 逻辑AND运算符:&&
    • 6.2.3 用&&来设置取值范围

6.1 if语句

if语句让程序能够决定是否应执行特定的语句。整个if语句被视为一条语句。
在这里插入图片描述

// 程序清单6.1 if.cpp--using the if statement
#include <iostream>

using namespace std;

int main(void)
{
    char ch;
    int spaces = 0;
    int total = 0;
    cin.get(ch);
    while (ch != '.') {
        if (ch == ' ') {
            ++spaces;
        }
        ++total;
        cin.get(ch);
    }
    // 若在输入字符中包含回车,则字符总数中包括回车键生成的换行符
    cout << spaces << " spaces, " << total << " characters total in sentence." << endl;

    return 0;
}

在这里插入图片描述

6.1.1 if else语句

if else语句则让程序决定执行两条语句或语句块中的哪一条。整个if else结构被视为一条语句。
在这里插入图片描述

// 程序清单6.2 ifelse.cpp--using the if else statement
#include <iostream>

using namespace std;

int main(void)
{
    char ch;
    cout << "Type, and I shall repeat." << endl;
    cin.get(ch);
    while (ch != '.') {
        if (ch == '\n') {
            cout << ch;
        } else {
            cout << ++ch; 
            // cout << ch + 1; 此情况cout将显示int值,不是char字符
        }
        cin.get(ch);
    }
    cout << endl << "Please excuse the slight confusion." << endl;

    return 0;
}

在这里插入图片描述

6.1.2 格式化if else语句

if else中的两种操作都必须是一条语句。如果需要多条语句,需要用大括号将它们括起来,组成一个块语句。

6.1.3 if else if else结构

整个构造仍被视为一条语句。

// 程序清单6.3 ifelseif.cpp--using if else if else
#include <iostream>

using namespace std;

int main(void)
{
    const int Fave = 27;
    int n;
    cout << "Enter a number in the range 1-100 to find my favorite number: ";

    do {
        cin >> n;
        if (n < Fave) {
            cout << "Too low -- guess again: ";
        } else if (n > Fave) {
            cout << "Too high -- guess again: ";
        } else {
            cout << Fave << " is right!" << endl;
        }
    } while (n != Fave);

    return 0;
}

在这里插入图片描述

6.2 逻辑表达式

3种逻辑运算符:逻辑OR(||)、逻辑AND(&&)、逻辑NOT(!)

6.2.1 逻辑OR运算符:||

C++可以采用逻辑OR运算符(||),将两个表达式组合在一起。如果原来表达式中的任何一个或全部都为true,则得到的表达式的值为true;否则,表达式的值为false。
C++规定,||运算符是个顺序点。也就是说,先修改左侧的值,再对右侧的值进行判定(C++11的说法是,运算符左边的子表达式先于右边的子表达式)

i++ < 6 || i == j
// 假设i原来的值为10,则在对i和j进行比较时,i的值将为11
// 如果左侧的表达式为true,则C++将不会去判定右侧的表达式,因为只要一个表达式为true,则整个逻辑表达式为true

在这里插入图片描述

// 程序清单6.4 or.cpp--using the logical OR operator
#include <iostream>

using namespace std;

int main(void)
{
    cout << "This program may reformat your hard disk and destroy all your data." << endl;
    cout << "Do you wish to continue?<y/n> ";

    char ch;
    cin >> ch;
    if (ch == 'y' || ch == 'Y') {
        cout << "Your were warned!\a\a" << endl;
    } else if (ch == 'n' || ch == 'N') {
        cout << "A wise choise ... bye" << endl;
    } else {
        cout << "That wasn't a y or n! Apparently you can't follow\ninstructions, so I'll trash your disk anyway.\a\a\a" << endl;
    }
    return 0;
}

在这里插入图片描述

6.2.2 逻辑AND运算符:&&

逻辑AND运算符(&&),也是将两个表达式组合成一个表达式。仅当原来的两个表达式都为true时,得到的表达式的值才为true。
&&运算符也是顺序点,因此将首先判定左侧,并且在右侧被判定之前产生所有的副作用。如果左侧为false,则整个逻辑表达式必定为false,在这种情况下,C++将不会再对右侧进行判定。
在这里插入图片描述

// 程序清单6.5 and.cpp--using the logical AND operator
#include <iostream>

using namespace std;

int main(void)
{
    const int Arsize = 6;
    float naaq[Arsize];
    cout << "Enter the NAAQs (New Age Awareness Quotients) of\n"
         << "your neighbors. Pragram terminates when you make\n"
         << Arsize << " entries or enter a negative value." << endl;
    int i = 0;
    float temp;
    cout << "First value: ";
    cin >> temp;
    while (i < Arsize && temp >= 0) {
        naaq[i] = temp;
        ++i;
        if (i < Arsize) {
            cout << "Next value: ";
            cin >> temp;
        }
    }
    if (i == 0) {
        cout << "No data--bye" << endl;
    } else {
        cout << "Enter your NAAQ: ";
        float you;
        cin >> you;
        int count = 0;
        for (int j = 0; j < i; j++) {
            if (naaq[j] > you) {
                ++count;
            }
        }
        cout << count << " of your neighbors have greater awareness of the New Age than you do." << endl;
    }

    return 0;
}

在这里插入图片描述
在这里插入图片描述

6.2.3 用&&来设置取值范围

// 程序清单6.6 more_and.cpp--using the logical AND operator
#include <iostream>

using namespace std;

int main(void)
{
    const char *qualify[4] = {
        "10,000-meter race.\n",
        "mud tug-of-war.\n",
        "masters canoe jousting.\n",
        "pie-throwing festival.\n"
    };

    int age;
    cout << "Enter your age in years: ";
    cin >> age;
    int index;

    if (age > 17 && age < 35) {
        index = 0;
    } else if (age >=35 && age < 50) {
        index = 1;
    } else if (age >=50 && age < 65) {
        index = 2;
    } else {
        index = 3;
    }

    cout << "Your qualify for the " << qualify[index];

    return 0;
}

在这里插入图片描述

在使用取值范围测试时,应确保取值范围之间既没有缝隙,又没有重叠。

取值范围测试的每一部分都使用AND运算符将两个完整的关系表达式组合起来:
if (age > 17 && age < 35) // OK
不要使用数学符号将其表示为:
if (17 < age < 35)
编译器不会捕获这种错误,因为它仍然是有效的C++语法。
<运算符从左向右结合,因此上述表达式的含义如下:
if ((17 < age) < 35)
但17 < age的值要么为true(1),要么为false(0)。不管是哪种情况,表达式17 < age的值都小于35,因此整个测试的结果总是true!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/520766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSP-202212-2 训练计划

目录 一、题目 二、思路 三、C代码如下 一、题目 问题背景 西西艾弗岛荒野求生大赛还有 n 天开幕&#xff01; 问题描述 为了在大赛中取得好成绩&#xff0c;顿顿准备在 n 天时间内完成“短跑”、“高中物理”以及“核裂变技术”等总共 m 项科目的加强训练。其中第 i 项…

【源码解析】@ControllerAdvice实现异常捕获与响应增强处理的原理解析

全局异常处理 demo展示 Slf4j RestControllerAdvice public class GlobalExceptionAdvice {ExceptionHandler(RuntimeException.class)public R<Void> handleNotPermissionException(RuntimeException e, HttpServletRequest request) {String requestURI request.get…

卷土重来?我羊羊羊羊羊了!

大家注意&#xff1a;因为微信最近又改了推送机制&#xff0c;经常有小伙伴说错过了之前被删的文章&#xff0c;比如前阵子冒着风险写的爬虫&#xff0c;再比如一些限时福利&#xff0c;错过了就是错过了。 所以建议大家加个星标&#xff0c;就能第一时间收到推送。&#x1f44…

顶尖作品集封面封底来了 共28套

各位打算换工作的都找到心仪东家没? 我们都知道作品集作为我们的敲门砖 其重要性不言而喻 如何让我们的作品集脱颖而出 这里作品集封面就很重要一个设计感超强的封面 可以让面试官眼前一亮 今天给大家整理了28款设计师专属作品集封面封底 让HR看后过目不忘大大提高面试…

删除二叉搜索树中的节点

1题目 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除节点可分为两个步骤&#xff1a…

Oracle EBS Interface/API(48)- AP发票取消API

快速参考 参考点内容功能导航N: AP->发票->录入->发票并发请求None基表AP.AP_INVOICES_ALLAPI参考下面介绍错误信息表None接口FormNone接口RequestDebug ProfileNone详细例子参考如下实例官方文档None数据验证包None用户界面 Path:AP->发票>录入>发票->活…

Android Studio下配置NDK和Cmake

文章目录 NDK简介AS上安装NDK和CmakeAS项目中添加支持C和CMake NDK简介 ndk是SDK的扩展部分&#xff0c;ndk是一套在Android Studio 上支持开发及编译链接C/C的工具链。 AS上安装NDK和Cmake 点击完OK后&#xff0c;等待安装就行了。安装完毕后&#xff1a; 在local.propertie…

Windows在外远程桌面控制macOS【macOS自带VNC远程】

文章目录 前言1.测试局域网内远程控制1.1 macOS打开屏幕共享1.2 测试局域网内VNC远程控制 2. 测试公网远程控制2.1 macOS安装配置cpolar内网穿透2.2 创建tcp隧道&#xff0c;指向5900端口 3. 测试公网远程控制4. 配置公网固定TCP地址4.1 保留固定TCP地址4.2 配置固定TCP端口地址…

使用Process Monitor排查因dll库被锁定导致C++程序启动报“0xc0000022”错误问题

目录 1、问题描述 2、查找到异常值0xc0000022对应的标识STATUS_ACCESS_DENIED 3、使用Process Monitor定位到哪个dll库被隔离了 4、在360安全卫士中将被隔离的文件恢复了&#xff0c;但360并没有释放对文件的锁定 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢…

5.12 C高级 作业

有m1.txt m2.txt m3.txt m4.txt&#xff0c;分别创建出对应的目录&#xff0c;m1 m2 m3 m4 并把文件移动到对应的目录下 #!/bin/bashvar1(ls *.txt)for i in ${var1[*]} doposexpr index $i .var2expr substr $i 1 $((pos-1))mkdir $var2mv $i $var2 done使用break关键字打印九…

【算法】【算法杂谈】将路径数组变为统计数组(单数组的调整与转换)

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介…

rocketMQ的架构原理和读写逻辑

NameServer 无状态节点&#xff0c;集群部署&#xff0c;节点之间无任何信息同步&#xff0c;支持横向拓展&#xff1b; producer & consumer也是无状态的&#xff0c;每一个producer之间 &#xff0c;每一个consumer之间都不会通信&#xff0c; 每个producer和consumer内部…

STL-set容器

set/multiset容器基本概念 所有元素都会根据元素的键值自动被排序。 set/multiset属于关联式容器&#xff0c;底层结构是用二叉树实现。 set容器特点 set的元素不像map那样可以同时拥有实值和键值&#xff0c;set的元素即是键值又是实值。 set不允许两个元素有相同的键值。…

博客系统后端设计(四) - 实现获取博客详情页功能

文章目录 实现获取博客详情页功能约定前后端接口实现后端代码实现前端代码 实现获取博客详情页功能 在 博客列表页 点击 “查看全文” 按钮&#xff0c;就能跳转到博客详情页中。 跳转过去之后&#xff0c;在博客详情页中发起一个 ajax&#xff0c;从服务器获取到当前博客的具体…

【AI大模型】讯飞版大模型来了,现场发布四大行业应用成果

文章目录 前言SparkDesk讯飞星火认知大模型简介语言理解知识问答逻辑推理数学题解答代码理解与编写亲自体验写在最后前言 5月6日,讯飞星火认知大模型成果发布会在安徽合肥举行。科大讯飞董事长刘庆峰、研究院院长刘聪发布讯飞星火认知大模型,现场实测大模型七大核心能力,并…

和众视野加入飞桨技术伙伴计划,共同推动纺织行业智能化转型

近日&#xff0c;北京和众视野科技有限公司正式加入飞桨技术伙伴计划&#xff0c;双方将共同努力开发AI视觉检测技术和机器人流程自动化相结合的系统解决方案。 北京和众视野科技有限公司 北京和众视野是一家实验室检测仪器及解决方案供应商&#xff0c;一直专注于视觉检测和检…

我们在追求什么?以及我们将通往何方?记录AIGC共建者大会的一次演讲

‍‍ ​ 下一秒&#xff1a; 这个世界真如我们所见那样吗&#xff1f; 大家好&#xff0c;我是shadow。在特赞主办的AIGC创建者大会上&#xff0c;我分享了作为多重职业身份所从事的一些有意思的事情&#xff1a; 作为创作者&#xff0c;生成式人工智能展示了TA的才华&#xff…

【Fluent】XYplot中导出随着XYZ单一坐标变化的物理量规律

一、问题背景 之前我写的博客里&#xff0c;讲了如何导出区域内所有节点/单元格中心的XYZ三坐标&#xff0c;及其这个节点/单元格中心上存储的物理量信息。 但是有时候&#xff0c;我们有一个需求——只需要X、Y、Z坐标中的一个。 例如我们需要导出在某一条线上随X坐标变化的…

AICG,人工智能自动生成内容——根据文本生成图像,视频,音频

文章目录 1、什么是AICG&#xff1f;2、Text2Video3、Text2Image4、Text2Audio5、AICG的发展趋势 1、什么是AICG&#xff1f; 什么是AICG&#xff1f; AICG是指人工智能自动生成内容。通过算法模型&#xff0c;将文本转化为图像、音频、视频等多种形式。在数字时代&#xff0…

R语言 | 数据分析——统计绘图

目录 一、分类数据的图形描述 1.1 条形图barplot()函数 1.2 饼图pie()函数 二、量化数据的图形描述 2.1 点图与dotchart()函数 2.2 绘图函数plot() 2.2.1 绘制时间数列对象 ​2.2.2 向量数据与plot()函数 2.2.3 数据框数据与plot()函数 2.2.4 因子型数据与plot()函数 …