- C程序設計語言
- 魏東平 朱連章 于廣斌編著
- 1639字
- 2018-12-29 14:37:38
3.1.2 C語言語句的分類
C語言程序的執行部分是由語句組成的,程序的功能也是由執行語句實現的。C語言語句的形式很多,一般可分為5類:表達式語句、函數調用語句、控制語句、復合語句、空語句。
1.表達式語句
表達式語句由表達式加上分號“;”組成,執行表達式語句就是計算表達式的值,其一般形式如下:
表達式;
事實上,任何一個表達式后加上“;”就構成了表達式語句,如算術表達式、關系表達式等。最典型的是用賦值表達式組成的賦值語句。
需要注意的是,有的表達式語句有意義,有的表達式語句則沒有實際意義。例如:
①“a=1”是一個賦值表達式,而加上分號的“a=1;”則是一條賦值語句;
②“x=y+z”是一個賦值表達式,而加上分號的“x=y+z;”則是一條賦值語句;
③“i++”是一個表達式,而加上分號的“i++;”則是一條自增語句,i的值增1;
④“y+z;”是一條加法運算語句,但計算結果不能保留,無實際意義;
⑤“x;”也是一條“語句”,但不執行任何運算,毫無意義。
表達式能構成語句是C語言的一個重要特色。其實,下面要介紹的函數調用語句也可以看成是表達式語句,因為函數調用(如fabs(x))也是表達式的一種。只是為了便于理解和使用,才把“函數調用語句”和“表達式語句”分成兩類來介紹。由于C語言程序中的大多數語句是表達式語句(包括函數調用語句),因此,有時也把C語言稱為“表達式語言”。
2.函數調用語句
函數調用語句由函數名、括號、實際參數加上分號“;”組成,其一般形式為:
函數名(實際參數表);
執行函數語句就是,調用函數體并把實際參數賦予函數定義中的形式參數,然后執行被調函數體中的語句,求取函數值。
例如:
printf("This is a C program.");
是一個函數調用語句,將調用庫函數printf,在屏幕上輸出字符串“This is a C program.”。
當然,有函數調用不一定就是函數調用語句,例如:
y=fabs(x);
調用了fabs函數,但最后執行的是賦值運算,即把x的絕對值賦給變量y,因此,這是一個賦值語句,屬于表達式語句??梢姡Z句的分類是由表達式中最后一個運算決定的。如果把這個語句改為“fabs(x);”,就變成了函數調用語句,當然由于計算結果被丟棄了,也就沒有實際意義了。
3.控制語句
控制語句用于控制程序的流程,以實現程序的各種基本結構??刂普Z句由特定的語句定義符組成。C語言共有9種控制語句,分成3類。
① 選擇語句又稱為條件語句、判斷語句,用于實現選擇結構的程序設計,包括if語句和switch語句。
② 循環語句又稱為重復語句,用于實現重復執行的循環結構的程序設計,包括while、do-while和for三個語句。
③ 轉移語句用于實現程序的跳轉,包括break、continue、goto和return四個語句。
控制語句的基本形式和使用方法將在后面的章節中逐步介紹。
4.復合語句
把任意多條語句用大括號“{}”括起來就構成了復合語句。例如:
{
x=y+z;
a=b+c;
printf("%d%d",x,a);
}
是一條復合語句,由3條語句組成。
對于復合語句,需要注意:
① 在程序中應把復合語句看成是單條語句,而不是多條語句;
② 復合語句內的各條語句都必須以分號“;”結尾,最后一條語句的結尾也必須有分號“;”;
③ 復合語句中還可以包含復合語句,即復合語句允許嵌套,但必須保證嵌套是完整的,不允許交叉嵌套。
例如:
1 { x=1;
2 { y=x*x;
3 x++;
4 }
5 y=x;
6 }
從形式上看,似乎有兩條復合語句,它們是第1~4行組成的一條復合語句和第2~6行構成的另一條復合語句。但真實情況是,這里只有一條復合語句,由第1~6 行組成。該復合語句嵌套了另一個復合語句,由第2~4行組成。也就是說,該程序段應該寫成:
1 { x=5;
2 { y=x*x;
3 x+=10;
4 }
5 y=x;
6 }
不難想象,當程序中出現復合語句時,應該注意每一行的縮進與對齊方式,以免造成誤解。
5.空語句
只有一個分號“;”的語句稱為空語句。
空語句什么也不做,可用來作為被轉向點,或循環語句中的循環體(循環體是空語句,表示循環體什么也不做)。
例如:
while(getchar()!='\n') ;
該語句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環體為空語句。
當程序中出現連續的兩個分號“;”時,一般可把后面的分號看做空語句。但要注意的是,隨意添加空語句可能造成錯誤,例如:
if(x>y)z=x;;
else z=y;
由于z=x的后面多使用了一個分號,造成下面的else子句出現語法錯誤,else與if之間多出了一個空語句。