目录
1.概念介绍
在C语言中,switch语句是一种选择性控制结构,它允许测试一个变量等于多个值时的情况。每个可能的值称为一个case,且被测试的变量会对每个case进行检查。
switch语句的基本格式为:switch(表达式){case 常量1:语句1; break; case 常量2:语句2; break; default:语句n;}
。其中"表达式"通常是整型或字符型的变量,"case"后面的常量表达式必须与"表达式"的值完全匹配,才能执行该case后的语句。如果匹配成功,程序会执行相应的语句序列,直到遇到break语句才会跳出switch结构。
若"表达式"的值与所有case后的常量表达式都不匹配,则程序会执行default后的语句。需要注意的是,default语句是可选的,如果switch语句中没有default部分,且所有case均不匹配时,switch结构则会跳过,继续执行switch语句之后的代码。
此外,switch语句还支持嵌套使用,即在一个switch结构的内部,可以包含另一个完整的switch结构。这样的嵌套可以使用更复杂的条件判断和分支处理。
看不懂?没关系,从下面开始一点一点来
2.整除
想要学会使用switch,得先了解一些c语言整除的概念,俩int整形变量相除,得到的结果也是整形,只保留整数部分,小数部分直接去掉
比如
#include<stdio.h>c
int main()
{
int a=5;
int b=3;
printf("5/3=%d\n",a/b);
return 0;
}
3.switch的使用
在C语言中,switch
语句用于根据一个变量的值执行不同的代码块。以下是使用switch
的基本语法:
switch (变量) {
case 值1:
// 当变量的值等于值1时执行的代码
break;
case 值2:
// 当变量的值等于值2时执行的代码
break;
// ...其他case分支...
default:
// 当变量的值不匹配任何case时执行的代码
}
3.1判断整形变量
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数(1-3):");
scanf("%d", &num);
switch (num) {
case 1:
printf("你输入的是1。");
break;
case 2:
printf("你输入的是2。");
break;
case 3:
printf("你输入的是3。");
break;
default:
printf("你输入的不在1-3之间。");
}
return 0;
}
在这个示例中,我们首先从用户那里获取一个整数,然后使用switch
语句根据该整数的值执行不同的代码块。如果输入的整数是1、2或3,程序将输出相应的消息;否则,它将输出“你输入的不在1-3之间”。
3.2判断字符变量
当然,不仅可以判断整形变量,还能判断字符变量
#include <stdio.h>
int main() {
char c;
printf("请输入一个字符(x/y/z):");
scanf("%c", &c);
switch (c) {
case 'x':
printf("你输入的是x。");
break;
case 'y':
printf("你输入的是y。");
break;
case 'z':
printf("你输入的是z。");
break;
default:
printf("你输入的不在x/y/z之间。");
}
return 0;
}
3.3 switch中break的作用
在C语言中,break
语句用于跳出当前switch
语句的执行流程。它的作用是防止程序继续执行下一个case
分支中的代码,直到遇到break
或者switch
语句结束。
如果没有break
语句,当一个case
分支的条件满足时,程序会继续执行下一个case
分支中的代码,直到遇到break
或者整个switch
语句结束。这种情况被称为“贯穿”(fallthrough)。
例如,考虑以下代码:
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数(1-3):");
scanf("%d", &num);
switch (num) {
case 1:
printf("你输入的是1。");
case 2:
printf("你输入的是2。");
case 3:
printf("你输入的是3。");
break;
default:
printf("你输入的不在1-3之间。");
}
return 0;
}
在这个示例中,如果用户输入2,程序将输出:
你输入的是1。
你输入的是2。
你输入的是3。
这是因为没有使用break
语句,所以程序会贯穿到下一个case
分支并继续执行。但是,如果我们添加了break
语句,程序将只输出:
你输入的是2。
3.4综合运用
题目
根据用户输入的成绩(0-100分),判断其成绩等级并输出。如果成绩在90分以上(包括90分),则输出"成绩等级:A";如果成绩在80分以上(不包括90分),则输出"成绩等级:B";以此类推,直到成绩在60分以下,则输出"成绩等级:E"。如果用户输入的成绩不在0-100分之间,程序会输出"数据输入错误!"。
#include <stdio.h>
int main() {
int score;
printf("请输入成绩:");
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;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
printf("成绩等级:E\n");
break;
default:
printf("数据输入错误!\n");
break;
}
return 0;
}
代码解释:
scanf输入了一个0-100的变量,然后将其整除10丢给了switch
score的范围是0-100, 那switch/10的范围就是 0-10
- 当score为90-100时,score/10为9或者10
因为90-100都是A,所以先case 10:后没加break跳出,紧接着case 9了
- 当score为[80,90)时,score/10=8
- 当score为[70,80)时,score/10=7
- 当score为[60,70)时,score/10=6
- 当score为[0,60)时,score/10的范围为0,1,2,3,4,5
同理0-60都是不及格,都是E,所以case5: 、case4、...都没加break,直到case 0
当score不在范围内:执行default语句