目录
1.switch 多分支结构的定义
2.switch 结构的定义格式
3.switch 遵循的规则
4.程序示例
5.总结
1. switch 多分支结构的定义
1.1 分支结构的定义:
分支结构的定义请见 《C语言之初识 if_else 分支结构》 此篇博文,此处不在描述。点击此处可直接阅读…
1.2 switch 结构:
①. switch 是另外一种选择结构的语句,用来替代简单的、拥有多分支的 if_else 语句。
②. switch 大多数情况下是进行判断选择的。以C语言来说,switch(开关语句)常和 case break default 一起使用。
2. switch 结构的定义格式
switch (整型变量表达式) // switch 语句,即 “ 切换 ” 语句;case 即 “ 情况 ”
{
case 常量1: 语句块1; break; // break 是 C 语言中的一个关键字,专门用于跳出 switch 语句块1;break;
case 常量2: 语句块2; break;
case 常量3: 语句块3; break;
case 常量4: 语句块4; break;
...
case 常量n: 语句块n; break;
default: 语句;
break;
}
3. switch 遵循的规则
3.1 执行次序:
当变量表达式所表达的值与其中一个 case 语句中的常量值相符时,就执行此 case 语句后面的程序,并依次去执行后面所有 case 语句中的程序,除非遇到 break 语句跳出 switch 为止;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。如果常变量表达式的量都不相符,就执行 default 语句中的程序。
3.2 所写的任何 switch 语句都必须遵循以下规则:
①. 只能针对基本数据类型中的整型类型使用 switch,这些类型包括 int、char 等。对于其他类型,则必须使用 if 语句。
②. switch() 的参数类型不能为浮点数,字符串。(必须是整型类型)。
③. case 标签必须是常量表达式 ( constantExpression ),如 42 或者 ‘4’ + 20。
④. case 标签必须是唯一常量;也就是说,不允许两个 case 具有相同的常量值。
4. 程序示例
4.1 示例一:输入成绩等级,输出相应的分数区间
#include<stdio.h>
/** switch 多分支结构 输入等级成绩 输出相应的分数区间 */
int main()
{
char grade; //等级
printf("Input your grade(A,B,C,D,E): ");
grade = getchar();
switch (grade)
{
case 'A': printf("A(90 -- 100)\n");
break;
case 'B': printf("B(80 -- 89)\n");
break;
case 'C': printf("C(70 -- 79)\n");
break;
case 'D': printf("D(60 -- 69)\n");
break;
case 'E': printf("E( < 60)\n");
break;
default: printf("Input error!\n");
break;
}
return 0;
}
运行结果(部分截图)
4.2 示例二:输入成绩等级,输出相应的分数区间(修改示例一中不区分大小写情况)
#include<stdio.h>
/** switch 多分支结构 输入等级成绩 输出相应的分数区间 大小写都可 */
int main()
{
char grade; //等级
printf("Input your grade(A,B,C,D,E): ");
grade = getchar();
switch (grade)
{
case 'A':
case 'a': printf("A(90 -- 100)\n");
break;
case 'B':
case 'b': printf("B(80 -- 89)\n");
break;
case 'C':
case 'c': printf("C(70 -- 79)\n");
break;
case 'D':
case 'd': printf("D(60 -- 69)\n");
break;
case 'E':
case 'e': printf("E( < 60)\n");
break;
default: printf("Input error!\n");
break;
}
return 0;
}
运行结果(部分截图)
5. 总结
5.1 case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。
case 20: printf("...\n"); break; // 正确
case 2+3: printf("...\n"); break; // 正确
case 'A': printf("...\n"); break; // 正确 字符和整数可以相互转换
case 'A'+23: printf("...\n"); break; // 正确 字符和整数可以相互转换
case 9.5: printf("...\n"); break; // 错误 不能为小数
case a: printf("...\n"); break; // 错误 不能包含变量
case &a+10: printf("...\n"); break; // 错误 不能包含变量
case "error": printf("...\n"); break; // 错误 不能为字符串
5.2 default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么在 switch 中就什么都不执行,接着执行后续代码。
5.3 当第一个 case 后面没有语句或者没有 break 跳出时,则继续执行下一个 case 后面的语句,直到遇到 break 时在跳出 switch 结构。