LogoCSP Wiki By Yundou
程序设计

分支结构

分支结构简介

在编程里,我们常常要依据不同的情形来做出不同的选择。比如我们判断数的奇偶性,如果一个数字能整除22,那么就是偶数,否则为奇数。

分支结构就是用来处理这类"如果,那么"的问题的,在C++中,主要有if-else语句和switch语句这两种分支结构。

条件表达式与比较运算符

引入

我们日常使用如果的时候,一般都会说“如果怎么怎么样,那么如何如何”。

这个“怎么怎么样”,一般来说要么为真要么为假。比如“如果今天下雨,那么带伞”,“今天下雨”就是要么为真要么为假的。

更加严格的来说,我们称这个“怎么怎么样”为一个命题,一个命题描述了一个要么是真的要么是假的的事情,比如“今天下雨”可以是一个命题,因为今天要么下雨要么不下雨。

那在学习分支结构之前,我们需要先了解电脑是如何来表示命题的。

我们在C++编程中,使用条件表达式来描述一个命题。

在 C++ 里,条件表达式属于用于判定真假的表达式,其结果为布尔类型(true 或者 false)。

布尔类型是一种变量类型,在C++里用它来描述真和假,可以当作是数值只能为0或者1的int类型,0表示假,1表示真。

条件表达式常被用于控制程序的流程,像 if 语句、while 语句、for 语句等都会用到它。借助不同的运算符,条件表达式能够对变量、常量进行比较和逻辑运算。

比较运算符

比较运算符用于比较两个值的大小关系,结果为布尔值。

条件表达式主要依靠各类运算符来构建,以下是常见的比较运算符。

运算符描述示例结果
==等于5 == 5true
!=不等于5 != 3true
<小于5 < 10true
>大于5 > 3true
<=小于等于5 <= 5true
>=大于等于5 >= 3true

示例代码

示例代码

#include <iostream>
using namespace std;
 
int main() {
    int a = 5, b = 3;
    cout << "a == b: " << (a == b) << endl;
    cout << "a != b: " << (a != b) << endl;
    cout << "a < b: " << (a < b) << endl;
    cout << "a > b: " << (a > b) << endl;
    cout << "a <= b: " << (a <= b) << endl;
    cout << "a >= b: " << (a >= b) << endl;
    return 0;
}

逻辑运算符

逻辑运算符用于连接多个条件表达式,帮助我们处理更复杂的判断情况。常见的逻辑运算符有三个:逻辑与(&&)、逻辑或(||)和逻辑非(!)。

