Prev: C++Ⅰ:基本概念
Next: C++Ⅲ:数据类型,数组,指针
1 if语句
1.1 做出选择
if语句检测如果条件为[ruby=真]true[/ruby],就执行代码。 语法:
[ruby=condition]条件[/ruby]指明了一个要计算的表达式。如果条件为true,在花括号内的语句会被执行。 如果条件为[ruby=假]false[/ruby],语句会被直接略过,程序会从if语句的主体之后继续执行。 Part题: 下面哪个选项展示了C++中if语句的正确语法? A. if test B. IF test C. if (test) { } |
1.2 if语句
使用[ruby=relational operators]关系运算符[/ruby]来计算条件。 举个例子:
if语句先计算条件 (7>4),发现它为[ruby=真]true[/ruby],然后执行cout语句。 如果我们将大于运算符改为小于运算符 (7<4),cout语句不会被执行,也就没有什么输出。 if语句中的条件不需要分号。 Part题: 填空以比较变量,并输出"你吼"到屏幕。
|
1.3 关系运算符(一)
其他的关系运算符:
例子:
Part题: 下面哪个运算符用于检测相等? A. = B. << C. *= D. == |
1.4 关系运算符(二)
不等于运算符比较两个操作数是否不相等。如果不相等,条件就被算作true。 举个例子:
上面的条件被算作false,所以代码块没有被执行。 Part题: 填空以比较变量,并输出"不相等"到屏幕。
|
1.5 关系运算符(三)
你可以在if语句中用关系运算符比较变量。 举个例子:
Part题: 填空以输出最大的变量的值。
|
2 else语句
2.1 else语句(一)
一个if语句后面可以跟一个可选的else语句,当条件为false时被执行。 语法:
上面的代码会测试条件:
当if或else只包含一条语句时,可以略去花括号。 Part题: 填空以检测变量age是否大于18:
|
2.2 else语句(二)
举个例子:
Part题: 补全下列代码:
|
2.3 else语句(三)
在所有之前的例子中,if/else语句内只用了一条语句,但你可以想放多少放多少。 举个例子:
Part题: if的括号中可以放多少语句? A. 1 B. 2 C. 任意 |
2.4 嵌套if语句
你也可以在一个if语句中包含,或叫做[ruby=nest]嵌套[/ruby],另一个if语句。 举例:
Part题: 补全嵌套的if语句以输出"成了!"。
|
2.5 嵌套if-else语句
C++允许你嵌套无数的if/else语句。 举例:
记住,所有的else语句都必须有对应的if语句。 Part题: 一个if语句可以嵌套多少if语句? A. 0 B. 2 C. 多少都行 |
2.6 if-else语句
在if/else语句中,一条单独的语句可以不被花括号包围。
写上花括号仍然是一个好习惯,因为它明确了代码界限,使其更易读。 Part题: 填空以比较变量,并输出"else中的输出"到屏幕。
|
3 while循环
3.1 循环
一个[ruby=loop]循环[/ruby]持续执行一组语句,直到满足某个条件。 一个while循环持续执行一组语句,只要给定的条件为true。 语法:
只要条件为true,循环会一直执行。 当条件为false时,程序的执行会从循环的下一行继续。 Part题: 下面哪个时while循环的正确语法? A. WHILE bacon <= 5 { cout << "text"; } B. while bacon <= 5 cout << "text"; C. while (bacon <= 5) { cout << "text"; } |
3.2 while循环(一)
循环的[ruby=body]主体[/ruby]是在花括号范围内的代码块。 举例:
上面的例子先声明了一个值为1的变量 (int num = 1)。 while循环检查条件 (num < 6),然后执行它主体中的代码,而且每次循环执行时会将num加一。 在第5次循环之后,num值为6,条件算作false,循环随即停止。 Part题: 填空使其输出x的值到屏幕5次。
|
3.3 while循环(二)
变量增加的值可以改变。如果改变了,循环的次数也会改变。
如果条件不会被算作false,那么循环会永远执行下去。 Part题: 填空使bacon的值增加2,并且只输出偶数。
|
4 运用while循环
4.1 使用自增/自减运算符
自增或自减运算符可以用来改变循环中的值。 举例:
num++等同于num = num + 1。 Part题: 填空以输出x的值从1到5。用++运算符增加x的值。
|
4.2 运用while循环(一)
循环可以用来从用户获得多个输入。 让我们创造一个程序,使其允许用户输入5次数字,每次都将输入存储在一个变量中。
上面的代码要求用户输入5次,每次都将输入存在number变量中。 Part题: 填空以用cin接受用户输入,并将值存在"number"变量中5次。
|
4.3 运用while循环(二)
现在让我们修改一下程序,使其计算用户输入数字的和。
上面的代码将每次循环中用户输入的值加到total变量中。当循环结束时,total的值被输出。这个值是所有用户输入的值的和。 注意变量total的初始值为0。 Part题: 填空使用户输入5个值并输出它们的和。将和存在变量total中。
|
5 for循环
5.1 for循环(一)
for循环是一个循环类的控制结构,允许你高效地写一个执行指定次数的循环。 语法:
[ruby=init]初始化[/ruby]步骤最先执行,并且只会被执行一次。 然后,[ruby=condition]条件[/ruby]被计算,当条件为真时循环主体被执行。 然后,[ruby=increment]增量[/ruby]语句更新控制循环的变量。 最后,循环的主体一直重复执行,直到条件被算作false。 举例:
初始化和增量语句如果不需要的话可以删去。但分号是必须的。 Part题: 下面哪个是"for"循环的正确语法? A. for (int x = 1,, x < 10; x++; ) { } B. FOR x = 1, x < 10, x++ { } C. for int x = 1; y < 10; ++y { } D. for (int x = 1; x < 10; x++) { } |
5.2 for循环(二)
下面的例子用for循环输出从0到9的的数字。
在初始化阶段,我们声明了变量a并使其等于0。 a < 10是条件。 在每次循环后,增量语句a++被执行。 当a的值变为10时,条件算作false,循环停止。 Part题: 填空使输出x的值10次:
|
5.3 for循环(三)
增量语句可以改变。
你也可以使用减量语句。
当使用for循环时,不要忘记初始化和条件之后的分号。 Part题: 填空以用for循环输出0到20之间的偶数。
|
6 do...while循环
6.1 do...while循环(一)
不像for和while循环这样在循环最开始的时候检查条件,do...while循环在循环结束的时候检查条件。 do...while循环和while循环相似。不同的地方是do...while循环保证至少运行一次。 语法:
举例,你可以从用户取得输入,然后检查。如果输入不正确,你可以再取一次。 Part题: 下面哪个是do...while循环的正确语法? A. do while(test) B. do { } while (test); C. DO while test; |
6.2 do...while循环(二)
这是一个例子:
别忘记while语句后的分号。 Part题: 填空以输出变量x的值10次。
|
6.3 while vs. do...while
如果条件计算为false,do中的语句还是会执行一次:
do...while循环至少执行语句一次,然后测试条件。 Part题: do...while循环和while循环有什么不同? A. while循环先执行再测试 B. do...while循环先测试再执行 C. do...while循环至少执行一次 |
6.4 do...while循环(三)
和其他循环一样,如果循环条件永远不会被计算为false,循环会永远运行下去。 举例:
这会一直向屏幕输出42。 经常检查你的循环,所以你能知道它们是不是按你期望的方法运行。 Part题: 填空以输出"这是个循环"到屏幕15次。
|
7 switch语句
7.1 多个条件
有时候需要检测变量是否等于几个不同的值。这可以用几个if语句实现。 举例:
switch语句在这种情况下会更优雅一些。 Part题: 填空以输出"你可以驾驶"如果变量"age"等于16,输出"可以买lottery ticket"如果"age"等于18。
|
7.2 switch语句
switch语句在一个列表中测试一个值,通常被叫做不同的[ruby=cases]情况[/ruby],来判断值是否等于它们中的任意一个。
switch先计算表达式来判断它是否等于case语句中的值。如果有对应值,就执行那个case中的语句。 一个switch可以包含任意个case语句,case后面跟着值和冒号。 Part题: 下面哪个是switch的正确语法? A. SWITCH test { } B. switch (test) { } C. switch test; |
7.3 switch语句
这是前面那个例子,用switch语句重写:
上面的代码等同于3个if语句。 注意每个case后的关键字break;。马上讲到它。 Part题: 填空将变量age与16、18和21进行对比并输出对应文字。
|
7.4 default语句
在switch语句中,可选的default语句可以执行任务,如果所有的case都不符合。 举例:
当没有任何case匹配switch语句的时候,default语句里的语句将会执行。 default语句必须放在switch语句的最后。 Part题: 填空来测试变量x的值;如果x是2,输出"是2"到屏幕;否则(默认情况),输出"默认情况"到屏幕。
|
7.5 break语句
break语句的作用是终结switch语句。在变量匹配case的时候,这个case后的语句会继续执行,直到遇到break语句。换句话说,不写break语句会导致即使变量不匹配case,程序也会继续往下执行。 举例:
正如你所见,程序执行了匹配的case语句,将"中年"输出到屏幕。但是由于没有明确写break语句,匹配的case之后的语句也将会运行。因此,其后所有其他的case语句都被执行了。这样的行为我们称之为fall-through。 作为switch语句的最后一种情况,default情况不需要写break语句。 Part题: 如果我们忘记在"case"后插入"break",会发生什么? A. 在遇到break语句之前,剩下的所有情况都会被执行 B. 啥事没有 C. 一个编译错误 |
8 逻辑运算符
8.1 逻辑运算符
用[ruby=logical operators]逻辑运算符[/ruby]来合并条件语句,并返回true或false。 (Ps. 原图中 (&& - Form) 中内容 "y && y"应该是误拼,因为(y && y)相当于y。)
[ruby=AND]与[/ruby]运算符按这样的方式工作:
对于与运算符来说,两个操作数都要是true,整个表达式才能是true。 Part题: 填空来测试if语句中的两个条件是否都为true。
|
8.2 与运算符(一)
举例:
在上面的例子中,逻辑与运算符被用来合并两个表达式。 只有在两个条件都为true之后,if语句中的表达式才被算作true。 Part题: 在什么情况下,"a && b"的值是true? A. a b都为true B. a b都为false C. a b有一个是true |
8.3 与运算符(二)
在一个if语句中,逻辑运算符可以被用来合并多个条件。
只有当所有的条件都为true时,整个表达式才能算作true。 Part题: 一个if语句中可以使用多少个&&运算符? A. 一个 B. 两个 C. 随便多个 |
8.4 或运算符
[ruby=OR]或[/ruby]运算符(||)在当两个操作数有一个为true的时候返回true。
举例:
你可以合并任意多个或运算符。 Part题: 填空以输出"欢迎"到屏幕。
|
8.5 逻辑非运算符
逻辑[ruby=NOT]非[/ruby]运算符 ( ! ) 只需要一个操作数,且将其逻辑状态反相。因此,如果一个条件是true,非运算符会使它变成false,反之亦然。
这样用的时候要小心,因为 !false 就是 true。 Part题: 多选题:在什么情况下,a || b的结果是true? A. a b都为true B. a b都不为true C. a b有一个是true |
章末检测
1. 按要求填空:输入一个值并存储在变量x中,然后测试x如果大于20,就输出"x大"到屏幕,如果x小于10,就输出"x小"。
2. 按要求填空:用while循环输出"在循环中"到屏幕5次。
3. 按要求填空:用for循环输出"在循环中"到屏幕7次。
4.下面的叙述哪条是正确的? A. switch语句可以被认为是多个if语句的替代 B. switch语句必须包含一个default情况 C. switch语句与for循环等同 5. 多选题:选出关于&&和||运算符正确的叙述。 A. 如果a b都为true,那么a && b为false B. 如果a b有一个为true,那么a && b为true C. 如果a b有一个为true,那么a || b为true D. 如果c为true,a b有一个为true,那么(a || b) && c为true 6. 按要求填空:如果变量a大于12且变量b小于等于76,输出"你真棒!"到屏幕。
|