C语言 选择(分支)

news2025/1/10 21:22:00

if 语句(分支语句/选择语句)

结构:

if ( expressio )
       statement

       如果对 expression 求值为真(非0),则执行 statement ;否则,跳过 statement 。与 while 循环一样,statement 可以是一条简单语句或复合语句。if 语句的结构和 while 语句很相似,它们的主要区别是:如果满足条件可执行的话,if语句只能测试和执行一次,而 while 语句可以测试和执行多次。
       通常,expression 是关系表达式,即比较两个量的大小。如果 expression 为真,则执行statement 。否则,忽略 statement 。概括地说,可以使用任意表达式,表达式的值为0则为假。statement 部分可以是一条简单语句,或者是一条用花括号括起来的复合语句(或块)。
PS:
注意,即使if语句由复合语句构成,整个if语句仍被视为一条语句。


if else语句

       if else形式,可以在两条语句之间作选择。
结构:

if ( expression )
      statement1
else
      statement2

       如果 expression 为真(非0),则执行 statement1;如果 expression 为假或0,则执行 else 后面的 statement2 。statement1 和 statement2 可以是一条简单语句或复合语句。C 并不要求一定要缩进,但这是标准风格。缩进让根据测试条件的求值结果来判断执行哪部分语句一目了然。
如果要在 if 和 else 之间执行多条语句,必须用花括号把这些语句括起来成为一个块。
       if 语句用于选择是否执行一个行为,而 else if 语句用于在两个行为之间选择。

条件运算符:?:
 

       C 提供条件表达式作为表达 if else 语句的一种便捷方式,该表达式使用 ?: 条件运算符。该运算符分为两部分,需要 3 个运算对象。(带一个运算对象的运算符称为一元运算符,带两个运算对象的运算符称为二元运算,以此类推。)条件运算符是C语言中唯一的三元运算符。
格式:

expression1?expression2;expression3

        如果 expression1 为真(非 0),那么整个条件表达式的值与 expression2 的值相同;如果expression1为假(0),那么整个条件表达式的值与 expression3 的值相同。

if ( expression1 )
      expression2;
else
      expression3;


多重选择else if

if ()
       statement
else
if ()
       statement
else
if ()
       statement
else
......


       该程序由一个 if else 语句组成,else 部分包含另一个 if else 语句,该 if else 语句的 else 部分又包含另一个 if else 语句。第2个 if else 语句嵌套在第 1个 if else 语句中,第3个 if else 语句嵌套在第2个 if else 语句中。回忆一下,整个 if else 语句被视为一条语句,因此不必把嵌套的 if else 语句用花括号括起来。当然,花括号可以更清楚地表明这种特殊格式的含义。

if ()
      statement
else if ()
      statement
else if ()
      statement
......
else
      statement


else 与 if  配对    

QQ图片20211009165845.jpg



         规则是,如果没有花括号,else与离它最近的if匹配,除非最近的if被花括号括起来。

         第1个例子的缩进使得else看上去与第1个if相匹配,但是记住,编译器是忽略缩进的。


总结:用if语句进行选择


关键字:if、else
一般注解:下面各形式中,statement 可以是一条简单语句或复合语句。表达式为真说明其值是非零值。
形式1:

if ( expression )
      statement
如果 expression 为真,则执行 statement 部分。


形式2:

if (expression)
      statement1
else
      statement2
如果 expression 为真,执行 statement1 部分;否则,执行 statement2 部分。


形式3:

if (expression1)
       statement1
else if (expression2)
       statement2
else
       statement3
       如果 expression1 为真,执行 statement1 部分;如果 expression2 为真,执行 statement2 部分;否则,执行 statement3 部分。


多重选择:switch和break


        使用条件运算符和 if else 语句很容易编写二选一的程序。然而,有时程序需要在多个选项中进行选择。可以用 if else if...else 来完成。但是,大多数情况下使用 switch 语句更方便。


break语句:让程序离开 switch 语句,跳至 switch 语句后面的下一条语句(见图7.4)。如果没有 break 语句,就会从匹配标签开始执行到 switch 末尾。

