天天看點

《C語言程式設計:問題與求解方法》——2.14節表達式

本節書摘來自華章社群《c語言程式設計:問題與求解方法》一書中的第2章,第2.14節表達式,作者:何 勤,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

2.14 表達式

所謂表達式是用一個或多個運算符将運算量連接配接起來的、可計算出一個明确數值的式子。

運算量包括常量、變量、函數調用和子表達式。在表達式中,還可以使用圓括号來改變運算符固有的先後運算順序。此時,圓括号内的子表達式優先進行運算。

所有指令型進階程式設計語言中,最常用的表達式分為3類:算術表達式、關系表達式和邏輯表達式。算術表達式将在下一節講解,後兩類表達式将在第4章介紹,其他一些表達式将陸續在後面章節進行介紹。

一些類型的表達式舉例如下:

單個常量、單個變量和單個(有傳回值的)函數調用,其實都是最簡單形式的表達式(比如變量x,可以看成是表達式x+0 )。

需要特别強調的是,在表達式中出現的所有變量,都應當是已經被初始化了的。否則,通過表達式計算出來的值,就一定是垃圾資料。

在c語言程式中,一個表達式裡最好使用同一種類型的運算量(比如,同為int型的變量或常量)。一個表達式所使用的運算量的類型也可以不同,這就涉及類型之間的轉換問題。關于表達式中的類型轉換這個比較複雜而又重要的問題,請參見下一章。

(1)調用printf()函數輸出表達式的值

printf()函數不僅可以輸出變量的值,還可以輸出表達式的值。調用方式如下:

printf(參數1,參數2,參數3,......,參數n);

其中“參數1”是用雙引号包覆的格式控制串,“參數2,參數3,……,參數n”是輸出項清單。輸出項通常情況下是表達式,變量隻不過是一種最簡單的表達式而已。

假設有變量定義 :int a=1,b=2,c=3,d=4;,則

printf("a+b=%d,cd=%d,c%%b=%dn", a+b, cd ,c%b );

在螢幕上的輸出為:

a+b=3,c*d=12,c%b=1

注意:在格式字元串中表示要輸出一個字元%,必須将兩個%連着寫。

(2)表達式用作函數調用時的參數

比如,sqrt(x+2.5)表示以x+2.5這個表達式的計算結果作為參數,進行開平方庫函數的調用。

延伸與拓展:表達式的技術内幕

例如,c語言源程式中的整型表達式 m+n ,被翻譯成機器指令後,可能就是由以下3條指令序列構成的:

1)從記憶體中取變量m的值到cpu的某個寄存器(取數指令)。

2)從記憶體中取變量n的值到cpu的另一個寄存器(取數指令) 。

3)指令算術邏輯單元将兩個整數相加,将和存到某個寄存器中(整型算術加法運算指令)。

也就是說,在源程式語句被翻譯成機器指令時,一個表達式中常常蘊涵了許多條機器語言的取數指令和運算類指令(有副作用的表達式還包含存數指令)。

表達式是使用指令型進階語言的程式設計效率遠遠高于用機器語言(或彙編語言)程式設計效率的重要原因。

繼續閱讀