if 语句
语法:
if (成立条件表达式) {
当条件成立时需要执行的语句
}
- 成立条件表达式:用圆括号包裹,一般是关系表达式或者逻辑表达式,比如:
a<b
,a<b && b<c
- 如果条件成立(成立条件表达式的值为“1或True”),则执行语句;
- 执行语句可以是一行代码,也可以是多行代码
- 如果执行语句是多行代码,需要用大括号包裹;
- 执行语句相比其他语句向右移动一些,就是缩进
if … else
if … else 用法:用来控制程序在指定条件下做事情A,否则做另外去做事情B。
语法:
if (成立条件表达式) {
当条件成立时需要执行的语句
} else {
当条件不成立时需要执行的语句
}
if… else if
if … else if 用法:有些时候,我们会遇到大于两个分支的复杂情况。这时候,我们需要用到 if … else if 语句,保证在多种情况下,不同条件成立时可以做不同的事情(如下图):
语法:
if (成立条件表达式1) {
当条件1成立时需要执行的语句
} else if (成立条件表达式2) {
条件1不成立但是条件2成立时需要执行的语句
} else {
当条件1和2都不成立时需要执行的语句
}
- 成立条件表达式:关系或者逻辑表达式;
- 最后的一个else:可以没有,你可以选择在条件1和条件2都不成立时,不做任何事情。
if … else if 延伸用法:如果情况需要分成不只三种,我们也可以在else后面再接if、else、if、else,依次判断每个条件是否成立,成立就执行对应的操作,否则就判断下一个条件是否成立:
if (成立条件表达式1) {
当条件1成立时需要执行的语句
} else if (成立条件表达式2) {
否则,当条件2成立时需要执行的语句
} else if (成立条件表达式3) {
否则,当条件3成立时需要执行的语句
} … else if (成立条件表达式n) {
否则,当条件n成立时需要执行的语句
} else {
当上述所有条件都不成立时需要执行的语句
}
练习:
#include <iostream>
using namespace std;
int main() {
int age;
cin >> age;
if (age < 5)
cout << "免票" << endl;
else if (age <= 12)
cout << "7折票" << endl;
else if (age >= 60)
cout << "5折票" << endl;
else
cout << "全票" << endl;
return 0;
}
if 语句嵌套
if 语句嵌套:对于条件成立或者不成立的情况下需要执行的语句里,再嵌入if语句表示新的分支。
用法:
- 对于最外层的分支,每个分支需要执行的语句都可以再嵌入分支
- 嵌入的这个分支可以以任何形式出现,可以是
if
,可以是if ... else
,也可以是if ... else if
举例:假设在条件1成立时,我们要通过条件2再进行分支,就可以这样写:
if (成立条件表达式1) {
if (成立条件表达式2) {
当条件1和2都成立时需要执行的语句
}
} else {
当条件1不成立时需要执行的语句
}
- 注意点1:如果省略大括号,
else
默认会匹配到最近的那一个if
。
举例:如果不加上大括号的话,下面程序会把最后的else和第二个if匹配起来,表达的就不是我们之前说的意思了。
if (成立条件表达式1)
if (成立条件表达式2) {
当条件1和2都成立时需要执行的语句
}
else {
当条件1不成立时需要执行的语句
}
- 注意点2:if语句的嵌套会出现很多的大括号和缩进,所以为了代码的可读性,尽量避免非必要的多重if语句嵌套。
练习:
#include <iostream>
using namespace std;
int main() {
int age;
cin >> age;
double bill;
cin >> bill;
if (age >= 18) {
cout << "允许进入" << endl;
if (bill > 200)
cout << "进门左转" << endl;
}
else {
cout << "禁止进入" << endl;
}
return 0;
}
判断是否为闰年:
#include <bits/stdc++.h>
using namespace std;
int main() {
int a;
cin >> a;
if (a % 4 == 0) {
if (a % 100 == 0 && a % 400 != 0)
cout << "no";
else
cout << "yes";
}
else
cout << "no";
return 0;
}
switch 语句
switch用于表示这样的分支结构:根据某个变量不同的值进行不同的操作。
语法:
switch (变量名) {
case 变量可能的情况1: 执行语句1; break;
case 变量可能的情况2: 执行语句2; break;
…
// 可以有任意数量的 case 语句
default: 执行语句n;
}
- switch 后面的变量名:整型变量(比如
int
或者char
),或者值为整型的表达式 - 在一个switch中可以有任意数量的case语句。
- 每个case后跟一个变量可能的值和一个冒号。这个变量可能的值必须与switch中的变量具有相同的数据类型,而且是一个常量,比如1,2,3或者‘A’,‘B’,‘C’或者‘1’,‘2’,‘3’等等。
- 当switch后面的变量等于case后的常量时,case后跟的所有语句将被执行,直到遇到
break
语句为止。
break(难点):
- 当遇到 break 语句时,switch 终止,控制流将跳转到整个 switch 语句后的下一行。
- case后可以没有break, 如果某个case后没有break语句,程序就会接着往下执行。
- 举个例子,假设
执行语句1
之后没有break
,那么如果变量名 == 变量可能的情况1
时,程序会执行执行语句1
,然后接着执行执行语句2
,直到碰到break
。
- 举个例子,假设
default:一个switch语句可以有一个可选的default情况,出现在switch的结尾。default情况可用于上面所有case都不为真时执行。
#include <iostream>
using namespace std;
int main() {
// 输入一个字符代表自己的名字
char opt;
cin >> opt;
switch (opt) {
// 如果opt=='6',执行完两句cout后,遇见break,就会跳出整个switch
case '6':
cout << "主人你好!" << endl;
cout << "今天你想吃什么" << endl;
break;
case '1':
cout << "小一你好!" << endl;
cout << "今天天气怎么样?" << endl;
break;
case '2':
cout << "你有什么需要帮助的吗?" << endl;
break;
// 如果opt=='4',由于'4'的 case 后面没有 break
// 所以会往下执行'5'的 case 后面的语句,直到遇到 break
case '4': case '5':
cout << "我不想跟你说话" << endl;
break;
default:
cout << "我不太清楚你是谁..." << endl;
}
}
Tips:对比这个场景下if和switch的用法:
- 如果用if来写会有如下的缺点:
- 需要很多
opt == '1'
这样的关系表达式 - 一个分支下如果有多条语句,就需要加上大括号
- 需要很多
- 相比之下,switch就比较简洁。