C++primer plus第五章--循环和关系表达式

版权声明:@语言怪 https://blog.csdn.net/qq_38898947/article/details/87027342

前面漆黑一片,什么也看不到。 
也不是,天亮后会很美的。

其实我是一个演员。

--------------------不是新喜剧之王的新喜剧之王


一.入口条件循环。

1.for循环

for语句看上去有些像函数调用,因为它后面跟一个括号,然而它是一个C++关键字,也防止将for命名为函数。

for(initialization【1.执行一次】;test-express【2.通常为关系表达式,决定是否执行body,由于是表达式就行注意错误!!将表达式的值转化为true或false且省略时为true】;update-expression【4.最后执行】)

body【3.一个语句(可以是复合语句即代码块)】

每部分都是一个表达式(任何值或任何有效的值和运算符的组合),表达式加分号即为语句,反过来不行,返回语句,声明语句,for语句都不满足“语句=表达式+分号”的模式,如xi=int xixi + 3;是非法的。(可能由于必须声明并初始化后再使用更加安全,不能直接用),另外C++将赋值表达式的值定义为左侧值。

 C++新增特性:定义一种新的表达式【声明语句表达式】(生命周期为整个循环),可以在循环中声明初始化变量,为了方便不择手段,哈哈哈哈。

C++11新增特性:基于范围的循环,简化了循环任务,对数组(或容器类如vector和array)的每个元素执行相同操作。

int xi[3]={1,2,3};
for(int x:xi)//          修改x时可使用 &x,for(int &x:xi)
cout<<x<<endl;

还可使用初始化列表
for(int x: {1,2,3})
cout<<x<<" ";

逗号运算符:优先级是最低的,允许将两个表达式放到只允许一个表达式的地方。有两个特性:1.是一个顺序点,先计算第一个,然后计算第二个。2.逗号表达式的值是第二部分的值。

另外逗号不总是运算符,它在声明语句中分隔变量名。

递增/递减运算符和指针,前缀递增,递减和解引用优先级相同,从右到左结合,后缀递增,递减运算符比前缀运算符的优先级高,从左往右进行结合。注意分析:*p++:由于++的优先级高,用于p,而不是*p,先解引用,再将p+1;

表达式的值未使用的前提下,前缀和后缀的格式对程序的行为没有影响,但执行速度可能有差异,对用户自定义的类++运算符,这样定义前缀:将值+1返回结果;后缀:复制副本,将其+1,返回副本的值。

对于内置类型,哪种格式没有差别,但对于用户定义的递增和递减运算符,前缀效率更高。

后缀运算符在顺序点(完整表达式的末尾或分号)之前(没有决定顺序,在子表达式还是整个表达式完成之后)完成运算。避免这种情况出现:y=(4+x++)+(6+x++);//注意带括号的表达式

2.while循环,可转化为for循环.

二.出口条件循环.

do

body

while(test-expression);(注意不要漏掉分号)

用于先输入后测试情况。

三.嵌套循环和二维数组

C++没有提供二维数组类型,但用户可以创建每个元素本身都是数组的数组。

int a[3][3];

从存储空间的角度说,使用指针数组更为经济,如果要修改任何一个字符串,二维数组是更好的选择。

四.循环和文本输入.

注意:好像下面任意三种单字符输入方式之一,都能将cin对象转化为false.

istream类提供了一个可以将istream对象转化为bool值的函数,当cin需要bool值的地方,该转换函数将被调用。

1.cin忽略空格和换行符,更为复杂的是发送给cin的输入被缓冲,这意味着只有用户按下回车键后,他输入的内容才会被发送给程序。

属性 2.cin.get(ch) 3.ch=cin.get()
传递输入字符的方式 赋给参数ch 将函数返回值赋给ch
用于字符输入时函数的返回值 istream对象(执行bool转换true) int类型字符编码
到达EOF时函数的返回值 istream对象(执行bool转换false,输入失败)不会赋值给ch

EOF,赋值给ch,一般为-1,是头文件中的符号常量

猜你喜欢

转载自blog.csdn.net/qq_38898947/article/details/87027342
今日推荐