2024年1月14日? 内容来自The Cherno:C++系列
------------------------------------------------------------------------------------------------------------------------------
OK,I wish we?might learn something deeper and something new.
条件语句、if语句、分支语句
情况:在我们写代码的时候,我们需要评估出现的不同的情况,然后根据评估的情况来决定我们下一步该执行什么代码。
we check a condition,that's our 'if' statement.
? ? ?if something is true,
? ? ? ? ? ? ?then we jump to a certain bunch of code
-------------------------------------------------------------------------------
? ? if()中的表达式会与一个布尔值进行比较,这个bool就是ture或者false
(复习一下,计算机中0代表false,其他数字都是true) get that into your head!!!!
?将x设置为7,在第七行打上断点,然后点击调试,点击步过按钮,看看我们的变量会发生什么
首先,布尔变量Compare的值变成了false,而在调试过程中发现黄色箭头直接跳过了第12行的语句,这说明它没有被执行。so,只有在if()语句括号中的表达式值为真true时,才会执行{}中的内容。
综上,if(){}语句其实就是在说,嘿,()括号里面的东西是不是0(False?),如果不是0我就会执行{}中的语句。
---------------------------------------------------------------------------------------------------------------------------------
我们经常需要检查某个指针是否为空:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 即 if(p!=null)等价于if(p)
? ? ? ? ? ? ? ? ? ? ? ? ? ?显然,null的值是0
if(p)就是在问:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?p是不是空?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如果p是空,那么if()中的值=0=false,不会执行下述{}语句
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如果p非空,那么if()中的值!=0? ()中的值为true,会执行下述语句{
}
//在另一篇关于二叉树的前中后序非递归遍历blog中经常会出现if(p)的简写操作,这也是我一直很晕而且懒得理顺的一个点。
---------------------------------------------------------------------------------------------------------------------------------
if语句提供了根据某个条件是否满足从? 2个or2组语句 选其中一个来执行的程序流程控制。
而程序有时需要根据某个整型表达式的值来从? >2个语句? 选其中一个来执行,这个时候选择if就显得啰嗦了(因为它要嵌套很多层)
? ? ?从键盘输入一周的某一天(0:周天,1:周一,....6:周六),然后输出其对应的英语单词
? ? ?假设用一下if来实现,程序如下:
为了解决上述if语句书写麻烦的问题,C++提供了一条多路选择语句,即switch语句(又称开关语句,想象一下你们教室里那一排电闸,又或者多臂老虎机),它能根据某个整型表达式的值在多组语句中选择一组语句来执行,switch格式如下。
? ?switch(<整型表达式>)
{
case <整型表达式1>:<语句序列1>
case <整型表达式2>:<语句序列2>
....
case <整型表达式n>:<语句序列n>
default:<语句序列n+1>
}
首先计算(<整型表达式>)的值,然后判断是否存在与之相等的case <整型表达式i>,如果存在,则执行该分支中的<语句序列i>;否则如果有default分支,则执行default后面的default:<语句序列n+1>
在执行某个语句i时,如果遇到break ,就结束该分支的执行。
在学习完switch之后,再次尝试例题1:
switch中如果有若干个分支操作相同的情况,可以把这些分支写在一起,相同的操作只写1次。
例题:计算某年某月的天数
? 已知,1 3 5 7 8 10 腊,31天永不差;剩下4,6,9,11,每个月都是30天;而2月份在闰年是29天,不是闰年为28天;已知闰年的判断条件是该年份是不是4的倍数且不是100的倍数,可是400的倍数。
示例代码如下:注意下面的case是怎么写的!
?
? ?C++的多路选择语句与其他语言的多路选择语句不同,在其他语言中的多路选择语句,一个分支执行完之后将会自动结束整个选择语句,而C++的switch语句在一个分支的执行中如果没有break语句,则C++会紧接着执行下一个分支。
例如,分支1具有功能A,B,C;分支2具有功能B,C;分支3具有功能C,则可以写成这样:
?switch(<整型表达式>)
{
case <整型表达式1>:A
case <整型表达式2>:B
case <整型表达式3>:C
//细节:这里不写break,意味着满足表达式1时会依次执行ABC,满足表达式2时会依次执行BC..
}