跳转到内容

条件判断语句

条件判断语句有称为选择语句、分支语句。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语句

语法如下

cpp
if(表达式)
  语句块;

其中、“表达式”一般为关系表达式,表示判断条件,其运算结果是布尔类型。如果条件成立则执行下方的语句块,如果不成立则跳过下方的语句块。

小栗子: 判断奇数,让用户输入一个整型(假设这个整型的范围在int整型范围内),如果是奇数则输出“您输入的数字是奇数”,否则不做任何处理。

cpp
#include<iostream>
int main() {
  int x;
  std::cout << "请输入一个数字" << std::endl;
  std::cin >> x;
  if(x % 2)
    std::cout << "您输入的数字是奇数" << std::endl;
  return 0;
}

对于上述代码虽然执行没问题,但是不建议这么写,建议都加上大括号组成一个整体。

cpp
#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语句,对不满足条件时的操作也做了说明,语法形式如下:

cpp
if(表达式){
  语句块1;
}else {
  语句块2;
}

小栗子: 判断奇数和偶数,让用户输入一个整型(假设这个整型的范围在int整型范围内),如果是奇数则输出“您输入的数字是奇数”,否则输出“您输入的数字是偶数”。

cpp
#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语句可以对多个分支进行多次判断,每判断一次就缩小一定的检查范围。

cpp
if(表达式){
  语句块1;
}else if(表达式2) {
  语句块2;
}else{
  语句块3;
}

小栗子: 一个经典的成绩判断例子,满分100分,100-90 为极优秀、80-89 为优秀、70-79 为良好、60-69 为及格、60分一下为不及格。使用if else进行判断。

cpp
#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语句嵌套

嵌套语句形式如下:

cpp
if(表达式1) {
  if(表达式2) {
    语句块1;
  }else {
    语句块2;
  }
}

小栗子: 判断是否闰年。闰年能被4整除但不能被100整除,或者能被400整除的年份都为闰年。

cpp
#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;
}

简化版:

cpp
#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判断语句一样。

cpp
max = (A > B) ? A : B;

首先比较A B的大小,如果A大于B则max的值是A否则max的值就是B。

小栗子: 判断整型的奇偶性。

cpp
#include<iostream>
using namespace std;
int main() {
	cout << "请输入一个整数:";
	int num;
	cin >> num;
	num % 2 == 0 ? cout << "偶数" :  cout <<"奇数" ;
	return 0;
}

4. switch语句

当分支情况较多的时候,if判断语句的可读性较差,C++中提供了switch语句,形式如下:

cpp
switch(表达式){
  case 常量表达式1:
      语句块1;
  break;
  case 常量表达式n:
      语句块n
  break;
  default:
  默认语句块;
}

其中,表达式是一个算数表达式,值是一个整型或字符。用该值逐一和常量表达式的值进行比较,如果一致,就执行后面的语句块,并通过break关键字跳出整个switch语句。如果无法匹配成功,就执行default后的语句块。default分句可以省略,即使case语句都匹配不成功,也不再进行任何操作。

提示

switch括号内的表达式不能时浮点数,否则会因为精度不准而导致错误。

小栗子: 输入您期末总成绩等级(A、B、C、D)A是很好、B是不错、C一般、D不合格,如果出入其他字符则提示输入内容非法。

cpp
#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。