当前位置:网站首页>【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语句后面的语句。
边栏推荐
猜你喜欢
首届MogDB征文活动开启啦!
EasyNTS上云网关断电重启后设备离线是什么原因?
Confused!Ali was abused on the one hand, but was fortunate to be promoted to Huawei's technology, and successfully got the offer, with an annual salary of 40w
87. (Home of cesium) cesium heat map (topography)
荧光标记多肽FITC/AMC/FAM/Rhodamine/TAMRA/Cy3/Cy5/Cy7-Peptide
【汇编语言03】第2章 寄存器——实验1:查看CPU和内存,用机器指令和汇编指令编程
BinaryIndexedTrees树状数组
【计网】二、物理层
rhel8.3 系统下修改有线网卡配置信息实现联网
云渲染的优势与劣势
随机推荐
荧光标记多肽FITC/AMC/FAM/Rhodamine/TAMRA/Cy3/Cy5/Cy7-Peptide
注意力机制的详细理解
MySQL如何一劳永逸的永久支持输入中文
智能合约安全——delegatecall (2)
With the help of Kubernetes kubekey speed installation
Shell:循环语句
Mkke:为什么无法从Oracle 11g或12c升级到Oracle 23c?
dd命令:用于读取、转换并输出数据
2022/08/02------Ugly number
B628芯片电路图,B628升压IC的PCB布局PCB
基于ck+redash构建MySQL慢日志+审计日志展示平台
阿里资深架构师钟华曰:中台战略思想与架构实战;含内部实施手册
多线程 里面 使用AtomicInteger类,保证线程安全
CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-E
2022/08/02------丑数
剑指Offer 56.数组中数字出现的次数
ImportError: /lib/libgdal.so.26: undefined symbol: sqlite3_column_table_name
开篇-开启全新的.NET现代应用开发体验
MD5是对称加密还是非对称加密,有什么优缺点
动态接口比例性能测试实践