![零基础C#学习笔记](https://wfqqreader-1252317822.image.myqcloud.com/cover/185/36710185/b_36710185.jpg)
4.2 if 语句
在生活中,每个人都要进行各种各样的选择。例如,吃什么菜?走哪条路?找什么人?那么当程序遇到选择时,该怎么办呢?这时需要使用选择结构语句。if 语句是最基础的一种选择结构语句,它主要有3 种形式,分别为if 语句、if…else 语句和if…else if…else 多分支语句,本节将分别对它们进行详细讲解。
4.2.1 最简单的if 语句
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_5.jpg?sign=1739353249-nJAYFd9iMRXIS8B2u4Z4924WYotp0hSa-0-8f99c2b1853ae1583bee08beaafe9943)
C# 中使用if 关键字来组成选择语句,其最简单的语法形式如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_6.jpg?sign=1739353249-pxyMR53Fiwzui6IyZD4Ilg17r8r9imU0-0-8ea70978f08c6c80f0627c72fc967ba8)
学习笔记
在使用if 语句时,如果只有一条语句,那么省略{} 是没有语法错误的,而且不影响程序的执行,但是为了程序代码的可读性,建议不要省略。
其中,表达式部分必须用() 括起来,它可以是一个单纯的布尔类型的变量(或常量),也可以是关系表达式(或逻辑表达式)。如果表达式的值为真,则执行 “语句块”,之后继续执行 “下一条语句”;如果表达式的值为假,则跳过 “语句块”,执行 “下一条语句”。这种形式的if 语句相当于汉语中的 “如果……那么……”,其流程图如图4.4 所示。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_7.jpg?sign=1739353249-xKELUSnzt4MRp9oCwvApkuMztKHNU3MP-0-e6ad102f767701afc4f7dc646fd85ae5)
图4.4 if 语句流程图
示例1.判断输入的数字是不是奇数
使用if 语句判断用户输入的数字是不是奇数,代码如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_8.jpg?sign=1739353249-cQPeWV0Uc5wfuR92GLC7lGgK9nCn35lz-0-815424bdb5f693515af1ebaa01b057b7)
学习笔记
第4 行代码使用Convert.ToInt32 方法将用户输入的数字强制转换成了int 类型,然后使用int 类型的变量进行记录。
奇数的条件是不能被2 整除,因此,第5 行代码判断用户输入的数字求余2 是否不等于0,以此来判断用户输入的数字是不是奇数。
运行上面代码,当输入5 时,结果如图4.5 所示;当输入6 时,结果如图4.6 所示。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_9.jpg?sign=1739353249-HrH8RVNIst6AwNdk3BJlOyxD2LjSihU0-0-ce01161e8873648e785edb7610ce61fb)
图4.5 奇数运行结果
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_10.jpg?sign=1739353249-H1DeWgQxC0vdDD0djWqYlb39ojRHD9Yt-0-c346ea7183b08d107b2cd77679560a68)
图4.6 不是奇数的运行结果
学习笔记
if 语句后面如果只有一条语句,那么可以不使用大括号({}),但是,不建议开发人员使用这种形式,不管if 语句后面有多少要执行的语句,都建议使用大括号括起来,这样方便代码的阅读。例如,下面的代码未使用大括号。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_11.jpg?sign=1739353249-dWPqBxmaJ8KtWJt998NlwICFN50CEDDn-0-aa25cf1200ca30a14768dbe7fa760a71)
学习笔记
●if 语句后面多加了分号。例如,if 语句正确表示如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_12.jpg?sign=1739353249-pi1kRwf3KQbFP55ukY3BMpUHmth9bou3-0-9fa2ac35c8c87a43651d43c3bd687787)
上面两行代码的本意是,当变量i 的值为5 时,执行下面的输出语句。但是,如果在if 语句后面多加了分号,下面的输出语句将会无条件执行,if 语句就起不到判断的作用,代码如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_13.jpg?sign=1739353249-8gM9q9fpOaU4bH6hAjZLgFtwyeJN1Eoh-0-e7c36c0a7afbc9a2e9cacb41eb064d82)
●在使用if 语句时,如果要将多个语句作为复合语句来执行,例如,程序的真正意图是如下语句。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_14.jpg?sign=1739353249-dU44tvoei7GK9plfbyMRqRpJxekPqXsT-0-f27dc93a742e7602b72f38a5f827cb55)
那么,如果删去大括号,则代码如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_15.jpg?sign=1739353249-ikunp182i1ODM82zoL3QYAfP0SkYa8cp-0-b03347c06f237c7adc7b71a73cab1670)
在执行程序时,无论flag 是否为true,j++ 都会无条件执行,这显然与程序的本意是不符的,但程序并不会报告异常,因此这种错误很难发现。
4.2.2 if…else 语句
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_16.jpg?sign=1739353249-Z9jHqnGwyToKh5sekFcZMR9hlxXLrk7y-0-64f876fba8df55057f956353a5afe7ea)
如果遇到只能二选一的情况,比如某个公司在发展过程中遇到了 “扩张” 和 “求稳” 的抉择,示意图如图4.7 所示。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_17.jpg?sign=1739353249-tHNlvcVQ0iIl8dCNfc4I9B7IU5sP7qxO-0-fef8f97e8248dfe0a0afdf2fda4b8c46)
图4.7 公司在发展过程中遇到了 “扩张” 和 “求稳” 的抉择示意图
C# 中提供了if…else 语句解决类似问题,其语法如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_18.jpg?sign=1739353249-3lo5QuKL1urXpRIDcjXoRGBToXSuKXeo-0-e21df079b57ad22ef2ce653b5a743b1d)
在使用if…else 语句时,表达式可以是一个单纯的布尔类型的变量(或常量),也可以是关系表达式(或逻辑表达式)。如果满足条件,则执行if 后面的语句块;否则,执行else 后面的语句块。这种形式的选择语句相当于汉语中的 “如果……否则……”,其流程图如图4.8 所示。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_19.jpg?sign=1739353249-6SWIv4JCX36C7zcFKPGSOMcrKI0mtnpR-0-7532cf24427c2ecab002989626aeb5df)
图4.8 if…else 语句流程图
学习笔记
if…else 语句可以使用条件运算符进行简化,如下面这段代码:
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_20.jpg?sign=1739353249-TPP0hc6KNiZkOUD9JRwi6pvjZdSiBV1C-0-6eff94c427210bb51352356220983ce1)
可以简写成:
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_21.jpg?sign=1739353249-dvBzzJqhLrijJM9lX9f6F60BKJxcuFVM-0-f2be7d664e2e9d5c0ff5b9154e89c88a)
上段代码主要实现求绝对值的功能,如果a > 0,就把a 的值赋给变量b;否则,将-a赋给变量b。使用条件运算符的好处是可以使代码简洁,并且有一个返回值。
示例2.根据分数划分优秀等级
使用if…else 语句判断用户输入的分数是不是足够优秀,如果大于90,则表示优秀;否则,输出 “希望你继续努力!”,代码如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_22.jpg?sign=1739353249-N06XhMMHHCNO2yGLmkHhKR1VuTK4Wn4v-0-7f95c93f2abcebe3aebb2201a3f9ef1c)
运行上面代码,当输入一个大于90 的数时,如93,效果如图4.9 所示;当输入一个小于90 的数时,如87,效果如图4.10 所示。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_23.jpg?sign=1739353249-tbRld0HEsB6elp0xiNP6ugxws4cueKK1-0-9043fdd6ba198b812f6cb3dfba4d1dae)
图4.9 当输入93 时的运行结果
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_24.jpg?sign=1739353249-AhNaulbhobL8sma4nqTuYfQUgVaLRvOM-0-fe76759db42c2be39841b3d750cc48a9)
图4.10 当输入87 时的运行结果
学习笔记
在使用if…else 语句时,else 一定不可以单独使用,它必须和关键字if 一起使用。例如,下面的代码是错误的。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_25.jpg?sign=1739353249-nglDMVO7xApElzSa8TdOX8B2KuS0MY8q-0-b3ebdea59cdd3a9e47e8be42d538c2f4)
在程序中使用if…else 语句时,如果出现if 语句多于else 语句的情况,那么将会出现悬垂else 问题:究竟else 语句和哪个if 语句相匹配呢?例如,下面的代码。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_26.jpg?sign=1739353249-d3Cd0JBHJblOqY8TZFSx7tuZvCwK9eOQ-0-fc8460fc65c416a4c2688fb40e34b07b)
如果遇到上面的情况,在没有特殊处理时,那么else 语句永远都与最后出现的if 语句相匹配,即上面代码中的else 语句是与if(y>x) 语句相匹配的。如果要改变else 语句的匹配对象,则可以使用大括号。例如,将上面代码修改如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_27.jpg?sign=1739353249-E7r5aBASoU0ZoMS7AUej0ApFCPPqCRXe-0-4dde26438cadc32d15b52f2110850961)
这样,else 语句将与if(x>1) 语句相匹配。
学习笔记
建议在if 后面使用大括号将要执行的语句括起来,这样可以避免程序代码混乱。
4.2.3 if…else if…else 语句
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_28.jpg?sign=1739353249-z6S2vdmBNJ7n7EU2wlXpghyDDViQgCra-0-f674df1e6898947c983b5b66a2a4de48)
大家平时在网上购物需要付款时通常都有多种选择,如图4.11 所示。
在图4.11 中,提供了多种付款方式,这时用户就需要从多个选项中选择一个。在开发程序时,如果遇到多选一的情况,则可以使用if…else if…else 语句。该语句是一个多分支选择语句,通常表现为 “如果满足某种条件,则进行某种处理;否则,如果满足另一种条件,则执行另一种处理……”。if…else if…else 语句的语法格式如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_29.jpg?sign=1739353249-29g4cVXJSdJss3lnh4bmMUjseEz7d0hD-0-d3ebbd9f7a1dc3824bd39fcef03ada73)
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_30.jpg?sign=1739353249-3MbZPM7Kt0uiqZXKNKOaxRshY9RlItwk-0-be5c93f0d789e733848255a00b8b8aab)
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_31.jpg?sign=1739353249-rmWUHTj94kb4O95jSgVsYee2yYFXrUHK-0-5d02bf86ba047dc510ca989e5cd6bfa1)
图4.11 网上购物时的付款页面
使用if…else if…else 语句时,表达式部分必须用() 括起来,它可以是一个单纯的布尔类型的变量(或常量),也可以是关系表达式(或逻辑表达式)。如果表达式为真,则执行语句;而如果表达式为假,则跳过该语句,进行下一个else if 的判断;只有在所有表达式都为假的情况下,才会执行else中的语句。if…else if…else语句的流程图如图4.12所示。
学习笔记
if 和else if 都需要判断表达式的真假,而else 则不需要判断;另外,else if 和else都必须跟if 一起使用,不能单独使用。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_32.jpg?sign=1739353249-NPCzorCWhkmHBkM0yRZoDa5kp0LWgQof-0-035b4de6060fbafe780cedd78f4526fe)
图4.12 if…else if…else 语句的流程图
示例3.根据用户输入的年龄输出相应的信息提示
使用if…else if…else 多分支语句实现根据用户输入的年龄输出相应的信息提示的功能,代码如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_33.jpg?sign=1739353249-baVErnP88wHK366mrVaFN7SPAwcPfG8R-0-e44b0cb2ad88a779962805bb0399394a)
学习笔记
第5 行代码中的int.Parse() 方法用来将用户输入的数据强制转换成int 类型。
运行上面代码,输入一个年龄值,如35,按回车键即可输出相应的信息提示,结果如图4.13 所示。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_34.jpg?sign=1739353249-m1Dh7fjSUMBbLbpH5ADcM1XORJEFIfVP-0-79b6a91844583b79ebc311d7f458a7b7)
图4.13 当输入35 时的运行结果
学习笔记
使用if 语句时,应尽量遵循以下原则。
● 使用bool 变量作为判断条件,假设bool 变量为falg,较为规范的书写格式如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_35.jpg?sign=1739353249-a4b2Epl3lR08GtPCWpeCEfQVH73JRozg-0-53e5b09d04edefa07541d847b9f6dd1e)
不符合规范的书写格式如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_36.jpg?sign=1739353249-1jgOc0a3LaEp7sv5uaaIevHuLjNwORoe-0-333f7a9c14adeed65284b0965775f5f7)
● 当使用浮点类型的变量与0 值进行比较时,规范的书写格式如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_37.jpg?sign=1739353249-YVXu2dMJ4a8ueFPre52VjDd53L7xsPtv-0-64d23bed333b6bda68d057b863d7f04a)
不符合规范的书写格式如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_38.jpg?sign=1739353249-B9dmifoWqX4pXtJOnhHvA80LoiY70SkR-0-5ddb3dfc6b9651d7616abc9c1ed3ce52)
● 使用if(1==a) 这样的书写格式可以防止错写成if(a=1) 这种形式,从而可以避免逻辑上的错误。
4.2.4 if 语句的嵌套
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_39.jpg?sign=1739353249-r1BbztUCFu2fTPaSjfPks3zNkmWnSfQF-0-d36e0719db4d8621c53cdaed4f9926c8)
前面讲了3 种形式的if 语句,这3 种形式的语句之间都可以进行互相嵌套。例如,在最简单的if 语句中嵌套if…else 语句,形式如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_40.jpg?sign=1739353249-rahOzF3VyXwOrS93Vu2adqGlWjbMTou0-0-cc095806d1130b12922268620eb39ae5)
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_41.jpg?sign=1739353249-ic2tReyvMrEKy880bqIh98yu2AVlEWYW-0-31d1ca184d1cfa8daeaba218ed9cda79)
学习笔记
if 语句可以有多种嵌套方式,在开发程序时,可以根据自身需要选择合适的嵌套方式,但一定要注意逻辑关系的正确处理。
示例4.判断输入的年份是不是闰年
通过使用嵌套的if 语句实现判断用户输入的年份是不是闰年的功能,代码如下。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_42.jpg?sign=1739353249-4n4IdmlsWC5rQN9whd44K6TR0RnR5rWQ-0-c201b3420e9ec15499f091e944488553)
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_43.jpg?sign=1739353249-PRqdMFPhu1PyG6rqhNQjm5WMX5RetRoy-0-c0d72f07c81df7a953d67417ec828a29)
学习笔记
判断闰年的方法是 “四年一闰,百年不闰,四百年再闰”。程序使用嵌套的if 语句对这3 个条件进行逐一判断,第5 行代码首先判断年份能否被4 整除(iYear%4==0),如果不能被4 整除,则输出字符串 “这不是闰年”;如果能被4 整除,则第7 行代码继续判断能否被100 整除(iYear%100==0)。如果不能被100 整除,则输出字符串 “这是闰年”;如果能被100 整除,则第9 行代码继续判断能否被400 整除(iYear%400==0)。如果能被400 整除,则输出字符串“这是闰年”;如果不能被400 整除,则输出字符串“这不是闰年”。
运行上面代码,当输入一个闰年年份时,如2000,结果如图4.14 所示;当输入一个非闰年年份时,如2017,结果如图4.15 所示。
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_44.jpg?sign=1739353249-y1ZLmuDqzJeoHfxdnrbgyfpa3jUcjW45-0-280ba44068b7d4c281db9d615fae3fe5)
图4.14 当输入年份为2000 时的运行结果
![img](https://epubservercos.yuewen.com/03FE8C/19471983108810806/epubprivate/OEBPS/Images/txt005_45.jpg?sign=1739353249-Ux9Rz8dSz9TVUJ64dLEr5fFU1ipEYtkz-0-e094d2f52f37423ad32b0897419dc83e)
图4.15 当输入年份为2017 时的运行结果
学习笔记
在使用if 语句嵌套时,注意else 关键字要和if 关键字成对出现,并且遵守临近原则,即else 关键字总是和离自己最近的if 语句相匹配。
在进行条件判断时,应该尽量使用复合语句,以免产生二义性,导致运行结果和预想的不一致。