引言
在C++中,条件分支是一个重要概念。它分为多种程序语句,可以嵌套在循环里也可以单独出来判断。今天,我们就来了解多种条件分支语句。
目录
if单分支语句
在学习多分支语句之前,我们先来学习一下最基础的if语句。if语句的作用是判断某条件是否成立,并在成立时执行语句,例如以下程序:
if(a % 2 == 0){
cout << "偶数";
}
这段程序的作用是判断一个数a是否为偶数,如果是输出YES。但是很明显,这段程序无法对奇数进行操作,因此我们可以发现,if语句只能对一种情况进行处理,而它的基本用法为:
if(判断条件){
代码块
}
只有在判断条件为true(真)时,才会执行代码块;否则(判断条件为false(假)),将会略过这串代码。(true和false均为bool(布尔)类型数据)
比较运算符
通过刚才的代码,可以发现:在判断两个部分是否相等时,我们是用的是==而不是=,这是因为==是比较运算符,而=是赋值语句(无法进行判断)。常见的比较运算符及其作用如下:
==
:判断两个值是否相等,如果相等返回true
,否则返回false;
!=
:判断两个值是否不相等,如果不相等返回true
,否则返回false;
>
:判断左边的值是否大于右边的值,如果是返回true
,否则返回false;
<
:判断左边的值是否小于右边的值,如果是返回true
,否则返回false;
>=
:判断左边的值是否大于等于右边的值,如果是返回true
,否则返回false;
<=
:判断左边的值是否小于等于右边的值,如果是返回true
,否则返回false
。
在使用比较运算符时,我们需要区分>和>=、 <和<=的区别,例如以下几组代码:
//判断a是否是正数
if(a > 0)
//判断a是否是非负数
if(a >= 0)
//判断a是否是负数
if(a < 0)
//判断a是否是非正数
if(a <= 0)
if-else双分支语句
if语句是单分支语句,那么加上一个else,就成为了可以对判断条件为否的情况进行处理。以下代码补充了对a的奇偶性判断:
if(a % 2 == 0) cout << "偶数";
else cout << "奇数";
如果if判断条件里的内容不为true,就执行else内的代码块,即:
而if-else因为能对数据进行两种分支操作,因此被称为双分支语句。双分支语句的用法为:
if(判断条件){
代码块1
}else{
代码块2
}
if-else if-else多分支语句
else if可以对多种if内判断条件为否的情况进行处理,比if-else语句更加适用于需要考虑多重情况的题目。以下代码可以对a进行正负性判断:
if(a > 0) cout << "正数";
else if(a == 0) cout << "0";
else cout << "负数";
注意,else if和else一样,只能与if相用。执行过程是这样的:
由于if-else if-else语句能多重判断,所以称为多分支语句,其中else if语句能多次出现,else语句只能出现1次。 多分支语句的用法:
if(判断条件){
代码块1
}else if(判断条件){
代码块2
}else{
代码块3
}
switch-case语句
switch-case语句类似于if-else语句的逻辑,可用于判断多种条件。其用法为:
switch (expression) {
case value1:
// code block 1
break;
case value2:
// code block 2
break;
...
default:
// code block 3
break;
}
参数解释:
expression
是一个表达式,它的值会与每个case
的值进行比较;case value1
和case value2
是多个分支,分别表示不同的条件。当expression
的值与某个case
的值相等时,就执行对应的代码块;break
是用来中断switch-case
语句的执行。当某个case
中的代码块执行完毕后,必须加上break
语句,否则代码会继续执行下一个case
中的代码块;default
是可选的分支,用于当没有任何case
的值匹配expression
时执行的代码块。
以下代码可判断一个整数所对应的星期的英文单词:
switch(n){
case 1:cout << "Monday"; break;
case 2:cout << "Tuesday"; break;
case 3:cout << "Wednesday"; break;
case 4:cout << "Thursday"; break;
case 5:cout << "Friday"; break;
case 6:cout << "Saturday"; break;
case 7:cout << "Sunday"; break;
}
switch-case语句知识较为繁多且实践较困难,建议初学者了解即可。
逻辑运算符
&&、||、!是逻辑运算符,可以简化条件分支嵌套的繁琐过程。逻辑运算符有优先级,为:逻辑非(!)>逻辑与(&&)>逻辑或(||)。需要改变优先级时,使用英文半角小括号()即可。
以下程序可简化判断一个数a是否是两位数的代码:
//双分支语句嵌套判断
if(a >= 10){
if(a <= 99){
cout << "YES";
}else{
cout << "NO";
}
}else{
cout << "NO";
}
//逻辑运算符简化判断
if(a >= 10 && a <= 99) cout << "YES";
else cout << "NO";
例题:闰年判断
思路 本题的难点在于了解闰年,我们只需要使用一个if-else语句即可完成。而在if判断条件中,我们可以使用括号规定逻辑运算优先级,并使用(n%400!=0&&n%100==0)||n%4!=0判断平年。
题解
#include<bits/stdc++.h>
using namespace std;
int main(){
int n; cin >> n;
if((n % 400 != 0 && n % 100 == 0) || n % 4 != 0){ //判断平年条件
cout << 1;
}else{ //否则即闰年
cout << 0;
}
return 0;
}