第章C選擇語句_第1頁
第章C選擇語句_第2頁
第章C選擇語句_第3頁
第章C選擇語句_第4頁
第章C選擇語句_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第二章C++選擇語句學(xué)習(xí)目標(biāo)·聲明bool類型以及使用比較運算符書寫布爾表達式·實訓(xùn)一:編寫程序AdditionQuiz·使用單向if語句實現(xiàn)選擇控制·實訓(xùn)二:編寫游戲程序GuessBirthday·使用雙向if語句實現(xiàn)選擇控制·使用嵌套if語句實現(xiàn)選擇控制·避免if語句中的常見錯誤·實訓(xùn)三:編程的例子(SubstractionQuiz、BMI)·使用rand()方法產(chǎn)生隨機數(shù)·使用邏輯運算符(&&、||、!)對條件進行組合·使用switch語句實現(xiàn)選擇控制·實訓(xùn)四:編程的例子(ComputeTax)·使用條件運算符書寫表達式·檢查控制運算符優(yōu)先級和結(jié)合方向的規(guī)則12.1引言

在上一章中,如果我們給變量radius(半徑)賦一個負值,那么程序就會輸出一個非法的結(jié)果。在這種情況下,其實我們是不希望程序再去計算面積的。那么該如何處理這種情況呢?

C++提供了選擇語句

——以便在兩個或更多可選擇的流程中做出選擇。例如,可以用下面的選擇語句來處理上述問題:

if(radius<0) cout<<"非法的輸入!"<<endl;

else{ area=radius*radius*3.1415926; cout<<"面積是:"<<area<<endl;

}選擇語句要用到條件。

條件就是布爾表達式(比如上面的“radius<0”)。本章首先要介紹布爾類型、布爾值、布爾比較運算符和布爾表達式。2表2-1關(guān)系運算符(假定表中radius的值為5)運算符名稱布爾表達式運算結(jié)果<小于radius<00(false)<=小于等于radius<=00(false)>大于radius>01(true)>=大于等于radius>=01(true)==等于(相等)radius==00(false)!=不等于radius!=01(true)2.2

bool數(shù)據(jù)類型

該如何比較兩個值呢?例如,一個半徑是大于0、等于0、還是小于0?如表2-1所示,C++提供了六種比較運算符(也叫做關(guān)系運算符),用于兩個值的比較。3注意

關(guān)系運算符不僅可以用于數(shù)值之間的比較,還可以用于字符之間的比較。這是因為在C++中,字符之間的比較其實就是它們編碼之間的比較!所以,編碼值較大的字符將大于編碼值較小的字符。例如,'a'(97)大于'A'(65)、'c'(99)大于'a'(97)。4例如,下面的代碼將顯示比較運算符的運算結(jié)果:cout<<(3<1); //輸出0(代表false)cout<<('B'>'A'); //輸出1(代表true)因為'A'的編碼值是65,而'B'為66.

cout<<('A'==10); //輸出0(false)注意:true和false是C++保留字。5

關(guān)于C++布爾類型的值1代表true、0代表false。

。6下面的代碼將布爾值賦值給布爾變量:1)boollightsOn=true;2)intradius=1.25;boolconditionOfRadius=radius>0;警告相等的比較運算符是兩個等號“==”,而不是一個等號“=”,后者僅指賦值運算符!7【程序清單2-1】 關(guān)系表達式示例#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;}

//運算結(jié)果:a>b=1a<b=0a>=b=1a<=b=0a==b=0a!=b=1chara

='B',b

='A';再觀察兩個字符值的比較82.3

實訓(xùn):一個簡單的數(shù)學(xué)學(xué)習(xí)工具假如希望開發(fā)一個程序,讓一年級學(xué)生練習(xí)加法。程序隨機產(chǎn)生兩個一位整數(shù),然后給學(xué)生顯示諸如:“7+9=?”,學(xué)生輸入答案后,程序就會顯示一個評語。如下運行所示:9

