这一部分内容节选自《C++ Primer Plus》的第五章

程序需要有执行重复的操作和进行决策的工具。

===========================================

5.1 for循环

初始化、循环测试、循环体、循环更新

5.1.1 for循环的组成部分

for循环为执行重复的操作提供了循序渐进的步骤:

设置初始值

执行测试,看看循环是否应当继续进行

执行循环操作

更新用于测试的值

格式

for(initialization; test-expression; update-expression)

body

值为0的表达式被转换为bool值为false;值为非0的表达式被转换为bool值为true;

for循环是入口条件循环。这意味着在每轮循环之前,都将计算测试表达式的值。

更新表达式:在每轮循环结束时执行,用来对跟踪循环轮次的变量的值进行增减。

每个表达式都有值;

赋值表达式的值定义为左侧成员的值;

表达式:age =100

语句:  age =100;

C++允许for循环的初始化部分声明变量。这种行为在最初被认为不合法,因为声明不是表达式。后来定义了一种新的表达式——声明语句表达式来合法化。

5.1.2 回到for循环

5.1.3 修改步长

修改更新表达式来修改步长;

5.1.4 使用for循环访问字符串

for循环提供了一种依次访问字符串中每个字符的方式。

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

前缀版本位于操作数的前面;

后缀版本位于操作数的后面;

这两个版本对操作数的影响是一样的,但是影响的时间不一样;

5.1.6 副作用和顺序点

副作用:(side effect)指的是在计算表达式时对某些东西做了修改;

顺序点:程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用都进行了评估。

C++中语句中的一个分号就是作用点;

完整表达式:不是另一个更大表达式的子表达式;

C++11中不再使用顺序点这个概念了。

5.1.7 前缀格式和后缀格式

5.1.8 递增/递减运算符和指针

将递增/递减运算符用于指针时,将把指针的值增加其指向的数据类型占用的字节数。

*和递增/递减运算符结合使用:

*++ptr 先递增后再解除引用;

*ptr++ 先解除饮用后再递增;

5.1.9 组合赋值运算符

+=  -=   *=   /=   %=

5.1.10 复合语句(语句块)

5.1.11 其他语法技巧-逗号运算符

逗号表达式是一个顺序点;

5.1.12 关系表达式

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

== 和 = 不一样

5.1.14 C-风格字符串的比较

word == “mate”;

word是一个数组名,是首元素的地址,“mate”是一个地址;

所以上述表达式的意思是判断两个地址是否相等。而不是比较字符串是否相等;

字符串是由结尾空字符决定的,而不是由数组长度决定的。

5.1.15 比较string类字符串

会比C-风格字符串简单,因为这些类设计能够让您使用关系运算符来比较。

之所以可以,是因为类函数重载了(重新定义)了运算符。

===========================================

5.2 while循环

while循环是没有初始化和更新部分的for循环;

while ( test-condition )

body

程序计算圆括号内的测试条件表达式。如果该表达式为true,则执行循环体中的语句。

循环体也是由一条语句或两个花括号定义的语句块组成的。

执行完循环体后,程序返回测试条件,对它进行重新评估。

如果条件非零,则执行循环体。如果条件为零,则不执行循环体。

如果希望循环能够结束,就需要在循环体中添加影响测试条件表达式的操作。

while循环也是一种入口条件循环。

循环可以将测试条件中使用的变量加1或从键盘输入读取一个新值。

易错:

分号结束语句

while (name[i] != ‘\0’);  //该分号将结束while循环。循环体为空语句。

用缩进而不是花括号表示循环体,会导致循环体表示错误。

编写延时循环

===========================================

5.3 do while循环

这是出口条件循环;

这种循环将首先执行循环体,然后再判定测试表达式,决定是否继续执行循环。

===========================================

5.4 基于范围的for循环

简化了常见的循环任务,对数组或容器类的每个元素执行相同的操作。

===========================================

5.5 循环和文本输入

循环完成的最常见任务:逐字符地读取来自文件或键盘的文本。

哨兵字符,程序要用循环来读取来自键盘的文本输入,则必须有办法知道何时停止读取。

cin.get(ch),传递参数额工作方式与C语言不同。是能够修改ch变量的值的。

cin.get(name,ArSize)

cin.get()

cin.get(ch)

函数重载的OOP特性。

检查文件尾技术:EOF,键盘输入模拟文件尾,

EOF结束输入:cin方法检测到EOF时,将设置cin对象中一个指示EOF条件的标记。

cin.get()和cout.put()返回的是一个对象,而不是读取或显示的字符。

和getchar()、putchar()类似;字符的I/O函数;

cin.get()如何处理EOF,当该函数达到EOF时,将没有可返回的字符,它将返回一个用符号常量EOF表示的特殊值。在程序中使用EOF即可,其实值为-1,不对应任何ASCII码字符。

!= 优先级高于 = ;

5.5.1 使用原始的cin进行输入

