switch…case用法详解

switch…case用法详解

switch...case用法详解

在编程语言中,switch…case是一种常用的流程控制结构,它可以根据不同的条件执行相应的代码块。本文将详细介绍switch…case的用法,包括基本语法、特性以及一些常见的使用场景。

1. 基本语法

switch…case的基本语法如下:

switch (expression) {
  case value1:
    // code block 1
    break;
  case value2:
    // code block 2
    break;
  ...
  default:
    // default code block
}
  • expression是需要比较的表达式或值。
  • case后面跟随需要比较的值,如果表达式的值与某个case后面的值相等,则执行对应的代码块。
  • break用于跳出switch…case结构,避免执行其他case的代码块。
  • default是可选的,用于在其他case都不满足的情况下执行相应的代码块。

2. 示例代码

为了更好地理解switch…case的用法,下面给出一个示例代码:

#include <stdio.h>

int main() {
  int num = 2;

  switch (num) {
    case 1:
      printf("数字是1\n");
      break;
    case 2:
      printf("数字是2\n");
      break;
    case 3:
      printf("数字是3\n");
      break;
    default:
      printf("数字不是1、2、3\n");
  }

  return 0;
}

以上代码中,定义了一个变量num,通过switch…case结构判断num的值,并执行相应的代码块。根据num的不同值,控制台会输出不同的结果。

3. switch…case的特性

3.1 case穿透

在switch…case中,如果某个case的代码块没有包含break语句,则程序会继续执行后续case的代码块,称为”case穿透”。

#include <stdio.h>

int main() {
  int num = 2;

  switch (num) {
    case 1:
      printf("数字是1\n");
    case 2:
      printf("数字是2\n");
    case 3:
      printf("数字是3\n");
      break;
    default:
      printf("数字不是1、2、3\n");
  }

  return 0;
}

在上述代码中,当num的值为2时,输出结果将是:

数字是2
数字是3

由于case 2后面没有break语句,程序继续执行case 3的代码块。如果希望每个case执行完后立即跳出switch…case结构,需要在每个case的代码块中添加break语句。

3.2 多个case匹配同一代码块

有时候,多个case需要执行相同的代码块。在这种情况下,可以将多个case放在同一个代码块中。

#include <stdio.h>

int main() {
  int num = 2;

  switch (num) {
    case 1:
    case 2:
    case 3:
      printf("数字是1、2或3\n");
      break;
    default:
      printf("数字不是1、2、3\n");
  }

  return 0;
}

在上述代码中,当num的值为1、2或3时,输出结果都是”数字是1、2或3″。可以通过将多个case放在一起,避免重复编写相同的代码块。

3.3 case中的表达式

在switch…case中,每个case后面可以跟随一个表达式,用于更灵活地匹配条件。

#include <stdio.h>

int main() {
  int num = 2;

  switch (num) {
    case 1:
      printf("数字是1\n");
      break;
    case 2 + 1:
      printf("数字是3\n");
      break;
    case 4 / 2:
      printf("数字是2\n");
      break;
    default:
      printf("数字不是1、2、3\n");
  }

  return 0;
}

在上述代码中,使用了表达式来匹配不同的值。由于2 + 1的结果是3,因此当num的值为3时,输出结果是”数字是3″。同样地,由于4 / 2的结果是2,当num的值为2时,输出结果是”数字是2″。

4. switch…case的常见用法

switch…case结构在很多情况下都可以使用,下面介绍几个常见的用法。

4.1 字符串的匹配

#include <stdio.h>
#include <string.h>

int main() {
  char grade = 'B';

  switch (grade) {
    case 'A':
      printf("优秀\n");
      break;
    case 'B':
      printf("良好\n");
      break;
    case 'C':
      printf("及格\n");
      break;
    case 'D':
      printf("不及格\n");
      break;
    default:
      printf("无效的成绩\n");
  }

  return 0;
}

在上述代码中,根据字符变量grade的值判断成绩的等级,并输出相应的结果。字符的匹配也是switch…case结构的常见用法之一。

4.2 枚举类型的匹配

#include <stdio.h>

enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};

