main是主函數(shù)的函數(shù)名,表示這是一個(gè)主函數(shù)。每一個(gè)C源程序都必須有,且只能有一個(gè)主函數(shù)(main函數(shù))。
include 稱為文件包含命令,其意義是把尖括號(hào)(<>)或引號(hào)("")內(nèi)指定的文件包含到本程序來(lái),成為本程序的一部分。被包含的文件通常是由系統(tǒng)提供的,其擴(kuò)展名為.h。因此也稱為<頭文件>或<首部文件>。
C語(yǔ)言的頭文件中包括了各個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù)的函數(shù)原型。
C語(yǔ)言規(guī)定對(duì)scanf和printf這兩個(gè)函數(shù)可以省去對(duì)其頭文件的包含命令。
scanf和 printf這兩個(gè)函數(shù)分別稱為“格式輸入函數(shù)”和“格式輸出函數(shù)”。其意義是按指定的格式輸入輸出值。因此,這兩個(gè)函數(shù)在括號(hào)中的參數(shù)表都由以下兩部分組成:“格式控制串”,參數(shù)表。格式控制串是一個(gè)字符串,必須用雙引號(hào)("")括起來(lái),它表示了輸入輸出量的數(shù)據(jù)類型。在printf函數(shù)中還可以在格式控制串內(nèi)出現(xiàn)非格式控制字符,這時(shí)在顯示屏幕上將原文照印。參數(shù)表中給出了輸入或輸出的量。當(dāng)有多個(gè)量時(shí),用逗號(hào)間隔。
一個(gè)C語(yǔ)言源程序可以由一個(gè)或多個(gè)源文件組成。
每個(gè)源文件可由一個(gè)或多個(gè)函數(shù)組成。
一個(gè)源程序不論由多少個(gè)文件組成,都有一個(gè)且只能有一個(gè)main函數(shù),即主函數(shù)。
源程序中可以有預(yù)處理命令(include 命令僅為其中的一種),預(yù)處理命令通常應(yīng)放在源文件或源程序的最前面。
每一個(gè)說(shuō)明,每一個(gè)語(yǔ)句都必須以分號(hào)結(jié)尾。但預(yù)處理命令,函數(shù)頭和花括號(hào)“}”之后不能加分號(hào)。
標(biāo)識(shí)符,關(guān)鍵字之間必須至少加一個(gè)空格以示間隔。若已有明顯的間隔符,也可不再加空格來(lái)間隔。
C語(yǔ)言字符集由字母,數(shù)字,空格,標(biāo)點(diǎn)和特殊字符組成。在字符常量,字符串常量和注釋中還可以使用漢字或其它可表示的圖形符號(hào)。
1.字母 小寫字母a~z共26個(gè),大寫字母A~Z共26個(gè)
2.數(shù)字 0~9共10個(gè)
3.空白符 空格符、制表符、換行符等統(tǒng)稱為空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出現(xiàn)時(shí),只起間隔作用, 編譯程序?qū)λ鼈兒雎浴R虼嗽诔绦蛑惺褂每瞻追c否,對(duì)程序的編譯不發(fā)生影響,但在程序中適當(dāng)?shù)牡胤绞褂每瞻追麑⒃黾映绦虻那逦院涂勺x性。
在C語(yǔ)言中使用的詞匯分為六類:標(biāo)識(shí)符,關(guān)鍵字,運(yùn)算符,分隔符,常量,注釋符等。
1.標(biāo)識(shí)符——在程序中使用的變量名、函數(shù)名、標(biāo)號(hào)等統(tǒng)稱為標(biāo)識(shí)符。除庫(kù)函數(shù)的函數(shù)名由系統(tǒng)定義外,其余都由用戶自定義。C 規(guī)定,標(biāo)識(shí)符只能是字母(A~Z,a~z)、數(shù)字(0~9)、下劃線()組成的字符串,并且其第一個(gè)字符必須是字母或下劃線。在使用標(biāo)識(shí)符時(shí)還必須注意:標(biāo)準(zhǔn)C不限制標(biāo)識(shí)符的長(zhǎng)度,但它受各種版本的C 語(yǔ)言編譯系統(tǒng)限制,同時(shí)也受到具體機(jī)器的限制。例如在某版本C 中規(guī)定標(biāo)識(shí)符前八位有效,當(dāng)兩個(gè)標(biāo)識(shí)符前八位相同時(shí),則被認(rèn)為是同一個(gè)標(biāo)識(shí)符。在標(biāo)識(shí)符中,大小寫是有區(qū)別的。例如BOOK和book 是兩個(gè)不同的標(biāo)識(shí)符。
2.關(guān)鍵字——關(guān)鍵字是由C語(yǔ)言規(guī)定的具有特定意義的字符串,通常也稱為保留字。用戶定義的標(biāo)識(shí)符不應(yīng)與關(guān)鍵字相同。C語(yǔ)言的關(guān)鍵字分為以下幾類:
(1)類型說(shuō)明符
用于定義、說(shuō)明變量、函數(shù)或其它數(shù)據(jù)結(jié)構(gòu)的類型。如int,double等
(2)語(yǔ)句定義符
用于表示一個(gè)語(yǔ)句的功能。如if else就是條件語(yǔ)句的語(yǔ)句定義符。
(3)預(yù)處理命令字
用于表示一個(gè)預(yù)處理命令。如include define。
3.運(yùn)算符——C語(yǔ)言中含有相當(dāng)豐富的運(yùn)算符。運(yùn)算符與變量,函數(shù)一起組成表達(dá)式,表示各種運(yùn)算功能。運(yùn)算符由一個(gè)或多個(gè)字符組成。
4.分隔符——在C語(yǔ)言中采用的分隔符有逗號(hào)和空格兩種。逗號(hào)主要用在類型說(shuō)明和函數(shù)參數(shù)表中,分隔各個(gè)變量。空格多用于語(yǔ)句各單詞之間,作間隔符。在關(guān)鍵字,標(biāo)識(shí)符之間必須要有一個(gè)以上的空格符作間隔, 否則將會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤,例如把int a;寫成 inta;C編譯器會(huì)把inta當(dāng)成一個(gè)標(biāo)識(shí)符處理,其結(jié)果必然出錯(cuò)。
5.常量——C語(yǔ)言中使用的常量可分為數(shù)字常量(const int)、字符常量(const char)、字符串常量(const string)、符號(hào)常量、轉(zhuǎn)義字符(\n \t)等多種。
6.注釋符——C語(yǔ)言的注釋符是以“/*”開(kāi)頭并以“*/”結(jié)尾的串。在“/*”和“*/”之間的即為注釋。程序編譯時(shí),不對(duì)注釋作任何處理。注釋可出現(xiàn)在程序中的任何位置。注釋用來(lái)向用戶提示或解釋程序的意義。在調(diào)試程序中對(duì)暫不使用的語(yǔ)句也可用注釋符括起來(lái),使翻譯跳過(guò)不作處理,待調(diào)試結(jié)束后再去掉注釋符。
在C語(yǔ)言中,數(shù)據(jù)類型可分為:基本數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型,指針類型,空類型四大類。
基本數(shù)據(jù)類型最主要的特點(diǎn)是,其值不可以再分解為其它類型。也就是說(shuō),基本數(shù)據(jù)類型是自我說(shuō)明的。
構(gòu)造數(shù)據(jù)類型是根據(jù)已定義的一個(gè)或多個(gè)數(shù)據(jù)類型用構(gòu)造的方法來(lái)定義的。也就是說(shuō),一個(gè)構(gòu)造類型的值可以分解成若干個(gè)“成員”或“元素”。每個(gè)“成員”都是一個(gè)基本數(shù)據(jù)類型或又是一個(gè)構(gòu)造類型。在C語(yǔ)言中,構(gòu)造類型有數(shù)組類型,結(jié)構(gòu)類型,聯(lián)合類型
指針類型指針是一種特殊的,同時(shí)又是具有重要作用的數(shù)據(jù)類型。其值用來(lái)表示某個(gè)量在內(nèi)存儲(chǔ)器中的地址。雖然指針變量的取值類似于整型量,但這是兩個(gè)類型完全不同的量,因此不能混為一談。
空類型在調(diào)用函數(shù)值時(shí),通常應(yīng)向調(diào)用者返回一個(gè)函數(shù)值。這個(gè)返回的函數(shù)值是具有一定的數(shù)據(jù)類型的,應(yīng)在函數(shù)定義及函數(shù)說(shuō)明中給以說(shuō)明,但是,也有一類函數(shù),調(diào)用后并不需要向調(diào)用者返回函數(shù)值, 這種函數(shù)可以定義為“空類型”。其類型說(shuō)明符為void。
對(duì)于基本數(shù)據(jù)類型量,按其取值是否可改變又分為常量和變量?jī)煞N。在程序執(zhí)行過(guò)程中,其值不發(fā)生改變的量稱為常量,取值可變的量稱為變量。它們可與數(shù)據(jù)類型結(jié)合起來(lái)分類。例如,可分為整型常量、整型變量、浮點(diǎn)常量、浮點(diǎn)變量、字符常量、字符變量、枚舉常量、枚舉變量。在程序中,常量是可以不經(jīng)說(shuō)明而直接引用的,而變量則必須先說(shuō)明后使用。
整型量包括整型常量、整型變量。整型常量就是整常數(shù)。在C語(yǔ)言中,使用的整常數(shù)有八進(jìn)制、十六進(jìn)制和十進(jìn)制三種。
整型常量
1.八進(jìn)制整常數(shù)八進(jìn)制整常數(shù)必須以0開(kāi)頭,即以0作為八進(jìn)制數(shù)的前綴。數(shù)碼取值為0~7。八進(jìn)制數(shù)通常是無(wú)符號(hào)數(shù)。
2.十六進(jìn)制整常數(shù)的前綴為0X或0x。其數(shù)碼取值為0~9,A~F或a~f。
整型變量
1.基本型:類型說(shuō)明符為int,在內(nèi)存中占2個(gè)字節(jié),其取值為基本整常數(shù)。
2.短整量:類型說(shuō)明符為short int或short'C110F1???。所占字節(jié)和取值范圍均與基本型相同。
3.長(zhǎng)整型:類型說(shuō)明符為long int或long ,在內(nèi)存中占4個(gè)字節(jié),其取值為長(zhǎng)整常數(shù)。
4.無(wú)符號(hào)型:類型說(shuō)明符為unsigned。無(wú)符號(hào)型又可與上述三種類型匹配而構(gòu)成:
(1)無(wú)符號(hào)基本型 類型說(shuō)明符為unsigned int或unsigned。
(2)無(wú)符號(hào)短整型 類型說(shuō)明符為unsigned short
(3)無(wú)符號(hào)長(zhǎng)整型 類型說(shuō)明符為unsigned long
各種無(wú)符號(hào)類型量所占的內(nèi)存空間字節(jié)數(shù)與相應(yīng)的有符號(hào)類型量相同。但由于省去了符號(hào)位,故不能表示負(fù)數(shù)。
整型變量的說(shuō)明:變量說(shuō)明的一般形式為: 類型說(shuō)明符 變量名標(biāo)識(shí)符,變量名標(biāo)識(shí)符,...;
類型說(shuō)明符 數(shù)的范圍 分配字節(jié)數(shù)
int -32768~32767 ■■
short int -32768~32767 ■■
signed int -32768~32767 ■■
unsigned int 0~65535 ■■
long int -2147483648~2147483647 ■■■■
unsigned long 0~4294967295 ■■■■
在書寫變量說(shuō)明時(shí),應(yīng)注意以下幾點(diǎn):
1.允許在一個(gè)類型說(shuō)明符后,說(shuō)明多個(gè)相同類型的變量。各變量名之間用逗號(hào)間隔。類型說(shuō)明符與變量名之間至少用一個(gè)空格間隔。
2.最后一個(gè)變量名之后必須以分號(hào)(;)號(hào)結(jié)尾。
3.變量說(shuō)明必須放在變量使用之前。一般放在函數(shù)體的開(kāi)頭部分。
實(shí)型量
實(shí)型常量:實(shí)型也稱為浮點(diǎn)型。實(shí)型常量也稱為實(shí)數(shù)或者浮點(diǎn)數(shù)。在C語(yǔ)言中,實(shí)數(shù)只采用十進(jìn)制。它有二種形式:十進(jìn)制數(shù)形式,指數(shù)形式
1.十進(jìn)制數(shù)形式
由數(shù)碼0~ 9和小數(shù)點(diǎn)組成
2.指數(shù)形式
由十進(jìn)制數(shù),加階碼標(biāo)志“e”或“E”以及階碼(只能為整數(shù),可以帶符號(hào))組成。其一般形式為a E n (a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù))其值為 a*10,n
標(biāo)準(zhǔn)C允許浮點(diǎn)數(shù)使用后綴。后綴為“f”或“F”即表示該數(shù)為浮點(diǎn)數(shù)。
實(shí)型變量
實(shí)型變量分為兩類:?jiǎn)尉刃秃碗p精度型,
其類型說(shuō)明符為float 單精度說(shuō)明符,double 雙精度說(shuō)明符。在Turbo C中單精度型占4個(gè)字節(jié)(32位)內(nèi)存空間,其數(shù)值范圍為3.4E-38~3.4E+38,只能提供七位有效數(shù)字。雙精度型占8 個(gè)字節(jié)(64位)內(nèi)存空間,其數(shù)值范圍為1.7E-308~1.7E+308,可提供16位有效數(shù)字。
實(shí)型變量說(shuō)明的格式和書寫規(guī)則與整型相同。
字符型量
包括字符常量和字符變量。
字符常量是用單引號(hào)括起來(lái)的一個(gè)字符。例如'a','b','=','+','?'都是合法字符常量。在C語(yǔ)言中,字符常量有以下特點(diǎn):
1.字符常量只能用單引號(hào)括起來(lái),不能用雙引號(hào)或其它括號(hào)。
2.字符常量只能是單個(gè)字符,不能是字符串。
3.字符可以是字符集中任意字符。但數(shù)字被定義為字符型之后就
不能參與數(shù)值運(yùn)算。如'5'和5 是不同的。'5'是字符常量,不能參與運(yùn)算。
轉(zhuǎn)義字符
一種特殊的字符常量。轉(zhuǎn)義字符以反斜線"\"開(kāi)頭,后跟一個(gè)或幾個(gè)字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。例如,在前面各例題printf函數(shù)的格式串中用到的“\n”就是一個(gè)轉(zhuǎn)義字符,其意義是“回車換行”。轉(zhuǎn)義字符主要用來(lái)表示那些用一般字符不便于表示的控制代碼。
常用的轉(zhuǎn)義字符及其含義
轉(zhuǎn)義字符 轉(zhuǎn)義字符的意義
\n 回車換行
\t 橫向跳到下一制表位置
\v 豎向跳格
\b 退格
\r 回車
\f 走紙換頁(yè)
\\ 反斜線符"\"
\' 單引號(hào)符
\a 鳴鈴
\ddd 1~3位八進(jìn)制數(shù)所代表的字符
\xhh 1~2位十六進(jìn)制數(shù)所代表的字符
廣義地講,C語(yǔ)言字符集中的任何一個(gè)字符均可用轉(zhuǎn)義字符來(lái)表示。表2.2中的\ddd和\xhh正是為此而提出的。ddd和hh分別為八進(jìn)制和十六進(jìn)制的ASCII代碼。如\101表示字母"A" ,\102表示字母"B",\134表示反斜線,\XOA表示換行等。
字符串常量是由一對(duì)雙引號(hào)括起的字符序列。
字符串常量和字符常量是不同的量。它們之間主要有以下區(qū)別:
1.字符常量由單引號(hào)括起來(lái),字符串常量由雙引號(hào)括起來(lái)。
2.字符常量只能是單個(gè)字符,字符串常量則可以含一個(gè)或多個(gè)字符。
3.可以把一個(gè)字符常量賦予一個(gè)字符變量,但不能把一個(gè)字符串常量賦予一個(gè)字符變量。在C語(yǔ)言中沒(méi)有相應(yīng)的字符串變量。
這是與BASIC 語(yǔ)言不同的。但是可以用一個(gè)字符數(shù)組來(lái)存放一個(gè)字符串常量。在數(shù)組一章內(nèi)予以介紹。
4.字符常量占一個(gè)字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加1。增加的一個(gè)字節(jié)中存放字符"\0"(ASCII碼為0)。這是字符串結(jié)束的標(biāo)志。例如,字符串 "C program"在內(nèi)存中所占的字節(jié)為:C program\0。字符常量'a'和字符串常量"a"雖然都只有一個(gè)字符,但在內(nèi)存中的情況是不同的。
'a'在內(nèi)存中占一個(gè)字節(jié),可表示為:a
"a"在內(nèi)存中占二個(gè)字節(jié),可表示為:a\0符號(hào)常量
自動(dòng)轉(zhuǎn)換
自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的量混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成。自動(dòng)轉(zhuǎn)換遵循以下規(guī)則:
1.若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。
2.轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,以保證精度不降低。如int型和long型運(yùn)算時(shí),先把int量轉(zhuǎn)成long型后再進(jìn)行運(yùn)算。
3.所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算。
4.char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型。
5.在賦值運(yùn)算中,賦值號(hào)兩邊量的數(shù)據(jù)類型不同時(shí), 賦值號(hào)右邊量的類型將轉(zhuǎn)換為左邊量的類型。 如果右邊量的數(shù)據(jù)類型長(zhǎng)度左邊長(zhǎng)時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度, 丟失的部分按四舍五入向前舍入。
強(qiáng)制類型轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換是通過(guò)類型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的。其一般形式為: (類型說(shuō)明符) (表達(dá)式) 其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說(shuō)明符所表示的類型。例如: (float) a 把a(bǔ)轉(zhuǎn)換為實(shí)型,(int)(x+y) 把x+y的結(jié)果轉(zhuǎn)換為整型在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問(wèn)題:
1.類型說(shuō)明符和表達(dá)式都必須加括號(hào)(單個(gè)變量可以不加括號(hào)),如把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。
2.無(wú)論是強(qiáng)制轉(zhuǎn)換或是自動(dòng)轉(zhuǎn)換,都只是為了本次運(yùn)算的需要而對(duì)變量的數(shù)據(jù)長(zhǎng)度進(jìn)行的臨時(shí)性轉(zhuǎn)換,而不改變數(shù)據(jù)說(shuō)明時(shí)對(duì)該變量定義的類型。
運(yùn)算符的種類C語(yǔ)言的運(yùn)算符可分為以下幾類:
1.算術(shù)運(yùn)算符
用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、自增(++)、自減(--)共七種。
2.關(guān)系運(yùn)算符
用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六種。
3.邏輯運(yùn)算符
用于邏輯運(yùn)算。包括與(&&)、或(||)、非(!)三種。
4.位操作運(yùn)算符
參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
5.賦值運(yùn)算符
用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。
6.條件運(yùn)算符
這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。
7.逗號(hào)運(yùn)算符
用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。
8.指針運(yùn)算符
用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。
9.求字節(jié)數(shù)運(yùn)算符
用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。
10.特殊運(yùn)算符
有括號(hào)(),下標(biāo)[],成員(→,.)等幾種。
在使用switch語(yǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):
1.在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。
2.在case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)。
3.各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。
4.default子句可以省略不用。