当前位置:网站首页>【C语言学习笔记(六)】分支与跳转(if、else、continue、break、switch)
【C语言学习笔记(六)】分支与跳转(if、else、continue、break、switch)
2022-08-03 18:35:00 【傻萌的路飞】
一、if语句
if语句被称为分支语句或选择语句,因为它相当于一个交叉点,程序要在两条分支中选择一条执行。if语句的通用形式如下:
if(expression)
statement
如果对expression求值为真(非0),则执行statement;否则,跳过statement。
if语句的结构和while语句很相似,他们的主要区别在于:如果满足条件可执行的话,if语句只能测试和执行一次,二while语句可以测试和执行很多次。
除了if语句还有if…else语句,if语句用于选择是否执行一个行为,if…else语句用于在两个行为之间选择。
二、逻辑运算符(&&、||、!)和条件运算符(?:)
在if语句和while语句中通常会使用关系表达式作为测试条件,有时候会把多个关系表达式组合起来使用,此时就需要用到逻辑运算符。有3种逻辑运算符,其分别是&&(与)、||(或)、!(非)。对于与运算,只有当运算符两侧的关系表达式都为真时,整个运算结果才为真;对于或运算,只有当运算符两侧的关系表达式都为假时,整个运算结果才为假。在这三个运算中,!运算符的优先级最高,&&运算符次之,||运算符优先级最低。
条件运算符?:可以作为表达if…else语句的一种便捷方式。该运算符分为两部分,需要3个运算对象,是C语言中唯一一个的三元运算符。条件表达式的通用形式如下:
expression1 ? expression2 :expression3
如果expression1为真(非0),那么整个表达式的值与expression2的值相同;如果expression1为假(0),那么整个条件表达式的值与expression3的值相同。
需要把两个值中的一个值赋给变量时,就可以用条件表达式。例,把两个值中最大值赋值给变量:
max = (a > b)?a:b; //如果a大于b,那么将max设置为a;否则,设置为b
三、循环辅助:continue和break
一般而言,程序进入循环后,在下一次循环测试之前会执行完循环体中的所有语句。continue和break语句可以根据循环体中的测试结果来忽略一部分循环内容,甚至结束循环。
- continue语句
3种循环(while、for、do…while)都可以使用continue语句。执行到该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代。如果continue语句在嵌套循环内,则只会影响包含该语句的内层循环。continue语句让程序跳过循环体的余下部分,那么,从何处开始呢?对于while和do while循环,执行continue语句后的下一个行为是对循环的测试表达式求值;对于for循环,执行continue后的下一个行为是对更新表达式求值,然后是对循环测试表达式求值。 - break语句
程序执行到循环中的break语句时,会终止包含它的循环,并继续执行下一阶段。简单理解就是当在循环中遇到break语句,直接退出当前的循环,执行循环体后面的程序。
break语句可以用于循环和switch语句中,但是continue只能用于循环中。如果switch语句在一个循环中,continue便可作为switch语句的一个部分。在此情况下,就像其他循环中一样,continue让程序跳出循环剩余部分,包括switch语句的其他部分。
四、switch语句
switch语句可以在一系列以整数作为标签的语句中进行选择。要对紧跟在关键字switch后圆括号中的表达式求值,如果紧跟在switch关键字后的测试条件的整数值与某标签匹配,程序就转至执行匹配的标签语句,然后在遇到break之前,继续执行标签语句后面的语句。如果没有break语句,就会从匹配标签开始执行到switch末尾。如下是switch语句的形式:
switch(expression)
{
case label1 : statement1 //使用break跳出switch
case label2 : statement2
default : statement3
}
注解:程序根据expression的值跳转至相应的case标签处。然后,执行剩下的所有语句,除非执行到break语句进行重定向。expression和case标签必须是整数值(包括char类型),标签必须是常亮或完全由常量组成的表达式,不能用变量作为case标签。如果没有case标签与expression的值匹配,控制则转至标有default的语句(如果有的话);否则,将转至执行紧跟在switch语句后面的语句。
边栏推荐
- MySQL如何一劳永逸的永久支持输入中文
- How does MySQL permanently support Chinese input once and for all?
- LyScript 内存交换与差异对比
- 开篇-开启全新的.NET现代应用开发体验
- 常见荧光染料修饰多种基团及其激发和 发射波长数据一览数据
- H.265网页播放器EasyPlayer获取视频流正常,但是播放出现黑屏是什么原因?
- MySQL 啥时候用表锁,啥时候用行锁?这些你都应该知道吧
- Big guy, who is free to help me to see what the problem is, I just read MySQL source print, and I just came into contact with flink.
- xxl-job 实现email发送警告的代码解析(一行一行代码解读)
- 大佬,谁有空帮忙看下这个什么问题呢,我就读取MySQLsource print下,刚接触flink,
猜你喜欢
随机推荐
剑指Offer 56.数组中数字出现的次数
Blender script 删除所有幽灵对象
云图说丨初识华为云微服务引擎CSE
MD5是对称加密还是非对称加密,有什么优缺点
你想知道的 Watch App 开发
@resource和@autowired的区别
[Notes] Introduction to machine learning
Online monitoring of UPS power supply and operating environment in the computer room, the solution is here
安装porterLB
Higher mathematics - chapter ten infinite series - constant term series
快手通过国际权威信息安全和隐私保护认证,安全能力达到国际领先水平
pytest接口自动化测试框架 | Jenkins集成初探
基于PHP7.2+MySQL5.7的回收租凭系统
从技术全景到场景实战,透析「窄带高清」的演进突破
VsCode预览Geojson数据
二叉树求和路径问题解答与注记
架构基本概念和架构本质
常见荧光染料修饰多种基团及其激发和 发射波长数据一览数据
Jenkins CI平台(二)
ASA归因:如何评估关键词的投放价值