位置: IT常识 - 正文

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

编辑:rootadmin
看《C++ Primer Plus》时整理的学习笔记,部分内容完全摘抄自《C++ Primer Plus》(第6版)中文版,Stephen Prata 著,张海龙 袁国忠译,人民邮电出版社。只做学习记录用途。 ... 说明

推荐整理分享第6章 分支语句和逻辑运算符,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

看《C++ Primer Plus》时整理的学习笔记,部分内容完全摘抄自《C++ Primer Plus》(第6版)中文版,Stephen Prata 著,张海龙 袁国忠译,人民邮电出版社。只做学习记录用途。

目录说明6.1 if 语句

6.1.1 if 语句6.1.2 if else 语句6.1.3 多层 if else 结构6.2 逻辑运算符

6.2.1 逻辑 OR 运算符:||6.2.2 逻辑 AND 运算符:&&6.2.3 逻辑 NOT 运算符:!6.2.4 逻辑运算符的优先级以及另一种表示方式6.3 字符函数库 cctype6.4 条件运算符6.5 switch 语句6.6 break 和 continue 语句6.7 读取数字的循环6.8 简单文件输入/输出

6.8.1 写入到文本文件6.8.2 读取文本文件

本章介绍分支语句、条件运算符和逻辑运算符。

6.1 if 语句6.1.1 if 语句

if语句的语法和while相似:

if (test-expression){ statements;}

和循环测试条件一样,if测试条件也将被强制转换为bool值,如果test-expression(测试条件)为true,则程序将执行statements(语句),如果测试条件为false,则程序将跳过语句。

通常将测试条件variable == value写为反转形式value == variable,用以捕获将相等运算符 == 误写为赋值运算符 = 的错误,例如将 x == 3写为 3 == x。

6.1.2 if else 语句

if语句让程序决定是否执行特定的语句或语句块,而if else语句则让程序决定执行两条语句或语句块中的哪一条,if else语句的通用格式如下:

if (test-expression){ statements1;}else{ statements2;}

如果测试条件为true或非零,则程序将执行statements1,跳过statements2;如果测试条件为false或零,则程序将跳过statements1,执行statements2。

6.1.3 多层 if else 结构

将一个if else包含于另一个if else的else语句中,可得到多层条件分支语句,通常将其写为如下易于阅读的形式:

if (test-expression1){ statements1;}else if (test-expression2){ statements2;}else{ statements3;}

如果测试条件test-expression1为true或非零,则程序将执行statements1,跳过statements2与statements3;如果测试条件test-expression1为false或零且测试条件test-expression2为true或非零,则程序将执行statements2,跳过statements1与statements3;如果测试条件test-expression1与test-expression2都为false或零,则程序将跳过statements1与statements2,执行statements3。

6.2 逻辑运算符

C++ 提供了三种逻辑运算符,分别是逻辑 OR(||)、逻辑 AND(&&)和逻辑 NOT(!)。

6.2.1 逻辑 OR 运算符:||

C++ 可以采用逻辑 OR 运算符(||)将两个表达式组合在一起,如果原来表达式中的任何一个或全部都为true(或非零),则得到的表达式的值为true,否则,表达式的值为false。C++ 规定,||运算符是个顺序点,其左边的子表达式优先于右边的子表达式,如果左侧的表达式为true,则 C++ 不会去判定右侧的表达式。expr1 || expr2的值如下表所示:

expr1 == trueexpr1 == falseexpr2 == truetruetrueexpr2 == falsetruefalse6.2.2 逻辑 AND 运算符:&&

C++ 采用逻辑 AND 运算符(&&)将两个表达式组合在一起,当且仅当原来的两个表达式都为true(或非零)时,则得到的表达式的值为true,否则,表达式的值为false。&&运算符是个也是个顺序点,其左边的子表达式优先于右边的子表达式,如果左侧的表达式为false,则 C++ 不会去判定右侧的表达式。expr1 && expr2的值如下表所示:

expr1 == trueexpr1 == falseexpr2 == truetruefalseexpr2 == falsefalsefalse

逻辑 AND 运算符(&&)通常用于设置取值范围,例如:age >= 35 && age < 50。

6.2.3 逻辑 NOT 运算符:!第6章 分支语句和逻辑运算符

逻辑 NOT 运算符(!)将它后面的表达式的真值取反。!expr的值如下表所示:

expr == trueexpr == falsefalsetrue6.2.4 逻辑运算符的优先级以及另一种表示方式

C++ 逻辑 OR 和逻辑 AND 运算符的优先级都低于关系运算符,但逻辑 NOT 运算符的优先级高于所有关系运算符和算术运算符,逻辑 AND 运算符的优先级高于逻辑 OR 运算符。