逻辑与(&&

逻辑与运算符就像两个小伙伴一起完成任务,只有当两个小伙伴都完成了自己的任务,整个任务才算完成。在编程里,只有当 && 两边的条件都为真时,整个表达式才为真,只要有一个条件为假,整个表达式就为假。

#include <iostream>
using namespace std;
 
int main() {
    int age = 15;  // 定义一个整数变量 age,代表年龄,初始值为 15
    int score = 90;  // 定义一个整数变量 score,代表分数,初始值为 90
 
    // 使用逻辑与运算符判断年龄是否大于 12 且分数是否大于 80
    bool isQualified = (age > 12) && (score > 80);
 
    if (isQualified) {
        cout << "满足年龄和分数要求。" << endl;
    } else {
        cout << "不满足年龄和分数要求。" << endl;
    }
 
    return 0;
}

在这个例子中,age > 12 为真,score > 80 也为真,所以 (age > 12) && (score > 80) 整个表达式为真,程序会输出“满足年龄和分数要求。”

逻辑或(||

逻辑或运算符就像两个小伙伴完成任务,只要有一个小伙伴完成了任务,整个任务就算完成。在编程里,只要 || 两边的条件有一个为真,整个表达式就为真,只有当两个条件都为假时,整个表达式才为假。

#include <iostream>
using namespace std;
 
int main() {
    int height = 160;  // 定义一个整数变量 height,代表身高,初始值为 160
    int weight = 45;  // 定义一个整数变量 weight,代表体重,初始值为 45
 
    // 使用逻辑或运算符判断身高是否大于 170 或体重是否大于 50
    bool isGood = (height > 170) || (weight > 50);
 
    if (isGood) {
        cout << "满足身高或体重要求。" << endl;
    } else {
        cout << "不满足身高和体重要求。" << endl;
    }
 
    return 0;
}

在这个例子中,height > 170 为假,weight > 50 也为假,所以 (height > 170) || (weight > 50) 整个表达式为假,程序会输出“不满足身高和体重要求。”

逻辑非(!

逻辑非运算符就像给条件“唱反调”,如果原来的条件为真,加上逻辑非运算符后就变成假;如果原来的条件为假,加上逻辑非运算符后就变成真。

#include <iostream>
using namespace std;
 
int main() {
    bool isRainy = false;  // 定义一个布尔变量 isRainy,代表是否下雨,初始值为 false
 
    // 使用逻辑非运算符,得到与 isRainy 相反的结果
    bool isSunny = !isRainy;
 
    if (isSunny) {
        cout << "天气晴朗。" << endl;
    } else {
        cout << "正在下雨。" << endl;
    }
 
    return 0;
}

在这个例子中,isRainy 为假,使用逻辑非运算符后,isSunny 为真,程序会输出“天气晴朗。”

常用分支语句

上面我们介绍了C++是如何表示“如果怎样怎样,那么如何如何,否则如何如何”中的“怎样怎样”的,现在我们要介绍如何表示剩下来的“如果,那么,否则”的内容。

if-else语句

if-else语句的作用是当某个条件成立时,执行一段代码;要是条件不成立,就执行另一段代码。

图片描述
if else语句逻辑

基本语法

if (条件) {
    // 条件成立时执行的代码
} else {
    // 条件不成立时执行的代码
}

例题1:判断一个数是奇数还是偶数

#include <iostream>
using namespace std;
 
int main() {
    int num;
    // 提示用户输入一个整数
    cout << "请输入一个整数: ";
    cin >> num;
 
    // 判断这个数除以2的余数是否为0
    if (num % 2 == 0) {
        // 如果余数为0,说明是偶数
        cout << num << " 是偶数。" << endl;
    } else {
        // 如果余数不为0,说明是奇数
        cout << num << " 是奇数。" << endl;
    }
 
    return 0;
}

在这个程序里,num % 2 == 0就是判断条件。如果num除以2的余数是0,就输出num是偶数;反之,就输出num是奇数。

例题2:比较两个数的大小

#include <iostream>
using namespace std;
 
int main() {
    int a, b;
    // 提示用户输入两个整数
    cout << "请输入两个整数,用空格分隔: ";
    cin >> a >> b;
 
    // 判断a是否大于b
    if (a > b) {
        // 如果a大于b,输出a大于b
        cout << a << " 大于 " << b << endl;
    } else {
        // 如果a不大于b,输出a小于等于b
        cout << a << " 小于等于 " << b << endl;
    }
 
    return 0;
}

在这个程序中,a > b是判断条件。若a大于b,就输出a大于b;否则,输出a小于等于b

switch语句

switch语句适用于根据一个变量的不同取值来执行不同的代码块。

图片描述
switch语句逻辑

基本语法

switch (变量) {
    case 值1:
        // 当变量的值等于值1时执行的代码
        break;
    case 值2:
        // 当变量的值等于值2时执行的代码
        break;
    default:
        // 当变量的值不等于任何一个case的值时执行的代码
        break;
}

例题3:根据输入的数字输出对应的星期几

#include <iostream>
using namespace std;
 
int main() {
    int day;
    // 提示用户输入一个1到7之间的整数
    cout << "请输入一个1到7之间的整数: ";
    cin >> day;
 
    // 根据day的值进行判断
    switch (day) {
        case 1:
            // 如果day等于1,输出星期一
            cout << "星期一" << endl;
            break;
        case 2:
            // 如果day等于2,输出星期二
            cout << "星期二" << endl;
            break;
        case 3:
            // 如果day等于3,输出星期三
            cout << "星期三" << endl;
            break;
        case 4:
            // 如果day等于4,输出星期四
            cout << "星期四" << endl;
            break;
        case 5:
            // 如果day等于5,输出星期五
            cout << "星期五" << endl;
            break;
        case 6:
            // 如果day等于6,输出星期六
            cout << "星期六" << endl;
            break;
        case 7:
            // 如果day等于7,输出星期日
            cout << "星期日" << endl;
            break;
        default:
            // 如果day不在1到7之间,输出输入无效
            cout << "输入无效,请输入1到7之间的整数。" << endl;
            break;
    }
 
    return 0;
}

在这个程序里,switch语句会依据day的值来执行不同的case分支。要是day的值不在1到7之间,就会执行default分支。

例题4:根据输入的字符输出对应的季节

#include <iostream>
using namespace std;
 
int main() {
    char season;
    // 提示用户输入一个字符
    cout << "请输入一个字符 (s: 春季, x: 夏季, q: 秋季, d: 冬季): ";
    cin >> season;
 
    // 根据season的值进行判断
    switch (season) {
        case 's':
            // 如果season等于's',输出春季
            cout << "春季" << endl;
            break;
        case 'x':
            // 如果season等于'x',输出夏季
            cout << "夏季" << endl;
            break;
        case 'q':
            // 如果season等于'q',输出秋季
            cout << "秋季" << endl;
            break;
        case 'd':
            // 如果season等于'd',输出冬季
            cout << "冬季" << endl;
            break;
        default:
            // 如果season不是's', 'x', 'q', 'd'中的任何一个,输出输入无效
            cout << "输入无效,请输入 s, x, q, d 中的一个字符。" << endl;
            break;
    }
 
    return 0;
}

在这个程序中,switch语句会根据season的值来执行不同的case分支。要是season不是sxqd中的任何一个,就会执行default分支。

通过这些例题,你应该对if-else语句和switch语句有了基本的了解。在实际编程时,要依据具体情况选择合适的分支结构。

例题

Status
Problem
Tags