int main() {
  enum Weekday day = Wednesday;

  switch (day) {
    case Monday:
      printf("星期一\n");
      break;
    case Tuesday:
      printf("星期二\n");
      break;
    case Wednesday:
      printf("星期三\n");
      break;
    case Thursday:
      printf("星期四\n");
      break;
    case Friday:
      printf("星期五\n");
      break;
    case Saturday:
      printf("星期六\n");
      break;
    case Sunday:
      printf("星期日\n");
      break;
    default:
      printf("无效的星期几\n");
  }

  return 0;
}

在上述代码中,使用枚举类型Weekday来表示星期几,根据不同的值输出相应的结果。switch…case结构对于枚举类型的匹配非常方便。

5. 总结

本文详细介绍了switch…case的用法,包括基本语法、特性以及常见的使用场景。通过使用switch…case结构,可以根据不同的条件执行相应的代码块,在编程中起到很大的作用。无论是处理数字、字符还是枚举类型,switch…case都能够提供一种简洁、清晰的控制流程。

希望本文对于理解和使用switch…case有所帮助,同时也希望读者通过实践进一步探索和应用switch…case的用法,以充分发挥其在编程中的灵活性和便利性。

5.1 嵌套的switch…case

switch…case结构不仅可以嵌套在其他的控制结构中,而且也可以在其中嵌套其他的switch…case结构。

#include <stdio.h>

int main() {
  int num1 = 1;
  int num2 = 2;
  char op = '+';
  int result;

  switch (op) {
    case '+':
      switch (num1) {
        case 1:
          switch (num2) {
            case 1:
              result = num1 + num2;
              break;
            case 2:
              result = num1 + num2 + 1;
              break;
            default:
              result = num1 + num2 - 1;
          }
          break;
        case 2:
          result = num1 + num2 + 2;
          break;
        default:
          result = num1 + num2;
      }
      break;
    case '-':
      result = num1 - num2;
      break;
    default:
      printf("无效的操作符\n");
      return 1;
  }

  printf("结果: %d\n", result);

  return 0;
}

在上述示例代码中,我们嵌套了3层switch…case结构来计算两个数字的加法。根据不同的操作符和数字,程序会输出不同的结果。

5.2 Fall-through

在某些情况下,我们可能希望在匹配到某个case后,执行该case以及其后面的所有case代码块。这时就可以使用”fall-through”的技巧来实现。

#include <stdio.h>

int main() {
  int month = 3;

  switch (month) {
    case 1:
    case 2:
    case 3:
      printf("一季度\n");
      break;
    case 4:
    case 5:
    case 6:
      printf("二季度\n");
      break;
    case 7:
    case 8:
    case 9:
      printf("三季度\n");
      break;
    case 10:
    case 11:
    case 12:
      printf("四季度\n");
      break;
    default:
      printf("无效的月份\n");
  }

  return 0;
}

在上述代码中,我们根据不同的月份输出所属的季度。由于1到3月都属于一季度,我们可以将这三个case放在一起,并在最后的case中省略break语句。这样当月份是1、2或3时,执行第一个case后会继续执行相邻的case代码块,输出”一季度”。

5.3 使用switch…case解决问题

switch…case结构虽然简洁易懂,但也有一些需要注意的地方,比如不能用于浮点数的判断、不能用于范围判断等。但在许多实际问题中,switch…case依然是一种有效的解决方案。

#include <stdio.h>

int main() {
  int score;

  printf("请输入学生成绩:");
  scanf("%d", &score);

  switch (score / 10) {
    case 10:
    case 9:
      printf("优秀\n");
      break;
    case 8:
      printf("良好\n");
      break;
    case 7:
      printf("中等\n");
      break;
    case 6:
      printf("及格\n");
      break;
    default:
      printf("不及格\n");
  }

  return 0;
}

在上述代码中,我们通过switch…case结构根据学生成绩的整除10的结果判断等级,并输出相应的评价。这种方式可以简洁地处理一系列的条件判断,并提高程序的可读性。

6. 结论

switch…case是一种常用的流程控制结构,用于根据不同的条件执行相应的代码块。本文详细介绍了switch…case的基本语法、特性以及常见的使用场景。通过使用switch…case结构,我们可以在编程中更加灵活、清晰地控制流程,使代码逻辑更加易于理解和维护。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程