返回 课程

信奥AC之路-1级

0% 完成
0/0 步骤
  1. 第1课 开发环境与基础输出
    5 主题|小节
  2. 第2课 算术运算符
    7 主题|小节
  3. 第3课 printf与运算输出
    7 主题|小节
  4. 第4课 数的进制与拆位
    6 主题|小节
  5. 第5课 变量与基础运算
    17 主题|小节
  6. 第6课 常量与取整运算
    8 主题|小节
  7. 第7课 关系运算
    8 主题|小节
  8. 第8课 逻辑运算
    9 主题|小节
  9. 第9课 输入与计算进阶
    10 主题|小节
  10. 第10课 if语句及双分支语句
    8 主题|小节
  11. 第11课 if语句及双分支进阶
    11 主题|小节
  12. 第12课 三目运算
    9 主题|小节
  13. 第13课 多分支、多if和switch语句
    11 主题|小节
  14. 第14课 循环(基本输出)
    7 主题|小节
  15. 第15课 循环(While+If)
    8 主题|小节
  16. 第16课 循环(计数、求和、求乘积)
    10 主题|小节
  17. 第17课 循环进阶(While+)
    8 主题|小节
  18. 第18课 do-while及while其他用法
    8 主题|小节
  19. 第19课 For循环基础
    9 主题|小节
  20. 第20课 For循环进阶
    8 主题|小节
课 13, 主题|小节 4
进行中

13.3 switch语句实验

2025年9月22日
课 进展
0% 完成

“接下来,让我们探索switch语句的强大功能,”我说,”switch语句在处理多选择情况时非常有用,尤其是当选择基于一个整数或字符值时。”

13.3.1 汉译英

实验四:数字转换为英文

题目描述:输入某个整数,如果输入的整数在1~9范围内,则输出相对应的英文单词,否则输出”out”。

样例输入

5

样例输出

five

代码实现

// 方法一:使用多分支结构
#include <iostream>
using namespace std;

int main() {
    int n;                      // 定义整数变量n
    cin >> n;                   // 输入一个整数
    
    if(n == 1){                 // 判断n是否等于1
        cout << "one";          // 如果是,则输出"one"
    }else if(n == 2){           // 判断n是否等于2
        cout << "two";          // 如果是,则输出"two"
    }else if(n == 3){           // 判断n是否等于3
        cout << "three";        // 如果是,则输出"three"
    }else if(n == 4){           // 判断n是否等于4
        cout << "four";         // 如果是,则输出"four"
    }else if(n == 5){           // 判断n是否等于5
        cout << "five";         // 如果是,则输出"five"
    }else if(n == 6){           // 判断n是否等于6
        cout << "six";          // 如果是,则输出"six"
    }else if(n == 7){           // 判断n是否等于7
        cout << "seven";        // 如果是,则输出"seven"
    }else if(n == 8){           // 判断n是否等于8
        cout << "eight";        // 如果是,则输出"eight"
    }else if(n == 9){           // 判断n是否等于9
        cout << "nine";         // 如果是,则输出"nine"
    }else{                      // 如果n不在1~9范围内
        cout << "out";          // 输出"out"
    }
    
    return 0;
}

// 方法二:使用多个独立的if语句
#include <iostream>
using namespace std;

int main() {
    int n;                      // 定义整数变量n
    cin >> n;                   // 输入一个整数
    
    if(n == 1){                 // 判断n是否等于1
        cout << "one";          // 如果是,则输出"one"
    }
    if(n == 2){                 // 判断n是否等于2
        cout << "two";          // 如果是,则输出"two"
    }
    if(n == 3){                 // 判断n是否等于3
        cout << "three";        // 如果是,则输出"three"
    }
    if(n == 4){                 // 判断n是否等于4
        cout << "four";         // 如果是,则输出"four"
    }
    if(n == 5){                 // 判断n是否等于5
        cout << "five";         // 如果是,则输出"five"
    }
    if(n == 6){                 // 判断n是否等于6
        cout << "six";          // 如果是,则输出"six"
    }
    if(n == 7){                 // 判断n是否等于7
        cout << "seven";        // 如果是,则输出"seven"
    }
    if(n == 8){                 // 判断n是否等于8
        cout << "eight";        // 如果是,则输出"eight"
    }
    if(n == 9){                 // 判断n是否等于9
        cout << "nine";         // 如果是,则输出"nine"
    }
    if(n < 1 || n > 9){         // 判断n是否不在1~9范围内
        cout << "out";          // 如果是,则输出"out"
    }
    
    return 0;
}

// 方法三:使用嵌套的if结构
#include <iostream>
using namespace std;

int main() {
    int n;                      // 定义整数变量n
    cin >> n;                   // 输入一个整数
    
    if(n >= 1 && n <= 9){       // 首先判断n是否在1~9范围内
        if(n == 1){             // 如果在范围内,判断n的具体值
            cout << "one";      // 输出相应的英文单词
        }else if(n == 2){
            cout << "two";
        }else if(n == 3){
            cout << "three";
        }else if(n == 4){
            cout << "four";
        }else if(n == 5){
            cout << "five";
        }else if(n == 6){
            cout << "six";
        }else if(n == 7){
            cout << "seven";
        }else if(n == 8){
            cout << "eight";
        }else if(n == 9){
            cout << "nine";
        }
    }else{                      // 如果n不在1~9范围内
        cout << "out";          // 输出"out"
    }
    
    return 0;
}