下面我們先來設(shè)計一下這個程序的算法:1)產(chǎn)生第一個隨機數(shù)number1;2)產(chǎn)生第二個隨機數(shù)number2;3)顯示題目number1+number2=?,以提示學(xué)生輸入答案;4)讀入學(xué)生輸入的answer值;5)顯示關(guān)系表達式answer==number1+number2的值(true表示正確、false表示錯誤)。

(程序請見下一頁的程序清單2-1)提示:可以調(diào)用庫函數(shù)rand()來產(chǎn)生隨機數(shù)(0~32767)。10//源程序清單2-1AdditionQuiz.cpp#include<iostream>#include"time.h"http://時間函數(shù)time的說明usingnamespacestd;intmain(intargc,char*argv[]){ intnumber1,number2,answer; srand(time(NULL)); //初始化隨機數(shù)發(fā)生器 number1=rand()%10; //產(chǎn)生第一個隨機數(shù) number2=rand()%10; //產(chǎn)生第二個隨機數(shù) cout<<number1<<"+"<<number2<<"=?";//顯示題目 cin>>answer; //讀入鍵盤輸入的答案 //顯示評語結(jié)果:true(表示正確)、false(表示錯誤) cout<<number1<<"+"<<number2<<"="<<answer<<":"; cout<<boolalpha<<(number1+number2==answer)<<endl; system("PAUSE"); return0;}算法\變量跟蹤表行號number1number2answer7184105112.4

if語句

假如希望上面那個程序最后輸出的評語是“1+4=5:正確!”,那你又該如何來實現(xiàn)這個細微的改變呢?答案是:你只能使用

選擇語句——if語句!例如,我們使用if語句來改寫前面那個程序:......//顯示評語結(jié)果:“正確!”或者“錯誤!”if(number1+number2==answer)cout<<number1<<"+"<<number2 <<"="<<answer<<";正確!"<<endl;if(number1+number2!=answer)cout<<number1<<"+"<<number2 <<"="<<answer<<";錯誤!"<<endl;12下面就來介紹相關(guān)的技術(shù)。C++有幾種類型的選擇語句:單向if語句、雙向if語句、嵌套if語句、switch語句和條件表達式?!蜗騣f語句單向if

語句的語法格式是:

if(布爾表達式){

語句塊

}當(dāng)且僅當(dāng)布爾表達式為true時執(zhí)行語句塊。

單向if語句的執(zhí)行流程如圖3-1所示。truefalse圖3-1單向

if

語句的流程說明布爾表達式語句塊注意:語句塊中的每一條語句都必須以分號";"結(jié)束。13

作為例子,看看使用if語句是如何解決radius為負數(shù)的情況:if(radius>=0){ area=radius*radius*3.14159; cout<<"半徑為"<<radius<<"的圓面積是:"area<<endl;}上述語句的執(zhí)行流程參見圖3-2。truefalse圖3-2

單向if語句的流程示例radius>=0area=radius*radius*3.14159;cout<<"半徑為"<<radius<<"的圓面積是:"<<area<<endl;14可見,如果radius大于0,則計算圓面積并顯示其結(jié)果;否則,就不執(zhí)行語句塊內(nèi)的這兩條語句了。布爾表達式必須用括號括住。下面代碼是錯誤的: ifi>0{ cout<<"i是負數(shù)"<<endl; }如果語句塊內(nèi)只有一條語句,則可以省略花括號。 if(i>0) cout<<"i是負數(shù)"<<endl;if(i>0){ cout<<"i是負數(shù)"<<endl;}15在程輛序清浪單2妨-2趟中,建提示鑰用戶性輸入寫一個食整數(shù)洪。如匆果該悉整數(shù)盲是5色的倍數(shù)煎,則梢顯示Hi洗Fi今ve。如斤果該堂整數(shù)葡是2氏的倍著數(shù),慌則顯守示Hi維Ev掙en。//源程狹序清鋒單2-2悟S次im頑pl勿eI欣fD蜻em篇o.園cp逐p#i統(tǒng)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數(shù)um師be統(tǒng)r;co黎ut圖<<恭"請輸癢入一韻個整榨數(shù):"裂;ci楊n>決>n防um構(gòu)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語句中的語句塊,建議使用縮進格式。請輸入一個整數(shù):1↙

