6.2 表達式和語句

在前幾章中,我們已經多次使用了術語表達式(expression)和語句 (statement)。現在,我們來進一步學習它們。C的基本程序步驟由語句組 成,而大多數語句都由表達式構成。因此,我們先學習表達式。

 

1、表達式

表達式(expression)由運算符和運算對象組成(前面介紹過,運算對 象是運算符操作的對象)。最簡單的表達式是一個單獨的運算對象,以此爲 基礎可以建立複雜的表達式。下面是一些表達式:

4
-6
4+21 
a*(b + c/d)/20 
q = 5*2 
x = ++q % 3 
q > 3

如你所見,運算對象可以是常量、變量或二者的組合。一些表達式由子 表達式(subexpression)組成(子表達式即較小的表達式)。例如,c/d是上 面例子中a*(b + c/d)/20的子表達式。每個表達式都有一個值,表達式的一個最重要的特性是,每個表達式都有一個值。要獲得這個 值,必須根據運算符優先級規定的順序來執行操作。在上面我們列出的表達 式中,前幾個都很清晰明瞭。但是,有賦值運算符(=)的表達式的值是什麼?這些表達式的值與賦值運算符左側變量的值相同。因此,表達式q = 5*2 作爲一個整體的值是10。那麼,表達式q > 3的值是多少?這種關係表達式 的值不是0就是1,如果條件爲真,表達式的值爲1;如果條件爲假,表達式 的值爲0。表6.2.1列出了一些表達式及其值:

雖然最後一個表達式看上去很奇怪,但是在C中完全合法(但不建議使 用),因爲它是兩個子表達式的和,每個子表達式都有一個值。

2、語句

語句(statement)是C程序的基本構建塊。一條語句相當於一條完整的 計算機指令。在C中,大部分語句都以分號結尾。因此,

legs = 4

只是一個表達式(它可能是一個較大表達式的一部分),而下面的代碼 則是一條語句:

legs = 4;

最簡單的語句是空語句:

;   //空語句

C把末尾加上一個分號的表達式都看作是一條語句(即,表達式語 句)。因此,像下面這樣寫也沒問題:

8;
3 + 4;

但是,這些語句在程序中什麼也不做,不算是真正有用的語句。更確切 地說,語句可以改變值或調用函數:

x = 25;
++x; 
y = sqrt(x);

雖然一條語句(或者至少是一條有用的語句)相當於一條完整的指令, 但並不是所有的指令都是語句。考慮下面的語句:

x = 6 + (y = 5);

該語句中的子表達式y = 5是一條完整的指令,但是它只是語句的一部分。因爲一條完整的指令不一定是一條語句,所以分號用於識別在這種情況下的語句(即,簡單語句)。

到目前爲止,大家已經見過多種語句(不包括空語句)。程序清單6.2.2演示了一些常見的語句。

程序清單6.2.2程序

/************************************************************************
功能:演示幾種常見的語句
************************************************************************/
#include <stdio.h>
int main(void)					//計算前20個整數的和
{
	int count, sum;				//聲明[1]	
	count = 0;					//表達式語句     
	sum = 0;					//表達式語句     
	while (count++ < 20)		//迭代語句      
		sum = sum + count;
	printf("sum = %d\n", sum);	//表達式語句[2]    
	system("pause");			//暫停控制檯
	return 0;					//跳轉語句        
}

結果爲:

sum = 210
請按任意鍵繼續. . .

賦值表達式語句在程序中很常用:它爲變量分配一個值。賦值表達式語句的結構是,一個變量名,後面是一個賦值運算符,再跟着一個表達式,最後以分號結尾。注意,在while循環中有一個賦值表達式語句。賦值表達式語句是表達式語句的一個示例。

函數表達式語句會引起函數調用。在該例中,調用printf()函數打印結果。while語句有3個不同的部分(見下圖)。首先是關鍵字while;然後,圓括號中是待測試的條件;最後如果測試條件爲真,則執行while循環體中的語句。該例的while循環中只有一條語句。可以是本例那樣的一條語句,不需要用花括號括起來,也可以像其他例子中那樣包含多條語句。多條語句需要用花括號括起來。

3、複合語句(塊)

複合語句(compound statement)是用花括號括起來的一條或多條語句,複合語句也稱爲塊(block)。shoes2.c程序使用塊讓while語句包含多條語句。比較下面兩個程序段:

/* 程序段 1 */
index = 0;
while (index++ < 10)
sam = 10 * index + 2;
printf("sam = %d\n", sam);

/* 程序段 2 */
index = 0;
while (index++ < 10)
{
sam = 10 * index + 2;
printf("sam = %d\n", sam);
}

程序段1,while循環中只有一條賦值表達式語句。沒有花括號,while語句從while這行運行至下一個分號。循環結束後,printf()函數只會被調用一次。

程序段2,花括號確保兩條語句都是while循環的一部分,每執行一次循環就調用一次printf()函數。根據while語句的結構,整個複合語句被視爲一條語句(見下圖)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章