一本鸣、條件嵌套
之前我們提到過(guò)疫衩,if條件可以是單分支結(jié)構(gòu),也可以是雙分支結(jié)構(gòu)荣德,并且在每個(gè)分支里面的語(yǔ)句塊可以是一個(gè)語(yǔ)句闷煤,也可以是多個(gè)語(yǔ)句童芹。這些語(yǔ)句可以是普通的賦值或者其他語(yǔ)句,同樣也可以if語(yǔ)句鲤拿。類似于if里面又包含if這樣的結(jié)構(gòu)辐脖,我們稱之為嵌套,以后我們還會(huì)接觸到循環(huán)里面又有循環(huán)皆愉,我們叫它循環(huán)嵌套嗜价。
if (布爾表達(dá)式1){ // 分支語(yǔ)塊里面又可以包含if語(yǔ)句
if(布爾表達(dá)式2){ } else{}
}
else{
語(yǔ)塊;
}
if (布爾表達(dá)式1){ // 分支語(yǔ)塊里面又可以包含if語(yǔ)句
語(yǔ)塊幕庐;
}
else{
if(布爾表達(dá)式2){ } else{}
}
我們來(lái)舉例說(shuō)明一下久锥。
有一個(gè)分段函數(shù) f(x),當(dāng)x=1時(shí)异剥,f(x)=10;當(dāng)x=2時(shí)瑟由,f(x)=20;當(dāng)x為其他值時(shí),f(x)=30冤寿。
#include <iostream>
using namespace std;
int main(){
double x, y;
cin >> x;
if(x == 1){
y = 10;
}
else{ // x!=1
if(x == 2){
y = 20;
}
else{ // x!=1 && x!=2
y = 30;
}
}
cout << y;
return 0;
}
對(duì)于這種包含多重嵌套的語(yǔ)句歹苦,要特別注意每個(gè)else所代表的意思,理清楚各個(gè)條件之間的關(guān)系督怜,做到不重復(fù)殴瘦、不遺漏。
思考題:
Description
讀入三個(gè)不同的整數(shù)号杠,編程按由小到大的順序排列出來(lái),中間用一空格隔開(kāi)蚪腋。
Input
輸入三個(gè)不同的整數(shù)
Output
按由小到大輸出三個(gè)整數(shù),中間用一空格隔開(kāi)
Sample Input
3 5 2
Sample Output
2 3 5
拓展:如果將題目中的『三個(gè)不同的整數(shù)』姨蟋,改成三個(gè)整數(shù)屉凯,又應(yīng)該如何解決呢?
二眼溶、switch語(yǔ)句
在條件語(yǔ)句中悠砚,有時(shí)我們并不僅僅是兩條分支,有時(shí)是多條分支堂飞,我們當(dāng)然可以借助于if的嵌套來(lái)實(shí)現(xiàn)灌旧,但是有時(shí)由于分支比較多,嵌套起來(lái)代碼就會(huì)比較復(fù)雜和冗余酝静,為了方便實(shí)現(xiàn)多個(gè)分支的情況节榜,C++中還提供了switch語(yǔ)句,專門用來(lái)方便實(shí)現(xiàn)多分支的情況别智。
我們都知道一年中,每個(gè)月份的天數(shù)都是固定的稼稿,假定今年是非閏年薄榛,我們希望輸入月份讳窟,能得出該月的天數(shù)。
很顯然敞恋,我們知道1丽啡、3、5硬猫、7补箍、8、10啸蜜、12都是31天坑雅,4、6衬横、9裹粤、11都是30天,2月是28天蜂林。如果我們嵌套來(lái)寫(xiě)遥诉,會(huì)比較冗余和復(fù)雜。
#include <iostream>
using namespace std;
int main(){
int m, day;
cin >> m;
if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12){
day = 31;
}
else{ // 2噪叙、4矮锈、6、9睁蕾、11月
if(m==2){
day = 28;
}
else{ // 4愕难、6、9惫霸、11 月
day = 30;
}
}
cout << day;
return 0
}
如果我們用swith語(yǔ)句來(lái)寫(xiě)猫缭,會(huì)簡(jiǎn)單一些。
#include <iostream>
using namespace std;
int main(){
int m, day;
cin >> m;
switch (m){
case 2 : day = 28; break;
case 4 : day = 30; break;
case 6 : day = 30; break;
case 9 : day = 30; break;
case 11: day = 30;break;
default: day = 31; //除上面列出情況外壹店,day=31
}
cout << day;
return 0;
}
switch的格式如下
switch(表達(dá)式){
case 常量表達(dá)式1 :
語(yǔ)塊1;
break;
case 常量表達(dá)式2 :
語(yǔ)塊2;
break;
...
case 常量表達(dá)式n :
語(yǔ)塊n;
break;
default:
語(yǔ)塊n+1;
}
三猜丹、練習(xí)
1、輸入某學(xué)生的成績(jī)硅卢,若成績(jī)?cè)?5分以上射窒,輸出very good,若成績(jī)?cè)?0分到85分之間将塑,輸出good脉顿,若成績(jī)低于60分,輸出no good点寥。
2艾疟、輸入兩個(gè)正整數(shù)a,b。b最大不超過(guò)三位數(shù)蔽莱,a不大于31弟疆。使a在左,b在右盗冷,拼接成一個(gè)新的數(shù)c怠苔。例如:a=2,b=16仪糖,則c=216柑司;若a=18,b=476锅劝,則c=18476攒驰。提示:求c的公式為:c=a×K+b,根據(jù)位數(shù)不同鸠天,k取值不同讼育。
輸入樣例:2 16
輸出樣例:2163、根據(jù)從鍵盤上輸入的表示星期幾的數(shù)字稠集,對(duì)應(yīng)輸出它的英文名稱奶段。