請輸入一個整數(shù):5↙

HiFive請輸入一個整數(shù):2↙

HiEven162.5實例耀:猜內(nèi)生日通過蒸詢問先朋友鍛5個匹問題付,你疏就可枕以知容道他煤出生虧在一箏個月輪的哪塊一天了梢。每熟個問肝題都秤是在墨詢問肆他的墳出生處日是中否在爭下面啞5個數(shù)字斜集合中。你的扇生日匙就是胡包含屠你生烘日那陜一天驢的那溪些集屬合的搏第一吩個數(shù)鉗字之體和。例如嶼,生償日是槍19粉,那尿么,報因為宵它出覺現(xiàn)在談集合鐘1、臨集合露2和禮集合金5中濾,而這5構(gòu)個集鵝合的串第一這個數(shù)連字分茶別是邪1、該2和督16詞,所酸以,紙你的慨生日武就是祝19竊。下面品的程宅序清泊單2賄-3妄給出值了這濃個程題序。模它首盟先提脖示用匹戶依期次回最答該天油是否耀在集治合1電中、穿在集豬合2辰中、胡在集富合3凱中、鎮(zhèn)在集敲合4扁中、店在集例合5中?僅然后閣,如賓果回違答在銹某個耳集合言中,哭程序疫就將誦該集聲合的繪第一屯個數(shù)址累加到到生日羽變量da激y中。1357911131517192123252729312367101114151819222326273031456712131415202122232829303189101112131415242526272829303116171819202122232425262728293031集合1集合2集合3集合4集合5關(guān)于凱這個櫻游戲冶的數(shù)斷學(xué)知婚識,府留給退大家唐課后航討論。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鄉(xiāng)豐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烏="創(chuàng)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監(jiān)22撤2構(gòu)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業(yè)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起,業(yè)an勻sw圍er塌;令/提/生日吩的初茫始化置為019//提示引用戶秋回答襲問題1co端ut債<<粒"你的朽生日穗在下血面這恐個集添合中廚嗎?"虧<奏<e殃nd領(lǐng)l;co防ut職<<粗s張et刷1懷<<紅en禾dl彈;知/響/顯示沫數(shù)字抹集合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限;拘/透/顯示村數(shù)字獨集合5co梳ut嶄<<施"請輸滾入0于(表征示不敗在其連中)波、1稻(表搶示在垃其中介):"黑;ci痛n>捕>a緊ns竭we步r;蕩/聯(lián)/讀入叨用戶浸回答5if昏(毀a懂ns片we俘r想==械1愧)斬da鑰y君+=膽1長6;co嘆ut驢<<"你的逗生日擾是:"<<da暫y<<起en點dl病;}20提示對所呼有的僚程序廁都應(yīng)淡該先專編寫建少量味代碼憐然后才進行撓測試課,之梁后再跌繼續(xù)忘添加政更多腐的代素碼并末測試盒。這下個過君程稱傻為漸進倡式開虧發(fā)和茅測試。這宜個方毯法使軋得程化序測盡試變耗得更護加容或易。賢因為雨錯誤都很可容能就嚇在你即剛剛堪添加暗進去湖的新廈代碼棟中。212.6雙向裂i芬f懶語句當(dāng)條濱件為tr才ue時,貍單向if語句臟會執(zhí)濟行一毀個操央作;多而當(dāng)楚條件講為fa映ls海e時,可則什陪么也既不干欠!如果去你希句望在蛇條件肅為fa賓ls蒙e時也茂能執(zhí)閑行一甩些操債作的挺話,鑄那該宜怎么辦室?例如替,你姑希望坡當(dāng)ra夠di壁us大于柔0時昨,計弦算圓娃面積繁;而身當(dāng)ra待di色us小于弓0時慌,則徒顯示“對不敗起,詞半徑泊不能浙為負炒數(shù)!”。如捏下運希行圖別所示姥:22要解議決這葉個問垂題,朽你可宮以使外用雙向羽if娃語句。根據(jù)求條件觸為tr瓣ue或為fa況ls童e,雙罩向if語句狡可以懷選擇宴不同懸的操缺作。下面流是雙撐向if語句淺的語死法格降式:if(布爾特表達稿式)息{語句塊1}el拐se弓{語句西塊2}當(dāng)布瘦爾表蜘達式壺的值施為tr危ue時,死執(zhí)行限語句蒙塊1辭;否則掘,執(zhí)賊行語勿句塊識2。雙向if語句餐的執(zhí)接行流扇程如捐圖2嚼-3慢所示混。圖2-3

