C++ Primer Plus 学习笔记(循环和关系表达式)

1. for 循环

1. 1 for 循环的组成部分

  • 设置初始值。
  • 执行测试,看循环是否应当继续进行。
  • 执行循环操作。
  • 更新用于测试的值。

初始化,测试和更新操作构成了控制部分,这下操作有括号括起。每个部分都是一个表达式,彼此由分号隔开。控制部分后面的语句叫做循环体,只要测试表达式为 true,它便被执行:

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

test-expression 决定循环体是否被执行。
update-expression 在每轮循环结束时执行,此时循环体已执行完毕。

C++ 允许在for循环的初始化部分中声明变量。这种变量只存在于 for 中。当程序离开循环后,这种变量将消失。

1. 2 递增运算符(++)和递减运算符(–)

两个运算符执行两种及其常见的循环操作:将循环计数加 1 或减 1。

这两个运算符都有两种变体,前缀(prefix)版本位于操作数前面,如 ++x;后缀(postfix)版本位于操作数后面,如 x++。两个版本对操作数的影响是一样的,但是影响的时间不同。
对于:

int a = 20;
cout << "a = " << a << ", b = " << b << endl;
cout << "a = " << a++ << ", b = " << ++b << endl;
cout << "a = " << a << ", b = " << b << endl;

输出结果:

a = 20, b = 20
a = 20, b = 21
a = 21, b = 21

这里,a++ 意味着使用 a 的当前值计算表达式,然后将 a 的值增加 1。而 ++b 的意思是先将 b 的值加 1,然后使用新的值来计算表达式。

1. 3 组合运算符

操作符作用(L 为左操作数,R 为右操作数)
+=将 L+R 赋给 L
-=将 L-R 赋给 L
*=将 L*R 赋给 L
/=将 L/R 赋给 L
%=将 L%R 赋给 L

1. 4 关系运算符

操作符含义
<小于
<=小于或等于
==等于
>大于
=
大于或等于
!=不等于

1. 5 C-风格字符串的比较

对于检测字符数组的字符串是不是 mate ,不能使用 ==。数组名是数组的地址,用引号括起的字符串常量也是其地址。因此

word == "mate"

以上关系表达式不是判断两个字符串是否相投,而是查看它们是否存储在相同的地址上。
应使用 C-风格字符串库中的 strcmp() 函数来比较。该函数接受两个字符串地址作为参数,参数可以是指针、字符串常量或字符数组名。
如果两个字符串相同,该函数返回零;如果第一个字符串按字母顺序排在第二个字符串之前,则 strcmp() 将返回一个负数值。如果第一个字符串按字母顺序排在第二个字符串之后,则 strcmp() 将返回一个正数值。

2. while 循环

while 循环是没有初始化和更新部分的 for 循环,他只有测试条件和循环体:

while (test-condition)
    body

如果测试条件表达式为 true,则执行循环体中的语句。

类型别名

C++ 为类型建立别名的方式有两种。
第一种是使用预处理器:

#define BYTE char   // preprocessor replaces BYTE with char

第二种是使用 C++ 的关键字 typedef 来创建别名。例如,要将 byte 作为 char 别名:

typedef char byte;

通用格式如下:

typedef typeName aliasName;

3. do while 循环

do
    body
while (test-expression)

这样的循环通常至少执行一次,因为其程序流必须经过循环体后才能到达测试条件。

4. 基于范围的 for 循环

double prices[5] = {4.99, 10.99, 6.87, 7.99, 8.49};
for (double x : prices)
    cout << x << endl;

要修改数组的元素,需要使用不同的循环变量语法:

for (double &x : prices)
    x = x * 0.80;

还可以结合使用基于范围的 for 循环和初始化列表:

forint x : {3, 5, 2, 8, 6})
    cout << x << " ";
cout << "\n";

5. 循环和文本输入

5. 1 使用原始的 cin 进行输入

char ch;
int count = 0;
cin >> ch;
while (ch != '#')
{
    cout << ch;
    ++count;
    cin >> ch;
}

这里 ‘#’ 被称为哨兵字符,用来作为停止标记。
cin 会忽略空格和换行符,因此既不会被显示也不会被包括在计数内。发送给 cin 的输入被缓冲,只有在按下回车后,输入的内容才会被发送给程序。

5. 2 使用 cin.get(char)

char ch;
int count = 0;
cin >> ch;
while (ch != '#')
{
    cout << ch;
    ++count;
    cin.get(ch);
}

cin.get(ch) 调用将一个值放在 ch 变量中。此方法可以将全部字符计算在内,包括空格。输入仍被缓冲,因此输入的字符个数仍可能比最终到达程序的要多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值