5.5.2 使用cin.get(char)进行补救

5.5.3 使用哪一个cin.get()

5.5.4 文件尾条件

5.5.5 另一个cin.get()版本

===========================================

5.6 嵌套循环和二维数组

===========================================

5.7 总结

3种循环

关系表达式

嵌套循环、二维数组

cin.get()函数重载

C++_基础3-循环和关系表达式的更多相关文章

  1. 《C++ Primer Plus》读书笔记之三—循环与关系表达式

    第五章 循环与关系表达式 1.表达式是值或者值与操作符的结合,每个C++表达式都有值.表达式到语句的转换只要加一个分号就可以完成.但是,反过来,从语句中删除分号,并不一定能将它转化成表达式. 2.前缀 ...

  2. C++ primer plus读书笔记——第5章 循环和关系表达式

    第5章 循环和关系表达式 1. cout.setf(ios_base::boolalpha); cout << (100 > 3) << endl;将输出true,而不是 ...

  3. 《C++ Primer Plus》第5章 循环和关系表达式 学习笔记

    C++提供了3种循环: for 循环. while 循环 和 do while 循环 .如果循环测试条件为 true 或非零,则循环将重复执行一组指令: 如果测试条件为 false 或 0 , 则结束 ...

  4. 学习C++.Primer.Plus 5 循环和关系表达式

    C++将赋值表达式的值定义为左侧成员的值 赋值操作符是自右向左结合的 cout.setf(ios:: boolalpha);//调用设置标记,命令cout输出true或false,而非1或0. 任何表 ...

  5. c++primerplus(第六版)编程题——第5章(循环和关系表达式)

    声明:作者为了调试方便,每一章的程序写在一个工程文件中,每一道编程练习题新建一个独立文件,在主函数中调用,我建议同我一样的初学者可以采用这种方式,调试起来会比较方便. (具体方式参见第3章模板) 1. ...

  6. [C++ Primer Plus] 第5章、循环和关系表达式(二)课后习题

    1.编写一个要求用户输入两个整数的程序,将程序将计算并输出这两个整数之间(包括这两个整数)所有的整数的和.这里假设先输入较小的整数,例如如果用户输入的是2和9,则程序将指出2-9之间所有整数的和为44 ...

  7. [C++ Primer Plus] 第5章、循环和关系表达式(一)程序清单——指针自加减优先级

    程序5.4 #include<iostream> using namespace std; ; void main() { long long factorials[Size]; fact ...

  8. C++ Primer Plus读书笔记(五)循环和关系表达式

    1.前缀运算符的优先级是从右到左,例如: 1 *++p; //这句话的含义是先对p进行++,再取* 2.循环 c++11新增了一种循环方式,有点和python类似,如下: 1 array<int ...

  9. 重拾c++第三天(5):循环和关系表达式

    1.改变步长 ;i<;i=i+) 2.*与++优先级相同,从右向左 3.strcmp函数比较两个字符串,=0两个相同,><0 ----> str1><str2 4. ...

随机推荐

  1. libevent源码深度剖析十一

    libevent源码深度剖析十一 ——时间管理 张亮 为了支持定时器,Libevent必须和系统时间打交道,这一部分的内容也比较简单,主要涉及到时间的加减辅助函数.时间缓存.时间校正和定时器堆的时间值 ...

  2. 阿帕奇配置本地虚拟站点,XAMPP环境下

    首先利用XAMPP搭建的阿帕奇环境,必须得启动,不能启动的话www.baidu.com 在XAMPP的目录下的apache,打开httpd-vhosts.conf文件 E:\XAMPP\apache\ ...

  3. mysql数据库中插入表情4个字节的

    这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 我的解决方案是这样的 1.在mysql ...

  4. glib hash库GHashTable的使用实例

    前言 hash表是一种key-value访问的数据结构,hash表存储的数据能够很快捷和方便的去查询.在很多工程项目都需要使用到hash表来存储数据.对于hash表的详细说明这里就不进行阐述了,不了解 ...

  5. what is diff. b/w app state & session state

    Application state is a data repository available to all classes in an ASP.NET application. Applicati ...

  6. 关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName .

    parentid是1就是id为1的公司的子公司 如图 查询出所有的信息后 由于我要呈现的是parentName 不是parentId所以想问下SQL语句怎么写 谢谢啦~~:) 解法: SELECT s ...

  7. Oracle的列操作(增加列,修改列,删除列),包括操作多列

    增加一列: alter table emp4 add test varchar2(10); 修改一列: alter table emp4 modify test varchar2(20); 删除一列: ...

  8. delphi 取json中数组的值(ISuperArray)

    { "action": "******", "data": [ { "Info1": { "ID": ...

  9. Func和Action的介绍及其用法

    Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能. ...

  10. 一个简单的tcp代理实现

    There are a number of reasons to have a TCP proxy in your tool belt, bothfor forwarding traffic to b ...