QQ图片20211011211744.jpg


格式

switch(整型表达式)
{
      case 常量1:
            语句
      case 常量2:
            语句
      ......
      default:
            语句
}


       要对紧跟在关键字 switch 后圆括号中的表达式求值。在程序清单 7.11中,该表达式是刚输入给 ch 的值。然后程序扫描标签列表,直到发现一个匹配的值为止。然后程序跳转至那一行。如果没有匹配的标签怎么办?如果有 default :标签行,就跳转至该行;否则,程序继续执行在 switch 后面的语句。
        程序根据 expression 的值跳转至相应的 case 标签处。然后,执行剩下的所有语句,除非执行到 break 语句进行重定向。expression 和 case 标签都必须是整数值(包括 char 类型),标签必须是常量或完全由常量组成的表达式。如果没有 case 标签与 expression 的值匹配,控制则转至标有 default 的语句(如果有的话);否则,将转至执行紧跟在 switch 语句后面的语句。


switch 和 if else 的选择


        如果根据浮点类型的变量或表达式来选用,就无法使用switch;
        如果根据变量在某范围内决定程序流的去向,使用switch就很麻烦,这种情况用if就很方便。


goto语句


       goto语句使程序控制跳转至相应标签语句。冒号用于分隔标签和标签语句。标签名遵循变量命名规则。标签语句可以出现在goto的前面或后面。

goto label;
     .
     .
     .
label:statement

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐两款不错的打字练习网站~

前言 对于写论文或者编程工作, 打字是其中十分耗费体力的一环,如果学会了盲打,那么可以起到事倍功半的作用。为了提高工作效率,我特意在网路上搜寻了大量打字练习的网站,最终发现有两款打字网站十分不错,同…

论文阅读-- A simple transmit diversity technique for wireless communications

一种简单的无线通信发射分集技术 论文信息: Alamouti S M. A simple transmit diversity technique for wireless communications[J]. IEEE Journal on selected areas in communications, 1998, 16(8): 1451-1458. 创新性: 提出了一种新的发射分集方…

搭建环境遇到的坑

office2010装完没法激活,因为没有关闭杀毒软件和防火墙。AWTK designer编译时报这个错,scons按这个方法装之后就好了。 装AWTK designer后,打不开软件,总是闪退,装了VS后就打得开了装IAR时找不到ActivationInfo.txt&am…

abp中iquery类使用orderBy接口功能报错问题

在后端写排序时,当使用如下OrderBy(排序字段)时,只引用System.Linq时如下错误: 只是因为缺少一个引用:System.Linq.Dynamic.Core  在如下类文件中引用 System.Linq.Dynamic.Core  注意:切记不能删掉System.Linq的引…

STM32 CubeMX ADC采集(HAL库)

STM32 CubeMX ADC采集(HAL库) STM32 CubeMX STM32 CubeMX ADC采集(HAL库)ADC介绍ADC主要特征一、STM32 CubeMX设置二、代码部分三,单通道轮询采样速度总结 ADC介绍 12位ADC是一种逐次逼近型模拟数字转换器。它有多达1…

springboot整合rabbitmq入门(三)

