Care and diligence bring luck.
Judge each day not by the harvest
you reap but by the seeds you plant.
每一個(gè)程序都是由一條條語句組成,為了結(jié)構(gòu)化程序設(shè)計(jì),這里就引入了三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)也就是從上而下,線性有序地依次執(zhí)行,比如之前的 Hello World 程序,選擇結(jié)構(gòu)即根據(jù)條件成立與否選擇程序執(zhí)行的線路,循環(huán)結(jié)構(gòu)的話就是重復(fù)執(zhí)行一個(gè)或幾個(gè)模塊,直到條件滿足跳出為止。下面就著重介紹第二個(gè)結(jié)構(gòu) —— 選擇結(jié)構(gòu)
選擇結(jié)構(gòu)用于判斷給定的條件,根據(jù)判斷的結(jié)果來確認(rèn)某些條件是否成立,進(jìn)而控制程序的流程,即如果判斷成立,則執(zhí)行下面的語句,否則執(zhí)行另外分支的語句。C++ 提供了三種選擇結(jié)構(gòu):if 選擇結(jié)構(gòu)、if-else 選擇結(jié)構(gòu)、switch選擇結(jié)構(gòu)
if 選擇結(jié)構(gòu)
if
語句單分支結(jié)構(gòu),沒有 else
存在,如果表達(dá)式成立,則執(zhí)行后面語句塊,否則跳過語句塊執(zhí)行 if
結(jié)構(gòu)之后的語句。一般表現(xiàn)形式為
if(表達(dá)式) 語句塊;
if( 2>1 ) { cout < 'ok';="" ="" }="" ="" cout=""><>
注:
表達(dá)式必須用圓括號(hào)括起來,不可省略
語句塊如果只有一條語句可以省略外面的花括號(hào)
if-else 選擇結(jié)構(gòu)
相對(duì)于if
語句單分支結(jié)構(gòu),這里 else
的存在使選擇結(jié)構(gòu)變成了雙分支結(jié)構(gòu),也就是說當(dāng)表達(dá)式為 false
或 true
的時(shí)候均有分支可供選擇。一般表現(xiàn)形式為
if(表達(dá)式) 當(dāng)表達(dá)式成立時(shí)執(zhí)行的語句塊; else 當(dāng)表達(dá)式不成立時(shí)執(zhí)行的語句塊;
if( 2>1 ) cout < 'ok';="" ="" else="" ="" ="" ="" cout=""><>
注:
表達(dá)式必須用圓括號(hào)括起來,不可省略
語句塊如果只有一條語句可以省略外面的花括號(hào)
嵌套的 if
語句
if
語句允許嵌套,即在語句塊中也允許嵌入 if
語句或者 if-else
語句(一般嵌套不大余 5),嵌套一般有3
種形式
if(表達(dá)式1) { if(表達(dá)式2) 語句塊1; } else 語句塊2;
注:
嵌套的 if 語句在花括號(hào)內(nèi),下面的 else 和最外面的 if 組成一隊(duì)
當(dāng) if 語句嵌套時(shí)且無花括號(hào)存在,else 總是和最近的 if 語句配對(duì)
if(表達(dá)式1) if(表達(dá)式2) 語句塊1; else 語句塊2; else 語句塊3;
注:
else 和最近的 if 配對(duì),所以內(nèi)部的 if 與 else 先配對(duì),之后外部的配對(duì)
if(表達(dá)式1) 語句塊1; else if(表達(dá)式2) 語句塊2;
else
語句塊3;
注:
if 與 else if 連用的情況多用于 測(cè)試多種條件
一個(gè) if 后可跟 零個(gè) 或 一個(gè) else,else 必須在所有 else if 之后
一個(gè) if 后可跟 零個(gè) 或 多個(gè) else if,else if 必須在 else 之前。
一旦某個(gè) else if 匹配成功,其他的 else if 或 else 將不會(huì)被測(cè)試
三目運(yùn)算符(? :)
C++ 中唯一一個(gè)需要 3 個(gè)操作數(shù)的操作符,常用來代替 if-else 語句使代碼變得簡(jiǎn)潔,該操作符也稱為 條件運(yùn)算符 或 條件表達(dá)式 ,通常格式如下
b ? x : y
先計(jì)算條件b,然后進(jìn)行判斷,如果b的值為true,計(jì)算x的值,運(yùn)算結(jié)果為x的值;否則,計(jì)算y的值,運(yùn)算結(jié)果為y的值。一個(gè)條件表達(dá)式從不會(huì)既計(jì)算x,又計(jì)算y。條件運(yùn)算符是右結(jié)合的,也就是說,從右向左分組計(jì)算。例如,a?b:c?d:e將按a?b:(c?d:e)執(zhí)行
a ? b : c ? d : e // 執(zhí)行順序,從右往左 a ? b : ( c ? d : e )
條件運(yùn)算符通常用于 賦值 或 輸出語句中由于條件不同輸出不同
// 賦值 int max = (a>b) ? a : b ; // 輸出語句 cout < (="" (2="">1) ? 'OK' : 'Okey' ) <>
注:
在 cout 輸出語句中,用于輸出的表達(dá)式必須用括號(hào)括起來
cout < (a+b)=""><>
switch 語句
switch
語句用于實(shí)現(xiàn)多分支結(jié)構(gòu)的程序,雖然可以用多次嵌套 if
語句來實(shí)現(xiàn),但是程序會(huì)顯得復(fù)雜,可讀性變差,所以 C++
引入了 switch
語句,通常格式如下
switch(表達(dá)式) { case 常量表達(dá)式1: 語句塊1; break;
case 常量表達(dá)式2: 語句塊2; break; case 常量表達(dá)式3: 語句塊3; break; ...
case 常量表達(dá)式n: 語句塊n; break; default: 語句n+1; }
分析:
首先在 switch
處計(jì)算表達(dá)式的值, 然后依次與下面的 case
常量表達(dá)式比較, 當(dāng)表達(dá)式的值與常量表達(dá)式的值相等, 那么就從這個(gè) case
處作為語句的入口, 執(zhí)行 case
后面的語句, 遇到 break
語句則跳出整個(gè) switch
選擇結(jié)構(gòu),若表達(dá)式的值與常量表達(dá)式的值沒有一個(gè)相同的則執(zhí)行 default
后面的語句塊
注:
語句中可以出現(xiàn)一個(gè)或多個(gè) case,但是只能有一次 default 或省略 default 部分,default 語句可以出現(xiàn)在任何位置,不一定在最后
多個(gè) case 允許使用在同一個(gè)語句塊前面
case 1: case 2: cout < 'ok'="">< endl;="" ="">
switch 的表達(dá)式只能為 int 或 char 型數(shù)據(jù), 當(dāng)為 char 型數(shù)據(jù)時(shí)會(huì)將字符轉(zhuǎn)化為相應(yīng)的 ASCII 碼值, 對(duì)于 字符串、浮點(diǎn)型 等不能作為 switch 的表達(dá)式
常量表達(dá)式中不能出現(xiàn)變量,一般為 常數(shù) 或 字符,每個(gè)常量表達(dá)式的值不能相同
case 后面的語句塊可以是 一條 或 多條 語句, 且無需用 花括號(hào) 括起來, 因?yàn)樗鼤?huì)自動(dòng)從符合結(jié)果的 case 處自動(dòng)向下執(zhí)行
case 語句中允許嵌套 switch 語句
switch(表達(dá)式) { case 常量表達(dá)式1: switch(表達(dá)式2) { case 常量表達(dá)式2: 語句塊; break; case 常量表達(dá)式3: 語句塊; break; ... } break; case 常量表達(dá)式4: 語句塊; break; ...
}
在線OJ —— 1.4 編程基礎(chǔ)之邏輯表達(dá)式與條件分支
http://noi.openjudge.cn/
聯(lián)系客服