首页 > 其他分享 >选择结构:if 和 switch 的使用

选择结构:if 和 switch 的使用

时间:2025-01-23 21:29:57浏览次数:3  
标签:语句 case default 选择 switch break 表达式 结构

    C语言是结构化的程序设计语言,这里的结构包括顺序结构、选择结构和循环结构,而这三种结构也恰恰组合成了我们日常生活中面临的所有事情。本文将介绍这三种结构中的选择结构,它主要通过 if 语句、switch 语句来实现。

关于 if

    在 C 语言中,if 引导的分支语句用于根据条件来决定程序的执行路径。它的基本形式是:

                             if(表达式)
                             {
                             语句;
                             }

    当表达式的条件为真时,大括号内的语句将被执行;若表达式的条件为假,则大括号内的语句被跳过。例如:

    上述代码中,由于 a>5 为真,所以会输出 "数字大于 5 "。但是当 a 的值小于等于 5时,就不会输出任何结果了。此时,我们可以使用 else 与 if 搭配,形成有双分支的 if...else 结构(if 后面的表达式为真时执行第一个分支,表达式为假时执行第二个分支),更全面地处理问题。

    此外,多个 if 和 else 的组合也可以实现多分支选择,程序会从上到下依次判断每一条表达式,当某个表达式为真时,执行对应的语句,然后跳出整个 if...else 结构。如果所有表达式都为假,则执行最后的 else 中的语句,比如以下程序满足第二个条件,故输出 "数字在 5 到 10 之间"。

    if 语句还支持嵌套使用,即在一个 if 或 else 的语句块中可以再包含另一个 if 语句,例如: 

    有了嵌套 if 语句,我们就可以解决更多更复杂的问题。但是在使用多个 if 和 else 时要注意逻辑和格式问题,当 if( ) 后面只有一条语句时,{ } 其实可以省略,但当有多条语句时,{ } 就必须要加上,否则就达不到预期的逻辑效果。此外,当程序中的 if 和 else 过多导致我们看不懂程序时,要始终记住:else 总是跟最接近的 if 匹配。

关于 switch

    除了 if 以外,switch 语句也能用来实现分支结构。这是一种特殊的 if...else 语句,用于判断条件有多个结果的情况,它的基本形式是:

    上面代码中,根据 switch 后面的表达式计算出不同的值,执行相应的 case 分支。如果在所有 case 分支里找不到对应的值,就执行 default 分支。使用时要注意:1.switch 后面的表达式必须要是整形表达式;2.case 后面的值必须是整型常量表达式;3.case 与后面的常量表达式之间必须要有空格;4.常量表达式后面要有冒号 ( : )

关于 break

    另外,关于代码中的 break,其作用是跳出 switch 语句。在 case 分支的最后面加上 break,这样在这个分支的代码执行完毕后才能跳出这个 switch 语句,实现分支效果。当然,break 也不是每个 case 语句都得有,要根据实际情况具体分析,如果某一个 case 语句的后边没有 break 语句,代码会继续向下执行(有可能会执行到其它 case 语句中的代码),直到遇到 break 或者 switch 语句才结束,有时候我们要利用这一特性去实现一些特定的代码因而有意不加 break。 比如,如果我们要设计一个程序实现需求:输入 1-5 时显示 “工作日”,输入 6-7 时显示 “休息日”。那么可以采用以下代码:

关于 default 

     而上面代码最后用到的 default 语句,则是用于解决不匹配任何一个 case 的情况,比如在上面代码运行起来时输入数字 10,不符合任何一个 case,就会执行 default 中的语句。如果这里没有 default,那么 switch 语句将不执行任何操作,直接继续执行 switch 语句之后的代码。其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,但我们还是通常把 default 分支放在最后,因为这样更符合代码的阅读习惯,也更便于理解代码的逻辑。

    与 break 一样,default 语句也不是必需的。如果确定 switch 表达式的值只会是某些特定的值,且不需要处理其他情况时,可以不写 default 分支。

    default 分支后面也可以不使用 break 语句,如果没有 break,当执行完 default 分支的语句后,会继续执行下一个 case 分支的语句,这可能会导致不符合预期的结果,所以一般情况下建议在 default 分支末尾加上 break 语句。

