程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 你好,C++(19)“老師,我這次四級考試過了沒有?”——4.2 條件選擇語句,四級考試4.2

你好,C++(19)“老師,我這次四級考試過了沒有?”——4.2 條件選擇語句,四級考試4.2

編輯:C++入門知識

你好,C++(19)“老師,我這次四級考試過了沒有?”——4.2 條件選擇語句,四級考試4.2


4.2  條件選擇語句

“老師,我這次四級考試過了沒有?”

如果老師被問到這個問題,他會如何回答?是的,他會根據不同的條件選擇不同的回答:

如果考試成績大於等於60,那就回答:“恭喜你,你通過了這次考試”;

否則那就回答“很遺憾,你沒有通過這次考試”。

這就是現實世界中的條件選擇——根據不同的條件做出不同的動作。那麼,在C++程序中,我們又該如何表達這種條件選擇呢?

4.2.1  if語句:如果……就……

在現實世界中,我們總是用“如果……,就……”的句式來表達條件選擇,C++也向我們學習,提供了if(如果)關鍵字來形成條件選擇結構,用以表達現實世界中的條件選擇,其語法格式如下:

if ( 條件表達式 )
{
    語句1;
}
else
{
    語句2;
}

C++在執行if條件選擇語句時,首先會計算其中條件表達式的值,然後根據其值的不同選擇執行不同的代碼。如果條件表達式的值為true,則直接向下執行語句1;反之,則進入else分支執行語句2。通過使用條件選擇語句,可根據條件表達式的不同值而改變程序執行的路徑,可以在語句1和語句2中實現不同的功能,從而達到“根據不同的條件執行不同的動作”的目的。if語句的執行過程如圖4-1所示。

現在,就可以用if語句來解決上面這個“四級考試過了沒有”的現實問題:

// 以考試成績作為條件
int nScore = 0;
cout<<"請輸入考試成績:";
// 輸入考試成績   
cin>>nScore;
// 對條件表達式進行計算,判斷考試成績是否符合條件(大於等於60)
// 如果nScore的值大於等於60,符合條件,條件表達式的值為true,
// 則直接進入if分支執行,輸出考試通過的提示
if(nScore >= 85)
{
    // 執行符合條件的動作
    cout<<"恭喜你,你通過了這次考試"<<endl;
}
else // 如果不符合條件,條件表達式的值為false,則進入else分支執行
{
    // 執行不符合條件的動作
    cout<<"很遺憾,你沒有通過這次考試"<<endl;
}

        圖4-1  條件選擇結構的執行流程

在這裡,首先讓用戶輸入考試成績,然後在if語句的條件表達式中,將其跟一個標准值進行比較,也就是判斷考試成績是否符合條件。如果考試成績大於等於60,則條件表達式的值為true,這就意味著符合條件,程序會進入if分支執行,輸出考試通過的提示語言。反之,如果考試成績小於60,條件不能滿足,條件表達式的值為false,程序則會進入else分支執行,輸出考試沒有通過的提示語。這樣就讓程序根據不同的條件(nScore大於等於60與否)做出了不同的動作(輸出不同的提示語)。

if語句的形式雖然簡單,但是在其使用上有如下幾個需要注意的地方。

1. 如果沒有必要, if語句中的else分支可以省略

很多時候,我們只關心條件為true時的情況,只對符合條件的情況進行處理,這時就可以省略else分支,僅保留if對條件表達式進行判斷以及其後的語句1對符合條件的情況進行處理。例如,我們只對通過考試的人進行提示,而對於沒有通過考試的人的,則直接忽略,用if語句表達出來就是:

// 省略else分支,只對符合條件的情況進行處理
if( nScore >= 60 )
{
    cout<<"恭喜你,你通過了這次考試";
}

2.  if語句可以嵌套以表達多層次的條件判斷

在一個if語句中可以嵌套另一個if語句,表示在某個前提條件下做進一步的條件判斷,從而表達多層次的條件判斷。例如,要比較輸入的v1和v2兩個數的大小關系,我們需要先判斷兩者是否相等,在不相等的前提條件下,再繼續判斷兩者之間的大小關系,用嵌套的if語句將其表達出來就是:

