C++條件語句和條件運算符的使用方法講解
if語句的3種形式
1) if(表達式) 語句。
例如:
if(x>y) cout<<x<<endl;
這種if語句的執(zhí)行過程見下圖。
2) if(表達式) 語句1 else 語句2
例如:
if (x>y) cout<<x; else cout<<y;
見圖。

3)
if(表達式1) 語句1 else if(表達式2) 語句2 else if(表達式3) 語句3 … else if(表達式m) 語句m else 語句n
例如:
if (number>500) cost=0.15; else if(number>300) cost=0.10; else if(number>100) cost=0.075; else if(number>50) cost=0.05; else cost=0;
流程圖見圖。

說明:
從圖3.5和圖3.6可以看到: 3種形式的if語句都是由一個入口進來,經過對“表達式”的判斷,分別執(zhí)行相應的語句,最后歸到一個共同的出口。這種形式的程序結構稱為選擇結構。在C++中if語句是實現(xiàn)選擇結構主要的語句。
3種形式的if語句中在if后面都有一個用括號括起來的表達式,它是程序編寫者要求程序判斷的“條件”,一般是邏輯表達式或關系表達式。
第2、第3種形式的if語句中,在每個else前面有一分號,整個語句結束處有一分號。
在if和else后面可以只含一個內嵌的操作語句(如上例),也可以有多個操作語句,此時用花括號“{}”將幾個語句括起來成為一個復合語句。
【例】求三角形的面積。
#include <iostream>
#include <cmath> //使用數(shù)學函數(shù)時要包含頭文件cmath
#include <iomanip> //使用I/O流控制符要包含頭文件iomanip
using namespace std;
int main( )
{
double a,b,c;
cout<<"please enter a,b,c:";
cin>>a>>b>>c;
if (a+b>c && b+c>a && c+a>b)
{ //復合語句開始
double s,area;//在復合語句內定義變量
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<setiosflags(ios::fixed)<<setprecision(4); //指定輸出的數(shù)包含4位小數(shù)
cout<<"area="<<area<<endl; //在復合語句內輸出局部變量的值
} //復合語句結束
else cout<<"it is not a trilateral!"<<endl;
return 0;
}
運行情況如下:
please enter a, b, c:2.45 3.67 4.89↙ area=4.3565
變量s和area只在復合語句內用得到,因此在復合語句內定義,它的作用范圍為從定義變量開始到復合語句結束。如果在復合語句外使用s和area,則會在編譯時出錯,系統(tǒng)認為這兩個變量未經定義。將某些變量局限在某一范圍內,與外界隔離,可以避免在其他地方被誤調用。
if語句的嵌套
在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式如下:
if( ) if( )語句1 else 語句2 else if( )語句3 else 語句4
應當注意if與else的配對關系。else總是與它上面最近的、且未配對的if配對。假如寫成:
if( ) if( )語句1 else if( )語句2 else 語句3
編程序者把第一個else寫在與第一個if(外層if)同一列上,希望else與第一個if對應,但實際上else是與第二個if配對,因為它們相距最近,而且第二個if并未與任何else配對。為了避免誤用,最好使每一層內嵌的if語句都包含else子句(如本節(jié)開頭列出的形式),這樣if的數(shù)目和else的數(shù)目相同,從內層到外層一一對應,不致出錯。
如果if與else的數(shù)目不一樣,為實現(xiàn)程序設計者的企圖,可以加花括號來確定配對關系。例如:
if( )
{
if ( ) 語句1
} //這個語句是上一行if語句的內嵌if
else 語句2//本行與第一個if配對
這時{ }限定了內嵌if語句的范圍,{ }外的else不會與{ }內的if配對。關系清楚,不易出錯。
C++條件運算符(? :)
若在if語句中,當被判別的表達式的值為“真”或“假”時,都執(zhí)行一個賦值語句且給同一個變量賦值時,可以用簡單的條件運算符來處理。例如,若有以下if語句:
if (a>b) max=a; else max=b;
可以用條件運算符(? :)來處理:
max=(a>b)?a:b;
其中“(a>b)?a:b”是一個“條件表達式”。它是這樣執(zhí)行的:如果(a>b)條件為真,則條件表達式的值就取“?”后面的值,即條件表達式的值為a,否則條件表達式的值為“:”后面的值,即b。
條件運算符要求有3個操作對象,稱三目(元)運算符,它是C++中惟一的一個三目運算符。條件表達式的一般形式為:
表達式1 ? 表達式2 : 表達式3;
條件運算符的執(zhí)行順序是:先求解表達式1,若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值。若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個條件表達式的值?!癿ax=(a>b)?a:b” 的執(zhí)行結果是將條件表達式的值賦給max。也就是將a和b二者中的大者賦給max。條件運算符優(yōu)先于賦值運算符,因此上面賦值表達式的求解過程是先求解條件表達式,再將它的值賦給max。
條件表達式中,表達式1的類型可以與表達式2和表達式3的類型不同。如
x ? 'a': 'b';
如果已定義x為整型變量,若x=0,則條件表達式的值為字符'b'的ASCII碼。表達式2和表達式3的類型也可以不同,此時條件表達式的值的類型為二者中較高的類型。如有條件表達式x>y?1:1.5,如果x≤y,則條件表達式的值為1.5,若x>y,值應為1,由于C++把1.5按雙精度數(shù)處理,雙精度的類型比整型高,因此,將1轉換成雙精度數(shù),以此作為表達式的值。
【例】輸入一個字符,判別它是否為大寫字母,如果是,將它轉換成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。
#include <iostream>
using namespace std;
int main( )
{
char ch;
cin>>ch;
ch=(ch>='A' && ch<='Z')?(ch+32):ch; //判別ch是否大寫字母,是則轉換
cout<<ch<<endl;
return 0;
}
相關文章
基于Matlab實現(xiàn)人工神經網絡(ANN)回歸的示例詳解
這篇文章主要為大家詳細介紹了Matlab實現(xiàn)人工神經網絡(ANN)回歸的相關資料,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下2023-02-02
C++使用HDF5庫實現(xiàn)將h5圖像轉為tif格式
這篇文章主要為大家詳細介紹了C++ 語言如何通過hdf5庫與gdal庫實現(xiàn)將.h5格式的多波段HDF5圖像批量轉換為.tif格式,有需要的可以參考一下2024-12-12
C語言中對于循環(huán)結構優(yōu)化的一些入門級方法簡介
這篇文章主要介紹了C語言中對于循環(huán)結構優(yōu)化的一些入門級方法,包括算法設計的改進來提高一些并行性等方法,要的朋友可以參考下2015-12-12
C++實現(xiàn)雙目立體匹配Census算法的示例代碼
這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)雙目立體匹配Census算法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2022-08-08

