条件判断语句
条件判断语句有称为选择语句、分支语句。C++中有3种形式的if选择语句,同时提供了switch语句,简化多分支决策的处理过程。条件判断语句是非常重要的流程控制语句。
1.语句,程序结构
1.1 语句
C++程序中,语句是最小的可执行单元,以分号结束。
1、表达式语句: 表达式语句就是在表达式后面加上一个分号。如算数表达式、关系表达式、逻辑表达式、赋值表达式等。其中赋值表达式最常见,其作用是将“=”右侧表达式的结果赋值给左边的变量。
2、空语句: 空语句只有一个分号。表示什么都不做,最大的作用就是进行占位。空语句经常出现在选择或循环语句中,表示某个分支或循环体暂时不执行任何操作,先用空语句占位,后续在逐步细化和补充。
3、复合语句: 复合语句就是用一对大括号“{}”括起来的若干条语句的集合,又称为语句块。他在语句上是一个整体,相当于一个语句。复合语句经常出现在选择或循环结构中,将分支代码或循环代码段用大括号括起来,起到层次划分的作用。
4、函数调用语句: 函数由函数名、圆括号和参数列表组成,函数调用语句就是在函数后加上一个圆括号。所谓调用,主要指程序执行到函数调用语句时,会跳转到相应的函数体中去执行其内容,执行完毕后返回到函数调用的语句处,接着执行下面的语句。
1.2 程序结构
之前编写的简单代码都是顺序执行的,先执行第一句,然后是第二句、第三句...直到最后一条语句,这称为顺序结构。
但在很多情况下,只靠顺序结构不能很好的解决问题。例如:十字路口红灯停、绿灯行的问题,需要程序做出判断,当前是红灯还是绿灯。
为了让程序具有处理复杂问题的能力,C++中把程序结构分为顺序、选择、循环三类。
- 顺序结构,指的是按照语句在程序中的顺序先后依次执行,不重复执行任何代码,也不跳过任何代码。顺序结构是自然形成的,不需要控制,按默认的顺序执行即可。
- 选择结构,根据条件,让程序在多个代码段有选择的执行某些代码。
- 循环结构,程序重复执行某段代码,直到条件不满足,或遇到强制跳出语句。
顺序、选择、循环这3种程序结构可以相互包含,任何程序都是这3类结构组成的。
2. if语句
if语句用于多分支情况进行判断,包含简单if语句、if...else语句和elseif语句。
2.1 简单的if语句
语法如下
if(表达式)
语句块;
其中、“表达式”一般为关系表达式,表示判断条件,其运算结果是布尔类型。如果条件成立则执行下方的语句块,如果不成立则跳过下方的语句块。
小栗子: 判断奇数,让用户输入一个整型(假设这个整型的范围在int整型范围内),如果是奇数则输出“您输入的数字是奇数”,否则不做任何处理。
#include<iostream>
int main() {
int x;
std::cout << "请输入一个数字" << std::endl;
std::cin >> x;
if(x % 2)
std::cout << "您输入的数字是奇数" << std::endl;
return 0;
}
对于上述代码虽然执行没问题,但是不建议这么写,建议都加上大括号组成一个整体。
#include<iostream>
int main() {
int x;
std::cout << "请输入一个数字" << std::endl;
std::cin >> x;
if(x % 2){
std::cout << "您输入的数字是奇数" << std::endl;
}
return 0;
}
2.3 if...else语句
if...else语句,对不满足条件时的操作也做了说明,语法形式如下:
if(表达式){
语句块1;
}else {
语句块2;
}
小栗子: 判断奇数和偶数,让用户输入一个整型(假设这个整型的范围在int整型范围内),如果是奇数则输出“您输入的数字是奇数”,否则输出“您输入的数字是偶数”。
#include<iostream>
int main() {
int x;
std::cout << "请输入一个数字" << std::endl;
std::cin >> x;
if(x % 2){
std::cout << "您输入的数字是奇数" << std::endl;
}else {
std::cout << "您输入的数字是偶数" << std::endl;
}
return 0;
}
2.4 else...if语句
else if语句可以对多个分支进行多次判断,每判断一次就缩小一定的检查范围。
if(表达式){
语句块1;
}else if(表达式2) {
语句块2;
}else{
语句块3;
}
小栗子: 一个经典的成绩判断例子,满分100分,100-90 为极优秀、80-89 为优秀、70-79 为良好、60-69 为及格、60分一下为不及格。使用if else进行判断。
#include<iostream>
using namespace std;
int main() {
cout << "请输入您的成绩" << endl;
int score;
cin >> score;
if(100 <= score && score <= 90) {
cout << "极优秀";
}else if(80 <= score && score <= 89) {
cout << "优秀";
}else if(70 <= score && score <= 79) {
cout << "良好";
}else if (60 <= score && score <= 69) {
cout << "及格";
}else {
cout << "不及格";
}
return 0;
}
2.5 if语句嵌套
嵌套语句形式如下:
if(表达式1) {
if(表达式2) {
语句块1;
}else {
语句块2;
}
}
小栗子: 判断是否闰年。闰年能被4整除但不能被100整除,或者能被400整除的年份都为闰年。
#include<iostream>
using namespace std;
int main() {
cout << "请输入一个年份:";
int year;
cin >> year;
if (!(year % 4)) {
if (year % 100) {
cout << "闰年" << endl;
}
else if (!(year % 400)) {
cout << "闰年" << endl;
}
else {
cout << "不是闰年" << endl;
}
}
else {
cout << "不是闰年" << endl;
}
return 0;
}
简化版:
#include<iostream>
using namespace std;
int main() {
cout << "请输入一个年份:";
int year;
cin >> year;
if((!(year % 4) && (year % 100)) || !(year % 400)) {
cout << "是闰年" << endl;
}else {
cout << "不是闰年" << endl;
}
return 0;
}
3. 条件运算符
条件运算符?:
是一个三目运算符,其构成的条件表达式能像if else
判断语句一样。
max = (A > B) ? A : B;
首先比较A B的大小,如果A大于B则max的值是A否则max的值就是B。
小栗子: 判断整型的奇偶性。
#include<iostream>
using namespace std;
int main() {
cout << "请输入一个整数:";
int num;
cin >> num;
num % 2 == 0 ? cout << "偶数" : cout <<"奇数" ;
return 0;
}
4. switch语句
当分支情况较多的时候,if判断语句的可读性较差,C++中提供了switch语句,形式如下:
switch(表达式){
case 常量表达式1:
语句块1;
break;
case 常量表达式n:
语句块n
break;
default:
默认语句块;
}
其中,表达式是一个算数表达式,值是一个整型或字符。用该值逐一和常量表达式的值进行比较,如果一致,就执行后面的语句块,并通过break关键字跳出整个switch语句。如果无法匹配成功,就执行default后的语句块。default分句可以省略,即使case语句都匹配不成功,也不再进行任何操作。
提示
switch括号内的表达式不能时浮点数,否则会因为精度不准而导致错误。
小栗子: 输入您期末总成绩等级(A、B、C、D)A是很好、B是不错、C一般、D不合格,如果出入其他字符则提示输入内容非法。
#include<iostream>
using namespace std;
int main() {
cout << "请输入您的成绩:";
char score;
cin >> score;
switch (score) {
case 'A':
cout << "很好";
break;
case 'B':
cout << "不错";
break;
case 'C':
cout << "一般";
break;
case 'D':
cout << "不合格";
default:
cout << "非法输入";
}
return 0;
}
💬 欢迎评论!请确保您已登录 GitHub。