总结

    以上便是对 if 语句和 switch 语句的全部介绍,它们都是用来实现条件判断的重要语句。相对来说,if 语句适用于条件比较复杂,需要根据不同的逻辑条件进行判断的情况,例如判断一个数是否落在某个特定范围内,或者判断多个不同类型的条件凑一块的情况等;而 switch 语句更适用于对一个整型或枚举类型(简单理解就是你提前规定好的几个特定值)的表达式进行有限个单独分开的值的判断,例如,根据用户输入的数字选择不同的菜单选项,或者根据月份判断季节等。

    

标签:语句,case,default,选择,switch,break,表达式,结构
From: https://blog.csdn.net/2402_89112112/article/details/145271210

相关文章

  • 数据结构3——栈的顺序与链式存储
    前言经过前面对线性表的顺序存储结构和链式存储结构的熟悉,那么面对接下来栈的这两种存储结构也应该得心应手了。其实接下来的栈、队列、树、图结构都是基于线性表的顺序、链式存储结构构建的。栈结构在网页跳转、游戏页面等场景中常用到,其“先进后出”“后进先出”的数据访......
  • 循环结构程序设计
    循环语句1、用while语句实现循环1.1while语句的一般形式如下1.2流程图如下1.3while循环举例2、用do-while语句实现循环2.1do-while语句的一般形式和执行过程2.2流程图如下3、for循坏3.1for语句的一般形式和执行过程3.2流程图如下3.3for循环语句举例4、循环语......
  • 如何系统优化MySQL【表结构优化、索引优化】(上篇)
    ......
  • 模型类别计较和选择说明
    我来为您解释这几种模型的区别和应用场景:基模型(BaseModel)定义:通过大规模预训练得到的原始模型,如GPT-3、BERT、LLaMA等特点:具有广泛的通用能力参数量较大训练成本高未经过特定任务优化使用场景:作为其他模型的起点需要通用语言理解能力的场景资源充足且需要自定......
  • JAVA与数据结构-线性表
    目录一.线性表的概念二.线性表的关系及分类三.数组与顺序表四.链表1.静态链表(链表的的数组底层实现)2.循环链表3.双向链表五.栈1.栈的概念2.栈的底层实现3.共享空间栈4.逆波兰表达式(后缀表达式)5.栈与递归 六.队列1.队列概念2.队列的底层实现3.循环队列七.链......
  • 测试工程师效率提升系列第二篇:测试用例管理自动化——从 Excel 到结构化数据
    在测试工程师的日常工作中,测试用例管理是一个重要环节。很多团队仍然依赖于Excel表格来管理测试用例,包含用例描述、步骤、预期结果等内容。然而,这种方式存在以下痛点:难以复用:Excel文件往往是静态的,无法直接与自动化脚本关联。易出错:人工更新用例容易遗漏或引入错误,特......
  • 初步认识数据结构
    初步认识数据结构本文章可以帮助你初步的去认识数据结构1.什么是数据结构官方定义:在计算机科学中,数据结构是一种数据组织,管理和存储的格式。它是相互之间存在一种或者多种特定关系的数据元素集合。数据在计算机科学中,数据是所有能输入计算机并被计算机程序处理的符号的......
  • 如何利用openssl定义新的数据结构
        依赖openssl实现国密相关的结构时,虽然openssl中也有类似结构定义,但因为oid的差异、国密算法支持度不高等原因导致无法直接使用openssl接口,这时就需要自定义数据结构。实战:依据GMT0033定义时间戳响应//定义数据结构typedefstructSignerInfo_st{ASN1_INTEG......
  • 【9.8】树结构-使用字典树解单词搜索 II
    一、题目        给定一个 mxn二维字符网格 board 和一个单词(字符串)列表words, 返回所有二维网格上的单词 。        单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字......
  • Rust代码中有一个Vec集合对象,此集合中存放了一些结构体实例,这个Vec集合对象的生命周期
    eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee当你需要长生命周期的Vec并想在多个地方引用它内部的结构体实例时,有几种方法可以实现这种设计。以下是不同场景的解决方案:方法1:使用索引引用Vec元素如果Vec本身的生命周期长,而你只是需要访问其元素,可以通过索引......