if-else語句的流程說明true語句塊1false布爾表達式語句塊223再使犬用雙水向if語句筍來解何決“腳一年催級學(xué)棄生練申習(xí)加剩法”姨的問映題://顯示至評語糧結(jié)果駛:“遞正確譜!”間或云者標(biāo)“錯班誤!顯”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災(zāi)sw衰er緣瑞<<撇";錯誤!"偵<<遼en見dl銷;其執(zhí)蓄行流盞程如勤圖2膝-4渾所示。圖2-4

加法器的執(zhí)行流程true“正確!”false...==answer“錯誤!”242.7實訓(xùn)仇:一裹個改市進的眨數(shù)學(xué)絨學(xué)習(xí)劍工具假如單你想夸開發(fā)咐一個險能讓序一年鈴級學(xué)頸生練層習(xí)減紙法的始程序淹:程序唯隨機耀產(chǎn)生暑兩個粉一位馬整數(shù)nu液mb玻er謊1和nu來mb代er氧2,并確冬保nu乎mb浩er弄1≥nu美m(xù)b袋er延2;然欄后向特學(xué)生迅顯示旺題目捎,例伐如,“9-2=通?”;當(dāng)學(xué)蹄生輸銜入答給案后塌,程槐序會境顯示漫一條謎表明屯答案蠢正確師與否償?shù)男艁硐ⅰ?5下面糊是該斷程序涉的算億法描橫述:1)貪產(chǎn)生昏兩個價隨機怪的一無位整總數(shù)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)如判斷練學(xué)生拆的答著案,憶并顯厘示相柳應(yīng)的電評語欄。26//源程圖序清背單2-4兼S篇ub譽st犧r(nóng)a輪ct膠io橡nQ吩ui枕z.置cp祝p#i維nc青l(xiāng)u墓de詞<蜻io準st杜re還am賀>#i漁nc會lu潔de少"贈ti懶me繳.h森"us垮in巨g耀na杏me抄sp設(shè)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礦)降)韻;況//禮初始把化隨毯機數(shù)堆發(fā)生陶器nu暖mb姥er顧1籮=黃ra笛nd頂()盤%輩10吵;貍//約產(chǎn)生附第一塘個隨樣機數(shù)nu核mb購er妙2趣=桑ra徐nd婆()版%幟10學(xué);船/渴/產(chǎn)闊生第若二個奇隨機機數(shù)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戰(zhàn)ut紫<壯<鬼"正星確!宗"兼<<廉en膝dl扛;el舍se另{co亞ut紫<毫<球"錯逮誤!孔"亭<<廉;co嚇ut挎<些<奇nu糊mb逃er鍋1硬<<刪"螺-"饅<縣<崇nu氣mb椅er雙2;co紋ut芹<牧<達"應(yīng)影該是盲"<涼<(硬nu川mb冊er卻1四-婚nu扶mb灑er熔2)注<<累en弄dl寶;}sy箭st時em壩("攻PA徒US召E"孫);re榆tu歐rn哪0邪;}282.8嵌套羨的地if瀉語賊句在if語句芹的語歪句塊洽內(nèi),鞭可以籌出現(xiàn)任意雕合法蔽的語雄句,甚吃至又取可以是一趟條if語句莫。外系層if語句鎖與內(nèi)鵲層i擱f語頂句就耍形成創(chuàng)了嵌套慶的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下面泊是相迫應(yīng)的淚嵌套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語句吊可以疫實現(xiàn)披多重詞選擇躁。例化如,薪在三輕個變色量a、進b、開c中找帝出最既大值嚴。該悉問題偉的一種執(zhí)行流程蜓,可如下面徒的流程孟圖所婚示:30真真真真假假假假score≥90score≥80grande='B'grande='A'score≥70score≥60grande='E'grande='D'grande='C'輸入score

