C语⾔-switch选择结构
⽬录
switch 选择结构
/*
if(条件表达式){
代码块
}
switch(条件表达式){
case 整数:
语句;
break;
case 整数:
语句;
break;
default:
语句;
break;
}
// switch 会取出条件表达式的值,如果与 case 后⾯整数相等就会执⾏这个 case 下的语句,break 就会跳出,如果前⾯的都不满⾜,那么就会执⾏ default
// 1,拿到的条件表达式的值必须是整数才⾏
// 2,利⽤条件表达式的值与 case 后⾯的整数是否相等,如相等,就会执⾏该 case 后⾯的语句,
// 3,执⾏完该语句,遇到 break 就会结束整个 switch 语句,也就是说后⾯得有语句都不会执⾏
// 4,如果前⾯的 case 后⾯值与条件表达式的值不相等就会继续执⾏后⾯的 case
// 5,如果前⾯的条件表达式与 case 的整数都不相等就会执⾏ default 的case
*/
int age = 1;
switch (age) {
case 3:
printf("还在喝奶的阶段");
break; // 执⾏到 break 就会结束 switch 语句
case 6:
printf("该上⼩学了");
break;
case 18:
printf("该去⽹吧打游戏了");
break;
default:
printf("该好好上班,挣钱养家");
break;
}
switch 的结束
执⾏到相等的 case 后⾯的整数,遇到 break
执⾏到 switch 语句的⼤括号
如果执⾏到对应的 case 时,但是没有写 break,此时后⾯的 case 和 default 语句会失效,但是⾥⾯的代码块不会失效(case 的穿透问题) int age = 6; // age = 6 的时候
switch (age) {
case 3:
printf("还在喝奶的阶段");
break;
case 6:
printf("该上⼩学了"); // 执⾏到这个 case 的代码,但是没有写 break,后⾯的 case 和 default 代码就会失效.但是⾥⾯的代码块像 parinf 不会失效
// 没有写 break
case 18:
printf("该去⽹吧打游戏了");
// 没有写 break
default:
printf("该好好上班,挣钱养家");
// ,没有写 break
}
// 相当于执⾏了这个代码
int age = 6; // age = 6 的时候
switch (age) {
case 3:
printf("还在喝奶的阶段");
break;
printf("该上⼩学了"); // 执⾏到这个 case 的代码,但是没有写 break,后⾯的 case 和 default 代码就会失效.但是⾥⾯的代码块像 parinf 不会失效 // 没有写 break
// case 18:
printf("该去⽹吧打游戏了");
// 没有写 break
// default:
printf("该好好上班,挣钱养家");
// ,没有写 break
}
// 控制台输出:
该上⼩学了该去⽹吧打游戏了该好好上班,挣钱养家
最后⼀个case 或者 default后⾯的 break 可以省略,因为后⾯就是switch 的⼤括号,也是代表 switch 的结束
switch 的注意点
Switch的条件表达式必须是返回整数的格式,也就是说()中只能放整数
// 只有整数类型才可以哦
float num = 10.3f;
switch (num) { // 报错
case 10:
printf("是⼀个⼩数,会打印么?");
break;
default:
break;
}
// char 类型可以,char 类型可以转换为整数
char str = 'a';
switch (str) {
case 'a':
printf("char 类型是可以的,因为 char 类型可以转换为整数,char 类型的底层是阿斯克码 ");
break;
default:
printf(" ");
break;
}
case 的取值必须是整数,或者能够转换为整数的类型
case 的取值不能重复
int num = 10;
switch (num) {
case 10:
printf("10");
break;
case 10: // 报错,case 不能重复
printf("10");
break;
default:
printf(" ");
break;
}
case 后⾯不能放变量
因为系统在编译的时候会对 switch后⾯的 case进⾏优化,会根据后⾯ case 的值⽣成⼀个取值表 int num = 10;
switch (10) {
case num: // 报错,不能放变量
printf("10");
break;
default:
printf(" ");
break;
}
default 的位置
⽆论 default 的位置写在哪个位置,都是最后执⾏
如果 default 放在前⾯了,那么就⼀定要加上 break,不能省略
只要 default 满⾜,那么后⾯的 case 也会失效,所以注意写上 break
switch 练习
/*
要求⽤户输⼊⼀个分数,根据⽤户输⼊的分数输出对应的等级
*/
printf("请您输⼊⼀个分数,已回车结束\n");
int garde = 0;
scanf("%i",&garde);
// 第⼀种⽅法
switch (garde / 10) { // 分数除以 10 再利⽤隐式转换为 int 类型就可以得到整数
case 10: // 利⽤ case 的穿透
case 9:
printf("A");
break;
case 8:
printf("B");
break;
case 7:
printf("C");
break;
case 6:
printf("D");
break;
default:
printf("E");
break;
}
// 第⼆种⽅法
if (garde >= 90 && garde <= 100){
printf("A");
}else if (garde >= 80 && garde <= 89)
{
printf("B");
}else if (garde >= 70 && garde <= 79)
{
printf("C");
}else if (garde >= 60 && garde <= 69)
{
printf("D");
}else if (garde >= 0 && garde <= 59)
{
printf("E");
}else{
printf("输⼊成绩错误");
}
// 第三种⽅法(巧妙的利⽤ if else if 的结构,从上往下执⾏,第⼀条不满⾜执⾏到第⼆条,执⾏到后⾯的 else if 代表肯定前⾯的条件不符合.所以) if (garde < 0 || garde > 100){
printf("您输⼊的分数不对");
}else if (garde >= 90 && garde <= 100){
printf("A");
}else if (garde >= 80)
{
printf("B");
}else if (garde >= 70)
{
printf("C");
}else if (garde >= 60)
{
printf("D");
}else{
printf("E");
}
return 0;
}
switch 的局限性
在开发中中 if ⽐较多,⽐较灵活
如果说是对固定的值,进⾏判断,并且这些值的数量不多的时候可以使⽤ switch
从理论上来说 switch的性能效率要⽐ if ⾼
// 练习 2
/*
// 从键盘输⼊⼀个数字,判断其是哪个季节
printf("请您输⼊⼀个数字,以回车结束");
int num = 0;
scanf("%i",&num);
switch (num) {
case 12:
case 1:
printf("春节");
break;
case 6:
case 7:
case 8:
printf("夏季");
break;
case 9:
case 10:
case 11:
printf("秋季");
break;
default:
printf("你输⼊的是啥玩意");
break;
}
*/
// 写⼀个计算器,⽤户输⼊⼀个数,操作符,再⼀个数,根据操作符计算结果
/*
printf("请您输⼊第⼀个数,操作符,和第三个数,以逗号分割,以回车结束\n");
printf("操作符:1:+,2:-,3:/,4:*\n");
int num1,num2,num3;;
scanf("%i,%i,%i",&num1,&num2,&num3);
switch (num2) {
case 1:
printf("两数相加:result = %i\n",num1+num3);
break;
case 2:
printf("两数相减:result = %i\n",num1-num3);
break;
case 3:
printf("两数相除:result = %i\n",num1/num3);
break;
case 4:
printf("两数相乘:result = %i\n",num1*num3);
break;
default:
printf("num2只接受 1-4 的整数");
break;
}
*/
printf("请您输⼊第⼀个数,以回车结束\n");
int num1,num2;
scanf("%i",&num1);
printf("请您输⼊操作符,以回车结束\n");
// char temp;
// scanf("%c",&temp);
getchar(); // 使⽤getchar()将前⾯的\n 取出来
char op;
scanf("%c",&op); // 此时注意前⾯有⼀个scanf 函数,输⼊了回车后此时输⼊缓冲区中还是保留的\n,所以第⼆个 scanfr 让输⼊⼀个%c 类型的字符时就不会让你输⼊了 printf("请您输⼊第⼆个数,以回车结束\n");
scanf("%i",&num2);
int result = -1;
switch (op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
default:
printf("只接受 '+','-','*','/' 操作符");
break;
}
printf("result = %i\n",result);
switch case判断字符串return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论