(转载)你好,C++(19)“老师,我这次四级考试过了没有?”——4.2 条件选择语句...
4.2? 條件選擇語句
“老師,我這次四級考試過了沒有?”
如果老師被問到這個問題,他會如何回答?是的,他會根據(jù)不同的條件選擇不同的回答:
如果考試成績大于等于60,那就回答:“恭喜你,你通過了這次考試”;
否則那就回答“很遺憾,你沒有通過這次考試”。
這就是現(xiàn)實世界中的條件選擇——根據(jù)不同的條件做出不同的動作。那么,在C++程序中,我們又該如何表達(dá)這種條件選擇呢?
4.2.1? if語句:如果……就……
在現(xiàn)實世界中,我們總是用“如果……,就……”的句式來表達(dá)條件選擇,C++也向我們學(xué)習(xí),提供了if(如果)關(guān)鍵字來形成條件選擇結(jié)構(gòu),用以表達(dá)現(xiàn)實世界中的條件選擇,其語法格式如下:
if ( 條件表達(dá)式 ) {語句1; } else {語句2; }C++在執(zhí)行if條件選擇語句時,首先會計算其中條件表達(dá)式的值,然后根據(jù)其值的不同選擇執(zhí)行不同的代碼。如果條件表達(dá)式的值為true,則直接向下執(zhí)行語句1;反之,則進(jìn)入else分支執(zhí)行語句2。通過使用條件選擇語句,可根據(jù)條件表達(dá)式的不同值而改變程序執(zhí)行的路徑,可以在語句1和語句2中實現(xiàn)不同的功能,從而達(dá)到“根據(jù)不同的條件執(zhí)行不同的動作”的目的。if語句的執(zhí)行過程如圖4-1所示。
現(xiàn)在,就可以用if語句來解決上面這個“四級考試過了沒有”的現(xiàn)實問題:
// 以考試成績作為條件 int nScore = 0; cout<<"請輸入考試成績:"; // 輸入考試成績 cin>>nScore; // 對條件表達(dá)式進(jìn)行計算,判斷考試成績是否符合條件(大于等于60) // 如果nScore的值大于等于60,符合條件,條件表達(dá)式的值為true, // 則直接進(jìn)入if分支執(zhí)行,輸出考試通過的提示 if(nScore >= 85) { // 執(zhí)行符合條件的動作 cout<<"恭喜你,你通過了這次考試"<<endl; } else // 如果不符合條件,條件表達(dá)式的值為false,則進(jìn)入else分支執(zhí)行 { // 執(zhí)行不符合條件的動作 cout<<"很遺憾,你沒有通過這次考試"<<endl; }???????????????????????
圖4-1? 條件選擇結(jié)構(gòu)的執(zhí)行流程
在這里,首先讓用戶輸入考試成績,然后在if語句的條件表達(dá)式中,將其跟一個標(biāo)準(zhǔn)值進(jìn)行比較,也就是判斷考試成績是否符合條件。如果考試成績大于等于60,則條件表達(dá)式的值為true,這就意味著符合條件,程序會進(jìn)入if分支執(zhí)行,輸出考試通過的提示語言。反之,如果考試成績小于60,條件不能滿足,條件表達(dá)式的值為false,程序則會進(jìn)入else分支執(zhí)行,輸出考試沒有通過的提示語。這樣就讓程序根據(jù)不同的條件(nScore大于等于60與否)做出了不同的動作(輸出不同的提示語)。
if語句的形式雖然簡單,但是在其使用上有如下幾個需要注意的地方。
1. 如果沒有必要, if語句中的else分支可以省略
很多時候,我們只關(guān)心條件為true時的情況,只對符合條件的情況進(jìn)行處理,這時就可以省略else分支,僅保留if對條件表達(dá)式進(jìn)行判斷以及其后的語句1對符合條件的情況進(jìn)行處理。例如,我們只對通過考試的人進(jìn)行提示,而對于沒有通過考試的人的,則直接忽略,用if語句表達(dá)出來就是:
// 省略else分支,只對符合條件的情況進(jìn)行處理 if( nScore >= 60 ) {cout<<"恭喜你,你通過了這次考試"; }2. ?if語句可以嵌套以表達(dá)多層次的條件判斷
在一個if語句中可以嵌套另一個if語句,表示在某個前提條件下做進(jìn)一步的條件判斷,從而表達(dá)多層次的條件判斷。例如,要比較輸入的v1和v2兩個數(shù)的大小關(guān)系,我們需要先判斷兩者是否相等,在不相等的前提條件下,再繼續(xù)判斷兩者之間的大小關(guān)系,用嵌套的if語句將其表達(dá)出來就是:
cout << "請輸入兩個整數(shù):" << endl; int v1, v2; // 獲取用戶輸入的數(shù)字 cin >> v1 >> v2; if( v1 != v2 ) // 判斷v1和v2是否相等,如果不相等,則繼續(xù)判斷大小 { // 第二級if語句 // 如果不相等,則繼續(xù)判斷v1是否大于v2 if( v1 > v2 ) // 大于 { cout<<" v1 > v2 "<<endl; } else // 小于 { cout<<" v1 < v2 "<<endl; } } else // v1和v2相等 { cout<<" v1 == v2 "<<endl; }3. ?if語句可以并列
如果同一層次的條件有多種情況,就可以使用并列的條件選擇語句來實現(xiàn)。其語法格式如下:
if ( 條件表達(dá)式1 ) {語句1; } else if ( 條件表達(dá)式2 ) {語句2; } // … else if ( 條件表達(dá)式n ) { 語句n; } else { 語句n+1; }在執(zhí)行的時候,會首先計算條件表達(dá)式1的值,如果其值為true,則進(jìn)入其分支執(zhí)行語句1,然后結(jié)束整個并列條件選擇語句的執(zhí)行;如果其值為false,則會繼續(xù)向下計算條件表達(dá)式2的值,同樣的,如果其值為true,則進(jìn)入其分支執(zhí)行語句2,然后結(jié)束整個語句,如果其值為false,則繼續(xù)向下進(jìn)行同樣的計算過程。直到最后,如果所有的條件分支都無法滿足,則進(jìn)入最后的else分支執(zhí)行并結(jié)束整個語句。例如,我們在前面用嵌套的if語句實現(xiàn)的比較v1和v2的大小比較,實際上是三種相互并列的情況:要么是大于,要么是小于,要么是等于。所以,同樣也可以用并列的條件結(jié)構(gòu)來實現(xiàn):
if(v1 > v2) // 首先判斷v1是否大于v2 {cout<<" v1 > v2"<<endl; } else if(v1 < v2) // 如果第一個條件不滿足,再判斷v1是否小于v2 { cout<<" v1 < v2"<<endl; } else // 如果v1既不大于v2,也不小于v2,那就必然是等于v2 { cout<<" v1 == v2"<<endl; }這里需要注意的是,并列條件語句在執(zhí)行的時候,會逐個依次向下計算其中并列的條件表達(dá)式,直到某個條件表達(dá)式為true,然后才進(jìn)入其分支執(zhí)行并結(jié)束整個語句。所以,我們總是把滿足幾率比較高的條件判斷放在比較靠前的位置,希望if語句一開始就遇到滿足條件的分支,以避免對那些不易滿足的條件判斷的無用計算。
另外需要注意的是,并列條件選擇語句只會執(zhí)行其中的某一個分支,如果多個條件表達(dá)式都為true,則只會執(zhí)行從上到下遇到的第一個條件表達(dá)式為true的分支。例如:
int nScore = 91; if(nScore >= 60) // 第一個條件表達(dá)式為true,進(jìn)入執(zhí)行并直接結(jié)束整個語句 { cout<<"恭喜你,你通過了這次考試"<<endl; } // 因為第一個分支已經(jīng)執(zhí)行并結(jié)束了整個語句 // 所以即使第二個條件表達(dá)式也為true,但卻并不會得到執(zhí)行 else if(nScore >= 85) { cout<<"厲害,你的成績是優(yōu)秀"<<endl; }所以在使用并列條件選擇語句時,應(yīng)避免條件范圍的相互重復(fù)覆蓋,不要讓多個條件表達(dá)式同時為true,以免造成程序邏輯上的混亂。
知道更多:用“?:”條件操作符來表達(dá)條件判斷,簡化代碼
所謂條件操作符,它可以讓一個表達(dá)式根據(jù)不同的條件擁有不同的值。它是C++中唯一一個三元操作符,其語法格式如下:
條件表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2跟條件語句類似,在執(zhí)行的時候,它會首先計算其中的條件表達(dá)式的值,如果其值為true,就會接著計算表達(dá)式1的值,并將其作為整個表達(dá)式的最終結(jié)果值。反之,則會計算表達(dá)式2的值,同樣作為整個表達(dá)式的最終結(jié)果值。
利用條件操作符,我們可以簡便地實現(xiàn)一些比較簡單的(要同時對條件成立和不成立的情況都進(jìn)行處理,且處理的過程比較簡單)條件選擇的功能,從而達(dá)到簡化代碼的目的。例如,我們要從兩個數(shù)中選出較大的一個,使用if條件語句進(jìn)行大小比較,可以實現(xiàn)為:
int a,b; // 輸入a,b… int m = 0; if(a > b) { m = a; } else { m = b; }而如果是使用條件操作符,以上的條件選擇用一條語句就實現(xiàn)了:
int a,b; // 輸入a,b… int m = (a>b)?a:b;在執(zhí)行“(a>b)?a:b”的時候,同樣會先計算“(a>b)”的值,如果a的值比較大,也就是條件表達(dá)式的值為true,則會以第二個操作數(shù)a作為整個表達(dá)式的值,然后賦值給m。這樣,m就成了兩個數(shù)中較大的一個。反過來,如果b的值比較大,則條件表達(dá)式的值為false,就會以第三個操作數(shù)b作為整個表達(dá)式的值,最后賦值給m,此時m仍然是兩個數(shù)中較大的一個。由此可見,短短的一條語句就實現(xiàn)了原來需要整個if條件語句才能實現(xiàn)的功能。簡化代碼,就是條件操作符的最主要作用。
?
原文地址:http://www.cnblogs.com/nihaoCPP/p/4091693.html
轉(zhuǎn)載于:https://www.cnblogs.com/wodehao0808/p/4211087.html
總結(jié)
以上是生活随笔為你收集整理的(转载)你好,C++(19)“老师,我这次四级考试过了没有?”——4.2 条件选择语句...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android客户端性能测试(一):使用
- 下一篇: 转载--c语言宏定义(1)