// 方法四:使用switch语句
#include <iostream>
using namespace std;

int main() {
    int n;                      // 定义整数变量n
    cin >> n;                   // 输入一个整数
    
    switch(n){                  // 根据n的值选择不同的分支
        case 1:                 // 如果n等于1
            cout << "one";      // 输出"one"
            break;              // 跳出switch结构
        case 2:                 // 如果n等于2
            cout << "two";      // 输出"two"
            break;              // 跳出switch结构
        case 3:                 // 如果n等于3
            cout << "three";    // 输出"three"
            break;              // 跳出switch结构
        case 4:                 // 如果n等于4
            cout << "four";     // 输出"four"
            break;              // 跳出switch结构
        case 5:                 // 如果n等于5
            cout << "five";     // 输出"five"
            break;              // 跳出switch结构
        case 6:                 // 如果n等于6
            cout << "six";      // 输出"six"
            break;              // 跳出switch结构
        case 7:                 // 如果n等于7
            cout << "seven";    // 输出"seven"
            break;              // 跳出switch结构
        case 8:                 // 如果n等于8
            cout << "eight";    // 输出"eight"
            break;              // 跳出switch结构
        case 9:                 // 如果n等于9
            cout << "nine";     // 输出"nine"
            break;              // 跳出switch结构
        default:                // 如果n不匹配任何case
            cout << "out";      // 输出"out"
            break;              // 跳出switch结构
    }
    
    return 0;
}

思考

  1. 方法一使用多分支结构,代码较长但逻辑清晰
  2. 方法二使用多个独立的if语句,可能导致多个分支被执行(如果忘记添加return语句)
  3. 方法三使用嵌套的if结构,先检查范围,再处理具体值
  4. 方法四使用switch语句,对于这种基于单个整数值的多选择情况,代码最简洁清晰
  5. 在switch语句中,break语句非常重要,如果忘记添加,会导致”fall through”现象

13.3.2 每月天数

实验五:判断每月天数

题目描述:小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编程方法求出给定的月份有多少天。你能做到吗?

样例输入

2021 2

样例输出

28

代码实现

// 方法一:使用多分支结构
#include <iostream>
using namespace std;

int main() {
    int y, m;                   // 定义整数变量y和m表示年份和月份
    cin >> y >> m;              // 输入年份和月份
    
    if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12){
        cout << 31;             // 如果是31天的月份,输出31
    }else if(m == 4 || m == 6 || m == 9 || m == 11){
        cout << 30;             // 如果是30天的月份,输出30
    }else if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)){
        cout << 29;             // 如果是闰年的2月,输出29
    }else{
        cout << 28;             // 如果是平年的2月,输出28
    }
    
    return 0;
}

// 方法二:使用嵌套的if结构
#include <iostream>
using namespace std;

int main() {
    int y, m;                   // 定义整数变量y和m表示年份和月份
    cin >> y >> m;              // 输入年份和月份
    
    if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12){
        cout << 31;             // 如果是31天的月份,输出31
    }else if(m == 4 || m == 6 || m == 9 || m == 11){
        cout << 30;             // 如果是30天的月份,输出30
    }else{                      // 如果是2月
        if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)){
            cout << 29;         // 如果是闰年,输出29
        }else{
            cout << 28;         // 如果是平年,输出28
        }
    }
    
    return 0;
}

// 方法三:使用switch语句
#include <iostream>
using namespace std;

int main() {
    int y, m;                   // 定义整数变量y和m表示年份和月份
    cin >> y >> m;              // 输入年份和月份
    
    switch(m){                  // 根据月份m选择不同的分支
        case 1:                 // 一月
        case 3:                 // 三月
        case 5:                 // 五月
        case 7:                 // 七月
        case 8:                 // 八月
        case 10:                // 十月
        case 12:                // 十二月
            cout << 31;         // 这些月份都是31天
            break;              // 跳出switch结构
        case 4:                 // 四月
        case 6:                 // 六月
        case 9:                 // 九月
        case 11:                // 十一月
            cout << 30;         // 这些月份都是30天
            break;              // 跳出switch结构
        case 2:                 // 二月
            if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)){
                cout << 29;     // 如果是闰年,输出29
            }else{
                cout << 28;     // 如果是平年,输出28
            }
            break;              // 跳出switch结构
        default:                // 如果m不在1-12范围内
            cout << "Invalid month"; // 输出错误信息
            break;              // 跳出switch结构
    }
    
    return 0;
}

思考

  1. 方法一使用多分支结构,通过逻辑或连接多个条件,处理不同类型的月份
  2. 方法二使用嵌套的if结构,将2月作为特殊情况单独处理
  3. 方法三使用switch语句,利用”fall through”特性简化了代码,对于多个月份有相同天数的情况尤其有效
  4. switch语句中可以包含if语句,用于处理2月的特殊情况
  5. 闰年判断条件:能被400整除,或者能被4整除但不能被100整除