5. 循环和关系表达式
for
三段式
for(起始条件;终止条件;更新表达式) {}
其执行顺序为:
- 执行起始条件
- 检查终止条件
- 执行循环操作
- 更新表达式
for循环是入口循环条件。即先进行终止检查,再执行循环,最后执行更新表达式。当表达式为false时,将不会执行循环。
基于范围的for
对每个元素按顺序重复执行的for循环
// 对expression中每个元素都执行一遍操作
for (for-range-declaration : expression)
{}
//ex
int x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for(int y : x ) { // 使用auto自动推断得了。
cout << y << " ";
}
cout << endl;
表达式、语句、运算符
表达式
-
任何值或任何有效的值和运算符的结合就是表达式。
-
表达式都有值。赋值表达式的值为左侧成员的值。
-
赋值运算符是从右向左结合的
// 首先将0赋给z, 再将z = 0赋给y,依次类推。 x = y = z = 0; -
<<运算符的优先级比表达式中使用的运算符(+-*/%<>=)高
语句
表达式加上;就是语句。但反过来不对(如声明语句)。
运算符
-
指针自增、自减
++, --运算符后缀和前缀的优先级不同。优先级:后缀 > 前缀 = 解除引用运算符 (以从右往左的方式结合)int arr[5] = {11, 22, 33, 44, 55} int *pt = arr; // *pt = 11 ++pt; // *pt = 22 表达式值22 // 假设下面语句不会相互干涉 // 前缀 按照从右向左的方式结合 *++pt; // 先++pt,再解除引用。 // *pt = 33, 表达式值33 ++*pt; // 先*pt, 再++, // *pt = 22, 表达式值23 注意这将改变数组内的值 // 后缀 优先级高于解除引用 *pt++; // 先pt++, 再* // *pt = 33, 表达式值33 // 括号改变优先级 (*pt)++; // 先*,再对值++ *pt = 22; 表达式值为23 -
,运算符将两条语句放在仅允许存放一个表达式的地方,中间可以使用
,隔开。规定:
- 保证先计算第一个表达式,再计算第二个表达式
- 表达式的值为第二个表达式的值
,运算符的优先级在运算符中最低。
注意分别列表分隔符和
,运算符int j = 0, i = word.size() - 1; // 列表分隔符 i = 20, j = 2 *i; // ,运算符 cast = 17, 240; // cast 被设置为17,因为 = 优先级高, 但是表达式的值为240(cout 此表达式为240) (cast = 17), 240; // cast 被设置为17,于上式同 cast = (17, 240); // cast 被设置为240。
while
// 如果测试条件的值为true,则执行表达式
// while 也是入口条件。(先检测,再循环)
while(测试条件) {}
在直到循环计数时使用for,在无法知道次数时使用while
// 至少执行一次的while循环
// do-while 为出口条件。(先循环,再检测)
do
{}
while(测试条件)
文件尾条件
// 使用循环读取输入,并使用某个字符停止
// cin 会忽略空格和换行符,cin.get(ch)不会
char ch;
cin.get(ch);
while(ch != "#")
{
cout << ch;
...;
cin.get(ch);
}
// 每次读取一个字符,直到遇到EOF停止的字符输入做法
while (cin.get(ch))
{
body;
}
二维数组
// 二维数组初始化方法
int max[2][3] =
{
{1, 2, 3},
{6, 2, 8}
}