【C++PrimerPlus】第五章 循环和关系表达式

news2024/12/26 23:24:07

文章目录

  • 5.1 for循环
    • 5.1.1 for循环的组成部分
    • 5.1.2 回到for循环
    • 5.1.3 修改步长
    • 5.1.4 使用for循环访问字符串
    • 5.1.5 递增运算符 (++)和递减运算符(--)
    • 5.1.6 副作用和顺序点
    • 5.1.7 前缀格式与后缀格式
    • 5.1.8 递增/递减和指针
    • 5.1.9 组合赋值运算符
    • 5.1.10 复合语句![](https://img-blog.csdnimg.cn/d59ec2b44e4744fdac173ed1f04aaf54.png)
    • 5.1.11 逗号运算符
    • 5.1.12 关系表达式
    • 5.1.13 赋值、比较和可能犯的错误
    • 5.1.14 C-风格字符串比较
    • 5.1.15 比较string类字符串
  • 5.2 while循环
    • 5.2.1 for与while
    • 5.2.2 延时循环
  • 5.3 do while循环
    • 5.4 基于范围的for循环
  • 5.5 循环和文本输入
    • 5.5.1 使用原始的cin输入
    • 5.5.2 cin.get(ch)
    • 5.5.3 使用哪一个cin.get()
    • 5.5.4 文件尾条件
    • 5.5.5 另一个cin.get()版本
  • 5.6 嵌套循环和二维数组
    • 5.6.1 初始化二维数组
    • 5.6.2 使用二维数组
  • 5.7 总结

本篇文章将对《C++PrimerPlus》第3章进行勾画
以我个人习惯来勾画
C和C++不同点将用红色高亮表示
关于C++的额外补充知识用蓝色高亮表示
对C++的注意点以及总结部分用绿色高亮表示
本专栏正常情况2周更新一次

5.1 for循环

在这里插入图片描述

5.1.1 for循环的组成部分

在这里插入图片描述

  • for循环有4个部分,初始化、测试、更新操作、循环语句,前三个部分称为控制部分
  • 初始化之后执行一次
  • C++把测试结果的值强制转换为bool类型0->fasle,非0->true
  • 任何值和任何有效值和运算符的组合都是表达式,C++中每个表达式都有值
  • cout.setf(ios::boolalpha)可以命令cout显示true和false而不是0,1
  • 当判定表达式的值时改变了内存中数据的值,我们说表达式有副作用
  • 只要加上分号,所有的表达式都可以称为语句
  • 从语句中删除分号,不一定是表达式,比如int a;
  • C++允许将for循环中的初始化部分替换成定义变量

5.1.2 回到for循环

在这里插入图片描述

5.1.3 修改步长

在这里插入图片描述

5.1.4 使用for循环访问字符串

在这里插入图片描述

string类的size成员函数可以求出字符串的长度

5.1.5 递增运算符 (++)和递减运算符(–)

在这里插入图片描述

  • 递增运算符和递减运算符会使操作数+1或者-1
  • 前缀和后置对操作数影响的效果一样,但是影响时间不同
  • 在同一条语句中对同一个操作数进行多次递增或递减的行为是未定义的

5.1.6 副作用和顺序点

在这里插入图片描述

  • C++程序在进入下一条语句中会对上一条语句的副作用进行评估

5.1.7 前缀格式与后缀格式

在这里插入图片描述

  • 对于内置的前缀和后缀格式没有茶杯
  • 自定义的前后缀前缀的效率更高

5.1.8 递增/递减和指针

在这里插入图片描述

  • *++pt–>前缀++优先级和解引用一样,结合性从右往左,所以先得到pt所指向的数据,然后另pt指向下一个元素是
  • ++*pt–>将pt所指向的数据+1
  • (*pt)++ -->后缀++优先级高于解引用,但是这里有聚组,所以先取出pt所指向的数据,然后将该数据+1
  • *pt++ -->先另pt指向下一个元素,在取得该元素的值

5.1.9 组合赋值运算符

在这里插入图片描述

  • 复合运算符的左操作数必须是可以改变的

5.1.10 复合语句

  • 使用{}可以将{}中的内容看作一条语句
  • 外部定义的变量内部仍然可以使用
  • 外部和内部都定义了同名的变量,在内部只能访问到内部定义的

5.1.11 逗号运算符

在这里插入图片描述

  • 逗号运算符用法(表达式1,表达式2, 表达式3)
  • 使用逗号运算符可以在for循环中同时给多个变量复制,也可以调整多个变量
  • 逗号不一定代表逗号表达式,有可能是分隔符(定义变量时)
  • 逗号运算符是一个顺序点,逗号表达式的值是最后一部分的值
  • 所有操作符中逗号表达式的优先级最低

5.1.12 关系表达式

在这里插入图片描述

  • 关系表达式的结果为bool类型,true表示真,false表示假
  • 不能将关系运算符使用于C-风格字符串,但是可以用于string类对象
  • 关系运算符的优先级比算术运算符的优先级低

5.1.13 赋值、比较和可能犯的错误

在这里插入图片描述

  • 赋值使用=
  • 判断相等使用==

5.1.14 C-风格字符串比较

在这里插入图片描述

  • C风格字符串比较时比较的是字符串每个字符对应的编码值
  • 使用strcmp才能判断两个C风格字符串相等,字符串相等返回0,不相等返回非0
  • C风格字符串是通过字符串结尾的空字符定义的,而不是由其所在的数组长度定义

5.1.15 比较string类字符串

在这里插入图片描述

  • string类对象对关系运算符进行了重载,所以可以使用关系运算符判断string类对象是否相等
  • 可以像访问C风格字符串一样访问string类对象的字符

5.2 while循环

在这里插入图片描述

  • while循环由测试条件和循环体两部分构成,因此如果不需要死循环,那么需要在循环体内执行可以影响测试条件表达式的操作。
  • 想要打印字符对应的ASCII码,必须将字符强转为int类型
  • string类对象不使用空白字符来标记串的末尾,具体什么标志末尾后面会说

5.2.1 for与while

在这里插入图片描述

  • for循环与while循环几乎等价,差别:for循环可以在初始话部分生成一个局部变量,while不可;for中省略了测试条件默认为true,while不可;continue对二者的效果可能会不同

5.2.2 延时循环

在这里插入图片描述

  • 使用ctime文件中的clock()函数可以获取程序总开始到调用的系统时间
  • 使用clock()函数和CLOCK_PER_SEC可以获取从程序开始到调用的秒数
  • clock()函数的返回值类型可能是long、unsinged long,所以定义系统别名clock_t作为clock()函数的返回值类型
  • 可以使用#definetypedef定义系统别名,在定义比较复杂是使用typedef

5.3 do while循环

在这里插入图片描述

  • do while循环是出口循环

5.4 基于范围的for循环

在这里插入图片描述

5.5 循环和文本输入

在这里插入图片描述

  • cin对象支持三种不同模式的单字符输入

5.5.1 使用原始的cin输入

在这里插入图片描述

cin读取char时会忽略空白符

  • 只有按下回车后,输入的内容才会被发送给程序

5.5.2 cin.get(ch)

在这里插入图片描述

  • cin.get(ch)是cin类中的一个成员函数,该成员函数的参数是C++引用类型的
  • cin.get(ch)可以从标准输入流中读取任何字符存放在ch中

5.5.3 使用哪一个cin.get()

在这里插入图片描述

  • cin.get成员函数通过函数重载支持参数为char,char* int,空的参数

5.5.4 文件尾条件

在这里插入图片描述

  • 允许用文件替换键盘输入
  • 很多操作系统允许通过键盘模拟文件末尾条件EOFUnix通过ctrl+DWindows通过ctrl+Z+<enter>模拟文件结尾
  • 检测到EOF后,cin.fail()和cin.eof()函数返回值为true,否则为false,这两个成员函数读取最近的结果因此需要将它们放在读取后面
  • cin.get(ch)函数返回一个cin对象,当cin对象出现在逻辑表达式中时,会调用转换函数,如果读取成功cin对象在逻辑表达式中被转换为true否则为false

5.5.5 另一个cin.get()版本

在这里插入图片描述

  • 两种输入字符方式的比较在这里插入图片描述

5.6 嵌套循环和二维数组

在这里插入图片描述

  • C++通过一维数组定义二维数组,二维数组是元素为一维数组的一维数组

5.6.1 初始化二维数组

在这里插入图片描述

  • 二维数组的初始化和一维数组一样需要用{},并且二位数组的每个元素初始化需要和一维数组一样使用{}

5.6.2 使用二维数组

在这里插入图片描述


5.7 总结

在这里插入图片描述

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

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

相关文章

Qt Quick - ToolTip

Qt Quick - ToolTip使用总结一、概述二、附带的ToolTip三、延迟和超时四、自定义ToolTip五、定制化一、概述 ToolTip 其实就是ToolTip&#xff0c;所谓ToolTip其实就是一段简短的文本&#xff0c;告知用户控件的功能。它通常置于父控件之上或之下。提示文本可以是任何富文本格…

常用异常检测模型的应用

常用异常检测模型的应用 描述 异常数据检测不仅仅可以帮助我们提高数据质量&#xff0c;同时在一些实际业务中&#xff0c;异常数据往往包含有价值的信息&#xff0c;如异常交易、网络攻击、工业品缺陷等&#xff0c;因此异常检测也是数据挖掘的重要手段。常用的异常检测模型…

【通过Cpython3.9源码看看python字符串拼接:“+”为什么比join低效】

基本说明 Python字符串拼接中&#xff0c;使用join()方法比运算符更高效&#xff0c;主要原因在于字符串对象的不可变性和内存分配策略。 首先&#xff0c;我们要知道Python字符串是不可变的对象。这意味着&#xff0c;每次使用运算符进行字符串拼接时&#xff0c;Python需要…

Vue2-黑马(四)

目录&#xff1a; &#xff08;1&#xff09;axios-响应格式 &#xff08;2&#xff09;axios-拦截器 &#xff08;3&#xff09;vue2-条件渲染 &#xff08;4&#xff09;vue2-列表渲染 &#xff08;1&#xff09;axios-响应格式 下面看axios的返回响应对象的内部组成 后…

【grpc02】安装protobuf和protoc

目录 Windows环境 下载通用编译器 配置环境变量 安装go专用的protoc的生成器 GoLang中安装插件 如何使用protobuf呢&#xff1f; Mac环境 Protoc安装 Protoc-gen-go的安装 Windows环境 下载通用编译器 下载地址&#xff1a;v3.20.1 Releases protocolbuffers/pr…

【优化算法】使用遗传算法优化MLP神经网络参数(TensorFlow2)

文章目录任务查看当前的准确率情况使用遗传算法进行优化完整代码任务 使用启发式优化算法遗传算法对多层感知机中中间层神经个数进行优化&#xff0c;以提高模型的准确率。 待优化的模型&#xff1a; 基于TensorFlow2实现的Mnist手写数字识别多层感知机MLP # MLP手写数字识别…

Java支付SDK接口远程调试 - 支付宝沙箱环境【公网地址调试】

文章目录1.测试环境2.本地配置3. 内网穿透3.1 下载安装cpolar内网穿透3.2 创建隧道4. 测试公网访问5. 配置固定二级子域名5.1 保留一个二级子域名5.2 配置二级子域名6. 使用固定二级子域名进行访问转发自CSDN远程穿透的文章&#xff1a;Java支付宝沙箱环境支付&#xff0c;SDK接…

Linux命令·traceroute

通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点&#xff08;source&#xff09;到达某一同样的目的地(destination)走的路径可能会不一样&#xff0c;但基本上来说大部分时候所走的路由是相同的。linux系统…

移动端项目开发总结(一)

移动端项目开发总结&#xff08;一&#xff09; 前阵子做租赁项目&#xff0c;风风火火的上线&#xff0c;趁现在还没忘&#xff0c;把用到的东西整理以下&#xff0c;算是对于这个项目的回顾吧。 特效一 &#xff1a; 移动端适配 需求 移动端适配&#xff0c;采用rem单位。…

深入理解Java虚拟机——Java内存区域

1.前言 Java内存区域也叫运行时数据区域&#xff0c;要记得把Java内存模型&#xff08;JMM区分开来&#xff09;。 根据线程是否共享可以把运行时数据区如上图所分。 线程共享 堆内存方法区 线程私有 栈内存 本地方法栈虚拟机栈 程序计数器 接下来&#xff0c;将逐个介绍…

什么是文件传输协议,文件传输协议又是怎么工作的

文件传输协议FTP是一种仍在使用的协议&#xff0c;在上载和下载文件时仍然比较流行&#xff0c;通常是那些太大的文件&#xff0c;需要花费很长时间才能通过常规电子邮件程序作为附件下载进行传输。 从技术上讲&#xff0c;它是“文件传输实用程序”&#xff0c;是许多TCP / I…

腾讯云4核8G12M轻量服务器配置性能评测

腾讯云轻量4核8G12M服务器&#xff0c;之前是4核8G10M配置&#xff0c;现在公网带宽和月流量包整体升级&#xff0c;12M公网带宽下载速度可达1536KB/秒&#xff0c;系统盘为180GB SSD盘&#xff0c;每月2000GB免费流量&#xff0c;腾讯云百科来详细说下4核8G12M轻量应用服务器配…

碳化硅材料在功率半导体中的优劣

开关电源工作频率的提高受到开关损耗的制约 开关电源的工作频率是指开关变换器操作的频率。在开关电源中&#xff0c;一个开关变换器被用来将直流&#xff08;DC&#xff09;能源转换为可用于电子设备的交流&#xff08;AC&#xff09;能源。开关变换器的基本原理是通过对开关…

3.4 函数的单调性和曲线的凹凸性

学习目标&#xff1a; 如果我要学习函数的单调性和曲线的凹凸性&#xff0c;我会采取以下几个步骤&#xff1a; 理解概念和定义&#xff1a;首先&#xff0c;我会学习单调性和凹凸性的定义和概念。单调性是指函数的增减性质&#xff0c;可以分为单调递增和单调递减&#xff1b…

Python使用PyQt5实现指定窗口置顶

文章目录前言一、网上找到的代码二、尝试与借鉴后的代码——加入PyQt界面1.引入库2.主代码3.完整主代码4.UI界面代码总结前言 工作中&#xff0c;同事随口提了一句&#xff1a;要是能让WPS窗口置顶就好了&#xff0c;老是将窗口切换来切换去的太麻烦了。 然后&#xff0c;这个…

docker-compose 安装nginx php mysql phpadmin

一 摘要 本文主要介绍基于docker docker-compose 安装 lnmp 三件套&#xff0c;以及用phpmysadmin 验证下部署可正确。 二 环境信息 2.1 操作系统 [root2023001 ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) [root2023001 ~]#2.2 docker [root20230…

【opencv】图像数字化——认识OpenCV中的Mat类( 7 访问多通道Mat对象中的值)

7 访问多通道Mat对象中的值 7.1使用成员函数at() #include <opencv2/core/core.hpp> #include<iostream> using namespace std; using namespace cv; int main() {Mat mm (Mat_<Vec3f>(2, 2) << Vec3f(1, 11, 21), Vec3f(2, 12, 32), Vec3f(3, …

C++【深入理解多态】

文章目录一、多态概念与实现&#xff08;1&#xff09;多态的概念&#xff08;2&#xff09;怎么构成多态&#xff08;3&#xff09;虚函数重写的2个例外&#xff08;4&#xff09;经典剖析巩固知识点&#xff08;5&#xff09; override 和 final&#xff08;6&#xff09;小总…

YOLO算法改进指南【初阶改进篇】:2.改进DIoU-NMS,SIoU-NMS,EIoU-NMS,CIoU-NMS,GIoU-NMS

非极大值抑制(Non-maximum Suppression (NMS))的作用简单说就是模型检测出了很多框,我应该留哪些。 本篇将演示如何修改:NMS、Merge-NMS、Soft-NMS、CIoU-NMS、DIoU-NMS、GIoU-NMS、EIoU-NMS、SIoU-NMS 1. NMS过程 NMS过程 For a prediction bounding box B, the model c…

基于JDK11从源码角度剖析可重入锁ReentrantLock的获取锁和解锁

ReentrantLock是可重入的独占锁&#xff0c;同时只能有一个线程可以获取该锁&#xff0c;其他获取该锁的线程会被阻塞而被放入该锁的AQS阻塞队列里面。 ReentrantLock是JUC包提供的显式锁的一个基础实现类&#xff0c;实现了Lock接口。我们先来看下ReentrantLock的类图&#x…