cout << "請輸入兩個整數:" << endl;
int v1, v2;
// 獲取用戶輸入的數字
cin >> v1 >> v2;
if( v1 != v2 )     // 判斷v1和v2是否相等,如果不相等,則繼續判斷大小
{
    // 第二級if語句
    // 如果不相等,則繼續判斷v1是否大於v2
    if( v1 > v2 ) // 大於   
    {
        cout<<" v1 > v2 "<<endl;
    }   
    else  // 小於
    {
        cout<<" v1 < v2 "<<endl;
    }
}
else     // v1和v2相等
{
    cout<<" v1 == v2 "<<endl;
}

3.  if語句可以並列

如果同一層次的條件有多種情況,就可以使用並列的條件選擇語句來實現。其語法格式如下:

if ( 條件表達式1 )
{
    語句1;
}
else if ( 條件表達式2 )
{
    語句2;
}
// …
else if ( 條件表達式n )
{
    語句n;
}
else
{
    語句n+1;
}

在執行的時候,會首先計算條件表達式1的值,如果其值為true,則進入其分支執行語句1,然後結束整個並列條件選擇語句的執行;如果其值為false,則會繼續向下計算條件表達式2的值,同樣的,如果其值為true,則進入其分支執行語句2,然後結束整個語句,如果其值為false,則繼續向下進行同樣的計算過程。直到最後,如果所有的條件分支都無法滿足,則進入最後的else分支執行並結束整個語句。例如,我們在前面用嵌套的if語句實現的比較v1和v2的大小比較,實際上是三種相互並列的情況:要麼是大於,要麼是小於,要麼是等於。所以,同樣也可以用並列的條件結構來實現:

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;
}

這裡需要注意的是,並列條件語句在執行的時候,會逐個依次向下計算其中並列的條件表達式,直到某個條件表達式為true,然後才進入其分支執行並結束整個語句。所以,我們總是把滿足幾率比較高的條件判斷放在比較靠前的位置,希望if語句一開始就遇到滿足條件的分支,以避免對那些不易滿足的條件判斷的無用計算。

另外需要注意的是,並列條件選擇語句只會執行其中的某一個分支,如果多個條件表達式都為true,則只會執行從上到下遇到的第一個條件表達式為true的分支。例如:

int nScore = 91;
if(nScore >= 60) // 第一個條件表達式為true,進入執行並直接結束整個語句
{
    cout<<"恭喜你,你通過了這次考試"<<endl;
}
// 因為第一個分支已經執行並結束了整個語句
// 所以即使第二個條件表達式也為true,但卻並不會得到執行
else if(nScore >= 85)
{
    cout<<"厲害,你的成績是優秀"<<endl;
}

所以在使用並列條件選擇語句時,應避免條件范圍的相互重復覆蓋,不要讓多個條件表達式同時為true,以免造成程序邏輯上的混亂。

知道更多:用“?:”條件操作符來表達條件判斷,簡化代碼

所謂條件操作符,它可以讓一個表達式根據不同的條件擁有不同的值。它是C++中唯一一個三元操作符,其語法格式如下:

條件表達式 ? 表達式1 : 表達式2

跟條件語句類似,在執行的時候,它會首先計算其中的條件表達式的值,如果其值為true,就會接著計算表達式1的值,並將其作為整個表達式的最終結果值。反之,則會計算表達式2的值,同樣作為整個表達式的最終結果值。

利用條件操作符,我們可以簡便地實現一些比較簡單的(要同時對條件成立和不成立的情況都進行處理,且處理的過程比較簡單)條件選擇的功能,從而達到簡化代碼的目的。例如,我們要從兩個數中選出較大的一個,使用if條件語句進行大小比較,可以實現為:

int a,b;
// 輸入a,b… 
int m = 0;
if(a > b)
{
    m = a;
}
else
{
    m = b;
}

而如果是使用條件操作符,以上的條件選擇用一條語句就實現了:

int a,b;
// 輸入a,b…
int m = (a>b)?a:b;

在執行“(a>b)?a:b”的時候,同樣會先計算“(a>b)”的值,如果a的值比較大,也就是條件表達式的值為true,則會以第二個操作數a作為整個表達式的值,然後賦值給m。這樣,m就成了兩個數中較大的一個。反過來,如果b的值比較大,則條件表達式的值為false,就會以第三個操作數b作為整個表達式的值,最後賦值給m,此時m仍然是兩個數中較大的一個。由此可見,短短的一條語句就實現了原來需要整個if條件語句才能實現的功能。簡化代碼,就是條件操作符的最主要作用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved