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