開始結(jié)束輸出grande又例供如,瘡根據(jù)巖分數(shù)敏變量sc擇or拒e的不孟同值恒來給皮等級冠變量gr公an澆de賦一個慚不同快的字考母,用以表釋示對唉應(yīng)的掩級別舟。為巴了更偷好地漠體現(xiàn)描嵌套藏if押語句僚,這里棵使用勒的一種算法篩的執(zhí)蒸行流程怠,如下秧所示咳: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語句影中,祝只有咳在上封面的符所有調(diào)條件盡都為fa攪ls廁e時,彎才測斬試下倒一個念條件譽!該流程的執(zhí)蝴行語戴句,如下剩所示摔:(完釘整的崇程序棒請見射下一耳頁)32#i爐nc位lu刑de復(fù)<歌io奏st邀re東am幅>us額in偷g古na終me協(xié)sp稼ac仍e石st汪d;in邪t臥ma召in加(i宅nt屑a躁rg千c,昆c痕ha趨r拘*a渡rg踐v[暫])雕{in揪t數(shù)s飄co啊re屆;ch場ar未gr尺an沒de準;co憤ut猶<<烘"請投輸入纏一個詞百分抗制分聯(lián)數(shù):厚";ci吵n>興>杯sc胡or拒e恨;if鑰(s編co俱re仇>謹=禮90執(zhí))方gr弟an旁de艷=娛'擊A'顛;el怖se努i駝f(仆sc黎or續(xù)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軌<踩<齡"該泥分數(shù)編的等溫級分打是:諷"暑<<爆g具ra央nd姜<欲<果en界dl壇;sy重st烏em伏("喘PA截US撞E"挺);re尊tu系rn仔0固;}332.9if趨語句秀中的馬常見覺錯誤以下顏錯誤嶺是編勁程新旺手經(jīng)刷常會廢犯的剃錯誤然。常見謊錯誤惡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;這實映際上芳就變預(yù)成了塑下面似的代合碼:{}34常見四錯誤居2:暈在i顯f行鋪出現(xiàn)眨錯誤震的分唯號這是盟一個絹很常度見的冒錯誤脫。例問如,覆下面交的代農(nóng)碼: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男l(wèi)ear嘉ea解=r齒ad蛙iu偷s*膜ra暴di連us驅(qū)*3金.1里41昂59仇;co附ut慶>>"面餅積為肺"<<ar章ea<<叉en達dl;}這個發(fā)分號專相當(dāng)于一綿個空疏的塊這個申錯誤疲是很茶難發(fā)起現(xiàn)的滴。因師為它伯既不穩(wěn)是編碎譯錯撈誤也番不是屯運行錯誤國,而掉是一違個邏竄輯錯該誤。核它相靈當(dāng)于嫂一條帶空盟語句核塊(執(zhí)梢行空論操作)粒的單卡向if語句湖。因此裕,上瀉面這澇條if語句通就會濁被解圾釋成憑下面滑這三昏條語籮句了儉:if(ra叛di照us六>0);do腹ub娘lear洞ea窄=r筒ad卷iu畢s*倚ra送di鑄us貝*3他.1紋41邊59產(chǎn);co敞ut告<<"面浩積為傲"<<ar饑ea<<沉en古dl;35提示使用蘋行尾狀風(fēng)格莫可以恐幫助伍防止丟此類耗錯誤聽!例如盼,下麗面的斤代碼端風(fēng)格康: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:臟在布掀爾表孫達式?jīng)]中,紹誤將摔“榆=”創(chuàng)當(dāng)諸做“=槐=”這是屋一種共難以深發(fā)現(xiàn)學(xué)的錯喉誤。攜例如吵,下冷面的衣代碼每: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雄=標(biāo)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語句撲的子舞句。雅這種咸現(xiàn)象副叫做乖懸空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應(yīng)<<"A"<<這en禽dl;}el買seco鵲ut梨<<"B"<<餐en申dl;這樣嚷,當(dāng)i黨>俱j為fa桃ls雁e時,族這條筆語句畝就會牧顯示B了。392.10實訓(xùn)氏:計銜算身示體質(zhì)液量指持數(shù)酒BM濫I我們腥已經(jīng)蛙知道青計算BM道I的方踢法了史。現(xiàn)孝在,搏我們掏要在約此基惱礎(chǔ)上城,對計盜算結(jié)票果作桑出指交導(dǎo)性店意見蒼。如努右表辯所示駕。BMI指導(dǎo)性意見16以下嚴重偏輕16~18偏輕18~24正常24~29超重29~35嚴重超重35以上非常嚴重超重下面創(chuàng)是該繩程序谷的算撤法描劍述:1)各提示飄用戶誓輸入充以公緒斤為月單位原的體重伍以及匠以米議為單芬位的滿身高旨;2)侄計算BM魯I:體乏重海/懲身高2;3)鐵顯示BM是I;4)繪根據(jù)BM丸I值,亮給出竄指導(dǎo)豎性意酷見。(程降序見殿程序拍清單切2-航5)40//源程去序清搏單2-5旺C糞om投pu蠟te各BM總I.幅cp僚p#i熊nc禾lu殼de迎<挨cs預(yù)td壘li奴b>#i榮nc卻lu穩(wěn)de倒<價io賠st捉re掉am示>us寺in炎g罪na反me戚sp浸ac離e場st蕩d;in泥t輩ma奮in傭(i監(jiān)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)辨;剪/訓(xùn)/計投算B勤MIco坡ut勾<<腔"己你的榨BM庭I是乏"徐<<蹤蝶b盼mi液<滴<e皂nd仔l(wèi);if朗(菌b退mi奸<睜1杏6看)弓c須ou巖t<香<擔(dān)"你派嚴重摧偏輕枕"濫<<蓄en臥dl濃;el甜se絹if斥(塵b拆mi太<尊1判8弦)山c疊ou循t<先<濾"你中偏輕低"匪<<隆en德dl賞;el節(jié)se雀if召(錄b柔mi錄<終2離4摧)煉c膠ou倉t<魂<匠"你榮正常導(dǎo)體重涂"喇<<至en悶dl私;el脆se明if憑(士b嘗mi鮮<漿2踩9枯)毒c明ou糧t<祖<雨"你型超重悉"協(xié)<<為en燈dl段;el脫se唱if縮慧(趕b喚mi枕<靈3鋒5狀)錦c臭ou姐t<鎖<撞"你訪嚴重繭超重內(nèi)"別<<杰en植dl曬;el糠se碑co當(dāng)ut秘<<蔬"改你非鬼常嚴銜重超負重"享<雕<e襯nd川l;sy聯(lián)st奏em于("蘋PA帳US恰E"友);re介tu裙rn猜0父;}412.11邏輯徑運算四符有的爬時候亡,是是否要腿執(zhí)行玻一條卡語句青,是尤由幾個數(shù)條件直的組磨合來決毅定的。圖例如蓬,16堵<秒B定MI≤18秒、i鵲<j并且j<岔k、整休數(shù)nu互mb亡er能被騎3整突除的偶數(shù)飛,等垂等。解決子這個渠問題妖可使距用C+閘+邏輯真運算顫符。邏輯番運算辟符是對安布爾值進眉行運滅算,開并得娛到一篩個新泛的布萌爾值碎。表貍2-挎3列萬出了布爾尺運算炕符。表2-3布爾運算符運算符名稱說明!非邏輯非&&與邏輯與||或邏輯或^異或邏輯異或42表2-4非運算符(!)的運算規(guī)則p!p舉例(假設(shè)age=24,gender='F’)truefalse!(age>18)為false,因為(age>18)為truefalsetrue!(gender=='M')為true,因為(gender=='M')為false43表2婆-5鴿是與輕運算孔符(&&)的寸運算和規(guī)則芝。表2-5與運算符(&&)的運算規(guī)則p1p2p1&&p2舉例(假設(shè)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紡是或豎運算埋符(辯||確)的月運算索規(guī)則嶼。表2-6或運算符(||)的運算規(guī)則p1p2p1||p2舉例(假設(shè)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六是異檔或運悄算符扮(^)的劍運算純規(guī)則棄。表2-7異或運算符(^)的運算規(guī)則p1p2p1^p2舉例(假設(shè)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閘給出售了檢族驗一而個整商數(shù)是術(shù)否:能被劣2和攪3整扁除?烘能被憂2或周3整怠除?堅只能衛(wèi)被2變或3缺中的用一個撫整除負?4647//源程冠序清復(fù)單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脆<<哨"請男輸入駕一個旋整數(shù)島:"精;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構(gòu)%銳3禁==再0擱)常;co侮ut覆<<滑"\爬n只價能被術(shù)2和急3中殼的一墊個整陡除嗎莖?"栗;co跨ut垂<<恒(恐nu枕mb數(shù)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是正獻確的撤。但贊其運姜算結(jié)束果,俊則是菜不如雕人意勇!因使為,造表達驅(qū)式1鳥<=扇d傳ay的值胳是一低個布斃爾值1,然士后再丘執(zhí)行1da恰y股<=爸31,那蘭么整史個表達含式1<=da煩y述<=隱31的值末,顯總?cè)挥肋h葵為1(貌tr譽ue婦)!49注意1:“德規(guī)莫夫評定理升”可論以用脈來簡片化邏拌輯表趴達式惜。其跨定義企可以那表述潤如下啞:!(葉p維1緞&&耐p磚2屆)等價浴與(狀!p波1||!p醋2幣)!(弦p炕1||p2其)等價雪與(促!p灑1烏&&瞇!弄p2嶼)50注意2:在C+敗+的邏旁輯運盜算中換,有旅下面采兩條步運算葵原則黎(也傾叫做擦“短猾路原則牢”)逢:由于覆當(dāng)p1為fa櫻ls敘e時,過表達魄式(p詳1閣&&肚p掠2)的運織算結(jié)與果一銀定為fa貪ls鉆e,所希以,泊此時倡將不侮再計節(jié)算p2。由于暢當(dāng)p1為tr潤ue時,王表達伐式(p林1||p2假)的運竄算結(jié)桂果一侄定為tr賠ue,所丟以,假此時增將不宰再計泛算p2。51例如蒜,運算割符“&舒&”的短眉路原本則:in存t秋a阻=懂1受,謝b照=潛1;bo虜ol說ta擱g毛=王(棵(活a價<乖0陽)若&黎&利(嚇b騾=揭2辭)掃>希0桂)芒;co關(guān)ut磚<<障"獵a炊=萬"懇<<臉a禮<公<叫",鑒b辣=侍"泰<<因b塵<皮<烤en誰dl震;再看羞看運妥算符“||”的短惕路原定則:in鍛t沖a仗=禾1睬,眠b區(qū)=剖1;bo抱ol社ta醉g駱=賀(貸(麻a沙>咬0雞)||(濫b揚=剛2播)晝>附0滅);co素ut抽<<忌"潛a壟=猜"忍<<滿a結(jié)<膀<貴",河b駕=無"巡壽<<板b惡<利<餅en喝dl旗;52課堂刑討論分:寫出熱下列禾條件足的邏迷輯表自達式(1)當(dāng)in違t類型喜變量a大于10或者坐為負味數(shù)時嬸,表旁達式裕的值板為真盼。(2)當(dāng)ch厘ar類型爆變量ch的值膝為大總寫字被母時代,表跡達式拆的值情為真鋤。(3)當(dāng)in莊t類型柜變量m為能物被7整除畝的偶摘數(shù)時板,表丘達式投的值妨為真圓。(4)判顏定閏甲年:當(dāng)年熊份變?nèi)毫縴e柳ar能被4整除尸但不竹能被10也0整除思時,或能閑被4整除填又能噴被40漂0整除擴時,炊表達遷式的折值為擇真。(5)判登定申譽請經(jīng)而濟適沾用房種的條欣件:已擁畏有住偶房的艘數(shù)量nu幅mb運er愈Of跡Ho離us糞es至多1套,或家隙庭收孤入ho滅us農(nóng)eH撿ol過dI牛nc捆om飾e低于50由00元,但不圈能同線時滿潤足這臂兩個谷條件樹。532.12sw衡it嫩ch湖語句為了新全面承考慮悠所有拿情況德,需控要使繳用嵌趣套的if語句妨。有衣時候西,過多艙地使養(yǎng)用嵌監(jiān)套的if語句拍會使發(fā)程序啞比較積繁瑣冬、很脂難閱肉讀。例如堡,下愚面的捷代碼果:if(da環(huán)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監(jiān)or息e腫==康2)Sy耽st死em搶.o鎮(zhèn)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關(guān)ln繡(夸"是星嘆期四"辱);el團seif(sc惕or效e邊==旦5)Sy盤st獎em昏.o字ut學(xué).p資ri烤nt保ln毀(歐"是星臨期五"勾);el壩seif(sc早or銳e拖==障6)Sy劑st襯em裙.o陵ut靜.p蝦ri欺nt唐ln旬(瞇"是星維期六"摩);54C+稠+提供吃了sw派it掙ch語句約來有給效地豪處理椅多重驢條件桌的問介題。下面產(chǎn)用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規(guī)<<申"是星傳期二"尿<<拴en尿dl頸;br絹ea啊k;cas習(xí)e3:co藏ut營<<記"是星晨期三"記<<載en陣dl棋;br豬ea筒k;cas臨e4:co緩ut壯<<弱"是星寫期四"接<<秋en災(zāi)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的值卷是否內(nèi)匹配叢常量0、仰1、杰2、拌3、標(biāo)4、婚5、婚6。如果服匹配傭,就漏輸出狗對應(yīng)慚的星叛期幾余;否著則顯床示一蟲條出時錯提所示信雁息。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幕:默認婦情況嘩下執(zhí)恐行的語句撤組;}sw懼it懂ch語句栽遵從狼下列軟規(guī)則押:1)“表達峽式”的值蜓類型必須揪是一短個ch歉ar或in溪t;2)“值1”自..興..叔..零“值n”必須僅是與席上面“表達虜式”的值分類型玻匹配好的常量。3)鴿當(dāng)表酷達式不的值啄與某摩個ca箭se子句秀的常究量匹非配時當(dāng),執(zhí)芽行就堵從該ca美se語句辨開始京,直歸到遇刃到一棕個br燈ea隙k或到欣達該sw襲it層ch語句胃末端腦的“}褲”;4)椅關(guān)鍵寨字br繪ea膝k是可該選。大用來譯立即秤終止霉整個sw魯it每ch語句奧;5)半默認京情況(d職ef熱au仙lt黑)是可通選的輩。用肌來指厚定當(dāng)愿沒有殖一個ca憲se常量與表淡達式敏相匹徑配時傲應(yīng)該勾執(zhí)行工的操眼作;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處開壤始執(zhí)路行,癥直到謹?shù)竭_sw工it難ch語句擾的末滅端。例如筑,如飼果ch的值俱為'a袖',那么透下面只的代卷碼就敗會將慣字母a打正印3次蠻:sw隔it偷ch(伍ch編

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論