//逻辑OR优先级低于关系运算符,以下两种方式等价x > 5 || x < -5(x > 5) || (x < -5)//逻辑AND优先级低于关系运算符,以下两种方式等价x > 5 && x < 10(x > 5) && (x < 10)//逻辑NOT优先级高于所有关系运算符和算术运算符,以下两种方式等价!x > 5//值总为false(!x) > 5//逻辑AND优先级高于逻辑OR,以下两种方式等价age > 30 && age < 45 || weight > 300(age > 30 && age < 45) || (weight > 300)

并不是所有的键盘都提供了用作逻辑运算符的符号,因此 C++ 标准提供了另一种表示方式(C++ 保留字),如下表所示。当 C 语言程序包含头文件 iso646.h后,也可以使用对应逻辑运算符的另一种表示方式。

运算符另一种表示方式&&and!not||or6.3 字符函数库 cctype

C++ 从 C 语言继承了一个与字符相关的、非常方便的函数库cctype,它可以简化诸如确定字符是否为大写字母、数字、标点符号等工作。例如,测试字符ch是否是字母字符有以下两种方式,但显然第二种方式更简洁:

//方式一:使用关系运算符以及逻辑运算符if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))//方式二:使用cctype库中的isalpha()函数if (isalpha(ch))

下表列出了cctype库中常用的函数:

函数名称功能简述isalnum()若参数是字母或数字,返回trueisalpha()若参数是字母,返回trueisdigit()若参数是数字(0~9),返回trueiscntrl()若参数是控制字符(在显示器上不占据打印位置),返回trueisprint()若参数是打印字符(在显示器上占据打印位置),返回trueisgraph()若参数是除空格之外的打印字符,返回trueislower()若参数是小写字母,返回trueisupper()若参数是大写字母,返回trueisxdigit()若参数是十六进制数字(0~9, a~f, A~F),返回trueispunct()若参数是标点符号,返回trueisspace()若参数是标准空白字符(空格' ',进纸'\f',换行符'\n',回车'\r',水平制表符'\t',垂直制表符'\v'),返回truetolower()若参数是大写字母,则返回其小写,否则返回该参数toupper()若参数是小写字母,则返回其大写,否则返回该参数

表中的isxxxxx()函数的返回类型为int,而不是bool,但通常自动bool转换能将它们视为bool类型。

6.4 条件运算符

条件运算符(?:)常被用来代替if else语句,它是 C++ 中唯一一个需要三个操作数的运算符,该运算符的通用格式如下:

//条件运算符写成的条件表达式expression1 ? expression2 : expression3

如果expression1为true,则整个条件表达式的值为expression2的值,否则,整个条件表达式的值为expression3的值。

//条件表达式应用实例:令c等于a,b中的最大值int c = a > b ? a : b;

条件表达式可以嵌套使用,例如expression2或expression3为另一个条件表达式。

6.5 switch 语句

相比于if else语句,C++ 的switch语句更适合多选择分支的结构。

//switch 语句的通用格式switch (integer-expression){ case label : statement(s) case labe2 : statement(s) case labe3 : statement(s) ... default : statement(s)}

执行到switch语句时,程序将跳到使用integer-expression值标记的那一行。因此,integer-expression必须是一个结果为整数值的表达式,另外,每个标签都必须是整数常量表达式。最常见的标签是int或char常量,也可以是枚举量。如果integer-expression不与任何标签匹配,则程序将跳到标签为default的那一行。default标签是可选的,如果其被省略,而又没有匹配的标签,则程序将跳出switch语句,执行switch语句后面的部分。

注意:程序跳到switch中特定代码行后,将依次执行之后的所有语句,包括其后所有标签对应的语句,除非有明确的其他指示(比如使用break跳出switch)。

6.6 break 和 continue 语句

break和continue语句都使程序能够跳过部分代码。可以在switch语句或任何循环中使用break语句,使用break语句后,程序将跳出switch语句或循环,如果break语句在多层循环的内部,则break将跳出包含它且离他最近的那一层循环。continue语句用于循环中,可以让程序跳过当前循环体中余下的代码,并开始新一轮循环。

//运行到break时,跳出while,执行statement3while (cin.get(ch)){ statement1; if (ch == '\n') break; statement2;}statement3;//运行到continue时,跳过剩余的statement2,进入while测试条件,开始新一轮循环while (cin.get(ch)){ statement1; if (ch == '\n') continue; statement2;}statement3;

和 C 语言一样,C++ 也有 goto语句,但应尽量不使用使用goto语句。下面的语句将跳到使用paris:作为标签的位置:

//运行到goto时直接跳到指定标签处char ch;cin >> ch;if (ch == 'P') goto paris;statements;paris: cout << "goto here!";

goto只能在函数体内跳转,不能跳到函数体外,goto多用于深度嵌套循环中一次性跳出多层内部循环,这是break无法做到的。

6.7 读取数字的循环

