Switch case 使用及嵌套语法

目录

switch case 语句讲解

Switch 也可以嵌套


switch case 语句讲解

代码中 虽然没有 限制 if else  能够处理的 分支 数量 ,但当分支过多时 ,

用 if else 处理会不太方便 ,而且容易出现  if else  配对出错的情况 。

所以 对于这种情况 ,实际开发中一般使用  switch  语句代替 。


switch  是另外一种 选择结构 的语句 , 用来代替简单的、

拥有多个分支的  if else 语句 ,基本格式如下 :

switch(表达式){
    case 整型数值1: 语句 1;
    case 整型数值2: 语句 2;
    ......
    case 整型数值n: 语句 n;
    default: 语句 n+1;
}

它的执行过程是:
1) 首先计算 “表达式” 的值 ,假设 为 m 。
2) 从第一个 case 开始 ,比较 “整型数值1” 和 m ,如果它们相等

就执行冒号 :  后面的所有语句 ,也就是从 “语句1” 一直执行到 “语句n+1” ,

而不管后面的 case 是否匹配成功 。
3) 如果 “整型数值1” 和 m 不相等 ,就跳过冒号后面的 “语句1” ,

继续比较第二个 case 、第三个 case ……

一旦发现和某个整型数值相等了 ,就会执行后面所有的语句 。

假设 m 和 “整型数值5” 相等 ,那么就会从 “语句5” 一直执行到 “语句n+1” 。
4) 如果直到最后一个 “整型数值n” 都没有找到相等的值,

那么就执行  default  后的 “语句 n+1” 。

需要重点强调的是,当和某个整型数值 匹配成功 后,

会执行该分支以及后面所有分支的语句。


这显然不是我们想要的结果 ,为了达到这个目标 ,

必须要在 每个分支 最后 添加 break; 语句 。
break 是 C 语言中的一个 关键字 ,专门用于 跳出 switch 语句

所谓 “ 跳出 ” ,是指一旦遇到 break ,就不再执行 switch 中的任何语句 ,

包括当前分支中的语句和其他分支中的语句 ;

也就是说 ,整个 switch 执行结束了 ,接着会执行整个 switch 后面的代码 。


最后需要说明的两点是:

1、default最后一个分支 ,匹配后不会再执行其他分支,

所以也可以不添加  break;  语句。

2、default 不是必须的 。

当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。


Switch 也可以嵌套

把一个 switch 作为一个外部 switch 的语句序列的一部分,

即可以在一个 switch 语句内使用另一个 switch 语句

即使 内部 和 外部 switch 的 case 常量包含共同的值,也没有矛盾。

示例 :

例子 : 

#include <stdio.h>

int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;

   switch(a) {
      case 100: 
         printf("这是外部 switch 的一部分\n");
         switch(b) {
            case 200:
               printf("这是内部 switch 的一部分\n");
         }
   }
   printf("a 的准确值是 %d\n", a );
   printf("b 的准确值是 %d\n", b );

   return 0;
}

前端 Vue 项目内所用 :

switch (item.type) {
  case 'RADIO':
    // 单选题
    ......
    break;
  case 'CHECKBOX':
    // 多选题
    ......
    break;
  case 'FILLBLANK':
    // 填空题
    switch (item.quInputType) {
      case '1':
        // 文本框
        ......
        break;
      case '2':
        // 日期框
        ......
        break;
      case '3':
        // 数字框
        ......
        break;
    }
    break;
  default:
    break;
}
  • 52
    点赞
  • 215
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
计算机基础程序设计复习题 一、单项选择题 1. 计算机的基本组成部分包括中央处理器、存储器、输出设备和( ) A. 键盘 B. 鼠标 C. 显示器 D. 输入设备 2. 下列属于计算机病毒特征的是( ) A. 模糊性 B. 高速性 C. 传染性 D. 危急性 3. C#程序的( )方法被称为程序的大门,应用程序从这里开始运行。 A. Main() B. Begin() C. Start() D. main() 4. 可用作C#程序用户标识符的一组标识符是( ) A. void define +WORD B. a3_b3_345YN C. for –abe Case D. 2A.do sizeof 5. 下列代码输出的结果是( ) int i=0;i=++i+8; Console.WriteLine(i++); A. 8 B. 9 C. 10 D. 11 6. 以下类型中,不属于值类型的是( ) A. 数值类型 B. 布尔类型 C.字符类型 D. 类类型 7. 设"int a=12;",则执行完语句"a+=a*a;"后,a的值是( ) A. 12 B. 144 C. 156 D. 288 8. 下列关于switch语法结构的描述不正确的是( ) A.switch条件判断接收int、char、string三种类型 B.switchcase块,必须要加上break子句 C.switchcase块,可以没有break D.switch的default块,在条件都不满足的情况下执行 9. 有定义语句: int[,]a=new int[5,6]; 则下列正确的数组元素的引用是( ) A. a(3,4) B. a(3)(4) C. a[3][4] D. a[3,4] 10. 在C#语言的循环结构中,首先执行一次,然后再判断条件的循环结构是( ) A. while循环 B. do…while循环 C. for循环 D. foreach循环 11. 为了避免嵌套的条件分支语句if…else…的二义性,C语言规定:C程序中的else总是与( )组成配对关系。 A. 缩排位置相同的if B. 在其之前未配对的if C. 在其之前未配对的最近的if D. 同一行上的if 12. 让控件不可见的属性是( ) A. Cursor B. Enabled C. Dock D. Visible 13. DateTime类的( )属性可以获得系统的当前日期和时间。 A. Now B. Today C. Tomorrow D. ThisTime 14. 以下语句中,不正确的有( ) A. int[] a; B. int a[]=new int[2,3]; C. int[]a={1,3}; D. int a=new int[]{1,3}; 15.文本框控件的( )属性用来设置其是否是只读的。 A. ReadOnly B. Locked C. Lock D. Style 16. 在ADO.NET中,( )用来从数据源中获取只读的数据。 A. DataSet B. Command C. DataReader D. DataAdapter 17. 软件生命周期中花费时间最多的阶段是( ) A. 软件定义 B. 软件开发 C. 软件测试 D. 软件运行维护 18. 在ADO.NET中,下列关于DataSet对象的说法有误的是( ) A. 可以向DataSet的表集合中添加新表 B. DataSet中的数据发生改变之后,它会自动更新数据库中对应的数据 C. DataSet就好像是内存中的一个"临时数据库" D. 对DataSet中的数据可以执行读写操作 19. 程序流程图、N-S图和PAD图是( )使用的表达工具。 A. 设计阶段的概要设计 B. 设计阶段的详细设计 C. 编码阶段 D. 测试阶段 20. 在软件编码阶段,下列做法不宜采用的是( ) A. 使用标准的控制结构 B. 尽可能使用库函数 C. 程序编写先考虑清晰性 D. 尽量使用GOTO语句 21. 下列选项中内聚性最强的是( ) A. 顺序内聚 B. 过程内聚 C. 逻辑内聚 D. 功能内聚 22. 结构化设计方法定义了一些不同的映射,利用这些映射可以实现( ) A. 从数据结构导出程序结构 B. 从模块结构导出程序结构 C. 从模块结构导出数据结构 D. 从数据流图导出软件结构图 23. 在C#中,若要将磁盘中的文件删除,应使用File类的( ) A. Copy B. Delete C. Move D. Create 24. 在C#中,基本的文件操作是由( )命名空间提供的类来实现的。 A. System.Data B. System.Configuration C. System.Collections

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值