switch选择结构
- 格式:ppt
- 大小:894.00 KB
- 文档页数:18


C语言中switch语句是一种选择结构,根据表达式的值选择执行哪个分支。
在switch语句中,我们可以使用default关键字来定义一个默认分支,当表达式的值不匹配任何case时就会执行default分支。
1. default的位置default分支通常放在switch语句的作为最后的备用选项。
在switch 语句中,表达式的值会和每个case的值依次比较,如果都不匹配,才会执行default分支。
代码示例:```cswitch (expression) {case value1:// do somethingbreak;case value2:// do somethingbreak;default:// do somethingbreak;}```2. default的作用default分支的作用是处理表达式的值不在任何case的取值范围内时的情况。
当表达式的值不匹配任何case时,会直接执行default分支内的代码。
default分支可以用来处理一些特殊情况或错误情况,保证程序的健壮性。
3. default的使用场景- 处理非法输入:在实际的程序中,用户输入的数值不一定总是符合预期,此时可以使用default分支来处理非法输入的情况,给出提示或进行错误处理。
- 处理未知情况:有时候我们可能无法穷尽所有可能的取值,这时可以使用default分支来处理未知情况,保证程序的完整性。
- 防止意外情况:即使在正常情况下,也可能出现意外的取值,使用default分支可以作为一个备用的处理方式,防止意外情况导致程序崩溃或出现异常行为。
4. default的注意事项- default分支并不是必需的,可以根据实际情况选择是否添加default分支。
- 默认情况下,如果没有匹配的case且没有default分支,switch语句就不会执行任何操作,直接跳过。
- 在default分支的通常会使用break语句来结束switch语句,但这并不是必需的。
c中switch用法C语言中的`switch`语句是一种在多个选项之间进行选择的控制结构。
它提供了一种简洁而有效的方式来编写选择性的代码块。
本文将详细介绍`switch`语句的用法、语法和一些示例。
1. `switch`语句的基本用法`switch`语句的基本结构如下:cswitch (expression) {case constant1:代码块1break;case constant2:代码块2break;...case constantN:代码块Nbreak;default:默认代码块}其中,`expression`是一个表达式,它的值会与`case`语句中的常量进行比较。
如果匹配成功,则执行对应`case`后面的代码块,并跳出`switch`语句。
如果没有匹配成功,则判断是否有`default`语句,如果有则执行`default`后面的代码块,否则直接跳出`switch`语句。
2. `switch`语句的示例为了更好地理解`switch`语句的用法,我们来看几个示例。
# 2.1 根据星期输出相应的信息c#include <stdio.h>int main() {int day;printf("请输入星期数(1-7): ");scanf("%d", &day);switch (day) {case 1:printf("周一是工作日\n");break;case 2:case 3:case 4:case 5:case 6:printf("周二到周六也是工作日\n");break;case 7:printf("周日是休息日\n");break;default:printf("输入错误\n");}return 0;}在上述代码中,我们根据输入的星期数,使用`switch`语句输出相应的信息。
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 不会失效// 没有写 breakcase 18:printf("该去⽹吧打游戏了");// 没有写 breakdefault: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 也会失效,所以注意写上 breakswitch 练习/*要求⽤户输⼊⼀个分数,根据⽤户输⼊的分数输出对应的等级*/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);return 0;}。