第3章C#中的条件结构•接下来,本书将继续C#的学习,在已经学习bool类型、条件运算符、比较运算符和逻辑运算符的基础上,重点学习条件结构和条件结构的几种形式,让程序可以进行条件判断,根据判断结果执行相应的语句,而不是再像前面那样,从程序入口开始执行每条语句直到执行完最后一条语句结束。3.1bool类型(逻辑类型)•在前面学习C#常用的数据类型的时候,读者已经接触过bool类型了。如:•boolifTheMinority;//声明布尔型变量ifTheMinority存储是否是少数民族•ifTheMinority=false;//存储false,表示不是•这段代码是声明一个布尔类型的变量来表示“是否是少数名族”。3.1.1什么是bool类型•前面提及了很多生活中的需要判断的问题,但这些问题有一个共性,就是结果唯一,要么是“是”(为真),要么是“否”(为假)。在C#中,使用bool类型来表示真假。布尔类型是用来表示“真”和“假”这两个概念的。这虽然看起来很简单,但实际应用非常广泛。3.1.2使用bool类型来表示真假•在程序中怎么利用bool类型来表示真假呢?其实在前面已经多次使用过,为了让读者加强理解,以便于本章的学习,本书将对此知识点继续讲解。首先请看一个问题:•老顽童和欧阳锋碰到一起了,两人就谁大谁小这个问题吵起来了,争得不可开交,请读者制作一个控制台应用程序,从控制台输入两者的年龄进行比较,然后输出“老顽童比欧阳锋大吗?”这句话的判断结果。•P23程序代码3.2if条件结构•在刚才的问题中,读者可能想到过这种情况:已经判断出老顽童和欧阳锋谁大谁小了,要是可以根据判断结果输出相应的语句那该有多好啊。比如,如果老顽童大于欧阳锋就输出“哈哈,你癞蛤蟆没我大!快叫我爷爷!”,否则输出“哈哈,小朋友,爷爷带你去买糖吃!”。这可以做到吗?3.2.1C#中的“如果”•在生活中人们经常需要判断,往往还会根据判断结果去决定是否做某件事。例如:如果刷牙没有牙膏了,就得去买牙膏;如果停电了,电脑就无法工作;如果生病了,就不用去上学。在编写程序时,也经常要进行条件判断。回到前言中讲到的那个问题,该怎么解决呢?•任务分析:条件满足则输出,条件不满足,就不输出。•解决办法:条件运算符(当要执行的事较多时不好处理);if条件结构。3.2.2什么是if条件结构•if条件结构是根据条件判断后再做处理的一种语法结构。•基本语法:if(表达式)//如:老顽童比欧阳锋大{//语句条件成立后要执行的语句,可以是一条语句,也可以是一组语句}3.2.3使用基本的if条件结构•例:根据老顽童和欧阳修的年龄的判断结果输出相应的语句。如果老顽童大于欧阳锋,就输出“哈哈,你癞蛤蟆没我大!快叫我爷爷!”,否则输出“哈哈,小朋友,爷爷带你去买糖吃!”。•代码见课本P25。•运行结果3.2.4复杂条件下的if条件结构•复杂的判断问题:假如杨过的体育成绩大于90分,而且音乐成绩大于80分,小龙女就奖励他一罐玉蜂浆;或者体育成绩为100分,音乐成绩大于60分,小龙女也可以奖励他;如果不是上面这两种情况,小龙女就要罚他每天晨练1小时。•第一种写法(错误):体育成绩90&&音乐成绩80||体育成绩==100&&音乐成绩60。•第二种写法(正确):(体育成绩90&&音乐成绩80)||(体育成绩==100&&音乐成绩60)。if...else结构(如果条件符合…执行语句1…否则…执行语句2…)3.2.5多重if结构和嵌套if结构的使用•读者先看看这个问题:为了使奖罚更加合理,小龙女决定对奖罚条件进行完善。如果总分等于200分,教杨过玉女心经;总分大于等于170分,奖励玉蜂浆一瓶;如果总分小于170分,根据下面三种情况进行惩罚:两门成绩均小于70分,罚每天晨练两小时;只有一门小于70分,罚每天晨练一小时;其他的情况,进行鼓励。(见P28、29代码)•为了使if结构更加清晰,应该把每个if或应该把每个if或else包含的语句都用大括号括起来。•相匹配的一对if和else应该左对齐。•内层的if结构相对于外层的if结构要有一定的缩进。3.3switch结构•学过了if结构,读者是否可以解决下面这个问题呢?由于杨过的努力,获得了奥运会的参赛资格。小龙女说:如果杨过取得金牌,就马上成亲;如果杨过取得银牌,就教杨过玉女心经;如果杨过取得铜牌,就奖励玉蜂浆3瓶;否则,就不要回来见她。•代码见书P30。(用多重if结构)3.3.1C#中的等值判断•多重if结构的代码虽然解决了这个问题,可是看上去很啰嗦。这个问题跟上一个问题(对杨过的考试成绩进行奖惩)比起来有什么不同?显然,这个问题是等值判断,上一个问题是区间判断。•C#为程序员提供了另一种结构,可以方便地解决等值判断的问题,这就是switch结构。3.3.2什么是switch结构•switch:表示“开关”,这个开关就是switch关键字后面小括号里的值,小括号里要放一个整型变量或字符型变量或字符串型变量。•case:表示“情况,情形”,case后必须是一个整型或字符型或字符串型的常量表达式,通常是一个固定的字符、字符串、数字。例如,8、‘a’、“金牌”。case块可以有多个,顺序可以改变,但是每个case后常量值必须各不相同。•break:表示“停止”,即跳出当前结构。3.3.3使用Switch结构进行等值判断•通过观察不难看出,switch结构的条件只能是等值的判断,而且只能是整型或字符型或字符串型的等值判断。也就是说,switch结构只能判断一个整型变量是否等于某个整数值的情况,或是一个字符型变量是否等于某个字符的情况,或是一个字符串型是否等于某个字符串的情况,并且每一个case后面的值都不同。而多重if结构既可以判断条件等值的情况,也可以判断条件是区间的情况。•代码见书P30(用if结构)、P31(用switch结构)。3.4综合运用:模拟会员幸运抽奖•学了这么多,该练练手了,请看下面这个问题:购物中心为了酬谢广大客户,推出礼品馈赠活动。凡具有一定积分(要求积分大于3000)的会员均有机会获奖,一等奖奖励苹果笔记本电脑一台,二等奖奖励诺基亚N73手机一个,三等奖奖励MP3一个,其他则赠送精美挂历一份。•分析:当该会员的积分大于3000才会执行这些语句,笔者写的switch结构就放在这一块里面。获得随机数后,根据随机数进行判断输出。读者理清了思路了吗?如果还不清楚,画个流程图看看吧。•代码见书P33。(if结构+switch结构)3.5常见错误•(1)条件结构没有写在Main()方法里,如:•错误示例1的错误列表•(2)写switch结构时,忘记了写break语句。比如把代码中的break去掉,编译时,VS提示了•缺少break语句的错误列表小结•本章主要学习了C#中的语句结构,包括bool类型,if条件结果和swith结构,其中重点应该掌握if判断语句和多重if嵌套判断语句以及swith判断语句,这些都是基本的学习要点。读者私下可以多多练习。通过本章的学习,读者可以编写简单的判断小程序,为下面的学习做好铺垫准备。