版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章C++选择语句学习目标·声明bool类型以及使用比较运算符书写布尔表达式·实训一:编写程序AdditionQuiz·使用单向if语句实现选择控制·实训二:编写游戏程序GuessBirthday·使用双向if语句实现选择控制·使用嵌套if语句实现选择控制·避免if语句中的常见错误·实训三:编程的例子(SubstractionQuiz、BMI)·使用rand()方法产生随机数·使用逻辑运算符(&&、||、!)对条件进行组合·使用switch语句实现选择控制·实训四:编程的例子(ComputeTax)·使用条件运算符书写表达式·检查控制运算符优先级和结合方向的规则12.1引言
在上一章中,如果我们给变量radius(半径)赋一个负值,那么程序就会输出一个非法的结果。在这种情况下,其实我们是不希望程序再去计算面积的。那么该如何处理这种情况呢?
C++提供了选择语句
——以便在两个或更多可选择的流程中做出选择。例如,可以用下面的选择语句来处理上述问题:
if(radius<0) cout<<"非法的输入!"<<endl;
else{ area=radius*radius*3.1415926; cout<<"面积是:"<<area<<endl;
}选择语句要用到条件。
条件就是布尔表达式(比如上面的“radius<0”)。本章首先要介绍布尔类型、布尔值、布尔比较运算符和布尔表达式。2表2-1关系运算符(假定表中radius的值为5)运算符名称布尔表达式运算结果<小于radius<00(false)<=小于等于radius<=00(false)>大于radius>01(true)>=大于等于radius>=01(true)==等于(相等)radius==00(false)!=不等于radius!=01(true)2.2
bool数据类型
该如何比较两个值呢?例如,一个半径是大于0、等于0、还是小于0?如表2-1所示,C++提供了六种比较运算符(也叫做关系运算符),用于两个值的比较。3注意
关系运算符不仅可以用于数值之间的比较,还可以用于字符之间的比较。这是因为在C++中,字符之间的比较其实就是它们编码之间的比较!所以,编码值较大的字符将大于编码值较小的字符。例如,'a'(97)大于'A'(65)、'c'(99)大于'a'(97)。4例如,下面的代码将显示比较运算符的运算结果:cout<<(3<1); //输出0(代表false)cout<<('B'>'A'); //输出1(代表true)因为'A'的编码值是65,而'B'为66.
cout<<('A'==10); //输出0(false)注意:true和false是C++保留字。5
关于C++布尔类型的值1代表true、0代表false。
。6下面的代码将布尔值赋值给布尔变量:1)boollightsOn=true;2)intradius=1.25;boolconditionOfRadius=radius>0;警告相等的比较运算符是两个等号“==”,而不是一个等号“=”,后者仅指赋值运算符!7【程序清单2-1】 关系表达式示例#include<iostream>#include<iomanip>usingnamespacestd;intmain(){
int
a
=
63,b
=
48;
cout<<“a>b=”<<(a>b)<<endl;
cout<<“a<b=”<<(a<b)<<endl;
cout<<“a>=b=”<<(a>=b)<<endl;
cout<<“a<=b=”<<(a<=b)<<endl;
cout<<“a==b=”<<(a==b)<<endl;
cout<<“a!=b=”<<(a!=b)<<endl;
system("PAUSE");
return0;}
//运算结果:a>b=1a<b=0a>=b=1a<=b=0a==b=0a!=b=1chara
='B',b
='A';再观察两个字符值的比较82.3
实训:一个简单的数学学习工具假如希望开发一个程序,让一年级学生练习加法。程序随机产生两个一位整数,然后给学生显示诸如:“7+9=?”,学生输入答案后,程序就会显示一个评语。如下运行所示:9
下面我们先来设计一下这个程序的算法:1)产生第一个随机数number1;2)产生第二个随机数number2;3)显示题目number1+number2=?,以提示学生输入答案;4)读入学生输入的answer值;5)显示关系表达式answer==number1+number2的值(true表示正确、false表示错误)。
(程序请见下一页的程序清单2-1)提示:可以调用库函数rand()来产生随机数(0~32767)。10//源程序清单2-1AdditionQuiz.cpp#include<iostream>#include"time.h"//时间函数time的说明usingnamespacestd;intmain(intargc,char*argv[]){ intnumber1,number2,answer; srand(time(NULL)); //初始化随机数发生器 number1=rand()%10; //产生第一个随机数 number2=rand()%10; //产生第二个随机数 cout<<number1<<"+"<<number2<<"=?";//显示题目 cin>>answer; //读入键盘输入的答案 //显示评语结果:true(表示正确)、false(表示错误) cout<<number1<<"+"<<number2<<"="<<answer<<":"; cout<<boolalpha<<(number1+number2==answer)<<endl; system("PAUSE"); return0;}算法\变量跟踪表行号number1number2answer7184105112.4
if语句
假如希望上面那个程序最后输出的评语是“1+4=5:正确!”,那你又该如何来实现这个细微的改变呢?答案是:你只能使用
选择语句——if语句!例如,我们使用if语句来改写前面那个程序:......//显示评语结果:“正确!”或者“错误!”if(number1+number2==answer)cout<<number1<<"+"<<number2 <<"="<<answer<<";正确!"<<endl;if(number1+number2!=answer)cout<<number1<<"+"<<number2 <<"="<<answer<<";错误!"<<endl;12下面就来介绍相关的技术。C++有几种类型的选择语句:单向if语句、双向if语句、嵌套if语句、switch语句和条件表达式。·单向if语句单向if
语句的语法格式是:
if(布尔表达式){
语句块
}当且仅当布尔表达式为true时执行语句块。
单向if语句的执行流程如图3-1所示。truefalse图3-1单向
if
语句的流程说明布尔表达式语句块注意:语句块中的每一条语句都必须以分号";"结束。13
作为例子,看看使用if语句是如何解决radius为负数的情况:if(radius>=0){ area=radius*radius*3.14159; cout<<"半径为"<<radius<<"的圆面积是:"area<<endl;}上述语句的执行流程参见图3-2。truefalse图3-2
单向if语句的流程示例radius>=0area=radius*radius*3.14159;cout<<"半径为"<<radius<<"的圆面积是:"<<area<<endl;14可见,如果radius大于0,则计算圆面积并显示其结果;否则,就不执行语句块内的这两条语句了。布尔表达式必须用括号括住。下面代码是错误的: ifi>0{ cout<<"i是负数"<<endl; }如果语句块内只有一条语句,则可以省略花括号。 if(i>0) cout<<"i是负数"<<endl;if(i>0){ cout<<"i是负数"<<endl;}15在程辆序清浪单2妨-2趟中,建提示钥用户性输入写一个食整数洪。如匆果该悉整数盲是5色的倍数煎,则梢显示Hi洗Fi今ve。如斤果该堂整数葡是2氏的倍着数,慌则显守示Hi维Ev挣en。//源程狭序清锋单2-2悟S次im顽pl勿eI欣fD蜻em篇o.园cp逐p#i统nc阅lu序de毫<致io耽st伴re珠am皂>us异in茂g华na患me岩sp抖ac飘e闸st晒d;in阿t拦ma踪蝶in窜(i电nt逐a码rg去c,两c兰ha灯r蛮*a忠rg武v[见])小{in泼t这n数um师be统r;co黎ut图<<恭"请输痒入一韵个整榨数:"裂;ci杨n>决>n防um构be至r;if将(奔n花um得be哲r惕%秒5杨==廉0殃)co循ut堂<<公"寻Hi兴Fi议ve迟"山<<柏en息dl校;if惹(盼n已um龙be绳r李%汤2袍==心0殖)co衣ut知<<逮"蹄Hi辅Ev锄en冰"交<<敏en浴dl聪;sy修st眨em铲("跳PA承US煤E"努);re箱tu分rn陕0层;}注意
if语句中的语句块,建议使用缩进格式。请输入一个整数:1↙
请输入一个整数:5↙
HiFive请输入一个整数:2↙
HiEven162.5实例耀:猜内生日通过蒸询问先朋友锻5个匹问题付,你疏就可枕以知容道他煤出生亏在一筝个月轮的哪块一天了梢。每熟个问肝题都秤是在墨询问肆他的坟出生处日是中否在争下面哑5个数字斜集合中。你的扇生日匙就是胡包含屠你生烘日那陕一天驴的那溪些集属合的搏第一吩个数钳字之体和。例如屿,生偿日是枪19粉,那尿么,报因为宵它出觉现在谈集合钟1、临集合露2和礼集合金5中滤,而这5构个集鹅合的串第一这个数连字分茶别是邪1、该2和督16词,所酸以,纸你的慨生日武就是祝19窃。下面品的程宅序清泊单2贿-3妄给出值了这浓个程题序。模它首盟先提脖示用匹户依期次回最答该天油是否耀在集治合1电中、穿在集猪合2辰中、胡在集富合3凯中、镇在集敲合4扁中、店在集例合5中?仅然后阁,如宾果回违答在锈某个耳集合言中,哭程序疫就将诵该集声合的绘第一屯个数址累加到到生日羽变量da激y中。1357911131517192123252729312367101114151819222326273031456712131415202122232829303189101112131415242526272829303116171819202122232425262728293031集合1集合2集合3集合4集合5关于凯这个樱游戏冶的数断学知婚识,府留给退大家唐课后航讨论。1718//源程多序清帖单2-3玻G仅ue礼ss汤Bi探rt崇hd渗ay遵.c蹄pp#i覆nc号lu准de砍<誓io冈st颤re长am宋>#i玻nc央lu昏de昂<西st乡丰ri窃ng敢>us陷in伯g裳na陶me元sp刘ac葡e燥st昌d;in忽t上m霸ai堵n(览in介t蔽ar相gc婚,俯ch央ar楼*伤ar恢gv泪[]掉){st前ri知ngse承t1乌="创1贵3谁5把7\谨n9闭1饮1私13萌1采5\亚n列17雷1纤9寺21忆2岂3\居n2拨5枝27饿2搭9康31跳";st土ri师ngse秋t2编="值2藏3矿6朱7\猎n1炎0晃11文1贵4起15挽\n殃18娇1棕9监22撤2构3\司n2判6鸡27首3瓶0粗31帅";st哗ri查ngse抢t3辛="坛4乒5悼6肚7\叙n1溉2苹13鼠1浙4忠15带\n革20灯2箩1鲁22轻2删3\廉n2许8桌29布3冒0幻玉31跟";st箩ri雷ngse痕t4楚="8忌9粥10垦1浓1\色n1业2斑13献1跌4碧15悦\n常24查2碌5约26滚2窑7\值n2令8父29劈燕3菌0事31";st李ri奋ngse衣t5商="16若1奸7葵18嫂1两9\廊n2傅0丑21帽2街2螺23问\n迹24栋2倍5恭26歼2买7\泊n2液8己29奖3典0梯31";in触t泰d益ay沈=警0起,业an匀sw围er塌;令/提/生日吩的初茫始化置为019//提示引用户秋回答袭问题1co端ut债<<粒"你的朽生日穗在下血面这恐个集添合中厨吗?"亏<奏<e殃nd领l;co防ut职<<粗s张et刷1怀<<红en禾dl弹;知/响/显示沫数字抹集合1co洁ut帜<<针"请输榴入0矩(表舟示不驶在其汪中)景、1揪(表娱示在扒其中想):"惧;ci达n>因>a蓬ns面we碎r;妹/椒/读入躁用户剥回答1if次(输a粘ns死we岗r赶==裳1遍)迁da余y禽+=羡1挨;..狼..专..幕//提示呀用户齐回答旬问题2~辉4送.盆..于..征.木d伴ay考+普=艘2、牧4、盘8;//提示禽用户欣回答路问题5co酷ut站<<槽"你的潜生日蛋在下躺面这点个集遥合中臭吗?"归;co村ut鼠<<获s素et徒5限;拘/透/显示村数字独集合5co梳ut崭<<施"请输滚入0于(表征示不败在其连中)波、1稻(表抢示在垃其中介):"黑;ci痛n>捕>a紧ns竭we步r;荡/联/读入叨用户浸回答5if昏(毁a懂ns片we俘r想==械1愧)斩da钥y君+=胆1长6;co叹ut驴<<"你的逗生日扰是:"<<da暂y<<起en点dl病;}20提示对所呼有的僚程序厕都应淡该先专编写建少量味代码怜然后才进行挠测试课,之梁后再跌继续忘添加政更多腐的代素码并末测试盒。这下个过君程称傻为渐进倡式开亏发和茅测试。这宜个方毯法使轧得程化序测尽试变耗得更护加容或易。贤因为雨错误都很可容能就吓在你即刚刚堪添加暗进去湖的新厦代码栋中。212.6双向裂i芬f懒语句当条滨件为tr才ue时,狸单向if语句脏会执济行一毁个操央作;多而当楚条件讲为fa映ls海e时,可则什陪么也既不干欠!如果去你希句望在蛇条件肃为fa宾ls蒙e时也茂能执闲行一甩些操债作的挺话,铸那该宜怎么办室?例如替,你姑希望坡当ra够di壁us大于柔0时昨,计弦算圆娃面积繁;而身当ra待di色us小于弓0时慌,则徒显示“对不败起,词半径泊不能浙为负炒数!”。如捏下运希行图别所示姥:22要解议决这叶个问垂题,朽你可宫以使外用双向羽if娃语句。根据求条件触为tr瓣ue或为fa况ls童e,双罩向if语句狡可以怀选择宴不同悬的操缺作。下面流是双撑向if语句浅的语死法格降式:if(布尔特表达稿式)息{语句块1}el拐se弓{语句西块2}当布瘦尔表蜘达式壶的值施为tr危ue时,死执行限语句蒙块1辞;否则掘,执贼行语勿句块识2。双向if语句餐的执接行流扇程如捐图2嚼-3慢所示混。图2-3
if-else语句的流程说明true语句块1false布尔表达式语句块223再使犬用双水向if语句笋来解何决“脚一年催级学弃生练申习加剩法”姨的问映题://显示至评语粮结果驶:“递正确谱!”间或云者标“错班误!显”if锣(泼n都um碌be谨r1血+室n源um辉be类r2索=积=银an疗sw躲er响)co删ut版<<次nu删mb们er葱1<渡<"银+"洞<<追nu相mb趁er大2<蕉<"晕="响<<销an化sw踢er吧<<杯";正确!"寇<<得en沿dl趋;el滥seco该ut路<<灯nu酿mb女er各1<越<"辽+"绵<<懒nu霸mb贴er阵2<锁<"沟="文<<榴an灾sw衰er缘瑞<<撇";错误!"侦<<辽en见dl销;其执蓄行流盏程如勤图2膝-4浑所示。图2-4
加法器的执行流程true“正确!”false...==answer“错误!”242.7实训仇:一裹个改市进的眨数学绒学习剑工具假如单你想夸开发咐一个险能让序一年铃级学颈生练层习减纸法的始程序淹:程序唯随机耀产生暑两个粉一位马整数nu液mb玻er谎1和nu来mb代er氧2,并确冬保nu乎mb浩er弄1≥nu美mb袋er延2;然栏后向特学生迅显示旺题目捎,例伐如,“9-2=通?”;当学蹄生输衔入答给案后塌,程槐序会境显示漫一条谜表明屯答案蠢正确师与否偿的信来息。25下面糊是该断程序涉的算亿法描横述:1)贪产生昏两个价随机怪的一无位整总数nu晌mb驶er处1和nu俊mb名er竟2;2)悲如果nu泼mb都er凭1金<从nu蓝mb遗er受2,则交家换nu完mb替er物1和nu乓mb灰er毛2的值惧;3)份显示稍题目错。例寺如,浪“9-2=饺?”;4)如判断练学生拆的答着案,忆并显厘示相柳应的电评语栏。26//源程图序清背单2-4兼S篇ub誉st牺ra轮ct胶io橡nQ吩ui枕z.置cp祝p#i维nc青lu墓de词<蜻io准st杜re还am贺>#i渔nc会lu洁de少"赠ti懒me缴.h森"us垮in巨g耀na杏me抄sp设ac皱e屑st循d;in磁t柜ma杆in巾(i口nt受a常rg浑c,飘c螺ha眉r狮*a穷rg桃v[例])逃{in径t妨n腔um杂be愈r1园,刚nu负mb亏er阔2,黄a陕ns棵we撑r;sr萝an某d命(位ti乘me膀(图NU祝LL矿)降)韵;况//礼初始把化随毯机数堆发生陶器nu暖mb姥er顾1箩=黄ra笛nd顶()盘%辈10吵;狸//约产生附第一塘个随样机数nu核mb购er妙2趣=桑ra徐nd婆()版%帜10学;船/渴/产阔生第若二个奇随机机数if争(芳n邻um助be出r1犹<鲁n类um傲be炼r2悟)奶{//牧下面潜三条煤语句佳用于弯交换庸n暖um浙be锈r1穿和租n控um汤be禽r2尽的飞值in贷t圆t削em缺p爸=歼nu情mb宇er渴1;nu寄mb碧er查1怕=参nu饮mb让er惯2;nu析mb会er剥2堡=昨te般mp旧;}用于硬交换芦两个丛变量议值的最隶常用滑的三距条语岩句。27co党ut前<<倾n幕um辜be党r1臂<姿<计"-河"非<<右n笋um剂be跨r2虏<氏<涨"=潜?"呆;ci平n>旗>a桂ns必we链r;if自(池n址um闻be份r1徐-怖n驰um脊be逃r2皂=销=阳an枯sw诞er盯)co战ut紫<壮<鬼"正星确!宗"兼<<廉en膝dl扛;el舍se另{co亚ut紫<毫<球"错逮误!孔"亭<<廉;co吓ut挎<些<奇nu糊mb逃er锅1硬<<删"螺-"馒<县<崇nu气mb椅er双2;co纹ut芹<牧<达"应影该是盲"<凉<(硬nu川mb册er却1四-婚nu扶mb洒er熔2)注<<累en弄dl宝;}sy箭st时em坝("攻PA徒US召E"孙);re榆tu欧rn哪0邪;}282.8嵌套羡的地if泻语贼句在if语句芹的语歪句块洽内,鞭可以筹出现任意雕合法蔽的语雄句,甚吃至又取可以是一趟条if语句莫。外系层if语句锁与内鹊层i搁f语顶句就耍形成创了嵌套庆的i拾f语穷句。下面册是嵌控套if摄-e已ls割e语句跪的一毙般形维式:if(表达论式1){if(表达森式2){语句坏块1}el粘se{语句因块2}}el苏se{if(表达郊式3){语句称块3}el掌se{语句古块4}}其中咬,语绍句块i又都筛可以侄是if思-e常ls嘉e语句晋。假真假真假真表达式1表达式2语句1语句2表达式3语句4语句329下面泊是相迫应的泪嵌套if蜻-e隶ls落e语句:if(a真>b授)if(a址>c灿)输出a;el亲se输出c;el律seif(b向>c烈)输出b;el株se输出c;假真假真假真a>ba>c输出a输出cb>c输出c输出b嵌套if语句吊可以疫实现披多重词选择躁。例化如,薪在三轻个变色量a、进b、开c中找帝出最既大值严。该悉问题伟的一种执行流程蜓,可如下面徒的流程孟图所婚示:30真真真真假假假假score≥90score≥80grande='B'grande='A'score≥70score≥60grande='E'grande='D'grande='C'输入score
开始结束输出grande又例供如,疮根据岩分数敏变量sc择or拒e的不孟同值恒来给皮等级冠变量gr公an浇de赋一个惭不同快的字考母,用以表释示对唉应的掩级别舟。为巴了更偷好地漠体现描嵌套藏if押语句僚,这里棵使用勒的一种算法筛的执蒸行流程怠,如下秧所示咳:31if(sc丑or曾e随>=编9差0)gr用an雅de灰=惹'鸭A'堆;el伍seif(sc渔or拨e柏>=袭8输0)gr茧an丛de尸=湿'及B'州;el浪seif(sc天or悟e送>=辰7俯0)gr掘an臣de慨=鬼'找C'鞋;el竞seif(sc凭or物e藏>=者6源0)gr敞an估de致=扁'锯D'混;el伶segr铜an搅de疤=妥'厕E'击;注意时:在嵌浊套if语句影中,祝只有咳在上封面的符所有调条件尽都为fa搅ls厕e时,弯才测斩试下倒一个念条件誉!该流程的执蝴行语戴句,如下剩所示摔:(完钉整的崇程序棒请见射下一耳页)32#i炉nc位lu刑de复<歌io奏st邀re东am幅>us额in偷g古na终me协sp稼ac仍e石st汪d;in邪t卧ma召in加(i宅nt屑a躁rg千c,昆c痕ha趋r拘*a渡rg践v[暂])雕{in揪t数s飘co啊re届;ch场ar未gr尺an没de准;co愤ut犹<<烘"请投输入缠一个词百分抗制分联数:厚";ci吵n>兴>杯sc胡or拒e恨;if钥(s编co俱re仇>谨=礼90执)方gr弟an旁de艳=娱'击A'颠;el怖se努i驼f(仆sc黎or续e焰>=辛8显0)锻g指ra江nd分e贝=惧'B办';el早se甩i萍f(栋sc仪or珠e昌>=浑7忍0)潮g倦ra季nd沸e疤=熔'C马';el储se腹i赴f(秀sc窗or窜e触>=坏6资0)捎g项ra蠢nd皆e秘=双'D互';el娱se带gr萌an声de勿=逗'坊E'燥;co畅ut轨<踩<龄"该泥分数编的等温级分打是:讽"暑<<爆g具ra央nd姜<欲<果en界dl坛;sy重st乌em伏("喘PA截US撞E"挺);re尊tu系rn仔0固;}332.9if趋语句秀中的马常见觉错误以下颜错误岭是编劲程新旺手经刷常会废犯的剃错误然。常见谎错误恶1:眨忘记门必要教的括幕号特别形要注使意在堆没有快花括柜号的if语句酱中添牺加新晶语句馒时,攻必须既插入花括切号!例如覆,下妖面的滚代码柴:if(ra架di富us摸>0)do费ub费lear为ea=ra省di旱us*ra米di冰us*3.周14聚15宵9;co若ut艰<<"面积嫂为:"<<ar帮ea<<商en甜dl;if(ra畏di松us饮>0)do停ub毛lear撤ea=ra渔di蜡us*ra腹di必us*3.针14膀15慢9;co邀ut诉<<"面积悬为:"<<ar煌ea<<用en佩dl;这实映际上芳就变预成了塑下面似的代合码:{}34常见四错误居2:晕在i显f行铺出现眨错误震的分唯号这是盟一个绢很常度见的冒错误脱。例问如,覆下面交的代农码:if(sc励or港e足>=闷9贿0);{do草ub弟lear诊ea之=r先ad怖iu歌s*中ra轧di羊us油*3昆.1座41巾59水;co赵ut欺<<"面工积为菊"<<ar迎ea<<倾en诉dl;}if(sc鼻or狠e示>=划9咏0){剂}蓄;{do乏ub男lear嘉ea解=r齿ad蛙iu偷s*膜ra暴di连us驱*3金.1里41昂59仇;co附ut庆>>"面饼积为肺"<<ar章ea<<叉en达dl;}这个发分号专相当于一绵个空疏的块这个申错误疲是很茶难发起现的滴。因师为它伯既不稳是编碎译错捞误也番不是屯运行错误国,而掉是一违个逻窜辑错该误。核它相灵当于嫂一条带空盟语句核块(执梢行空论操作)粒的单卡向if语句湖。因此裕,上泻面这涝条if语句通就会浊被解圾释成凭下面滑这三昏条语箩句了俭:if(ra叛di照us六>0);do腹ub娘lear洞ea窄=r筒ad卷iu毕s*倚ra送di铸us贝*3他.1纹41边59产;co敞ut告<<"面浩积为傲"<<ar饥ea<<沉en古dl;35提示使用苹行尾状风格莫可以恐帮助伍防止丢此类耗错误听!例如盼,下丽面的斤代码端风格康:if(sc晨or蕉e帜>=声9和0){do帽ub促lear燥ea=ra烂di唉us师*r翻ad夜iu都s*赔3.东14纲15烘9;co勇ut歇<<"面樱积为差"<<ar颠ea<<腊en砖dl;}36常见古错误朽3:脏在布掀尔表孙达式没中,绍误将摔“榆=”创当诸做“=槐=”这是屋一种共难以深发现学的错喉误。携例如吵,下冷面的衣代码每:in穗t淋n萍um肆be挎r阶=秒3;bo艇ol扛ev丈en猛=芹n根um毒be贤r根%张2欺==论0怨?启t抬ru弊e扬:女fa拼ls琴e;if(ev肢en雄=标t叮ru乒e)co扮ut掠<<"It汪i被s录ev向en宽."<<肚en颠dl;el问seco痕ut巴<<"It舟i传s迎no常t呜ev倦en齐."<<雷en熊dl;这条目语句券没有贼语法芝错误亭,但浴却是谊一个蝴逻辑套错误酒。因为械表达配式“ev炭en=献tr惠ue”是赋迹值(=)表碗达式烛(而象非比挑较"==")伪,因此葱,ev呢en就永妨远为tr浆ue了!37常见境错误逐4:家悬空任el伶se睁引起岸的歧山义下面射的代滩码中男有两冶个if子句欠和一火个el负se子句费。那吴么,滑哪个if和这性个el爆se匹配痕呢?第一龙段代弃码中肾的缩辆进格羞式似胸乎表遇明el叹se与第疑一个if匹配喷。但江是,这个el颂se实际蚊上是茄第二胸个if语句扑的子舞句。雅这种咸现象副叫做乖悬空el殿se歧义鞭。这笋是因义为,显无论化你是别否用鉴缩进他,由群于在吹同一胃块中求,el蝴se总是和踩它最沃近的if自动宅匹配脑的。停所以走,上播面的女左右椒两段威代码而其实谜是等价伪的(辣第二鸡段代小码才次是正仓确的霉缩进绳)。if(i街>咱j)if需(慎i剪>杯k枕)co形ut斧<<"A")<<膏en赖dl班;el万seco野ut题<<"B"<<后en挨dl;if(i谋>省j)if砌(冰i砖>港k溪)co谜ut遵<<"A")<<川en盲dl支;el匹seco散ut窑<<"B"<<故en闲dl;等价38如果栗你希震望这生个el汪se与第塑一个if匹配斥,那参你就觉必须瞎如下羡所示地加涉一对振花括洽号:if(i视>涝j){if振(幻玉i腥>沃k铲)co虽ut应<<"A"<<这en禽dl;}el买seco鹊ut梨<<"B"<<餐en申dl;这样嚷,当i党>俱j为fa桃ls雁e时,族这条笔语句亩就会牧显示B了。392.10实训氏:计衔算身示体质液量指持数酒BM滥I我们腥已经蛙知道青计算BM道I的方踢法了史。现孝在,搏我们掏要在约此基恼础上城,对计盗算结票果作桑出指交导性店意见苍。如努右表辩所示驾。BMI指导性意见16以下严重偏轻16~18偏轻18~24正常24~29超重29~35严重超重35以上非常严重超重下面创是该绳程序谷的算撤法描剑述:1)各提示飘用户誓输入充以公绪斤为月单位原的体重伍以及匠以米议为单芬位的满身高旨;2)侄计算BM鲁I:体乏重海/惩身高2;3)铁显示BM是I;4)绘根据BM丸I值,亮给出窜指导竖性意酷见。(程降序见殿程序拍清单切2-航5)40//源程去序清搏单2-5旺C粪om投pu蜡te各BM总I.幅cp僚p#i熊nc禾lu壳de迎<挨cs预td垒li奴b>#i荣nc却lu稳de倒<价io赔st捉re掉am示>us寺in炎g罪na反me戚sp浸ac离e场st荡d;in泥t辈ma奋in佣(i监nt况a爱rg荣c,这c闯ha汗r粒*a赚rg之v[方])工{do咬ub镜le雕we例ig渡ht就,h掏ei贞gh掉t,肌bm单i;co因ut威<<错"唐请输鞭入体帝重(蔬公斤帐):持"促;ci为n>滔>w建ei确gh歇t;利//吼读入逐体重co匆ut框<<怠"叔请输庆入身脸高(怀米)像:"穗;ci亲n>摔>h肿ei公gh塞t;盖//澡读入董身高bm害i泼=雅we牌ig碧ht吩/倾(糕he敬ig趋ht蹄*蚊h杰ei菌gh掉t)辨;剪/训/计投算B勤MIco坡ut勾<<腔"己你的榨BM庭I是乏"徐<<踪蝶b盼mi液<滴<e皂nd仔l;if朗(菌b退mi奸<睁1杏6看)弓c须ou岩t<香<担"你派严重摧偏轻枕"滥<<蓄en卧dl浓;el甜se绢if斥(尘b拆mi太<尊1判8弦)山c叠ou循t<先<滤"你中偏轻低"匪<<隆en德dl赏;el节se雀if召(录b柔mi录<终2离4摧)炼c胶ou仓t<魂<匠"你荣正常导体重涂"喇<<至en闷dl私;el脆se明if凭(士b尝mi鲜<浆2踩9枯)毒c明ou粮t<祖<雨"你型超重悉"协<<为en灯dl段;el脱se唱if缩慧(赶b唤mi枕<灵3锋5状)锦c臭ou姐t<锁<撞"你访严重茧超重内"别<<杰en植dl晒;el糠se碑co当ut秘<<蔬"改你非鬼常严衔重超负重"享<雕<e衬nd川l;sy联st奏em于("苹PA帐US恰E"友);re介tu裙rn猜0父;}412.11逻辑径运算四符有的爬时候亡,是是否要腿执行玻一条卡语句青,是尤由几个数条件直的组磨合来决毅定的。图例如蓬,16堵<秒B定MI≤18秒、i鹊<j并且j<岔k、整休数nu互mb亡er能被骑3整突除的偶数飞,等垂等。解决子这个渠问题妖可使距用C+闸+逻辑真运算颤符。逻辑番运算辟符是对安布尔值进眉行运灭算,开并得娱到一筛个新泛的布萌尔值碎。表狸2-挎3列万出了布尔尺运算炕符。表2-3布尔运算符运算符名称说明!非逻辑非&&与逻辑与||或逻辑或^异或逻辑异或42表2-4非运算符(!)的运算规则p!p举例(假设age=24,gender='F’)truefalse!(age>18)为false,因为(age>18)为truefalsetrue!(gender=='M')为true,因为(gender=='M')为false43表2婆-5鸽是与轻运算孔符(&&)的寸运算和规则芝。表2-5与运算符(&&)的运算规则p1p2p1&&p2举例(假设age=24,gender='F’)falsefalsefalse(age<18)&&(gender!='F')为false,因为(age<18)和(gender!='F')都为false。falsetruefalse(age<18)&&(gender=='F')为false,因为(age<18)为false。truefalsefalse(age>18)&&(gender!='F')为false,因为(gender!='F')为false。truetruetrue(age>18)&&(gender=='F')为true,因为(age>18)和(gender=='F')都为true。其运趁算口论诀是渠:有做假得冰假;谱全真驶得真。44表2滚-6纺是或竖运算埋符(辩||确)的月运算索规则屿。表2-6或运算符(||)的运算规则p1p2p1||p2举例(假设age=24,gender='F’)falsefalsefalse(age<18)||(gender!='F')为false,因为(age<18)和(gender!='F')都为false。falsetruetrue(age<18)||(gender=='F')为true,因为(gender=='F')为true。truefalsetrue(age>18)||(gender!='F')为true,因为(age>18)为true。truetruetrue(age>18)||(gender=='F')为true,因为(age>18)和(gender=='F')都为true。其运贷算口摔诀是沉:有津真得漆真;伞全假盖得假。45表2基-7六是异档或运悄算符扮(^)的剑运算纯规则弃。表2-7异或运算符(^)的运算规则p1p2p1^p2举例(假设age=24,gender='F’)falsefalsefalse(age<18)^(gender!='F')为false,因为(age<18)和(gender!='F')都为false。falsetruetrue(age<18)^(gender=='F')为true,因为(age<18)为false,(gender=='F')为true。truefalsetrue(age>18)^(gender!='F')为fatruelse,因为(age>18)为真,(gender!='F')为false。truetruefalse(age>18)^(gender=='F')为false,因为(age>18)和(gender=='F')都为true。其运堂算口辉诀是羞:相纱同为惕假;帐相异匪为真。下面赚的程抛序清甩单2膨-6闸给出售了检族验一而个整商数是术否:能被劣2和搅3整扁除?烘能被忧2或周3整怠除?坚只能卫被2变或3缺中的用一个抚整除负?4647//源程冠序清复单2-6劣T政es肚tB趁oo葵le抽an坝Op如er因at旬or忘s.尾cp熄p#i谣nc迟lu床de育<顷io国st晌re避am螺>us陡in礼g宗na暴me靠sp铃ac超e吸st浙d;in党t析ma韵in姥(i球nt哗a贩rg丹c,跳c捉ha将r欧*a嚼rg金v[惩])触{in曲t附n佳um蜂be变r;co遭ut脆<<哨"请男输入驾一个旋整数岛:"精;ci棉n>蕉>n京um包be乖r;co右ut座<<枕nu惠mb矿er疤<纵<捏"\谜n能器被2缺和3辛整除择吗?贩";co自ut凤<<莫(丑nu哄mb皮er迹%碌2皮==歌0交&境&尾nu尚mb步er掀%输3威==喉0旱)最;co宗ut罗<<芹"\酒n能无被2景或3蝴整除闯吗?伟";co滥ut味<<帜(西nu妥mb盒er改%见2渡==茶0窃|哭|巨nu层mb哨er构%锐3禁==再0搁)常;co侮ut覆<<滑"\爬n只价能被术2和急3中壳的一垫个整陡除吗茎?"栗;co跨ut垂<<恒(恐nu枕mb数er屠%序2蹲=阻=邻0扬^窝nu天mb如er退%辣3扔=筹=唱0禾)呀<<贫e域nd疯l;sy村st茎em汤("计PA架US际E"绸);re龟tu贴rn夏0途;}48警告:从C+论+语法贞来看颂,表阔达式1<=da拥y步<=朱31是正献确的撤。但赞其运姜算结束果,俊则是菜不如雕人意勇!因使为,造表达驱式1鸟<=扇d传ay的值胳是一低个布毙尔值1,然士后再丘执行1da恰y股<=爸31,那兰么整史个表达含式1<=da烦y述<=隐31的值末,显总然永远葵为1(貌tr誉ue妇)!49注意1:“德规莫夫评定理升”可论以用脉来简片化逻拌辑表趴达式惜。其跨定义企可以那表述润如下哑:!(叶p维1缎&&耐p砖2届)等价浴与(状!p波1||!p醋2币)!(弦p炕1||p2其)等价雪与(促!p洒1乌&&眯!弄p2屿)50注意2:在C+败+的逻旁辑运盗算中换,有旅下面采两条步运算葵原则黎(也倾叫做擦“短猾路原则牢”)逢:由于覆当p1为fa樱ls叙e时,过表达魄式(p详1阁&&肚p掠2)的运织算结与果一银定为fa贪ls钻e,所希以,泊此时倡将不侮再计节算p2。由于畅当p1为tr润ue时,王表达伐式(p林1||p2假)的运窜算结桂果一侄定为tr赔ue,所丢以,假此时增将不宰再计泛算p2。51例如蒜,运算割符“&舒&”的短眉路原本则:in存t秋a阻=懂1受,谢b照=潜1;bo虏ol说ta搁g毛=王(棵(活a价<乖0阳)若&黎&利(吓b骡=揭2辞)扫>希0桂)芒;co关ut砖<<障"猎a炊=万"恳<<脸a礼<公<叫",鉴b辣=侍"泰<<因b尘<皮<烤en谁dl震;再看羞看运妥算符“||”的短惕路原定则:in锻t冲a仗=禾1睬,眠b区=剖1;bo抱ol社ta醉g骆=贺(贷(麻a沙>咬0鸡)||(滥b扬=刚2播)昼>附0灭);co素ut抽<<忌"潜a垄=猜"忍<<满a结<膀<贵",河b驾=无"巡寿<<板b恶<利<饼en喝dl旗;52课堂刑讨论分:写出热下列禾条件足的逻迷辑表自达式(1)当in违t类型喜变量a大于10或者坐为负味数时婶,表旁达式裕的值板为真盼。(2)当ch厘ar类型爆变量ch的值膝为大总写字被母时代,表迹达式拆的值情为真锄。(3)当in庄t类型柜变量m为能物被7整除亩的偶摘数时板,表丘达式投的值妨为真圆。(4)判颜定闰甲年:当年熊份变群量ye柳ar能被4整除尸但不竹能被10也0整除思时,或能闲被4整除填又能喷被40漂0整除扩时,炊表达迁式的折值为择真。(5)判登定申誉请经而济适沾用房种的条欣件:已拥畏有住偶房的艘数量nu幅mb运er愈Of迹Ho离us粪es至多1套,或家隙庭收孤入ho灭us农eH捡ol过dI牛nc捆om饰e低于50由00元,但不圈能同线时满润足这臂两个谷条件树。532.12sw衡it嫩ch湖语句为了新全面承考虑悠所有拿情况德,需控要使缴用嵌趣套的if语句妨。有衣时候西,过多舱地使养用嵌监套的if语句拍会使发程序哑比较积繁琐冬、很脂难阅肉读。例如堡,下愚面的捷代码果:if(da环y肉==陡0)Sy董st滨em交.o龄ut庭.p猛ri炸nt觉ln既(阅"是星封期天"灰);el用seif(sc道or揪e池==失1)Sy昂st地em忧.o按ut厉.p呜ri归nt倾ln宿(游"是星翁期一"夸);el赛seif(sc监or息e肿==康2)Sy耽st死em抢.o镇ut罪.p脚ri国nt盟ln旅(膏"是星著期二"贫);el弓seif(sc国or寺e永==国3)Sy蜘st葵em句.o迟ut胳.p拐ri胁nt碌ln互(违"是星烟期三"糊);el灿seif(sc率or技e泥==出4)Sy吃st劫em疤.o卸ut缝.p织ri暮nt关ln绣(夸"是星叹期四"辱);el团seif(sc惕or效e边==旦5)Sy盘st奖em昏.o字ut学.p资ri烤nt保ln毁(欧"是星临期五"勾);el坝seif(sc早or锐e拖==障6)Sy剂st衬em裙.o陵ut静.p虾ri欺nt唐ln旬(眯"是星维期六"摩);54C+稠+提供吃了sw派it挣ch语句约来有给效地豪处理椅多重驴条件桌的问介题。下面产用sw肤it熔ch语句昼来替毫换上龙面的牵多重if语句:sw宋it厦ch(da侵y悄){cas谱e缠0:co灭ut桃<<躁"是星碍期天"冶<<笑en搬dl劲;br典ea词k;cas挥e1:co想ut刻<<甘"是星喇期一"砍<<沾en邪dl匀;br洒ea杏k;cas枯e2:co冬ut规<<申"是星传期二"尿<<拴en尿dl颈;br绢ea啊k;cas习e3:co藏ut营<<记"是星晨期三"记<<载en阵dl棋;br猪ea筒k;cas临e4:co缓ut壮<<弱"是星写期四"接<<秋en灾dl箭;br六ea极k;cas御e5:co晒ut伐<<碰"是星臭期五"蚕<<哗en订dl竭;br载ea脏k;cas恳e6:co信ut杀<<各"是星蹦期六"邪<<热en兄dl弃;br他ea摆k;de妙fa乔ul桌t:co暑ut成<<帅"输入第错误!请输更入0~唇6"贯<呀<e用nd被l;}这条户语句抽依次兆检查da洪y的值卷是否内匹配丛常量0、仰1、杰2、拌3、标4、婚5、婚6。如果服匹配佣,就漏输出狗对应惭的星叛期几余;否著则显床示一虫条出时错提所示信雁息。55下面惰是sw算it界ch语句完整斤的语法山形式渡:sw羊it守ch(表达丈式){ca奶se值1:语句慰组1;索b羞re邻ak器;ca框se值2:语句仰组2;棍b请re售ak闹;……ca兆se值n:语句四组n;醉b袖re厉ak封;de通fa铃ul哀t幕:默认妇情况哗下执恐行的语句撤组;}sw惧it懂ch语句栽遵从狼下列软规则押:1)“表达峡式”的值蜓类型必须揪是一短个ch歉ar或in溪t;2)“值1”自..兴..叔..零“值n”必须仅是与席上面“表达虏式”的值分类型玻匹配好的常量。3)鸽当表酷达式不的值啄与某摩个ca箭se子句秀的常究量匹非配时当,执芽行就堵从该ca美se语句辨开始京,直归到遇刃到一棕个br灯ea隙k或到欣达该sw袭it层ch语句胃末端脑的“}裤”;4)椅关键寨字br绘ea膝k是可该选。大用来译立即秤终止霉整个sw鲁it每ch语句奥;5)半默认京情况(d职ef热au仙lt黑)是可通选的辈。用肌来指厚定当愿没有殖一个ca宪se常量与表淡达式敏相匹径配时傲应该勾执行工的操眼作;6)ca皮se语句银是顺眯序检费测的陡,但举是这元些ca御se的顺食序是盟不重法要的咳。不过避,还跪是建穷议按糠照逻拦辑顺陈序排舰列,菌并把断默认皆情况壶放在穿最后坦。56上面及“求江星期船几”苍的sw徒it李ch语句父的流坟程图葱如下资图所板示:显示“星期一”breakday显示“星期二”breakday
显示“星期三”break
day显示“星期四”breakday
显示“星期五”break
day显示“星期六”break
day显示“星期天”breakday==1==2==3==4==5==6==057警告:如果戴不使杠用br段ea及k,一着旦匹就配其卡中一礼个ca拉se,那增么就查从该ca裁se处开壤始执路行,症直到谨到达sw工it难ch语句扰的末灭端。例如筑,如饲果ch的值俱为'a袖',那么透下面只的代卷码就败会将惯字母a打正印3次蛮:sw隔it偷ch(伍ch编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版文具采购合同3篇
- 专用木结构工程承包合同书2024年版版B版
- 专业桥架施工包工协议范例(2024版)版B版
- 2025年4S店汽车销售及二手车置换服务合同范本3篇
- 2024跨国技术转让与合作合同
- 专业项目建议书编写委托协议简化版版B版
- 2025年度科研场地租赁合同终止及设备回收协议3篇
- 2025年度老旧小区墙体拆除及改造工程劳务分包合同范本4篇
- 2025年度酒店会议室租赁协议书(含全方位服务套餐)
- 二零二五年度食堂食堂食堂食堂员工餐厅食品安全监管合同
- 金色简约蛇年年终总结汇报模板
- 农用地土壤环境质量类别划分技术指南(试行)(环办土壤2017第97号)
- 反向开票政策解读课件
- 工程周工作计划
- 房地产销售任务及激励制度
- 六年级语文下册14文言文二则《学弈》课件
- 2024年内蒙古中考语文试卷五套合卷附答案
- 并购指南(如何发现好公司)
- 垃圾分类亭合同协议书
- 物权转移协议
- 高三高考地理一轮课时练习:洋流(单选题)
评论
0/150
提交评论