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

本篇文章将对《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 总结

在这里插入图片描述

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值