可以使用cin输入表达式的值来检测输入是不是数字,当程序发现用户输入了错误内容时,应按顺序采取 3 个步骤:

重置cin以接受新的输入。删除错误输入。提示用户再输入。//通过输入初始化数组const int MAX = 10;int arr[MAX];for (int i = 0; i < MAX; i++){ cout << "输入第" << i+1 << "个数字:"; while (!(cin >> arr[i])) { //重置cin cin.clear(); //删除错误输入 while (cin.get() != '\n') continue; //提示用户再输入 cout << "请输入一个数字"; }}6.8 简单文件输入/输出

文件读写需包含头文件fstream。

6.8.1 写入到文本文件//创建对象并关联文件ofstream outFile;outFile.open(filename);//判断是否打开成功if (!outFile.is_open()){ exit(EXIT_FAILURE);}//写入,类似cout用法outFile << "Hello World";//用完关闭outFile.close();

其中的filename可以是一个字面字符串,还可以是存储在数组中的字符串(C-风格字符串)。

6.8.2 读取文本文件//创建对象并关联文件ifstream inFile;inFile.open(filename);//判断是否打开成功if (!inFile.is_open()){ exit(EXIT_FAILURE);}//工具变量double value;double sum = 0.0;//读取文件:方式一while (inFile >> value){ sum += value;}//读取文件:方式二inFile >> value;while (inFile.good()){ sum += value; inFile >> value;}//输出结果cout << "sum = " << sum;//确定停止读取的原因if (inFile.eof()) cout << "到达文件尾";else if (inFile.fail()) cout << "数据类型不匹配";else cout << "未知原因";//用完关闭inFile.close();
本文链接地址:https://www.jiuchutong.com/zhishi/310195.html 转载请保留说明!

上一篇:pnpm的基本原理及快速使用(pnpnpn的工作原理)

