用switch语句实现分支结构
我们可以使用switch实现多分支选择结构(多分支也被称为多路分支)
语法:
switch (表达式)//表达式的结果只能是字符或者整型
{
case 常量表达式:// 这里一般使用自变量或者符号常量或者枚举
语句1;
break;
case 常量表达式2:
语句2;
break;
...
case 常量表达式n:
语句n;
default:
语句n+1;
break;//一般省略
}
流程图:
说明:
①switch后括号内的表达式可以是任意类型的表达式,但是表达式的值尽量是整型、字符型、枚举
②若表达式的值与某个常量表达式的值相等时,执行此case后面的语句;若没有相等的值时,执行default后面的语句。
③每个case后面的常量表达式的值必须不相同,否则出现矛盾。
④各个case出现的次序不影响执行结果。
⑤case后面的语句若无break语句,则执行完本case语句后会接着执行下面的case,直到遇到下面的break为止。
⑥多个case共用一组语句
案例:
需求:按照考试成绩的等级输出百分之分数段
分析:
- 设分段原则如下:
- A级:85~100段
- B级:70~84段
- C级:60~69级
- D级:<60段
- 输入其他字符时错误
- 设分段原则如下:
代码:
#include <stdio.h> // 案例1:按照考试成绩的等级输出百分制分数段 int switch_test1() { // 创建一个变量,用来存放考试等级 char grade; // 通过控制台输入一个字符 printf("请输入一个字符:\n"); scanf("%c",&grade); // 校验,根据等级输出分数段 Y switch(grade) { case 'A': printf("85~100\n"); break; case 'B': printf("70~84\n"); break; case 'C': printf("60~69\n"); break; case 'D': printf("<60\n"); break; default: printf("Error\n"); break;// 如果default在switch的最下面,break是可以省略,反之不能省略。 } } int main(int argc,char *argv[]) { switch_test1(); return 0; }
案例:
需求:若要求按照百分制考试分数输出等级。
分析:
- 若分段原则如下:
- 90~100 A级
- 80~89 B级
- 70~79 C级
- 60~69 D级
- 其他 E级
- 若分段原则如下:
代码:
#include <stdio.h> // 需求:若要求按照百分制考试分数输出等级 int switch_test2() { // 创建一个变量,存储成绩 int score; // 通过键盘输入一个成绩 printf("请输入考试成绩:\n"); scanf("%d",&score); // 校验,根据成绩输出等级 switch(score/10) { case 10: case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default: printf("Error\n"); } } int main(int argc,char *argv[]) { switch_test2(); return 0; }
案例:
需求:若要求按照百分之考试分数输出等级。
分析:
- 若分段原则如下:
- 90~100 A级
- 80~89 B级
- 70~79 C级
- 60~69 D级
- 其他 E级
- 若分段原则如下:
代码:
#include <stdio.h> // 需求:若要求按照百分制考试分数输出等级 int switch_test2() { // 创建一个变量,存储成绩 int score; // 通过键盘输入一个成绩 printf("请输入考试成绩:\n"); scanf("%d",&score); // 校验,根据成绩输出等级 switch(score/10) { case 10: case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default: printf("Error\n"); } } int main(int argc,char *argv[]) { switch_test2(); return 0; }