在上一篇文章中介绍了rabbitmq的fanout模式。今天继续学习另一种模式——direct模式。这种模式是rabbitmq的最简单一种模式。 首先创建一个名为helloDirect1的对列 Configuration public class DirectRabbitConfig {Beanpublic Queue directA(){return new Queue("hell…

【翻译】NCLS: Neural Cross-Lingual Summarization

Abstract 跨语言摘要(CLS)是为不同语言的源文件生成特定语言摘要的任务。现有方法通常将此任务分为两个步骤:摘要和翻译,导致错误传播的问题。为了解决这个问题,我们首次提出了一种端到端的CLS框架,我们称…

淘宝商品销量数据接口,淘宝商品销量数据API接口

淘宝商品销量数据接口是淘宝开放平台提供的一种API接口,通过该接口,商家可以获取到淘宝平台上某一商品的销量数据,包括商品的总销量、近期销量、销售趋势等。 该接口的使用方法是,商家先注册淘宝开放平台账号,申请App…

体会jdk17对于空指针的增强

jdk17 // 可以清楚的看出来a.b.c.num中由于c是空指针,所以导致异常 jdk11 // 只报第6行空指针了,但是因为哪个变量,不知道

打exit_hook,如何找exit_hook的偏移

最近在打比赛的时候,一眼就知道咋做了,打exit_hook为one_gadget 但是泄露出libc之后,没法找到exit_hook的偏移,所以没能拿到一血。搜了好多, 总结大概就是exit_hook不是真实存在的,而是函数指针&#xff0c…

ansible - Role

1、简介: Ansible 中的角色(Role)是一种组织和封装Playbook的方法,用于管理和组织 Ansible代码。它可以将任务和配置逻辑模块化,以便在不同的Playbook中共享和重用。 2、通过 role 远程部署并配置 nginx (1) 准备目…

【FISCO-BCOS】十七、角色的权限控制

目录 一、角色定义 二、账户权限控制 1.委员新增、撤销与查询 2.委员权重修改 3.委员投票生效阈值修改 4. 运维新增、撤销与查询 一、角色定义 分为治理方、运维方、监管方和业务方。考虑到权责分离,治理方、运维方和开发方权责分离,角色互斥。 治理…

pytorch_神经网络构建2(数学原理)

文章目录 深层神经网络多分类深层网络反向传播算法优化算法动量算法Adam 算法 深层神经网络 分类基础理论: 交叉熵是信息论中用来衡量两个分布相似性的一种量化方式 之前讲述二分类的loss函数时我们使用公式-(y*log(y_)(1-y)*log(1-y_)进行概率计算 y表示真实值,y_表示预测值 …

MyBatisPlus(十五)分页查询

说明 MyBatisPlus 提供了分页查询的功能。 MyBatisPlus 的分页功能,是通过分页插件实现的。要使用分页功能,需要配置分页插件的拦截器。 MyBatisPlus 的分页功能,可以通过内置的API接口实现;也可以通过自定义的 mapper#method …

第七章 正交实验法用例评审bug管理流程

一、正交试验法 利用因果图来设计测试用例时,作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图得到的测试用例数目多的惊人,给软件测试带来沉重的负担,为了有效地合理地减少测试的工时与费用,可利…

合并不同门店数据-上下合并

项目背景:线下超市分店,统计产品的销售数量和销售额,并用透视表计算求和 merge()函数可以根据链接键横向连接两张不同表,concat()函数可以上下合并和左右合并2种不同的合并方式。merge()函数只能横向连接两张表,而con…

海信电视U8“死磕”技术,家庭影音娱乐的体验突围

最近《奥本海默》上映,导致我无心工作,沉迷抢票。因为北京能播放该片IMAX 1.43画幅的影院只有一家,场场爆满,一票难求。 这次经历也让我对科技产业多了一点思考。流媒体火爆之后,电影发烧友还是会去影院看电影&#xf…

企业信息查询平台:天眼销正式上线!

在团队的不断努力下,天眼销平台终于和大家见面了!总所周知我们是一家数据服务提供商,作为西南数据交易所的数据提供商之一,之前主要是面向B端客户提供数据服务。现在,我们上线的天眼销(tianyanxiao.)主要面…

Android ncnn-android-yolov8-seg源码解析 : 实现人像分割

1. 前言 上篇文章,我们已经将人像分割的ncnn-android-yolov8-seg项目运行起来了,后续文章我们会抽取出Demo中的核心代码,在自己的项目中,来接入人体识别和人像分割功能。 先来看下效果,整个图像的是相机的原图&#…

增强现实抬头显示AR-HUD

增强现实抬头显示(AR-HUD)可以将当前车身状态、障碍物提醒等信息3D投影在前挡风玻璃上,并通过自研的AR-Creator算法,融合实际道路场景进行导航,使驾驶员无需低头即可了解车辆实时行驶状况。结合DMS系统,可以…