下一篇:php中__sleep方法的使用(php sleep())

  • 国家企业信用信息公示系统公司个体户怎么注册?

    国家企业信用信息公示系统公司个体户怎么注册?

  • iqoo手机怎么开启地震功能(iqoo手机怎么开启开发者模式)

    iqoo手机怎么开启地震功能(iqoo手机怎么开启开发者模式)

  • 苹果手表怎么开启声音和振动(苹果手表怎么开通虚拟卡)

    苹果手表怎么开启声音和振动(苹果手表怎么开通虚拟卡)

  • oppofindx2pro支持多少w的快充(oppofindx2pro支持无线充电吗)

    oppofindx2pro支持多少w的快充(oppofindx2pro支持无线充电吗)

  • 华为matebook14是win7吗

    华为matebook14是win7吗

  • b站如何下载音频(b站怎么直接下载音频)

    b站如何下载音频(b站怎么直接下载音频)

  • 抖音别人送的礼物在哪里看(抖音别人送的礼物为什么没有到账)

    抖音别人送的礼物在哪里看(抖音别人送的礼物为什么没有到账)

  • 为什么库乐队不能导入(为什么库乐队不能传QQ)

    为什么库乐队不能导入(为什么库乐队不能传QQ)

  • 苹果锁屏键不能锁屏(苹果锁屏键不能锁屏但是可以关机什么原因)

    苹果锁屏键不能锁屏(苹果锁屏键不能锁屏但是可以关机什么原因)

  • 万能钥匙没有蓝色钥匙怎么连接(万能钥匙没有蓝钥匙的怎么破解)

    万能钥匙没有蓝色钥匙怎么连接(万能钥匙没有蓝钥匙的怎么破解)

  • 开了勿扰模式电话还能打进来(开了勿扰模式电话能看见记录嘛)

    开了勿扰模式电话还能打进来(开了勿扰模式电话能看见记录嘛)

  • 控制和管理计算机硬件和软件资源的是什么(控制和管理计算机硬件和软件资源,合理地组织)

    控制和管理计算机硬件和软件资源的是什么(控制和管理计算机硬件和软件资源,合理地组织)

  • 打印机显示更换硒鼓是什么意思     (打印机显示更换墨盒怎么才能继续使用)

    打印机显示更换硒鼓是什么意思 (打印机显示更换墨盒怎么才能继续使用)

  • 5v4a是快充吗(5v4.1a是快充吗)

    5v4a是快充吗(5v4.1a是快充吗)

  • 超虚拟分辨率有什么用(超虚拟分辨率有什么坏处)

    超虚拟分辨率有什么用(超虚拟分辨率有什么坏处)

  • mate30有防水功能吗(华为mate30有没有防水)

    mate30有防水功能吗(华为mate30有没有防水)

  • 怎样通过qq号找微信号(怎样通过qq号找抖音号)

    怎样通过qq号找微信号(怎样通过qq号找抖音号)

  • qq腾讯王卡有什么用(腾讯王卡有用么)

    qq腾讯王卡有什么用(腾讯王卡有用么)

  • 天猫预售提醒怎么取消(天猫预售提醒消息在哪里看)

    天猫预售提醒怎么取消(天猫预售提醒消息在哪里看)

  • 小米9有无线反向充电吗(小米9有无线反充吗)

    小米9有无线反向充电吗(小米9有无线反充吗)

  • ios13原彩显示怎么没了(iphone13原彩显示没反应)

    ios13原彩显示怎么没了(iphone13原彩显示没反应)

  • wps版怎么删除空白页(wps怎么删除空白页)

    wps版怎么删除空白页(wps怎么删除空白页)

  • vue能拍照片吗(vue的拍照功能在哪里)

    vue能拍照片吗(vue的拍照功能在哪里)

  • 微信原图和一般图区别(微信原图跟不是原图有什么区别)

    微信原图和一般图区别(微信原图跟不是原图有什么区别)

  • 三星bixby怎么设置说话(三星bixby页面的设置不见了)

    三星bixby怎么设置说话(三星bixby页面的设置不见了)

  • 手机无法接通是什么原因(手机无法接通的情况)

    手机无法接通是什么原因(手机无法接通的情况)

  • 关于Pytorch中的train()和eval()(以及no_grad())(pytorch train())

    关于Pytorch中的train()和eval()(以及no_grad())(pytorch train())

  • 【GPT4】微软 GPT-4 测试报告(1)总体介绍(微软 gcr)

    【GPT4】微软 GPT-4 测试报告(1)总体介绍(微软 gcr)

  • 最新目标检测算法回顾2022笔记(目标检测 2021)

    最新目标检测算法回顾2022笔记(目标检测 2021)

  • 党建经费的标准
  • 金蝶标准版如何结转到下月
  • 做了销售之后的结果
  • 出口退税转内销会计分录
  • 专门借款资本化时点
  • 个人购买商业保险怎么抵扣个税
  • 开票确定收入分录
  • 非盈利组织的好处
  • 需要月报的税收项目
  • 个人安装设备属于劳务吗
  • 物业管理专票税点
  • 7月财务报表行次三大变化
  • 无租房合同可以取住房公积金吗
  • 预收贷款是什么会计科目
  • 境外投资亏损是否可以抵减境内盈利
  • 小企业的费用应当在发生时计入当期损益
  • 购入土地建厂房要交的税
  • 关于积分的三种账务处理方法
  • window休眠
  • win7为什么这么多人用
  • 发生销售折让怎么办
  • 营改增之前的业务怎么缴税
  • 高新技术产业研究院有限公司
  • win10回滚系统
  • 京东最贵的商品排行
  • 低值易耗品的三级科目有哪些
  • 【torch.nn.Parameter 】参数相关的介绍和使用
  • 建行E信通贴现需要什么资料
  • cpu占满gpu不工作
  • win11设置项改中文
  • python编程快速上手pdf百度云
  • 与下级往来账户贷方核算的内容有
  • 工伤补贴如何做帐
  • 织梦如何使用
  • 特殊银行账户上限
  • Python函数怎么返回
  • mysql唯一键和唯一索引
  • 企业车辆年检费多少钱
  • 从在建工程调整到费用
  • 母公司对子公司的控股比例
  • 企业付给个人工资怎么算
  • 合同不交印花税怎么处理
  • 新准则制度体系的核心变化
  • 工程施工的间接费用如何归集分配
  • 留抵进项税太多怎么办
  • 代扣代缴的社保为什么是其他应付款
  • 路桥费税率是几个点
  • 记账凭证后面附什么原始凭证
  • 营业外收入记入企业的什么
  • 房产契税什么时候退税
  • 取得普通发票怎么做账
  • 支付水电费会计等式
  • 现金流量表格式有几种
  • 企业的融资租赁
  • 资产减值的含义与应用范围
  • 什么叫系统服务
  • 故意销毁会计凭证、会计账簿罪
  • 部门财务独立核算原则有哪些
  • sql存储过程实例详解
  • win7注册表有什么用
  • win7自带防护软件
  • xp系统设置锁屏
  • windows2003企业版sp2密钥
  • 哪款系统重装软件比较好
  • winxp和win7双系统安装
  • 电脑程序在运行桌面不显示的解决方法
  • 系统设置用户密码在哪里
  • win7服务在哪里打开
  • win7电脑flash安装教程
  • android app 源码
  • 手机屏幕尺寸测量工具
  • python接入微信
  • 菜鸟学安卓逆向
  • nodejs+ts
  • 噩梦 gd
  • jQuery之简单的表单验证实例
  • 税务局人员调动
  • 国税怎么取消
  • 限售股转让如何交税
  • 浙江国地税联合电子税务局哪里看收到的发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设