C语言程序设计:switch 判断语句
1. 引入
在C语言中,switch 语句是另一种常用的控制结构,它可以根据不同的输入值执行多个不同的代码块。与 if 语句相比,switch 语句特别适用于需要根据一个变量的不同值来选择多个执行路径的场景。在某些情况下,使用 switch 语句可以使代码更加简洁和清晰。
2. switch 判断语句的基本语法
switch 语句的基本结构如下:
switch (expression) {
case constant1:
// 当 expression 等于 constant1 时执行的代码
break;
case constant2:
// 当 expression 等于 constant2 时执行的代码
break;
// 可以有多个 case
default:
// 如果没有 case 匹配,执行此部分代码
}
- expression:可以是任何整数类型或字符类型的表达式。它的值将与
case标签后面的常量进行比较。 - case constant1, constant2:每个
case后面跟一个常量值。如果expression的值与某个case的常量值相匹配,就会执行该case下的代码块。 - break:
break语句用于跳出switch语句,防止程序继续执行下一个case块的代码。如果省略break,程序会继续执行后续的case块,直到遇到break或switch语句结束。 - default:
default是可选的,如果没有任何case匹配expression的值,default部分的代码将被执行。
3. 语法 + 案例
3.1 简单的 switch 语句
我们首先来看一个简单的例子,输入一个数字,输出相应的星期几。
代码示例:
#include <stdio.h>
int main() {
int day;
printf("请输入一个数字(1-7):");
scanf("%d", &day);
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
default:
printf("无效输入,请输入1-7之间的数字。\n");
}
return 0;
}
解释:
- 用户输入一个数字,表示星期几。
switch语句根据输入的数字选择对应的case执行。如果输入的是 1,则输出“星期一”;输入 2 输出“星期二”,以此类推。- 如果输入的数字不在 1 到 7 之间,
default部分的代码将被执行,输出“无效输入”。
输出示例:
请输入一个数字(1-7):3
星期三
3.2 没有 break 的情况
如果在 switch 语句的某个 case 后面没有 break,程序将继续执行下一个 case 直到遇到 break 或 switch 语句结束。
代码示例:
#include <stdio.h>
int main() {
int day;
printf("请输入一个数字(1-7):");
scanf("%d", &day);
switch (day) {
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
break;
default:
printf("无效输入,请输入1-7之间的数字。\n");
}
return 0;
}
解释:
- 如果用户输入
1,程序会输出:
这是因为没有星期一 星期二 星期三 星期四 星期五 星期六 星期天break,所以程序会继续执行后面的case块,直到执行到break为止。
输出示例:
请输入一个数字(1-7):1
星期一
星期二
星期三
星期四
星期五
星期六
星期天
3.3 使用 default 语句
default 语句用于处理当所有 case 都不匹配时的情况。它是可选的,但在某些情况下(例如需要输入范围检查时),它非常有用。
代码示例:
#include <stdio.h>
int main() {
int number;
printf("请输入一个数字:");
scanf("%d", &number);
switch (number) {
case 1:
printf("数字是一\n");
break;
case 2:
printf("数字是二\n");
break;
default:
printf("无效数字\n");
}
return 0;
}
解释:
- 如果用户输入的数字是 1 或 2,程序会输出相应的提示。
- 如果用户输入其他数字,
default部分的代码会被执行,输出“无效数字”。
输出示例:
请输入一个数字:5
无效数字
4. 代码说明
switch语句:switch语句用于检查一个变量的多个可能值。它通过与每个case的常量进行比较来选择执行的代码块。case标签:case后面的常量值,如果switch表达式的值与case常量匹配,程序会执行该case下的代码块。break语句:break用来退出switch语句,防止程序继续执行后面的case代码。如果省略break,程序会从匹配的case开始,继续执行下一个case代码块,直到遇到break。default语句:default用来处理没有匹配到任何case的情况,它是可选的。
5. 练习题
-
题目:编写一个程序,输入一个数字,判断其是否为 1、2、3 中的一个,并输出相应的提示。如果不在这三个数中,输出“无效输入”。
答案:
#include <stdio.h> int main() { int num; printf("请输入一个数字:"); scanf("%d", &num); switch (num) { case 1: printf("输入的是1\n"); break; case 2: printf("输入的是2\n"); break; case 3: printf("输入的是3\n"); break; default: printf("无效输入\n"); } return 0; } -
题目:编写一个程序,根据用户输入的数字判断四季:
- 1-3 输出“春季”
- 4-6 输出“夏季”
- 7-9 输出“秋季”
- 10-12 输出“冬季”
答案:
#include <stdio.h> int main() { int month; printf("请输入一个月份数字:"); scanf("%d", &month); 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; } -
题目:编写一个程序,输入一个字母,判断它是元音字母(a, e, i, o, u)还是辅音字母。
答案:
#include <stdio.h> int main() { char letter; printf("请输入一个字母:"); scanf("%c", &letter); switch (letter) { case 'a': case 'e': case 'i': case 'o': case 'u': printf("这是一个元音字母。\n"); break; case 'A': case 'E': case 'I': case 'O': case 'U': printf("这是一个元音字母。\n"); break; default: printf("这是一个辅音字母。\n"); } return 0; }
解释:
- 这个程序会根据用户输入的字母判断它是元音字母还是辅音字母。
- 如果输入的是元音字母(不论大小写),则输出“这是一个元音字母”。
- 如果输入的是其他字母,则输出“这是一个辅音字母”。
输出示例:
请输入一个字母:a
这是一个元音字母。
6. 总结
switch 语句是C语言中非常有用的控制结构之一,适用于需要对一个变量的不同值进行判断并执行相应操作的场景。它可以让程序的逻辑更清晰,特别是在有多个条件分支时,比起一长串的 if-else if 语句,switch 语句显得更加简洁易懂。
switch语句适用于离散值判断,常常用于处理菜单选择、命令解析等任务。- 在使用
switch时,注意每个case后要使用break,否则程序会继续执行下一个case。 default是可选的,用于处理没有匹配的值。
通过练习 switch 语句的使用,你能够更加高效地编写有多重判断的程序。在面对多个可能的条件时,switch 语句将是你的好帮手。
希望本篇文章能够帮助你深入理解 switch 判断语句,并能灵活应用于实际的编程中!
评论区