admin管理员组文章数量:1794759
【C语言】分支语句详解
一、if语句
- if语句使用格式如下:
if (表达式)
语句
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏,C语言中0为假,非0为真 接下来我们举个例子就懂了,我们试着来实现:输入一个整数,判断是否为奇数,首先判断方法就是让这个整数模2,如果返回1,那么它就是一个奇数,示例如下:
- else 如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表⽰呢?就要用上else(其他的情况),在这里也可以翻译为否则,写法如下:
if (表达式)
语句1
else
具体示例:其含义为,输入一个整数,判断是否为奇数,是奇数就打印,否则为偶数,再打印
- 分支语句中包含多条语句: 默认if和else都只能控制一条语句,比如:
可以发现,虽然输入的年龄小于18,可是还是会打印“可以谈恋爱了”,但是不会打印“成年了”,这就是上面说的if默认只能控制一条语句,那怎么可以让它控制多条语句呢,只需要把要一起控制的语句用大括号括起,如图:
这下输入15就不会打印“可以谈恋爱了”。同理,如果else后想要控制多条语句,也要用大括号括起。
- 嵌套if: 在 if else 语句中,else 可以与另⼀个 if 语句连⽤,构成多重判断。⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
上面的if语句就嵌套在else语句中。再比如实现这样的程序:输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:⾮正数,如图:
如上就是对if语句进行了嵌套。
if语句练习
输⼊⼀个⼈的年龄 如果年龄<18岁,打印"少年" 如果年龄在18岁⾄44岁打印"⻘年" 如果年龄在45岁⾄59岁打印"中⽼年" 如果年龄在60岁⾄89岁打印"⽼年" 如果90岁及以上打印"⽼寿星"
答案放在本文最下方
二、关系操作符
C 语⾔⽤于⽐较的表达式,称为 “关系表达式”,⾥⾯使⽤的运算符就称为“关系运算符”,主要有下⾯6个
- 运算符分类 • >是大于运算符 • < ⼩于运算符 • >= ⼤于等于运算符 • <= ⼩于等于运算符 • == 相等运算符 • != 不相年龄在表达等运算符
- 关系表达式返回值:一般返回逻辑值,默认返回0表示假,返回1表示真,也就是如果表达式成立返回1,不成立返回0。要注意的一点是:C语言中0是假,非0为真,这里只是用1表示真,并不表示真就是1
- 注意事项: (1)不要把相等操作符==写成了赋值操作符=,容易出现逻辑错误,比如if( n = 3),原本想判断n是否等于3,现在的含义是把3赋值给n,是永远为真的条件 (2)多个关系符不能连用,比如想表达年龄在18到30岁之间时,不能写成18=<age<=30,编译器会报错,要写成age >=18 && age <=30,在后面的逻辑操作符会详细讲到
三、条件操作符
条件操作符属于三目操作符,也是C语言唯一一个三目操作符,需要用三个操作数,大致用法是: 条件 ?表达式1 : 表达式2,如果条件成立,即条件为真,那么执行表达式1,条件不成立,即条件为假,执行表达式2,比如将如下代码改造为使用条件操作符的表达式:
解析:b后面用的赋值操作符,就是把表达式a >5 ? 3 : -3的结果赋给b,如果输入的值大于5,那么就执行表达式1,结果就为3,如果输入的值小于等于5,那么执行表达式2,结果就为-3。 从该例子可以看出,一些简单的条件判断就可以使用条件操作符,会比if语句简单一些
条件操作符练习
使⽤条件表达式实现找两个数中较⼤值
答案在本文最后
四、逻辑操作符
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符 • ! :逻辑取反运算符(改变单个表达式的真假) • && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假) • || :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假) 接下来我们进行一一介绍:
- 逻辑取反操作符!:可以将原表达式的逻辑值取反,比如原表达式为真,那么取反后就为假,原表达式为假,取反后为真,例如:
解析:a的值为10,b的值为20,a>b,返回的就是假,然后取反过后就是真,那么以上表达式!(a>b)返回值就是真,那么满足了if语句的判断,就在屏幕上打印了“hello world”
- 逻辑与操作符&&:它的意思就是并且,比如表达式1 && 表达式2,它的含义就是既要满足表达式1,也要满足表达式2,即两个表达式同时为真,结果才为真,比如我们想表达3月到5月是春天,那么月份必须满足大于等于3月,并且小于等于5月,否则就不满足题意,举例为:
解析:我们输入的月份必须必须满足大于等于3月,并且小于等于5月,即表达式1和2都要为真才行,如果有一个为假那么就不会打印“春天”,故我们可以总结出规律: • 真 && 真结果为真 • 真 && 假结果为假 • 假 && 真结果为假 • 假 && 假结果为假
- 逻辑或操作符||:它的含义是或者,比如表达式1 || 表达式2,只需要其中一个表达式满足条件,即其中一个表达式为真,那么结果为真,比如同样表达3月到5月之间是春天,使用逻辑或表达如下:
解析:这里有三个条件,要么月份等于3,要么月份等于4,要么月份等于5,只要其中一个成立就会打印春天,只有都不满足这三个条件的月份才不会打印春天,即只有所有表达式为假,才会返回假,其余都返回真,可以总结规律如下: • 真 || 真结果为真 • 真 || 假结果为真 • 假 || 真结果为真 • 假 || 假结果为假
逻辑操作符练习
输⼊⼀个年份year,判断year是否是闰年 闰年判断的规则:
- 能被4整除并且不能被100整除是闰年
- 能被400整除是闰年
答案在文末
五、switch语句
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式,特点就是大部分情况需要知道表达式准确的返回值,其语法为: switch (表达式) { case 值1: statement case 值2: statement default: statement } 上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值, 就执⾏ default 分⽀
- switch语句和if语句对比:比如要实现:输⼊任意⼀个整数值,计算除2之后的余数,使用if语句为:
使用Switch语句为:
上述的代码中,我们要注意的点有: (1)case 和后边的数字之间必须有空格 (2)每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
- Switch语句中的break: 如果前面的代码我们去掉break会怎么样呢?
我们会发现原本余数是0,结果还继续打印了余数是1,原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了case 0 的语句,还执行了case 1 中的语句
- Switch语句中的default: 如果我们输入的值不在我们的case中,那么我们就会用到default,用来排除其他情况,比如:输⼊⼀个1~7的数字,打印对应的星期⼏,例如输入1就打印星期一,代码如下:
试想如果用户没有按要求输入1~7的数字呢?此时就可以使用default,比如:
此时如果用户输入1~7之外的数字,也就是不在case中的数字,就会显示输入错误,相当于一个提示信息
- default的顺序: 不少人认为default必须放在最后,实际上default和case语句没有严格的顺序要求,只不过习惯将default放在最后,实际上是可以放在前面,甚至放在第一个也可以
Switch语句练习
如果上述需求发⽣变化,变为:
- 输⼊1~5,输出的是“⼯作⽇”
- 输⼊6~7,输出“休息⽇”
- 如果输入其他数字,那么打印输入错误
如何简便地将要求完成 答案在本文末尾
六、答案
- if语句练习答案:
- 条件操作符练习答案:
- 逻辑操作符练习答案:
- Switch语句练习答案:
这里我们利用了Switch语句中如果没有break,那么从对应case进入,并且实现对应语句后,并不会直接停下来,而是继续执行代码。输入1,2,3,4,5都会打印工作日,那么不如直接将打印工作日放在case 5,然后用break结束,假设从case 1进入,什么也没有,就会往下面继续执行,知道碰见了case 5,打印了工作日后,break停止了,输入2~4也是同理。根据这个逻辑,输入6,7都会打印休息日,就直接把打印休息日放在case 7,然后用break结束,原理同上。 由此可见,我们可以根据需求,灵活使用break,不能太呆板
如果有什么疑问,欢迎在评论区留言。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-09-27,如有侵权请联系 cloudcommunity@tencent 删除程序breakcasedefault编译器本文标签: C语言分支语句详解
版权声明:本文标题:【C语言】分支语句详解 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754829991a1707014.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论