天天看點

一起學 c++(五) 運算符、條件語句

好啦,繼續上次的内容,我們來先說下條件運算符。

這是一個三目運算符,貌似也是c++唯一一個這樣的運算符,不過它其實很簡單。

表達式如下:

Expr1 ? Expr2 : Expr3

意思就是如果Expr1是真,那麼傳回Expr2,否賊傳回Expr3。

例如:

int a=10;

int b=a<3 ? 3 : a; //a<3不成立,是以取a,是以b=a

逗号表達式:

(exp1,exp2)

其求職過程是分别求2個表達式的值,并以表達式2的值作為整個逗号表達式的值。

例如:

#include <iostream>

using namespace std;

void main()

{

     int a=2,b=4,c=6,x,y;

     y=((x=a+b),b+c);

     cout<<y<<endl;

     cout<<x<<endl;

}

結果為y是10,x是6

需要注意的是:

1.       逗号表達式可以是一般形式中的表達式1和表達式2,也可以是逗号表達式。例如以下嵌套關系:

表達式1,(表達式2,表達式3)                 是以可以把逗号表達式擴充為:

表達式1,表達式2,表達式3

2.       在程式中使用逗号表達式,通常為了求逗号表達式的各個值

3.       不是所有的逗号的地方都是逗号表達式,是以要注意區分

求位元組數運算符:sizeod(exp1)

剛開始看的時候,大家可能都認為這是個函數,但是還是要記住它不是。exp1可以是變量,也可以是某種資料類型的名稱

下面來看個很重要的問題,就是運算符的優先級問題,優先級高的先于優先級低的進行運算,如果在一個運算中的優先級相同,則按運算符的結合性所規定的結合方向處理

優先級 運算符 結合性
1 ()  []  ->  .  ::  ++(後置)  --(後置) 左à右
2 !  ~  ++(前置)  --(前置)  + * &(強轉) sizeof new delete 左à右
3 .  -> 右à左
4 /  %  * 左à右
5 +  - 左à右
6 <<  >> 左à右
7 <=  <  >  >= 左à右
8 ==  != 左à右
9 & 左à右
10 ^ 左à右
11 | 左à右
12 && 左à右
13 || 左à右
14 ?: 右à左
15 =  *= /=  +=  -=  |=  <<=  >>= 左à右
16 , 左à右

說到強轉,來說下類型轉換

C++提供了2中轉化機制:一是自動轉換,二是強制轉換。

自動轉換發生在不同資料類型的量混合元算時,由編譯器自動完成。轉換規則是小類型總是被提升成大類型。以防止精度丢失。

強制轉換是通過類型轉換運算來實作的:一般形式如下:

(類型說明符)表達式            (float) a

關于類型轉換我們以後還會說到

下面我們開始接觸語句了。

什麼是語句,它由由變量聲明和表達式構成,将特定的關鍵和文法,按一定的功能組織起來的語句。

;   //這是一個最簡單的語句,空語句

float a=1.0f;  //聲明語句

當然語句不是隻有這樣,大部分我們會使用複合語句

那麼我們先來看看條件語句,顧名思義,就是滿足條件才執行的語句喽

條件語句的基本形式:

If(表達式1)

         語句1 ;

或者

If(表達式1)

{

         語句1 ;

}

我們可以了解為:如果表達式1是真的,那麼執行語句1,否則不執行語句1

我建議大家最好都用第二種,有大括号包着,看着比較清晰明白

先來看個簡單的例子:

#include <iostream>

using namespace std;

void main()

{

     int a=2,b=4;

     if (a<b)

     {

         cout<<"a<b"<<endl;

     }

     if (a>b)

     {

         cout<<"a>b"<<endl;

     }

}

a是2,b是4,a自然小于b,是以a<b為真,就輸出了a<b。a>b不滿足,是以自然不會進入cout<<”a>b”<<endl

條件語句的其他形式

if-else形式:

if(表達式)

         語句1;

else

         語句2;

我們可以了解為:如果表達式是真的,那麼執行語句1,否則執行語句2.

那麼我可以把上面那個例子改下變成:

if (a<b)

{

     cout<<"a<b"<<endl;

}else

{

     cout<<"a>b"<<endl;

}

結果是一樣的

由if-else繼續引出的就是if-elseif-else,它的表達式是:

if(表達式1)

         語句1;

else if(表達式2)

         語句2;

else

         語句n;

我們可以了解為:如果表達式1為真,那麼執行語句1,如果表達式2為真,那麼執行語句2,……,都不滿足的時候,執行語句n。

例如我們把之前例子加個等于的判斷:

#include <iostream>

using namespace std;

void main()

{

     int a=2,b=4;

     if (a<b)

     {

         cout<<"a<b"<<endl;

     }

     else if(a==b)

     {

         cout<<"a==b"<<endl;

     }

     else

     {

         cout<<"a>b"<<endl;

     }

}

條件語句的基本形式就是這樣的,但是不僅僅限于此,嵌套式的條件語句用處更加廣泛。

所謂嵌套式if的語句,就是if語句中,執行語句還是if。

我們繼續拿之前的例子修改下,看下什麼是嵌套式的if語句

#include <iostream>

using namespace std;

void main()

{

     int a=2,b=4;

     if(a!=b)

     {

         if (a<b)

         {

              cout<<"a<b"<<endl;

         }

         else

         {

              cout<<"a>b"<<endl;

         }

     }

     else

     {

         cout<<"a==b"<<endl;

     }

}

再來看看另一個條件語句switch語句

Switch語句的表達式:

switch (表達式)

        {

            case 常量表達式1 :

語句1;

                          break;

            case常量表達式2:

語句2;

                          break;

            default :  

                            語句n;

                          break;

        }

我們可以了解為:表達式的值與之後的常量表達式1,2…n直到都不滿足的default進行比較,如果表達式的值與某個常量表達式的值相等,就執行對應的語句。

例如:

#include <iostream>

using namespace std;

void main()

{

     int a=2;

     switch(a)

     {

     case 1:

         cout<<"1"<<endl;

     case 2:

         cout<<"2"<<endl;

     case 3:

         cout<<"3"<<endl;

     default:

         cout<<"不是1,2,3"<<endl;

     }

}

我們執行一下:

結果是

2

3

不是1,2,3

為什麼會這樣,我們想要的就是2這個結果,仔細觀察下就會發現,我們這裡沒寫break;

這個在初期學習的過程中經常出現的問題,是以要注意哦。

是以在每一個條件後面都要加上break;

修改後:

#include <iostream>

using namespace std;

void main()

{

     int a=2;

     switch(a)

     {

     case 1:

         cout<<"1"<<endl;

         break;

     case 2:

         cout<<"2"<<endl;

         break;

     case 3:

         cout<<"3"<<endl;

         break;

     default:

         cout<<"不是,2,3"<<endl;

         break;

     }

}

這樣就沒問題了

個人網站http://www.ravedonut.com/

轉載于:https://www.cnblogs.com/panjiangfy/archive/2011/08/01/cxuexi5.html