版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第3章 數(shù)據(jù)類型、 運(yùn)算符與表達(dá)式 第3章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式 v本章要點(diǎn)本章要點(diǎn) C語言的基本數(shù)據(jù)類型語言的基本數(shù)據(jù)類型 常量和變量常量和變量 運(yùn)算符以及表達(dá)式的含義和求值運(yùn)算符以及表達(dá)式的含義和求值 常用庫(kù)函數(shù)的使用常用庫(kù)函數(shù)的使用 第3章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式 v3.1 C語言的數(shù)據(jù)類型語言的數(shù)據(jù)類型 v3.2 常量常量 v3.3 簡(jiǎn)單變量簡(jiǎn)單變量 v3.4 庫(kù)函數(shù)庫(kù)函數(shù) v3.5 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式 3.1 C語言的數(shù)據(jù)類型 整型整型 int 基本類型基本類型 浮點(diǎn)型浮點(diǎn)型 float、double 字符型字符型 char 枚舉類型枚舉類型 enum 數(shù)組類型數(shù)組類
2、型 以以 為標(biāo)志為標(biāo)志 構(gòu)造類型構(gòu)造類型 結(jié)構(gòu)體類型結(jié)構(gòu)體類型 struct 聯(lián)合類型聯(lián)合類型 union 指針類型指針類型 以以 * 為標(biāo)志為標(biāo)志 空類型空類型 void C C 語語 言言 的的 數(shù)數(shù) 據(jù)據(jù) 類類 型型 3.1 C語言的數(shù)據(jù)類型 v數(shù)據(jù)類型的取值范圍數(shù)據(jù)類型的取值范圍 不同的數(shù)據(jù)類型在內(nèi)存中占用不同的存儲(chǔ)空間,不同的數(shù)據(jù)類型在內(nèi)存中占用不同的存儲(chǔ)空間, 取值范圍也不同。取值范圍也不同。 即使是相同類型的數(shù)據(jù)在不同種類的計(jì)算機(jī)中所即使是相同類型的數(shù)據(jù)在不同種類的計(jì)算機(jī)中所 占的存儲(chǔ)空間也不完全相同。占的存儲(chǔ)空間也不完全相同。 3.2 常量 v常量的定義常量的定義 常量又稱為常
3、數(shù),是指在程序運(yùn)行中,其值不能常量又稱為常數(shù),是指在程序運(yùn)行中,其值不能 被改變的量。被改變的量。 v常量的類型常量的類型 整型常量整型常量 浮點(diǎn)型常量浮點(diǎn)型常量 字符常量字符常量 字符串常量字符串常量 符號(hào)常量符號(hào)常量 3.2.1 整型常量 v整型常量是由一個(gè)或多個(gè)數(shù)字組成,可以有整型常量是由一個(gè)或多個(gè)數(shù)字組成,可以有 正、負(fù)號(hào),但不能有小數(shù)點(diǎn)。正、負(fù)號(hào),但不能有小數(shù)點(diǎn)。 v三種表示方法:三種表示方法: 十進(jìn)制表示:如十進(jìn)制表示:如 123、-456 八進(jìn)制表示:以數(shù)字八進(jìn)制表示:以數(shù)字0開頭。如開頭。如 0123、-012 十六進(jìn)制表示:以十六進(jìn)制表示:以0X或或0 x開頭。如開頭。如 0
4、 x2F、 -0 x4A 3.2.1 整型常量 v長(zhǎng)整型:在數(shù)字后加上字母長(zhǎng)整型:在數(shù)字后加上字母L或或l。 例如:例如:10L是十進(jìn)制的長(zhǎng)整型常量。是十進(jìn)制的長(zhǎng)整型常量。 v無符號(hào)數(shù):在數(shù)字后加上字母無符號(hào)數(shù):在數(shù)字后加上字母U或或u。 例如:例如:345U是十進(jìn)制無符號(hào)整型常量。是十進(jìn)制無符號(hào)整型常量。 v無符號(hào)長(zhǎng)整型:無符號(hào)長(zhǎng)整型:L和和U可以同時(shí)使用,順序任可以同時(shí)使用,順序任 意。意。 例如:例如:78LU表示無符號(hào)長(zhǎng)整型。表示無符號(hào)長(zhǎng)整型。 3.2.1 整型常量 v整數(shù)在機(jī)內(nèi)的存儲(chǔ)形式整數(shù)在機(jī)內(nèi)的存儲(chǔ)形式 在大多數(shù)機(jī)器中,整數(shù)采用補(bǔ)碼的形式來存儲(chǔ)。在大多數(shù)機(jī)器中,整數(shù)采用補(bǔ)碼的形式
5、來存儲(chǔ)。 在在Turbo C中使用中使用2個(gè)字節(jié)存儲(chǔ)一個(gè)整數(shù)。個(gè)字節(jié)存儲(chǔ)一個(gè)整數(shù)。 例如,例如, 10在內(nèi)存中的存放形式:在內(nèi)存中的存放形式: -10在內(nèi)存中的存放形式:在內(nèi)存中的存放形式: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 3.2.2 浮點(diǎn)型常量 v兩種表示形式:兩種表示形式: 十進(jìn)制數(shù)形式:由正負(fù)號(hào)、整數(shù)部分、小數(shù)點(diǎn)、十進(jìn)制數(shù)形式:由正負(fù)號(hào)、整數(shù)部分、小數(shù)點(diǎn)、 小數(shù)部分組成。小數(shù)部分組成。 如:如:12.3、.34、12.、0.0 指數(shù)形式:由正負(fù)號(hào)、整數(shù)部分、小數(shù)點(diǎn)、小數(shù)指數(shù)形式:由正負(fù)號(hào)、整數(shù)
6、部分、小數(shù)點(diǎn)、小數(shù) 部分和字母部分和字母E或或e后面帶正負(fù)號(hào)的整數(shù)組成。后面帶正負(fù)號(hào)的整數(shù)組成。 如:如:1.23E3 表示表示 1.23 * 103 注意:注意:(1)字母)字母E或或e之前必須有數(shù)字;之前必須有數(shù)字; (2)字母)字母E或或e之后必須是整數(shù)。之后必須是整數(shù)。 例如,例如,E5、9.8E2.3 都是不合法的。都是不合法的。 3.2.2 浮點(diǎn)型常量 v浮點(diǎn)型常量默認(rèn)的是浮點(diǎn)型常量默認(rèn)的是double型(雙精度)。型(雙精度)。 v單精度:在實(shí)型常量后面加上字母單精度:在實(shí)型常量后面加上字母F或或f。 例如:例如:1.23F、3.5e2F v實(shí)數(shù)在機(jī)內(nèi)的存儲(chǔ)形式實(shí)數(shù)在機(jī)內(nèi)的存儲(chǔ)形
7、式 實(shí)數(shù)在機(jī)內(nèi)以指數(shù)形式存儲(chǔ)。實(shí)數(shù)在機(jī)內(nèi)以指數(shù)形式存儲(chǔ)。 大多數(shù)大多數(shù)C編譯系統(tǒng)使用編譯系統(tǒng)使用4個(gè)字節(jié)存儲(chǔ)個(gè)字節(jié)存儲(chǔ)float型(單型(單 精度)數(shù)據(jù)。精度)數(shù)據(jù)。 小數(shù)部分和指數(shù)部分分別占多少位,小數(shù)部分和指數(shù)部分分別占多少位,ANSI C沒沒 有作規(guī)定,由具體的有作規(guī)定,由具體的C語言編譯系統(tǒng)自定。語言編譯系統(tǒng)自定。 數(shù)符數(shù)符小數(shù)部分小數(shù)部分指數(shù)符號(hào)指數(shù)符號(hào)指數(shù)部分指數(shù)部分 3.2.3 字符常量 v字符常量是由一對(duì)單引號(hào)括起來的單個(gè)字符字符常量是由一對(duì)單引號(hào)括起來的單個(gè)字符 如:如:a, 0, % v字符常量的值是該字符對(duì)應(yīng)的字符常量的值是該字符對(duì)應(yīng)的ASCII值,在值,在 內(nèi)存中的存儲(chǔ)
8、形式與內(nèi)存中的存儲(chǔ)形式與int型一樣。型一樣。 v注意:注意: 單引號(hào)中的字符只能是一個(gè)字符。單引號(hào)中的字符只能是一個(gè)字符。 字符字符0與數(shù)字與數(shù)字0是不同的。是不同的。 C語言中還允許使用以反斜杠字符語言中還允許使用以反斜杠字符“”開頭的轉(zhuǎn)開頭的轉(zhuǎn) 義字符表示特殊字符。義字符表示特殊字符。 3.2.3 字符常量 v常用的轉(zhuǎn)義字符常用的轉(zhuǎn)義字符 0 表示字符串結(jié)束(表示字符串結(jié)束(ASCII值:值:0) n 換行,將光標(biāo)移到下一行的開頭(換行,將光標(biāo)移到下一行的開頭(ASCII值:值:10) t 水平制表(水平制表(ASCII值:值:9) b 左退一格(左退一格(ASCII值:值:8) r 回
9、車,將光標(biāo)移到當(dāng)前行的開頭(回車,將光標(biāo)移到當(dāng)前行的開頭(ASCII值:值:13) 單引號(hào)(單引號(hào)(ASCII值:值:39) 雙引號(hào)(雙引號(hào)(ASCII值:值:34) 反斜線(反斜線(ASCII值:值:92) ddd13位八進(jìn)制數(shù)所代表的字符位八進(jìn)制數(shù)所代表的字符 xhh12位十六進(jìn)制所代表的字符位十六進(jìn)制所代表的字符 main() printf(abtcdn); printf(12345678012student x42n); 運(yùn)行結(jié)果:運(yùn)行結(jié)果: v【例例3.1】轉(zhuǎn)義字符的使用轉(zhuǎn)義字符的使用 3.2.4 字符串常量 v字符串常量是由一對(duì)雙引號(hào)括起來的字符序字符串常量是由一對(duì)雙引號(hào)括起來的字
10、符序 列。列。 如:如:A、123.45 v字符串常量在內(nèi)存中存儲(chǔ)時(shí),系統(tǒng)自動(dòng)加上字符串常量在內(nèi)存中存儲(chǔ)時(shí),系統(tǒng)自動(dòng)加上 串尾標(biāo)記串尾標(biāo)記0。 v若字符序列串長(zhǎng)為若字符序列串長(zhǎng)為N,則在內(nèi)存中占用,則在內(nèi)存中占用N+1個(gè)個(gè) 內(nèi)存單元。內(nèi)存單元。 3.2.4 字符串常量 v注意:注意:A與與A是完全不同的。是完全不同的。 A是字符串常量,占是字符串常量,占2個(gè)字節(jié)長(zhǎng)度,在內(nèi)存中的個(gè)字節(jié)長(zhǎng)度,在內(nèi)存中的 存儲(chǔ)形式如下:存儲(chǔ)形式如下: A是字符常量,占是字符常量,占1個(gè)字節(jié)長(zhǎng)度,在內(nèi)存中的存?zhèn)€字節(jié)長(zhǎng)度,在內(nèi)存中的存 儲(chǔ)形式如下:儲(chǔ)形式如下: A 0 A 3.2.5 符號(hào)常量 v符號(hào)常量:用一個(gè)特定的
11、標(biāo)識(shí)符來代替一個(gè)符號(hào)常量:用一個(gè)特定的標(biāo)識(shí)符來代替一個(gè) 常量或字符串。常量或字符串。 v定義形式:定義形式: #define 標(biāo)識(shí)符標(biāo)識(shí)符 常量或字符串常量或字符串 v例如:例如:#define PI 3.14159 #define NULL 0 v優(yōu)點(diǎn):優(yōu)點(diǎn): 增強(qiáng)可讀性增強(qiáng)可讀性 增強(qiáng)程序的通用性和可維護(hù)性增強(qiáng)程序的通用性和可維護(hù)性 3.2.5 符號(hào)常量 v說明:說明: #define是是預(yù)編譯命令,在預(yù)編譯命令,在編譯之前編譯之前用對(duì)應(yīng)的常用對(duì)應(yīng)的常 量或字符串量或字符串替換替換程序中的標(biāo)識(shí)符,然后再編譯程程序中的標(biāo)識(shí)符,然后再編譯程 序。序。 該定義必須放在該定義必須放在程序的開頭程序
12、的開頭。 每一個(gè)符號(hào)常量的定義都必須每一個(gè)符號(hào)常量的定義都必須獨(dú)占一行獨(dú)占一行,因其不,因其不 是語句,故尾部是語句,故尾部不用加分號(hào)不用加分號(hào)。 為了與變量區(qū)分,一般符號(hào)常量用為了與變量區(qū)分,一般符號(hào)常量用大寫字母大寫字母表示。表示。 #define PI 3.14159 main() float r=2, c, s; c = 2*PI*r; s = PI*r*r; printf(c=%f, s=%fn, c, s); v【例例3.2】計(jì)算圓的周長(zhǎng)、面積計(jì)算圓的周長(zhǎng)、面積 說明:當(dāng)開始編譯前,系統(tǒng)先將程序中說明:當(dāng)開始編譯前,系統(tǒng)先將程序中所有的所有的 PI 這個(gè)符號(hào)替換成這個(gè)符號(hào)替換成 3
13、.14159,然后再進(jìn)行編譯(,然后再進(jìn)行編譯(翻翻 譯成二進(jìn)制譯成二進(jìn)制)。)。 #define X 10-7 main() int a; a = 3*X; printf(a = %dn, a); v【例例3.3】閱讀程序,判斷運(yùn)行結(jié)果。閱讀程序,判斷運(yùn)行結(jié)果。 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 3.3 簡(jiǎn)單變量 3.3.1 變量的命名變量的命名 變量的定義變量的定義 v變量是指在程序運(yùn)行過程中其值可以被改變的某個(gè)標(biāo)變量是指在程序運(yùn)行過程中其值可以被改變的某個(gè)標(biāo) 識(shí)符。識(shí)符。 變量的特征:變量名、變量值、變量類型、變量變量的特征:變量名、變量值、變量類型、變量 的存儲(chǔ)地址、變量的存儲(chǔ)屬性。的存儲(chǔ)地址、變
14、量的存儲(chǔ)屬性。 v變量名:要求取為合法的標(biāo)識(shí)符。通過變量名,可以變量名:要求取為合法的標(biāo)識(shí)符。通過變量名,可以 得到數(shù)據(jù)存儲(chǔ)在內(nèi)存中的地址。一般使用小寫字母表得到數(shù)據(jù)存儲(chǔ)在內(nèi)存中的地址。一般使用小寫字母表 示變量名。示變量名。 v在編譯連接時(shí),編譯系統(tǒng)會(huì)給每個(gè)變量分配一個(gè)內(nèi)存在編譯連接時(shí),編譯系統(tǒng)會(huì)給每個(gè)變量分配一個(gè)內(nèi)存 單元,變量的值就存儲(chǔ)在該內(nèi)存單元中。單元,變量的值就存儲(chǔ)在該內(nèi)存單元中。 3.3.1 變量的命名 v標(biāo)識(shí)符的定義標(biāo)識(shí)符的定義 在在C語言中,對(duì)變量、符號(hào)常量、函數(shù)、宏、標(biāo)語言中,對(duì)變量、符號(hào)常量、函數(shù)、宏、標(biāo) 號(hào)、文件名等的命名的有效字符序列稱為標(biāo)識(shí)符。號(hào)、文件名等的命名的有
15、效字符序列稱為標(biāo)識(shí)符。 v標(biāo)識(shí)符的命名規(guī)則標(biāo)識(shí)符的命名規(guī)則 可以由字母、數(shù)字和下劃線組成可以由字母、數(shù)字和下劃線組成 必須由字母或下劃線開頭必須由字母或下劃線開頭 嚴(yán)格區(qū)分大小寫字母嚴(yán)格區(qū)分大小寫字母 不能使用關(guān)鍵字和系統(tǒng)預(yù)定義標(biāo)識(shí)符不能使用關(guān)鍵字和系統(tǒng)預(yù)定義標(biāo)識(shí)符 長(zhǎng)度不超過長(zhǎng)度不超過8個(gè)字符個(gè)字符 3.3.2 變量的基本數(shù)據(jù)類型 v變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型 每個(gè)變量都必須有一個(gè)確切的類型和具體的值。每個(gè)變量都必須有一個(gè)確切的類型和具體的值。 變量的數(shù)據(jù)類型決定了該變量的取值類型、取值變量的數(shù)據(jù)類型決定了該變量的取值類型、取值 范圍、所占的內(nèi)存空間的大小以及所能參加的運(yùn)范圍、所占的內(nèi)存空
16、間的大小以及所能參加的運(yùn) 算方式等。算方式等。 無符號(hào)類型的數(shù)據(jù)在機(jī)內(nèi)存儲(chǔ)時(shí),最高位不是符無符號(hào)類型的數(shù)據(jù)在機(jī)內(nèi)存儲(chǔ)時(shí),最高位不是符 號(hào)位,而是數(shù)據(jù)本身的一部分。號(hào)位,而是數(shù)據(jù)本身的一部分。 名稱名稱類型類型字節(jié)數(shù)字節(jié)數(shù)取值范圍取值范圍 整型整型int2-32768 32767 短整型短整型short2-32768 32767 長(zhǎng)整型長(zhǎng)整型long4 -2147483648 2147483647 無符號(hào)整型無符號(hào)整型 unsigned int 20 65535 無符號(hào)短整型無符號(hào)短整型 unsigned short 20 65535 無符號(hào)長(zhǎng)整型無符號(hào)長(zhǎng)整型 unsigned long 40
17、4294967295 單精度型單精度型float410-38 1038 雙精度型雙精度型double810-308 10308 字符型字符型char1-128 127 3.3.3 變量的類型定義 v無論使用哪一種類型的變量,都必須無論使用哪一種類型的變量,都必須“先定先定 義,后使用義,后使用”。 v變量的定義格式:變量的定義格式: 數(shù)據(jù)類型名數(shù)據(jù)類型名 變量名表變量名表; v例如:例如: int i, j, k; v注意:注意:一個(gè)變量被定義后,它的值是不確定一個(gè)變量被定義后,它的值是不確定 的。的。 多個(gè)變量之間使用逗號(hào)間隔多個(gè)變量之間使用逗號(hào)間隔 3.3.4 變量的初始化 v變量的初始化
18、,就是在定義變量的同時(shí),給變量的初始化,就是在定義變量的同時(shí),給 變量賦初值。變量賦初值。 v例如:例如: int a;/* 定義變量定義變量 */ a = 10;/* 給變量賦值給變量賦值 */ 等價(jià)于:等價(jià)于:int a = 10;/* 定義變量并初始化定義變量并初始化 */ 整型變量 v整型變量用來存放整型數(shù)據(jù)。整型變量用來存放整型數(shù)據(jù)。 v4種類型:種類型: 基本型:基本型:int,2字節(jié)字節(jié) 短整型:短整型:short int 或或 short,2字節(jié)字節(jié) 長(zhǎng)整型:長(zhǎng)整型:long int 或或 long,4字節(jié)字節(jié) 無符號(hào)型:無符號(hào)型: v在前在前3種整型類型前加種整型類型前加un
19、signed v在存儲(chǔ)單元中的全部二進(jìn)制位都用來存放數(shù)據(jù)本在存儲(chǔ)單元中的全部二進(jìn)制位都用來存放數(shù)據(jù)本 身,由于其無符號(hào)位,故不能存放負(fù)數(shù)身,由于其無符號(hào)位,故不能存放負(fù)數(shù) v【例例3.4】輸出變量的值。輸出變量的值。 main() int i, j; i = 32767; j = 32768; printf(i = %d, j = %dn, i, j); 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 說明:由于說明:由于 int 型變量的取值范圍為型變量的取值范圍為 -32768 32767,因此變量,因此變量 j 的賦值超出了取值范圍,的賦值超出了取值范圍, 結(jié)果產(chǎn)生溢出。但結(jié)果產(chǎn)生溢出。但系統(tǒng)不會(huì)報(bào)錯(cuò),而是給出一
20、系統(tǒng)不會(huì)報(bào)錯(cuò),而是給出一 個(gè)錯(cuò)誤的結(jié)果個(gè)錯(cuò)誤的結(jié)果。 v為得到正確的結(jié)果,可將為得到正確的結(jié)果,可將【例例3.4】改為:改為: main() int i; long j; i = 32767; j = 32768; printf(i = %d, j = %ldn, i, j); 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 實(shí)型變量 v實(shí)型變量又稱為浮點(diǎn)型變量,用來存儲(chǔ)帶小實(shí)型變量又稱為浮點(diǎn)型變量,用來存儲(chǔ)帶小 數(shù)點(diǎn)的數(shù)。數(shù)點(diǎn)的數(shù)。 v3種類型:種類型: 單精度型:?jiǎn)尉刃停篺loat,4字節(jié),有效位為字節(jié),有效位為67位位 雙精度型:雙精度型:double,8字節(jié),有效位為字節(jié),有效位為1516位位 長(zhǎng)雙精度型:長(zhǎng)
21、雙精度型:long double,16字節(jié),有效位為字節(jié),有效位為 1819位位 實(shí)型變量 v說明:說明: 實(shí)型常量不存在單精度型和雙精度型之分。實(shí)型常量不存在單精度型和雙精度型之分。 當(dāng)為實(shí)型變量賦予一個(gè)實(shí)型常量時(shí),當(dāng)為實(shí)型變量賦予一個(gè)實(shí)型常量時(shí),C語言根據(jù)語言根據(jù) 實(shí)型變量的類型來截取常量中相應(yīng)的有效數(shù)字。實(shí)型變量的類型來截取常量中相應(yīng)的有效數(shù)字。 v【例例3.5】不同類型數(shù)據(jù)的輸出比較。不同類型數(shù)據(jù)的輸出比較。 main() float a; double b; a = 123456.111; b = 123456.111; printf(a = %fnb = %fn, a, b); 運(yùn)
22、行結(jié)果:運(yùn)行結(jié)果: 說明:說明:a 是是 float 型變量,能保證的有效數(shù)據(jù)型變量,能保證的有效數(shù)據(jù) 為為 7 位,后面的數(shù)據(jù)都是無意義的。而位,后面的數(shù)據(jù)都是無意義的。而 b 是是 double 型變量,能接收此處所有的數(shù)據(jù)。型變量,能接收此處所有的數(shù)據(jù)。 字符型變量 v字符型變量用來存儲(chǔ)一個(gè)字符,在內(nèi)存中占字符型變量用來存儲(chǔ)一個(gè)字符,在內(nèi)存中占 一個(gè)字節(jié)。一個(gè)字節(jié)。 v字符型變量存儲(chǔ)的是字符的字符型變量存儲(chǔ)的是字符的ASCII碼。碼。 v2種類型:種類型: 基本型:基本型:char 無符號(hào)字符型:無符號(hào)字符型:unsigned char 字符型變量 v注意:注意: 一個(gè)字符型變量只能存放
23、一個(gè)字符,不能存放一一個(gè)字符型變量只能存放一個(gè)字符,不能存放一 個(gè)字符串。個(gè)字符串。 字符型數(shù)據(jù)與整型數(shù)據(jù)可以通用(前提:整型數(shù)字符型數(shù)據(jù)與整型數(shù)據(jù)可以通用(前提:整型數(shù) 據(jù)的高位字節(jié)是據(jù)的高位字節(jié)是0)。)。 字符型數(shù)據(jù)也可以進(jìn)行算術(shù)運(yùn)算。字符型數(shù)據(jù)也可以進(jìn)行算術(shù)運(yùn)算。 v【例例3.6】字符型數(shù)據(jù)的運(yùn)算。字符型數(shù)據(jù)的運(yùn)算。 main() char c1, c2, c3; int d; c1 = A; c2 = 97; c3 = c1 + 5; d = c2 - c1; printf(c1=%d, c2=%c, c3=%c, d=%dn, c1, c2, c3, d); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:
24、3.4 庫(kù)函數(shù) v庫(kù)函數(shù)庫(kù)函數(shù) 由由C語言編譯系統(tǒng)提供的函數(shù),稱為庫(kù)函數(shù)。語言編譯系統(tǒng)提供的函數(shù),稱為庫(kù)函數(shù)。 每一種每一種C語言編譯系統(tǒng)都會(huì)提供一個(gè)預(yù)先編制好語言編譯系統(tǒng)都會(huì)提供一個(gè)預(yù)先編制好 的函數(shù)庫(kù),這些函數(shù)可以供程序員直接調(diào)用。的函數(shù)庫(kù),這些函數(shù)可以供程序員直接調(diào)用。 在在ANSI C中規(guī)定了許多類型的庫(kù)函數(shù),其中最中規(guī)定了許多類型的庫(kù)函數(shù),其中最 常用的有以下幾種:數(shù)學(xué)函數(shù)、字符和字符串函常用的有以下幾種:數(shù)學(xué)函數(shù)、字符和字符串函 數(shù)、輸入和輸出函數(shù)、動(dòng)態(tài)內(nèi)存分配函數(shù)。數(shù)、輸入和輸出函數(shù)、動(dòng)態(tài)內(nèi)存分配函數(shù)。 3.4.1 庫(kù)函數(shù)的使用方式 v庫(kù)函數(shù)的使用方式:庫(kù)函數(shù)的使用方式: 在使用
25、某個(gè)庫(kù)函數(shù)前都應(yīng)在程序開始處包含相在使用某個(gè)庫(kù)函數(shù)前都應(yīng)在程序開始處包含相 應(yīng)的頭文件。應(yīng)的頭文件。 #include 或或 #include 頭文件名頭文件名 在程序中調(diào)用庫(kù)函數(shù)。在程序中調(diào)用庫(kù)函數(shù)。 函數(shù)名函數(shù)名(實(shí)參列表實(shí)參列表); 或或 變量名變量名 = 函數(shù)名函數(shù)名(實(shí)參列表實(shí)參列表); 如果是調(diào)用無參函數(shù),則沒有如果是調(diào)用無參函數(shù),則沒有“實(shí)參列表實(shí)參列表”。 3.4.4 格式化輸入輸出函數(shù) vC語言提供的格式化輸入輸出函數(shù)的原型在語言提供的格式化輸入輸出函數(shù)的原型在 頭文件頭文件stdio.h中聲明。中聲明。 v在使用時(shí)應(yīng)在程序頭部包含在使用時(shí)應(yīng)在程序頭部包含stdio.h文件。
26、文件。 #include 或或 #include stdio.h 說明:使用格式化輸入輸出函數(shù)時(shí)可以省略說明:使用格式化輸入輸出函數(shù)時(shí)可以省略 #include命令。命令。 3.4.4 格式化輸入輸出函數(shù) v格式化輸出函數(shù)格式化輸出函數(shù)printf 格式:格式:printf(輸出格式輸出格式, 輸出列表輸出列表); 功能:按用戶指定的格式,把指定的任意類型功能:按用戶指定的格式,把指定的任意類型 的數(shù)據(jù)顯示到屏幕上。的數(shù)據(jù)顯示到屏幕上。 說明:說明: v輸出格式由格式控制符、按原樣輸出的字符、輸出格式由格式控制符、按原樣輸出的字符、 轉(zhuǎn)義字符三部分組成。轉(zhuǎn)義字符三部分組成。 v輸出列表既可以是
27、變量名,也可以是表達(dá)式。輸出列表既可以是變量名,也可以是表達(dá)式。 v輸出列表中多個(gè)輸出項(xiàng)之間用逗號(hào)(輸出列表中多個(gè)輸出項(xiàng)之間用逗號(hào)(,)間隔。)間隔。 v輸出列表中給出的各個(gè)輸出項(xiàng)要求與輸出格式輸出列表中給出的各個(gè)輸出項(xiàng)要求與輸出格式 中的格式字符中的格式字符在數(shù)量和類型上一一對(duì)應(yīng)在數(shù)量和類型上一一對(duì)應(yīng)。 printf函數(shù) v格式控制符格式控制符 作用:作用: v將要輸出的數(shù)據(jù)轉(zhuǎn)換為指定格式后輸出。將要輸出的數(shù)據(jù)轉(zhuǎn)換為指定格式后輸出。 一般格式:一般格式: %修飾符修飾符格式字符格式字符 說明:說明: v修飾符是可選的;當(dāng)沒有修飾符時(shí),按系統(tǒng)缺省修飾符是可選的;當(dāng)沒有修飾符時(shí),按系統(tǒng)缺省 設(shè)定
28、顯示。設(shè)定顯示。 格式控制符 vd格式符格式符 作用:用來輸出十進(jìn)制帶符號(hào)整數(shù)(正數(shù)不輸作用:用來輸出十進(jìn)制帶符號(hào)整數(shù)(正數(shù)不輸 出符號(hào))。出符號(hào))。 %d:按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。:按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。 %md:若:若%md的數(shù)據(jù)位數(shù)小于的數(shù)據(jù)位數(shù)小于m,則左端,則左端 補(bǔ)空格;補(bǔ)空格;%-md的數(shù)據(jù)位小于的數(shù)據(jù)位小于m,則右端補(bǔ)空格;,則右端補(bǔ)空格; 若數(shù)據(jù)位數(shù)大于若數(shù)據(jù)位數(shù)大于m,則按實(shí)際位數(shù)輸出。,則按實(shí)際位數(shù)輸出。 %0md:若數(shù)據(jù)位數(shù)小于:若數(shù)據(jù)位數(shù)小于m,則左端補(bǔ)數(shù)字,則左端補(bǔ)數(shù)字 “0”;若數(shù)據(jù)位數(shù)大于;若數(shù)據(jù)位數(shù)大于m,則按實(shí)際位數(shù)輸出。,則按實(shí)際位數(shù)輸出。 %ld:
29、輸出長(zhǎng)整型數(shù)據(jù)。:輸出長(zhǎng)整型數(shù)據(jù)。 %hd:輸出短整型數(shù)據(jù)。:輸出短整型數(shù)據(jù)。 格式控制符 例如:例如:x = 12; y = 1234; z = 123456; (1)printf(%3d,%3d, x, y); 輸出:輸出: 12,1234 (2)printf(%03d,%3d, x, y); 輸出:輸出:012,1234 (3)printf(%-3d,%3d, x, y); 輸出:輸出:12 ,1234 (4)printf(%ld, z); 輸出:輸出:123456 格式控制符 vo格式符格式符 作用:以八進(jìn)制數(shù)作用:以八進(jìn)制數(shù)無符號(hào)無符號(hào)形式輸出整數(shù),即符形式輸出整數(shù),即符 號(hào)位作為數(shù)
30、值部分輸出。號(hào)位作為數(shù)值部分輸出。 例如:例如:int a = -1; printf(%d, %o, a, a); 輸出:輸出:-1, 177777 格式控制符 vx格式符格式符 作用:以十六進(jìn)制作用:以十六進(jìn)制無符號(hào)無符號(hào)形式輸出整數(shù)。形式輸出整數(shù)。 例如:例如:int a = -1; printf(%d, %x, a, a); 輸出:輸出:-1, ffff 格式控制符 vu格式符格式符 作用:以十進(jìn)制無符號(hào)形式輸出整數(shù)。作用:以十進(jìn)制無符號(hào)形式輸出整數(shù)。 一個(gè)有符號(hào)的整型數(shù)據(jù)可以用一個(gè)有符號(hào)的整型數(shù)據(jù)可以用%d格式輸出,也格式輸出,也 可以用可以用%u格式輸出。格式輸出。 例如:例如:in
31、t a = -1; printf(%d, %u, a, a); 輸出:輸出:-1, 65535 格式控制符 vc格式符格式符 作用:用于輸出一個(gè)字符。作用:用于輸出一個(gè)字符。 一個(gè)范圍在一個(gè)范圍在0255的整數(shù),既可以用的整數(shù),既可以用%d格式輸格式輸 出,也可以用出,也可以用%c格式輸出,輸出的是該整數(shù)或格式輸出,輸出的是該整數(shù)或 其對(duì)應(yīng)的其對(duì)應(yīng)的ASCII碼。碼。 例如:例如:char c = A; printf(%c,%d, c, c); 輸出:輸出:A, 65 格式控制符 vs格式符格式符 作用:用于輸出一個(gè)字符串。作用:用于輸出一個(gè)字符串。 %s:按字符串的實(shí)際長(zhǎng)度輸出。:按字符串的
32、實(shí)際長(zhǎng)度輸出。 %ms:如果:如果%ms字符串的實(shí)際長(zhǎng)度小于字符串的實(shí)際長(zhǎng)度小于m, 左端補(bǔ)空格;左端補(bǔ)空格;%-ms字符串的實(shí)際長(zhǎng)度小于字符串的實(shí)際長(zhǎng)度小于m, 則右端補(bǔ)空格;否則,按實(shí)際長(zhǎng)度輸出。則右端補(bǔ)空格;否則,按實(shí)際長(zhǎng)度輸出。 %m.ns:若:若%m.ns取字符串左端取字符串左端n個(gè)字符,個(gè)字符, 輸出在輸出在m列的右端,左端補(bǔ)空格;列的右端,左端補(bǔ)空格; %-m.ns取取 字符左端字符左端n個(gè)字符,輸出在個(gè)字符,輸出在m列的左端,右端補(bǔ)列的左端,右端補(bǔ) 空格;若空格;若mn,則,則m自動(dòng)取自動(dòng)取n值輸出值輸出n個(gè)字符。個(gè)字符。 格式控制符 例如:例如: printf(%2s, st
33、art); 輸出:輸出:start printf(%7.2s, start); 輸出:輸出: st printf(%.3s, start); 輸出:輸出:sta printf(%-5.3s, start); 輸出:輸出:sta 格式控制符 vf格式符格式符 作用:以小數(shù)形式輸出實(shí)數(shù)。作用:以小數(shù)形式輸出實(shí)數(shù)。 %f:整數(shù)部分全部輸出,并輸出:整數(shù)部分全部輸出,并輸出6位小數(shù)。位小數(shù)。 %m.nf:輸出的數(shù)據(jù)共占:輸出的數(shù)據(jù)共占m位,其中有位,其中有n位是小位是小 數(shù)。若數(shù)的總長(zhǎng)度數(shù)。若數(shù)的總長(zhǎng)度m,則左端補(bǔ)空格。,則左端補(bǔ)空格。 %-m.nf:與:與%m.nf類似,只是數(shù)據(jù)輸出時(shí)靠左類似,只是
34、數(shù)據(jù)輸出時(shí)靠左 端,右端補(bǔ)空格。端,右端補(bǔ)空格。 格式控制符 例如:例如: float f = 123.456; printf(%f,%10fn, f, f); printf(%10.2f,%-10.2f, f, f); 輸出:輸出:123.456001,123.456001 123.46,123.46 格式控制符 ve格式符格式符 作用:以指數(shù)形式輸出實(shí)數(shù)。作用:以指數(shù)形式輸出實(shí)數(shù)。 %e:由系統(tǒng)自動(dòng)指定給出:由系統(tǒng)自動(dòng)指定給出5位小數(shù),小數(shù)點(diǎn)前位小數(shù),小數(shù)點(diǎn)前 有且僅有有且僅有1位非零數(shù)字;指數(shù)部分占位非零數(shù)字;指數(shù)部分占4位,其中位,其中 “e”占占1位,位,“”占占1位,指數(shù)占位,指數(shù)
35、占2位。位。 %m.ne:m限定了輸出寬度,限定了輸出寬度,n限定了輸出整限定了輸出整 數(shù)與小數(shù)的總位數(shù)。若數(shù)據(jù)寬度小于數(shù)與小數(shù)的總位數(shù)。若數(shù)據(jù)寬度小于m,則左,則左 端補(bǔ)空格。端補(bǔ)空格。 %-m.ne:與:與%m.ne類似,只是若數(shù)據(jù)寬度小類似,只是若數(shù)據(jù)寬度小 于于m,則右端補(bǔ)空格。,則右端補(bǔ)空格。 格式控制符 例如:例如: float f = 123.456; printf(%e,%10en, f, f); printf(%10.2e,%-10.2e, f, f); 輸出:輸出:1.23456e+02, 1.23456e+02 1.2e+02,1.2e+02 格式控制符 vg格式符格式符
36、 作用:自動(dòng)選中作用:自動(dòng)選中f格式或格式或e格式輸出時(shí)占寬度較格式輸出時(shí)占寬度較 小的一種,且不輸出無意義的零。小的一種,且不輸出無意義的零。 例如:例如: float f = 123.456; printf(%f, %e, %g, f, f, f); 輸出:輸出:123.456001,1.23456e+02,123.456 3.4.4 格式化輸入輸出函數(shù) v格式化輸入函數(shù)格式化輸入函數(shù)scanf 格式:格式:scanf(格式字符格式字符, 地址列表地址列表); 功能:按用戶指定的格式從鍵盤上輸入數(shù)據(jù),功能:按用戶指定的格式從鍵盤上輸入數(shù)據(jù), 并將鍵盤輸入的數(shù)據(jù)轉(zhuǎn)換為指定格式存放到對(duì)并將鍵盤
37、輸入的數(shù)據(jù)轉(zhuǎn)換為指定格式存放到對(duì) 應(yīng)變量的內(nèi)存地址中。應(yīng)變量的內(nèi)存地址中。 說明:說明: v地址列表由變量的地址組成,如果有多個(gè)變量,地址列表由變量的地址組成,如果有多個(gè)變量, 則各變量的地址之間用逗號(hào)(則各變量的地址之間用逗號(hào)(,)間隔;)間隔; v地址列表中的地址由地址運(yùn)算符(地址列表中的地址由地址運(yùn)算符( 輸入:輸入:1 2 結(jié)果為:結(jié)果為:x=1, y=2 如果格式說明符之間包含其他字符,則輸入數(shù)如果格式說明符之間包含其他字符,則輸入數(shù) 據(jù)時(shí),應(yīng)輸入與這些字符相同的字符做間隔。據(jù)時(shí),應(yīng)輸入與這些字符相同的字符做間隔。 例如:例如: scanf(%d, %d, 輸入:輸入:1, 2 結(jié)果
38、為:結(jié)果為:x=1, y=2 當(dāng)用當(dāng)用%c格式輸入時(shí),空格、轉(zhuǎn)義字符都作為有格式輸入時(shí),空格、轉(zhuǎn)義字符都作為有 效字符輸入。效字符輸入。 例如:例如: scanf(%c%c%c, 輸入:輸入:a b c 結(jié)果為:結(jié)果為:x=a, y= , z=b 輸入整數(shù)時(shí),可以指定數(shù)據(jù)的寬度。輸入整數(shù)時(shí),可以指定數(shù)據(jù)的寬度。 例如:例如: scanf(%3d, 輸入:輸入:12345 結(jié)果為:結(jié)果為:x=123 輸入實(shí)數(shù)時(shí),可以指定數(shù)據(jù)的寬度,但不能指輸入實(shí)數(shù)時(shí),可以指定數(shù)據(jù)的寬度,但不能指 定精度。定精度。 例如:例如: scanf(%5f, 輸入:輸入:123.456 結(jié)果為:結(jié)果為:x=123.4 又
39、如:又如: scanf(%7.2f, 是是錯(cuò)誤錯(cuò)誤的。的。 如果在如果在%后有一個(gè)后有一個(gè)“*”字符,表示輸入的數(shù)據(jù)字符,表示輸入的數(shù)據(jù) 跳過,不賦給任何變量。跳過,不賦給任何變量。 例如:例如: scanf(%d%*d%d, 輸入:輸入:1 2 3 結(jié)果為:結(jié)果為:x=1,y=3,z未賦值,未賦值,2被跳過被跳過 當(dāng)連續(xù)使用多個(gè)當(dāng)連續(xù)使用多個(gè)scanf輸入數(shù)據(jù)時(shí),會(huì)發(fā)生數(shù)據(jù)輸入數(shù)據(jù)時(shí),會(huì)發(fā)生數(shù)據(jù) 殘留問題。殘留問題。 解決上述問題的方法有兩種:解決上述問題的方法有兩種: (i)在第)在第2個(gè)個(gè)scanf的格式控制字符串前加一個(gè)空的格式控制字符串前加一個(gè)空 格,以吸收上一行輸入的回車。格,以吸
40、收上一行輸入的回車。 (ii)使用)使用fflush(stdin)來清除緩沖區(qū)的內(nèi)容。來清除緩沖區(qū)的內(nèi)容。 char a, b; scanf(%c, scanf(%c, printf(%d, %dn, a, b); char a, b; scanf(%c, scanf( %c, printf(%d, %dn, a, b); 例如:例如: 輸入:輸入:a 輸出:輸出:97, 10 輸入:輸入:a b 輸出:輸出:97, 98 char a, b; scanf(%c, fflush(stdin); scanf(%c, printf(%d, %dn, a, b); 輸入:輸入:a b 輸出:輸出:9
41、7, 98 3.4.2 常用數(shù)學(xué)函數(shù) vC語言提供的數(shù)學(xué)函數(shù)的原型在頭文件語言提供的數(shù)學(xué)函數(shù)的原型在頭文件 math.h中聲明。中聲明。 v在使用時(shí)應(yīng)在程序頭部包含在使用時(shí)應(yīng)在程序頭部包含math.h文件。文件。 #include 或或 #include math.h 3.4.2 常用數(shù)學(xué)函數(shù) v三角函數(shù)三角函數(shù) 函數(shù)原型:函數(shù)原型: vdouble sin(double x); vdouble cos(double x); vdouble tan(double x); 功能:功能: v函數(shù)函數(shù)sin、cos、tan用于計(jì)算正弦、余弦和正切用于計(jì)算正弦、余弦和正切 值,這三個(gè)函數(shù)的參數(shù)都是代表
42、弧度值的值,這三個(gè)函數(shù)的參數(shù)都是代表弧度值的 double型數(shù)據(jù)。型數(shù)據(jù)。 v【例例3.7】計(jì)算正弦、余弦和正切值。計(jì)算正弦、余弦和正切值。 #include #define PI 3.14159265 main() double x, y; x = PI/2; y = sin(x); printf(sin(%f) = %fn, x, y); y = cos(x); printf(cos(%f) = %fn, x, y); x = PI/4; y = tan(x); printf(tan(%f) = %fn, x, y); 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 3.4.2 常用數(shù)學(xué)函數(shù) v絕對(duì)值函數(shù)絕對(duì)值函數(shù)
43、 函數(shù)原型:函數(shù)原型: vint abs(int x); vdouble fabs(double x); vlong labs(long x); 功能:功能: v函數(shù)函數(shù)abs、fabs、labs分別適用于求整數(shù)、浮點(diǎn)分別適用于求整數(shù)、浮點(diǎn) 數(shù)和長(zhǎng)整型數(shù)的絕對(duì)值,這三個(gè)函數(shù)返回參數(shù)數(shù)和長(zhǎng)整型數(shù)的絕對(duì)值,這三個(gè)函數(shù)返回參數(shù)x 的絕對(duì)值。的絕對(duì)值。 例如,例如,abs(-10)等于等于10,fabs(-5.6)等于等于5.6 3.4.2 常用數(shù)學(xué)函數(shù) vexp和和pow函數(shù)函數(shù) 函數(shù)原型:函數(shù)原型: vdouble exp(double x); vdouble pow(double x, doub
44、le y); 功能:功能: vexp函數(shù)返回以函數(shù)返回以e為底,參數(shù)為底,參數(shù)x為冪的指數(shù)值為冪的指數(shù)值ex; vpow函數(shù)返回函數(shù)返回x的的y次冪次冪xy。 例如例如 vexp(2.0)等于等于7.389056 vpow(2.0, 3.0)等于等于8.0 3.4.2 常用數(shù)學(xué)函數(shù) vlog和和log10函數(shù)函數(shù) 函數(shù)原型:函數(shù)原型: vdouble log(double x); vdouble log10(double x); 功能:功能: vlog函數(shù)返回以函數(shù)返回以e為底,參數(shù)為底,參數(shù)x的自然對(duì)數(shù)值的自然對(duì)數(shù)值lnx; vlog10函數(shù)返回以函數(shù)返回以10為底,參數(shù)為底,參數(shù)x的對(duì)數(shù)值
45、的對(duì)數(shù)值lgx。 例如例如 vlog(7.389056)等于等于2.0 vlog10(100.0)等于等于2.0 3.4.2 常用數(shù)學(xué)函數(shù) vsqrt函數(shù)函數(shù) 函數(shù)原型:函數(shù)原型: vdouble sqrt(double x); 功能:功能: vsqrt函數(shù)返回參數(shù)函數(shù)返回參數(shù)x的平方根。的平方根。 例如例如 vsqrt(4.0)等于等于2.0 3.4.2 常用數(shù)學(xué)函數(shù) v隨機(jī)函數(shù)隨機(jī)函數(shù) 隨機(jī)函數(shù)的原型在頭文件隨機(jī)函數(shù)的原型在頭文件stdlib.h中定義。中定義。 函數(shù)原型:函數(shù)原型: vint rand(void); vvoid srand(unsigned int seed); 功能:功
46、能: vrand函數(shù)返回一個(gè)值在函數(shù)返回一個(gè)值在0RAND_MAX之間的偽隨機(jī)整之間的偽隨機(jī)整 數(shù),數(shù),ANSI C要求要求RAND_MAX至少為至少為32767。 vsrand函數(shù)用參數(shù)函數(shù)用參數(shù)seed來設(shè)置一個(gè)偽隨機(jī)數(shù)序列的開始來設(shè)置一個(gè)偽隨機(jī)數(shù)序列的開始 點(diǎn),以便調(diào)用點(diǎn),以便調(diào)用rand函數(shù)時(shí)產(chǎn)生一個(gè)新的偽隨機(jī)數(shù)序列。函數(shù)時(shí)產(chǎn)生一個(gè)新的偽隨機(jī)數(shù)序列。 v【例例3.8】用當(dāng)前機(jī)器時(shí)間作隨機(jī)數(shù)種子,產(chǎn)生用當(dāng)前機(jī)器時(shí)間作隨機(jī)數(shù)種子,產(chǎn)生3 個(gè)隨機(jī)整數(shù)。個(gè)隨機(jī)整數(shù)。 #include #include #include main() srand(unsigned)time(NULL); pri
47、ntf(%6dn, rand(); printf(%6dn, rand(); printf(%6dn, rand(); 3.4.3 字符輸入輸出函數(shù) vC語言提供的字符輸入輸出函數(shù)的原型在頭語言提供的字符輸入輸出函數(shù)的原型在頭 文件文件stdio.h中聲明。中聲明。 v在使用時(shí)應(yīng)在程序頭部包含在使用時(shí)應(yīng)在程序頭部包含stdio.h文件。文件。 #include 或或 #include stdio.h 3.4.3 字符輸入輸出函數(shù) v字符輸出函數(shù)字符輸出函數(shù)putchar 函數(shù)原型:函數(shù)原型: vint putchar(int c); 功能:功能: vputchar函數(shù)把一個(gè)字符輸出到標(biāo)準(zhǔn)輸出設(shè)
48、備函數(shù)把一個(gè)字符輸出到標(biāo)準(zhǔn)輸出設(shè)備 (通常是顯示器)上,其中參數(shù)(通常是顯示器)上,其中參數(shù)c可以是字符變可以是字符變 量或常量,也可以是一個(gè)代表量或常量,也可以是一個(gè)代表ASCII碼的整數(shù)。碼的整數(shù)。 說明:說明: vputchar函數(shù)不但可以輸出普通字符,還可以輸函數(shù)不但可以輸出普通字符,還可以輸 出控制字符,如出控制字符,如 putchar(n) 可以輸出一個(gè)換可以輸出一個(gè)換 行符。行符。 #include main() char a = B, b = o, c = k; putchar(a); putchar(b); putchar(b); putchar(c); putchar(t)
49、; putchar(a); putchar(b); putchar(n); putchar(b); putchar(c); 顯示:顯示: v【例例3.9】使用使用putchar( )函數(shù)輸出字符函數(shù)輸出字符 3.4.3 字符輸入輸出函數(shù) v字符輸入函數(shù)字符輸入函數(shù)getchar 函數(shù)原型:函數(shù)原型: vint getchar(void); 功能:功能: vgetchar函數(shù)從標(biāo)準(zhǔn)輸入設(shè)備(通常是鍵盤)的函數(shù)從標(biāo)準(zhǔn)輸入設(shè)備(通常是鍵盤)的 輸入流中獲得一個(gè)字符。輸入流中獲得一個(gè)字符。 說明:說明: v調(diào)用調(diào)用getchar函數(shù)時(shí)不用參數(shù)。函數(shù)時(shí)不用參數(shù)。 v該函數(shù)的輸入直到該函數(shù)的輸入直到“回車
50、回車”才結(jié)束,回車前的才結(jié)束,回車前的 所有輸入字符都會(huì)逐個(gè)顯示在屏幕上,但所有輸入字符都會(huì)逐個(gè)顯示在屏幕上,但只有只有 第一個(gè)字符作為函數(shù)的返回值第一個(gè)字符作為函數(shù)的返回值。 #include main() char c; c = getchar(); putchar(c); 輸入:輸入: 顯示:顯示: v【例例3.10】使用使用getchar( )函數(shù)輸入一個(gè)字符函數(shù)輸入一個(gè)字符 3.5 運(yùn)算符和表達(dá)式 v運(yùn)算符運(yùn)算符 運(yùn)算符是用來表示各種運(yùn)算的符號(hào)。運(yùn)算符是用來表示各種運(yùn)算的符號(hào)。 v表達(dá)式表達(dá)式 表達(dá)式是由運(yùn)算符和操作數(shù)組合成的式子,用來表達(dá)式是由運(yùn)算符和操作數(shù)組合成的式子,用來 描述
51、對(duì)哪些數(shù)據(jù)以什么順序進(jìn)行怎樣的操作。描述對(duì)哪些數(shù)據(jù)以什么順序進(jìn)行怎樣的操作。 操作數(shù)可以是常量、也可以是變量,還可以是函操作數(shù)可以是常量、也可以是變量,還可以是函 數(shù)。數(shù)。 一個(gè)表達(dá)式的計(jì)算將返回一個(gè)具有確定類型的值。一個(gè)表達(dá)式的計(jì)算將返回一個(gè)具有確定類型的值。 3.5.1 C運(yùn)算符的種類、運(yùn)算優(yōu)先級(jí) 和結(jié)合性 v運(yùn)算符的種類運(yùn)算符的種類 按運(yùn)算符的功能劃分按運(yùn)算符的功能劃分 v包含:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、包含:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、 指針運(yùn)算符、位運(yùn)算符、逗號(hào)運(yùn)算符、賦值運(yùn)指針運(yùn)算符、位運(yùn)算符、逗號(hào)運(yùn)算符、賦值運(yùn) 算符等算符等 按參與運(yùn)算的操作數(shù)的個(gè)數(shù)劃分按參與運(yùn)
52、算的操作數(shù)的個(gè)數(shù)劃分 v包含:?jiǎn)文窟\(yùn)算符、雙目運(yùn)算符、三目運(yùn)算符包含:?jiǎn)文窟\(yùn)算符、雙目運(yùn)算符、三目運(yùn)算符 3.5.1 C運(yùn)算符的種類、運(yùn)算優(yōu)先級(jí) 和結(jié)合性 v運(yùn)算符的優(yōu)先級(jí)運(yùn)算符的優(yōu)先級(jí) 運(yùn)算符的優(yōu)先級(jí)是指同一個(gè)表達(dá)式中不同運(yùn)算運(yùn)算符的優(yōu)先級(jí)是指同一個(gè)表達(dá)式中不同運(yùn)算 符進(jìn)行運(yùn)算時(shí)的先后次序。符進(jìn)行運(yùn)算時(shí)的先后次序。 每一個(gè)運(yùn)算符都有一個(gè)指定的優(yōu)先級(jí)別,運(yùn)算每一個(gè)運(yùn)算符都有一個(gè)指定的優(yōu)先級(jí)別,運(yùn)算 符的優(yōu)先級(jí)別確定了包含多個(gè)操作數(shù)的表達(dá)式符的優(yōu)先級(jí)別確定了包含多個(gè)操作數(shù)的表達(dá)式 如何求值。如何求值。 各類運(yùn)算符的優(yōu)先級(jí)別(從高到低):各類運(yùn)算符的優(yōu)先級(jí)別(從高到低): 初等運(yùn)算符(初等運(yùn)算符(
53、 、( )、-)- 單目運(yùn)算符單目運(yùn)算符 - 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 - 關(guān)系運(yùn)算符關(guān)系運(yùn)算符 - 邏輯與運(yùn)算符邏輯與運(yùn)算符 - 邏輯或運(yùn)算符邏輯或運(yùn)算符 - 賦值運(yùn)算符賦值運(yùn)算符 - 逗號(hào)運(yùn)算逗號(hào)運(yùn)算 符符 3.5.1 C運(yùn)算符的種類、運(yùn)算優(yōu)先級(jí) 和結(jié)合性 v運(yùn)算符的結(jié)合性運(yùn)算符的結(jié)合性 運(yùn)算符的結(jié)合性是指當(dāng)一個(gè)操作數(shù)兩側(cè)的運(yùn)算運(yùn)算符的結(jié)合性是指當(dāng)一個(gè)操作數(shù)兩側(cè)的運(yùn)算 符具有相同優(yōu)先級(jí)時(shí),該操作數(shù)是先與左邊還符具有相同優(yōu)先級(jí)時(shí),該操作數(shù)是先與左邊還 是先與右邊的運(yùn)算符結(jié)合進(jìn)行運(yùn)算。是先與右邊的運(yùn)算符結(jié)合進(jìn)行運(yùn)算。 運(yùn)算符的結(jié)合性分為兩種:運(yùn)算符的結(jié)合性分為兩種: v左結(jié)合性:從左至右的結(jié)合方向
54、左結(jié)合性:從左至右的結(jié)合方向 v右結(jié)合性:從右至左的結(jié)合方向右結(jié)合性:從右至左的結(jié)合方向 注意:注意:除單目運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算除單目運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算 符是右結(jié)合性外,其他運(yùn)算符都是左結(jié)合性。符是右結(jié)合性外,其他運(yùn)算符都是左結(jié)合性。 3.5.1 C運(yùn)算符的種類、運(yùn)算優(yōu)先級(jí) 和結(jié)合性 v表達(dá)式求值順序表達(dá)式求值順序 不同級(jí)運(yùn)算符按優(yōu)先級(jí)從高到低順序執(zhí)行;不同級(jí)運(yùn)算符按優(yōu)先級(jí)從高到低順序執(zhí)行; 同級(jí)運(yùn)算符按照運(yùn)算符的結(jié)合性(結(jié)合方向)決同級(jí)運(yùn)算符按照運(yùn)算符的結(jié)合性(結(jié)合方向)決 定運(yùn)算順序。定運(yùn)算順序。 3.5.2 算術(shù)運(yùn)算符與算術(shù)表達(dá)式 v基本算術(shù)運(yùn)算符:基本算術(shù)運(yùn)算符:+、
55、-、*、/、% v注意:注意: 兩個(gè)整數(shù)相除,其運(yùn)算結(jié)果為整數(shù)(舍去小數(shù)部?jī)蓚€(gè)整數(shù)相除,其運(yùn)算結(jié)果為整數(shù)(舍去小數(shù)部 分)。若有一個(gè)是實(shí)數(shù)時(shí),運(yùn)算結(jié)果為分)。若有一個(gè)是實(shí)數(shù)時(shí),運(yùn)算結(jié)果為double型。型。 例如:例如:5/2 = 2 /* 舍去小數(shù)部分舍去小數(shù)部分 */ 5/2.0 = 2.5 /* 運(yùn)算結(jié)果為運(yùn)算結(jié)果為double型型 */ 取余運(yùn)算符取余運(yùn)算符“%”是數(shù)學(xué)運(yùn)算中的求余數(shù)運(yùn)算,其兩是數(shù)學(xué)運(yùn)算中的求余數(shù)運(yùn)算,其兩 個(gè)操作數(shù)都必須是整型數(shù)據(jù)。個(gè)操作數(shù)都必須是整型數(shù)據(jù)。 例如:例如:5%2 = 1 (-5)%2 = -1 /* 余數(shù)的符號(hào)與被除數(shù)相同余數(shù)的符號(hào)與被除數(shù)相同 */
56、v【例例3.11】?jī)蓚€(gè)整數(shù)相除。兩個(gè)整數(shù)相除。 main() float f; f = 3/5; printf(f = %fn, f); 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 3.5.2 算術(shù)運(yùn)算符與算術(shù)表達(dá)式 v算術(shù)運(yùn)算符的優(yōu)先級(jí)算術(shù)運(yùn)算符的優(yōu)先級(jí) 圓括號(hào)的優(yōu)先級(jí)最高。圓括號(hào)的優(yōu)先級(jí)最高。 算術(shù)運(yùn)算符的優(yōu)先級(jí)與數(shù)學(xué)基本相同,即先乘除,算術(shù)運(yùn)算符的優(yōu)先級(jí)與數(shù)學(xué)基本相同,即先乘除, 后加減。取模運(yùn)算的優(yōu)先級(jí)與乘除相同。后加減。取模運(yùn)算的優(yōu)先級(jí)與乘除相同。 單目算術(shù)運(yùn)算符的優(yōu)先級(jí)高于雙目算術(shù)運(yùn)算符。單目算術(shù)運(yùn)算符的優(yōu)先級(jí)高于雙目算術(shù)運(yùn)算符。 v算術(shù)運(yùn)算符的結(jié)合性算術(shù)運(yùn)算符的結(jié)合性 二元算術(shù)運(yùn)算符的結(jié)合性是二元算術(shù)
57、運(yùn)算符的結(jié)合性是從左至右從左至右。 單目算術(shù)運(yùn)算符單目算術(shù)運(yùn)算符“- -”(取負(fù))的結(jié)合性是(取負(fù))的結(jié)合性是從右至從右至 左左。 3.5.2 算術(shù)運(yùn)算符與算術(shù)表達(dá)式 v算術(shù)表達(dá)式算術(shù)表達(dá)式 算術(shù)表達(dá)式指的是用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)算術(shù)表達(dá)式指的是用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì) 象如常量、變量和函數(shù)等連接起來的式子。象如常量、變量和函數(shù)等連接起來的式子。 算術(shù)表達(dá)式的結(jié)果應(yīng)該不超過其所能表示的數(shù)的算術(shù)表達(dá)式的結(jié)果應(yīng)該不超過其所能表示的數(shù)的 范圍。范圍。 書寫規(guī)則:書寫規(guī)則: v所有字符必須寫在同一水平線上所有字符必須寫在同一水平線上 v相乘的地方必須寫上相乘的地方必須寫上“*”符號(hào)符號(hào) v表達(dá)式
58、中出現(xiàn)的括號(hào)一律用小括號(hào)表達(dá)式中出現(xiàn)的括號(hào)一律用小括號(hào) 3.5.2 算術(shù)運(yùn)算符與算術(shù)表達(dá)式 算術(shù)表達(dá)式應(yīng)能正確地表達(dá)數(shù)學(xué)式子。算術(shù)表達(dá)式應(yīng)能正確地表達(dá)數(shù)學(xué)式子。 例如,數(shù)學(xué)式子為例如,數(shù)學(xué)式子為 相應(yīng)的相應(yīng)的C語言表達(dá)式應(yīng)該是什么呢?語言表達(dá)式應(yīng)該是什么呢? ( 3 + x ) / (2 * y) y x 2 3 3.5.2 算術(shù)運(yùn)算符與算術(shù)表達(dá)式 v各類型數(shù)據(jù)的混合運(yùn)算各類型數(shù)據(jù)的混合運(yùn)算 不同類型的數(shù)據(jù)之間可以進(jìn)行混合運(yùn)算。不同類型的數(shù)據(jù)之間可以進(jìn)行混合運(yùn)算。 v如:如: 10 + a + 1.5 - 8765.1234 b 是合法的是合法的 混合運(yùn)算的規(guī)則:混合運(yùn)算的規(guī)則: v不同類型的
59、數(shù)據(jù)先轉(zhuǎn)換成同一類型后,再運(yùn)算。不同類型的數(shù)據(jù)先轉(zhuǎn)換成同一類型后,再運(yùn)算。 數(shù)據(jù)轉(zhuǎn)換的類型:數(shù)據(jù)轉(zhuǎn)換的類型: v自動(dòng)類型轉(zhuǎn)換(隱式轉(zhuǎn)換)自動(dòng)類型轉(zhuǎn)換(隱式轉(zhuǎn)換) v強(qiáng)制類型轉(zhuǎn)換(顯式轉(zhuǎn)換)強(qiáng)制類型轉(zhuǎn)換(顯式轉(zhuǎn)換) 自動(dòng)轉(zhuǎn)換(隱式轉(zhuǎn)換) v表達(dá)式中不同類型的數(shù)據(jù)由低向高轉(zhuǎn)換。表達(dá)式中不同類型的數(shù)據(jù)由低向高轉(zhuǎn)換。 v轉(zhuǎn)換規(guī)則:轉(zhuǎn)換規(guī)則: 數(shù)據(jù)的優(yōu)先級(jí)取決于該類型數(shù)據(jù)的寬度,數(shù)據(jù)的優(yōu)先級(jí)取決于該類型數(shù)據(jù)的寬度,數(shù)數(shù) 據(jù)寬度大的,級(jí)別就高據(jù)寬度大的,級(jí)別就高。 double float long unsigned int char , short 高低高低 v兩種箭頭的含義:兩種箭頭的含義: 向左的橫
60、向箭頭,表示即使是同一種數(shù)據(jù)類向左的橫向箭頭,表示即使是同一種數(shù)據(jù)類 型進(jìn)行運(yùn)算時(shí),也要進(jìn)行轉(zhuǎn)換,用于提高計(jì)算型進(jìn)行運(yùn)算時(shí),也要進(jìn)行轉(zhuǎn)換,用于提高計(jì)算 精度。精度。 如:如:a+b,先將,先將a和和b分別轉(zhuǎn)換為分別轉(zhuǎn)換為 int 型,型, 然后再進(jìn)行運(yùn)算,運(yùn)算結(jié)果為然后再進(jìn)行運(yùn)算,運(yùn)算結(jié)果為 int 型。型。 向上的縱向箭頭,表示當(dāng)運(yùn)算對(duì)象類型不同向上的縱向箭頭,表示當(dāng)運(yùn)算對(duì)象類型不同 時(shí)的轉(zhuǎn)換方向。時(shí)的轉(zhuǎn)換方向。 注意:注意:不要理解為不要理解為 int 型先轉(zhuǎn)換為型先轉(zhuǎn)換為 unsigned 型,再轉(zhuǎn)換成型,再轉(zhuǎn)換成 long 型,最后轉(zhuǎn)換成型,最后轉(zhuǎn)換成 double 型。型。 v例:例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑工程保修期服務(wù)承諾書
- 實(shí)驗(yàn)室保安聘用合同范例
- 制作合同范例格式
- 數(shù)據(jù)清理服務(wù)合同模板
- PCB外包勞務(wù)合同范例
- 央企薪制勞動(dòng)合同范例
- 農(nóng)村臨時(shí)用工合同模板
- 展會(huì)出租合同范例
- 信用卡合同范例
- 團(tuán)隊(duì)游合同范例
- 知識(shí)產(chǎn)權(quán)保險(xiǎn)介紹
- 2023年重慶市大渡口區(qū)春暉路街道陽光社區(qū)工作人員考試模擬試題及答案
- 日本福島核電站事故案例環(huán)境倫理分析
- 孔子與《論語》智慧樹知到答案章節(jié)測(cè)試2023年曲阜師范大學(xué)
- 汽車維修結(jié)算單
- GA 1811.1-2022傳媒設(shè)施反恐怖防范要求第1部分:媒體機(jī)構(gòu)
- 醫(yī)學(xué)原蟲的檢驗(yàn) 藍(lán)氏賈第鞭毛蟲的檢驗(yàn)
- JJF 1139-2005計(jì)量器具檢定周期確定原則和方法
- GB/T 7095.4-2008漆包銅扁繞組線第4部分:180級(jí)聚酯亞胺漆包銅扁線
- 《中藥竹罐治療頸椎病的應(yīng)用進(jìn)展綜述【3000字論文】》
- GA/T 1567-2019城市道路交通隔離欄設(shè)置指南
評(píng)論
0/150
提交評(píng)論