第二章C語(yǔ)言基本數(shù)據(jù)描述_第1頁(yè)
第二章C語(yǔ)言基本數(shù)據(jù)描述_第2頁(yè)
第二章C語(yǔ)言基本數(shù)據(jù)描述_第3頁(yè)
第二章C語(yǔ)言基本數(shù)據(jù)描述_第4頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 2.1 基本數(shù)基本數(shù)據(jù)類型據(jù)類型 2.2 變量和常量變量和常量 2.3 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式l字符集字符集 字符集是高級(jí)語(yǔ)言的編譯系統(tǒng)所能識(shí)別的字母、字符集是高級(jí)語(yǔ)言的編譯系統(tǒng)所能識(shí)別的字母、數(shù)字、和特殊符號(hào)。每種高級(jí)語(yǔ)言都有自己特定的字?jǐn)?shù)字、和特殊符號(hào)。每種高級(jí)語(yǔ)言都有自己特定的字符集合。符集合。l標(biāo)識(shí)符標(biāo)識(shí)符 標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)在標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)在C程序中的變量、常量(指符程序中的變量、常量(指符號(hào)常量)、數(shù)據(jù)類型和函數(shù)的。通俗一點(diǎn)說(shuō),標(biāo)識(shí)符號(hào)常量)、數(shù)據(jù)類型和函數(shù)的。通俗一點(diǎn)說(shuō),標(biāo)識(shí)符是程序員為變量、常量或者函數(shù)起的名字,它實(shí)際上是程序員為變量、常量或者函數(shù)起的名字,它實(shí)際上是一

2、個(gè)字符序列。是一個(gè)字符序列。 (1) 大、小寫(xiě)英文字母:大、小寫(xiě)英文字母: A ,B, ,Z,a,b,z (2) 數(shù)字:數(shù)字: 0,1,2,9 (3) 運(yùn)算符:運(yùn)算符: + * / % = & | ? ! (4) 括號(hào):括號(hào): ( ) (5) 標(biāo)點(diǎn)符號(hào):標(biāo)點(diǎn)符號(hào): : ; (6) 特殊符號(hào):特殊符號(hào): _ $ # (7) 空白符:空格符、換行符、制表符??瞻追嚎崭穹Q行符、制表符。C語(yǔ)言的字符集合包括:語(yǔ)言的字符集合包括:(1) 字母或下劃線中的任一字符打頭。字母或下劃線中的任一字符打頭。(2) 在第一個(gè)字符后,可以是任意的數(shù)字、字在第一個(gè)字符后,可以是任意的數(shù)字、字母、下劃線組成

3、的序列。長(zhǎng)度不超過(guò)母、下劃線組成的序列。長(zhǎng)度不超過(guò)8個(gè)。個(gè)。 關(guān)鍵字(保留字)關(guān)鍵字(保留字)標(biāo)識(shí)符的分類:標(biāo)識(shí)符的分類: 特定字特定字 用戶定義字用戶定義字任何一個(gè)標(biāo)識(shí)符必須符合下列語(yǔ)法規(guī)則:任何一個(gè)標(biāo)識(shí)符必須符合下列語(yǔ)法規(guī)則: 關(guān)鍵字:又稱保留字,一般為小寫(xiě)字母。關(guān)鍵字:又稱保留字,一般為小寫(xiě)字母。關(guān)鍵字是關(guān)鍵字是C編譯程序預(yù)先登錄的標(biāo)識(shí)符,它們編譯程序預(yù)先登錄的標(biāo)識(shí)符,它們代表固定的意義,用戶不能隨便使用。代表固定的意義,用戶不能隨便使用。 若隨便使用,可能出現(xiàn)意想不到的錯(cuò)誤,若隨便使用,可能出現(xiàn)意想不到的錯(cuò)誤,編譯能通過(guò),但運(yùn)行結(jié)果不對(duì),且不容易檢編譯能通過(guò),但運(yùn)行結(jié)果不對(duì),且不容易檢

4、查錯(cuò)誤之所在。查錯(cuò)誤之所在。關(guān)鍵字(保留字)關(guān)鍵字(保留字) 特定字特定字 特定字:具有特殊含義的標(biāo)識(shí)符。它們雖特定字:具有特殊含義的標(biāo)識(shí)符。它們雖然不是關(guān)鍵字,但是在習(xí)慣上把它們看成關(guān)鍵然不是關(guān)鍵字,但是在習(xí)慣上把它們看成關(guān)鍵字。所以一般用戶定義的標(biāo)識(shí)符也不要使用它字。所以一般用戶定義的標(biāo)識(shí)符也不要使用它們。們。 特定字包括:特定字包括: define undef include ifdef ifndef endif line 用戶按照語(yǔ)法規(guī)則定義的標(biāo)識(shí)符。用戶定義字可用戶按照語(yǔ)法規(guī)則定義的標(biāo)識(shí)符。用戶定義字可以用來(lái)標(biāo)識(shí)用戶自己使用的變量,符號(hào)常量、數(shù)據(jù)以用來(lái)標(biāo)識(shí)用戶自己使用的變量,符號(hào)常量

5、、數(shù)據(jù)類型以及函數(shù)等。類型以及函數(shù)等。 注意注意 (1) 不能使用關(guān)鍵字和特定字。不能使用關(guān)鍵字和特定字。 (2) 用戶定義字為了標(biāo)識(shí)不同的對(duì)象,標(biāo)識(shí)符的前用戶定義字為了標(biāo)識(shí)不同的對(duì)象,標(biāo)識(shí)符的前8個(gè)個(gè)(甚至(甚至7個(gè))字符要有區(qū)別。個(gè))字符要有區(qū)別。 (3) 標(biāo)識(shí)符最好有含義。標(biāo)識(shí)符最好有含義。 (4) 避免使用容易混淆的字符。如避免使用容易混淆的字符。如l與與1,0與與o, z與與2等。等。 (5)大、小寫(xiě)代表不同的意義。大、小寫(xiě)代表不同的意義。 (6) 盡量不要與某個(gè)庫(kù)函數(shù)同名。盡量不要與某個(gè)庫(kù)函數(shù)同名。用戶定義字用戶定義字l變量變量 變量是由程序命名的一塊計(jì)算機(jī)內(nèi)存區(qū)域,是變量是由程序

6、命名的一塊計(jì)算機(jī)內(nèi)存區(qū)域,是用來(lái)存儲(chǔ)一個(gè)可以變化的數(shù)值。用來(lái)存儲(chǔ)一個(gè)可以變化的數(shù)值。 l常量常量 與變量一樣,常量也是存儲(chǔ)在內(nèi)存中的,但是,與變量一樣,常量也是存儲(chǔ)在內(nèi)存中的,但是,常量的數(shù)值在程序執(zhí)行過(guò)程中不會(huì)發(fā)生改變。常量的數(shù)值在程序執(zhí)行過(guò)程中不會(huì)發(fā)生改變。 無(wú)名常量(或稱文字常量)無(wú)名常量(或稱文字常量) 符號(hào)常量(用預(yù)處理命令符號(hào)常量(用預(yù)處理命令#define#define為常量命名)為常量命名) 在使用一個(gè)變量之前,程序員必須為每個(gè)變?cè)谑褂靡粋€(gè)變量之前,程序員必須為每個(gè)變量起個(gè)名字,同時(shí)還要聲明它的數(shù)據(jù)類型,以量起個(gè)名字,同時(shí)還要聲明它的數(shù)據(jù)類型,以便編譯系統(tǒng)根據(jù)不同的數(shù)據(jù)類型為其

7、靜態(tài)地分便編譯系統(tǒng)根據(jù)不同的數(shù)據(jù)類型為其靜態(tài)地分配內(nèi)存空間。我們稱之為定義變量。配內(nèi)存空間。我們稱之為定義變量。 定義變量的格式為:定義變量的格式為: 類型說(shuō)明符類型說(shuō)明符 變量名表變量名表 ; 不定值不定值 定義變量定義變量 整型整型 int 基本數(shù)據(jù)類型基本數(shù)據(jù)類型 浮點(diǎn)型浮點(diǎn)型 float double 字符型字符型 char 數(shù)組數(shù)組 以以為標(biāo)志為標(biāo)志 結(jié)構(gòu)結(jié)構(gòu) struct 構(gòu)造類型構(gòu)造類型 復(fù)雜數(shù)據(jù)類型復(fù)雜數(shù)據(jù)類型 聯(lián)合聯(lián)合 union 枚舉枚舉 enum 指針類型指針類型 以以 * 為標(biāo)志為標(biāo)志 C C語(yǔ)語(yǔ)言言的的數(shù)數(shù)據(jù)據(jù)類類型型整型整型 短整型短整型 short int sho

8、rt int 長(zhǎng)整型長(zhǎng)整型 long intlong int 普通整型普通整型 int int 浮點(diǎn)型浮點(diǎn)型 普通浮點(diǎn)型普通浮點(diǎn)型 floatfloat 雙精度浮點(diǎn)型雙精度浮點(diǎn)型 double double 字符型字符型 char char 不同數(shù)據(jù)類型的數(shù)據(jù)由于其在內(nèi)存的存儲(chǔ)方式不不同數(shù)據(jù)類型的數(shù)據(jù)由于其在內(nèi)存的存儲(chǔ)方式不同,存儲(chǔ)所占的二進(jìn)制位(同,存儲(chǔ)所占的二進(jìn)制位(bitbit)大多不相同。即使是)大多不相同。即使是相同類型的數(shù)據(jù)在不同種類的計(jì)算機(jī)所占位(相同類型的數(shù)據(jù)在不同種類的計(jì)算機(jī)所占位(bitbit)數(shù))數(shù)也不完全相同。也不完全相同。 l整型變量整型變量 l整型常量整型常量 l用

9、用printf顯示整型數(shù)據(jù)顯示整型數(shù)據(jù) l用用scanf輸入整型數(shù)輸入整型數(shù) 按照整型變量所占的二進(jìn)制位數(shù)來(lái)分類:按照整型變量所占的二進(jìn)制位數(shù)來(lái)分類: short(短整型)(短整型) int (普通整型)(普通整型) long (長(zhǎng)整型)(長(zhǎng)整型)根據(jù)整型變量是否帶符號(hào)位來(lái)分類:根據(jù)整型變量是否帶符號(hào)位來(lái)分類: 不帶符號(hào)的整型變量不帶符號(hào)的整型變量 帶符號(hào)的整型變量帶符號(hào)的整型變量 無(wú)符號(hào)用關(guān)鍵字無(wú)符號(hào)用關(guān)鍵字unsigned表示表示說(shuō)明整型變量的語(yǔ)法是:說(shuō)明整型變量的語(yǔ)法是: 限定詞限定詞 int 變量名表;變量名表; 在在IBM PC機(jī)上,普通整型占機(jī)上,普通整型占 16位(位(bit),

10、短整型),短整型也占也占 16位(位(bit),而長(zhǎng)整型占),而長(zhǎng)整型占32位(位(bit)。根據(jù)整型)。根據(jù)整型數(shù)據(jù)所占的位數(shù),計(jì)算一個(gè)整型數(shù)據(jù)能表示的數(shù)據(jù)的數(shù)據(jù)所占的位數(shù),計(jì)算一個(gè)整型數(shù)據(jù)能表示的數(shù)據(jù)的取值范圍。取值范圍。 第位是符號(hào)位,如果符號(hào)位為第位是符號(hào)位,如果符號(hào)位為0,表示是正整數(shù),表示是正整數(shù),從到從到15位全為位全為1時(shí)表示的數(shù)最大。時(shí)表示的數(shù)最大。01111 1215 15個(gè)個(gè)1 則則16bit能表示的最大整數(shù)是能表示的最大整數(shù)是215 1 ,即,即32767。 如果符號(hào)位為如果符號(hào)位為1,表示是負(fù)整數(shù),從到,表示是負(fù)整數(shù),從到15位都為位都為0時(shí)表示的數(shù)最小。時(shí)表示的數(shù)最

11、小。10 00 15個(gè)個(gè)0 在計(jì)算機(jī)中,這個(gè)數(shù)是在計(jì)算機(jī)中,這個(gè)數(shù)是-215的補(bǔ)碼表示。因此,最的補(bǔ)碼表示。因此,最小整數(shù)是小整數(shù)是-215,即,即 -32768。 整型常量表示:整型常量表示: 十進(jìn)制表示十進(jìn)制表示 八進(jìn)制表示八進(jìn)制表示 以數(shù)字以數(shù)字 0開(kāi)頭開(kāi)頭 十六進(jìn)制表示十六進(jìn)制表示 以數(shù)字以數(shù)字0和和x開(kāi)頭。開(kāi)頭。 int a,b,c; a = 10; b = 010; c = 0 x10; 長(zhǎng)整型:要在數(shù)字后加上字母長(zhǎng)整型:要在數(shù)字后加上字母L 。 long s; s=10L ; 需要注意的是:如果整型常量超過(guò)機(jī)器所需要注意的是:如果整型常量超過(guò)機(jī)器所能表示的范圍,則會(huì)發(fā)生溢出,而在

12、能表示的范圍,則會(huì)發(fā)生溢出,而在C語(yǔ)言中的語(yǔ)言中的整數(shù)溢出并不會(huì)使程序出錯(cuò),而是得到一個(gè)非整數(shù)溢出并不會(huì)使程序出錯(cuò),而是得到一個(gè)非正確的值。正確的值。 int a,b; a = 10000; b = 10000000; 變量變量b的值會(huì)被系統(tǒng)認(rèn)為是的值會(huì)被系統(tǒng)認(rèn)為是-27008。%d 表示把數(shù)據(jù)按十進(jìn)制整型輸出;表示把數(shù)據(jù)按十進(jìn)制整型輸出;%o 表示把數(shù)據(jù)按八進(jìn)制整型輸出;表示把數(shù)據(jù)按八進(jìn)制整型輸出;%x 表示把數(shù)據(jù)按十六進(jìn)制整型輸出;表示把數(shù)據(jù)按十六進(jìn)制整型輸出;%u 表示把數(shù)據(jù)參數(shù)按無(wú)符號(hào)整型輸出。表示把數(shù)據(jù)參數(shù)按無(wú)符號(hào)整型輸出。注意:注意:除了除了%d,其余的格式都將數(shù)據(jù)作為無(wú)符號(hào)數(shù)輸出

13、。,其余的格式都將數(shù)據(jù)作為無(wú)符號(hào)數(shù)輸出。printfprintf(%ld,100000L); (%ld,100000L); 正確正確printfprintf(%d,100000L); (%d,100000L); 結(jié)果結(jié)果 -31072 用用printf顯示整型數(shù)據(jù)顯示整型數(shù)據(jù) 例例2.1#include stdio.hvoid main() int x,y,z; x=129, y=0127 , z=0 x128; printf(%d,%d,%dn,x,y,z); printf(%o,%o,%on,x,y,z); printf(%x,%x,%xn,x,y,z); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:129,87

14、,296201,127,45081,57,128例例2.2#include stdio.hvoid main() int x,y,z; x=-129, y=-0127 , z=-0 x128; printf(%d,%d,%dn,x,y,z); printf(%o,%o,%on,x,y,z); printf(%x,%x,%xn,x,y,z);運(yùn)行結(jié)果:運(yùn)行結(jié)果:-129,-87,-296177577,177651,177330ff7f,ffa9,fed8說(shuō)明:說(shuō)明:-0127和和-0 x128并不是八進(jìn)制和十六進(jìn)制常量,并不是八進(jìn)制和十六進(jìn)制常量,“-”實(shí)際是實(shí)際是運(yùn)算符運(yùn)算符; 使用使用%o和

15、和%x顯示的常量和變量是無(wú)符號(hào)數(shù)。顯示的常量和變量是無(wú)符號(hào)數(shù)。 使用域?qū)捄蛯?duì)齊方式來(lái)控制顯示格式使用域?qū)捄蛯?duì)齊方式來(lái)控制顯示格式 在在%和轉(zhuǎn)換說(shuō)明符之前加整數(shù)數(shù)字,表示數(shù)據(jù)顯和轉(zhuǎn)換說(shuō)明符之前加整數(shù)數(shù)字,表示數(shù)據(jù)顯示的域?qū)捠镜挠驅(qū)? 在在%后面加符號(hào)后面加符號(hào)“-”,數(shù)據(jù)顯示時(shí)左對(duì)齊,沒(méi)有符,數(shù)據(jù)顯示時(shí)左對(duì)齊,沒(méi)有符號(hào)號(hào)“-”,數(shù)據(jù)顯示時(shí)右對(duì)齊。,數(shù)據(jù)顯示時(shí)右對(duì)齊。 printf(%-6x%-6x%-6xn,x,y,z);例例2.3 #include stdio.hvoid main() int x,y,z; x=129, y=0127 , z=0 x128; printf(%6d%6d%6dn

16、,x,y,z); printf(%6o%6o%6on,x,y,z); printf(%-6x%-6x%-6xn,x,y,z); 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 129 87 296201 127 45081 57 128 scanf是格式輸入函數(shù),其功能是按指定的格式將是格式輸入函數(shù),其功能是按指定的格式將標(biāo)準(zhǔn)輸入設(shè)備(例如鍵盤(pán))輸入的內(nèi)容送入變量中。標(biāo)準(zhǔn)輸入設(shè)備(例如鍵盤(pán))輸入的內(nèi)容送入變量中。 scanf函數(shù)的使用格式:函數(shù)的使用格式: scanf( 格式信息格式信息, 輸入項(xiàng)輸入項(xiàng)1,輸入項(xiàng),輸入項(xiàng)2,); 其中,其中,“格式信息格式信息”與與printf的用法相似,可以在的用法相似,可以在其中使

17、用其中使用%和轉(zhuǎn)換字符來(lái)指定數(shù)據(jù)的輸入方式。需要和轉(zhuǎn)換字符來(lái)指定數(shù)據(jù)的輸入方式。需要注意的是,輸入項(xiàng)必須使用地址,普通變量的地址是注意的是,輸入項(xiàng)必須使用地址,普通變量的地址是在變量名前加取地址符在變量名前加取地址符&。用用scanf輸入整型數(shù)輸入整型數(shù) 輸入整型數(shù)據(jù)的轉(zhuǎn)換字符有輸入整型數(shù)據(jù)的轉(zhuǎn)換字符有d,o,x,u%d 表示把數(shù)據(jù)按十進(jìn)制整型輸入;表示把數(shù)據(jù)按十進(jìn)制整型輸入;%o 表示把數(shù)據(jù)按八進(jìn)制整型輸入;表示把數(shù)據(jù)按八進(jìn)制整型輸入;%x 表示把數(shù)據(jù)按十六進(jìn)制整型輸入;表示把數(shù)據(jù)按十六進(jìn)制整型輸入;%u 表示把數(shù)據(jù)參數(shù)按無(wú)符號(hào)整型輸入。表示把數(shù)據(jù)參數(shù)按無(wú)符號(hào)整型輸入。 與與prin

18、tf函數(shù)類似,如果希望輸入的數(shù)據(jù)是長(zhǎng)整型,函數(shù)類似,如果希望輸入的數(shù)據(jù)是長(zhǎng)整型,需要在轉(zhuǎn)換字符前加需要在轉(zhuǎn)換字符前加l。例例2.4#include stdio.hvoid main() int x, y, z1; long z2; scanf(%d%o%x%ld,&x,&y,&z1,&z2); printf(n%d,%d,%d,%ld,x,y,z1,z2);若輸入為:若輸入為: 10 10 10 100000 (回車符)(回車符)顯示結(jié)果為顯示結(jié)果為10,8,16,100000注意注意(1) scanf讀入一組整數(shù)時(shí),讀入一組整數(shù)時(shí),scanf掃視輸入信息,跳過(guò)

19、空掃視輸入信息,跳過(guò)空格、格、tab或換行,尋找下一個(gè)輸入域。一個(gè)輸入域就是或換行,尋找下一個(gè)輸入域。一個(gè)輸入域就是一個(gè)連續(xù)的非空白字符的數(shù)字串。一個(gè)連續(xù)的非空白字符的數(shù)字串。例如,若輸入為:例如,若輸入為: 782 319 20 (回車符)(回車符)38 則輸入域有四個(gè)。則輸入域有四個(gè)。(2) 格式信息中除了有格式信息中除了有 %開(kāi)始的轉(zhuǎn)換說(shuō)明,還可以有普開(kāi)始的轉(zhuǎn)換說(shuō)明,還可以有普通字符,只是這些字符不是顯示在屏幕上的,而是要通字符,只是這些字符不是顯示在屏幕上的,而是要求使用者在輸入數(shù)據(jù)時(shí),要在相應(yīng)位置輸入相同的字求使用者在輸入數(shù)據(jù)時(shí),要在相應(yīng)位置輸入相同的字符(除了空格、符(除了空格、t

20、ab或換行符)。或換行符)。 例例2.5#include stdio.hvoid main() int x, y, z1,z2; scanf(x=%dy=%oz1=%xz2=%u,&x,&y,&z1,&z2); printf(n%d,%d,%d,%d,x,y,z1,z2);如果輸入為:如果輸入為: 10 10 10 10 (回車符)(回車符)則顯示結(jié)果為是則顯示結(jié)果為是0,484,2971,0 正確的輸入?正確的輸入?l浮點(diǎn)變量浮點(diǎn)變量 l浮點(diǎn)常量浮點(diǎn)常量 l用用printf顯示浮點(diǎn)數(shù)據(jù)顯示浮點(diǎn)數(shù)據(jù) l用用scanf輸入浮點(diǎn)輸入浮點(diǎn)數(shù)數(shù) 浮點(diǎn)變量浮點(diǎn)變量 單精度

21、浮點(diǎn)數(shù)(單精度浮點(diǎn)數(shù)(floatfloat) 雙精度浮點(diǎn)數(shù)(雙精度浮點(diǎn)數(shù)(doubledouble) long doublelong double 定義定義浮點(diǎn)變量:浮點(diǎn)變量: float a,b;float a,b; double c,d; double c,d; 單精度浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)兩者在計(jì)算機(jī)上的表單精度浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)兩者在計(jì)算機(jī)上的表示方式是完全相似的,只是所占的二進(jìn)制位數(shù)不同,示方式是完全相似的,只是所占的二進(jìn)制位數(shù)不同,單精度浮點(diǎn)數(shù)的有效數(shù)字(或稱精度)和取值范圍與單精度浮點(diǎn)數(shù)的有效數(shù)字(或稱精度)和取值范圍與雙精度浮點(diǎn)數(shù)不同。雙精度浮點(diǎn)數(shù)不同。 浮點(diǎn)數(shù)在機(jī)器中的表示一

22、般分為三部分:符號(hào)位、浮點(diǎn)數(shù)在機(jī)器中的表示一般分為三部分:符號(hào)位、階碼、尾數(shù)。階碼、尾數(shù)。 3232位浮點(diǎn)數(shù)的有效數(shù)字的個(gè)數(shù)是位浮點(diǎn)數(shù)的有效數(shù)字的個(gè)數(shù)是7 7位十進(jìn)制數(shù)字,取位十進(jìn)制數(shù)字,取值范圍為值范圍為1010-38 -38 10 103838,6464位浮點(diǎn)數(shù)的有效數(shù)字的個(gè)數(shù)位浮點(diǎn)數(shù)的有效數(shù)字的個(gè)數(shù)是是1515位十進(jìn)制數(shù)字,取值范圍為位十進(jìn)制數(shù)字,取值范圍為1010-308 -308 10 10308308。不同的。不同的機(jī)器可能會(huì)有一些微小的差別。機(jī)器可能會(huì)有一些微小的差別。 0 1 7 8 31 符符號(hào)號(hào)位位 階階碼碼 尾尾數(shù)數(shù) 浮點(diǎn)常量浮點(diǎn)常量 小數(shù)表示法小數(shù)表示法 127.3 科

23、學(xué)計(jì)數(shù)法科學(xué)計(jì)數(shù)法 1.273102 在在C語(yǔ)言中,實(shí)際上也是用這兩種方式,只不過(guò)語(yǔ)言中,實(shí)際上也是用這兩種方式,只不過(guò)102 用用E+2表示。表示。 C程序中的浮點(diǎn)常數(shù)由整數(shù)部分、小數(shù)部分、指數(shù)程序中的浮點(diǎn)常數(shù)由整數(shù)部分、小數(shù)部分、指數(shù)部分構(gòu)成。部分構(gòu)成。浮點(diǎn)常量構(gòu)成規(guī)則是:浮點(diǎn)常量構(gòu)成規(guī)則是:(1) 整數(shù)部分可以不寫(xiě),小數(shù)部分也可以不寫(xiě),但不能同整數(shù)部分可以不寫(xiě),小數(shù)部分也可以不寫(xiě),但不能同時(shí)不寫(xiě)。時(shí)不寫(xiě)。(2) 指數(shù)部分可以省略(相當(dāng)于使用小數(shù)表示法)指數(shù)部分可以省略(相當(dāng)于使用小數(shù)表示法)(3) 若有指數(shù)部分,若有指數(shù)部分,e(或(或E)兩邊都至少有一位數(shù)。)兩邊都至少有一位數(shù)。(4)

24、 指數(shù)的數(shù)字必須是整數(shù)(范圍為指數(shù)的數(shù)字必須是整數(shù)(范圍為1到到3位的整數(shù)),可位的整數(shù)),可以為負(fù)或正,正號(hào)可以省略。以為負(fù)或正,正號(hào)可以省略。例如,例如, 4.50E3、1.0、1.、.1234、123.4都是合法的浮都是合法的浮點(diǎn)常量。點(diǎn)常量。 注意:注意: 浮點(diǎn)常量在存儲(chǔ)時(shí)按浮點(diǎn)常量在存儲(chǔ)時(shí)按double類型存儲(chǔ),即類型存儲(chǔ),即占占32位(位(bit)。)。 浮點(diǎn)常量也象整型常量一樣,如果浮點(diǎn)常浮點(diǎn)常量也象整型常量一樣,如果浮點(diǎn)常量超過(guò)機(jī)器所能表示的范圍,則會(huì)發(fā)生溢出。量超過(guò)機(jī)器所能表示的范圍,則會(huì)發(fā)生溢出。 浮點(diǎn)溢出也不會(huì)使程序出錯(cuò),而是得到一浮點(diǎn)溢出也不會(huì)使程序出錯(cuò),而是得到一個(gè)非

25、正確的值個(gè)非正確的值 。%f顯示小數(shù)表示的普通浮點(diǎn)數(shù)顯示小數(shù)表示的普通浮點(diǎn)數(shù)%e顯示科學(xué)記數(shù)法表示的浮點(diǎn)數(shù)顯示科學(xué)記數(shù)法表示的浮點(diǎn)數(shù) 輸出雙精度(輸出雙精度(double)類型時(shí),還需要在轉(zhuǎn)換字符)類型時(shí),還需要在轉(zhuǎn)換字符前加上字母前加上字母l。 輸出浮點(diǎn)數(shù)時(shí)控制輸出域?qū)捄陀行唬狠敵龈↑c(diǎn)數(shù)時(shí)控制輸出域?qū)捄陀行唬?在在%與與f(或(或e)之間加上兩個(gè)數(shù)字并在兩個(gè)數(shù)字之間)之間加上兩個(gè)數(shù)字并在兩個(gè)數(shù)字之間加一個(gè)句點(diǎn)加一個(gè)句點(diǎn)“.”。 例如,例如,%10.3f表示輸出格式是域?qū)挶硎据敵龈袷绞怯驅(qū)?0,有效位,有效位3。 注意注意 : 域?qū)挼暮x、缺省有效位、與數(shù)據(jù)本身的域?qū)挼年P(guān)系域?qū)挼暮x、缺省

26、有效位、與數(shù)據(jù)本身的域?qū)挼年P(guān)系用用printf顯示浮點(diǎn)數(shù)據(jù)顯示浮點(diǎn)數(shù)據(jù) 例例2.6#include stdio.hvoid main() float x; double y; x=12.3456789;y=987654.321098; printf(n%e,%le,x,y); printf(n%f,%lf,x,y); printf(n%.3f,%.3lf,x,y); printf(n%14.3f,%14.3lf,x,y); printf(n%-14.3f,%-14.3lf,x,y); printf(n%8.3f,%8.3lf,x,y); printf(n%14f,%14lf,x,y); 例例2

27、.7void main() double x, y; scanf(%lf%le,&x,&y); printf(n%lf,%lf,x,y); printf(n%le,%le,x,y);若輸入為若輸入為123.56789 1.2345678e17則運(yùn)行結(jié)果為:則運(yùn)行結(jié)果為:123.567890,123456780000000000.0000001.234568e+3,1.234568e+17用用scanf輸入浮點(diǎn)數(shù)輸入浮點(diǎn)數(shù) l字符字符變量變量 l字符字符常量常量 l用用printf顯示顯示字符字符 l用用scanf輸入輸入字符字符l用用getchar輸入字符和用輸入字符和用put

28、char輸出字符輸出字符l字符串常量字符串常量 字符變量字符變量數(shù)據(jù)類型說(shuō)明符數(shù)據(jù)類型說(shuō)明符 char例如,例如, char aloha,beta,c; 一個(gè)字符變量能存儲(chǔ)一個(gè)字節(jié)的信息,每一個(gè)字符變量能存儲(chǔ)一個(gè)字節(jié)的信息,每個(gè)字符有固定的編碼,最常用的就是個(gè)字符有固定的編碼,最常用的就是ASCII 編編碼。碼。 標(biāo)準(zhǔn)標(biāo)準(zhǔn)ASCII編碼是把每個(gè)字符和與編碼是把每個(gè)字符和與0127的的數(shù)值聯(lián)系起來(lái),用數(shù)值聯(lián)系起來(lái),用7位二進(jìn)制表示,再將最高位位二進(jìn)制表示,再將最高位充充0,就是一個(gè)字節(jié)了。,就是一個(gè)字節(jié)了。 例如,在例如,在ASCII編碼表中,編碼表中,A用數(shù)值用數(shù)值65表示,表示,其其8位二進(jìn)

29、制表示是:位二進(jìn)制表示是: 01000001 字符常量字符常量 C C語(yǔ)言中的字符常量是用單引號(hào)將一個(gè)字符括起語(yǔ)言中的字符常量是用單引號(hào)將一個(gè)字符括起來(lái)。例如來(lái)。例如 aa、bb??梢杂米址A繛樽址兞抠x值:??梢杂米址A繛樽址兞抠x值:char alpha=a;char alpha=a;char beta=b;char beta=b;注意:注意:(1)(1)引號(hào)中的字符只能是一個(gè)字符。引號(hào)中的字符只能是一個(gè)字符。 (2)(2)不能用雙引號(hào)括起一個(gè)字符表示單個(gè)字符常量。不能用雙引號(hào)括起一個(gè)字符表示單個(gè)字符常量。(3)(3)非圖形字符,如退格,換行等,也可以表示成字符非圖形字符,如退格,換行

30、等,也可以表示成字符型常量。表示方法是使用轉(zhuǎn)義符型常量。表示方法是使用轉(zhuǎn)義符 與一些特殊字符構(gòu)成轉(zhuǎn)與一些特殊字符構(gòu)成轉(zhuǎn)義序列。例如義序列。例如nn就是一個(gè)轉(zhuǎn)義序列,表示就是一個(gè)轉(zhuǎn)義序列,表示“回車換回車換行行”。(4)(4)字符型數(shù)據(jù)可以像整型數(shù)據(jù)一樣參與四則運(yùn)算。字符型數(shù)據(jù)可以像整型數(shù)據(jù)一樣參與四則運(yùn)算。 b- a=198-97=1用用printf顯示字符顯示字符 使用轉(zhuǎn)換說(shuō)明使用轉(zhuǎn)換說(shuō)明% %c c就可以輸出單個(gè)字符了。就可以輸出單個(gè)字符了。例例2.8#include stdio.hvoid main() char c=H; char d=I; char e=!; printf(%c%c%

31、cn,c,d,e);運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:HI!用用scanf輸入字符輸入字符 %c 控制輸入單個(gè)字符??刂戚斎雴蝹€(gè)字符。 注意:注意: 盡量不要將盡量不要將%c與其它轉(zhuǎn)換說(shuō)明一起使用。與其它轉(zhuǎn)換說(shuō)明一起使用。 當(dāng)當(dāng)scanf讀入一組數(shù)據(jù)時(shí),如果不使用讀入一組數(shù)據(jù)時(shí),如果不使用%c做轉(zhuǎn)換時(shí),做轉(zhuǎn)換時(shí),scanf掃視輸入信息,跳過(guò)空格、掃視輸入信息,跳過(guò)空格、tab或換行,尋找下一或換行,尋找下一個(gè)輸入域。個(gè)輸入域。 但是若使用但是若使用%c做轉(zhuǎn)換時(shí),情況則不同,做轉(zhuǎn)換時(shí),情況則不同,scanf不會(huì)不會(huì)跳過(guò)空格、跳過(guò)空格、tab或換行,而是直接把下一個(gè)字符輸入給參或換行,而是直接把下一個(gè)字符輸

32、入給參數(shù),不論它是什么。數(shù),不論它是什么。例如,例如, scanf(%d%c,&i,&c);鍵盤(pán)輸入鍵盤(pán)輸入 29 w c的內(nèi)容不是字符的內(nèi)容不是字符w,而是空格。,而是空格。 解決的方法是在控制字符串中加空格分隔。解決的方法是在控制字符串中加空格分隔。 scanf(%d %c,&i,&c);用用getchar輸入字符和用輸入字符和用putchar輸出字符輸出字符 getchar()函數(shù)的用法函數(shù)的用法 getchargetchar()()是接收一個(gè)從標(biāo)準(zhǔn)輸入輸出設(shè)是接收一個(gè)從標(biāo)準(zhǔn)輸入輸出設(shè)備上輸入的字符。備上輸入的字符。 一般的標(biāo)準(zhǔn)輸入設(shè)備是鍵盤(pán)。一般的標(biāo)準(zhǔn)輸

33、入設(shè)備是鍵盤(pán)。該函數(shù)沒(méi)有參數(shù),函數(shù)返回的數(shù)據(jù)類型為整型,該函數(shù)沒(méi)有參數(shù),函數(shù)返回的數(shù)據(jù)類型為整型,值為字符的值為字符的ASCIIASCII碼值。碼值。 例例2.9#include stdio.hvoid main() int c; c=getchar(); printf(%c,c);putchar()函數(shù)的用法函數(shù)的用法 putchar()是向標(biāo)準(zhǔn)輸入輸出設(shè)備上輸出一個(gè)字符,是向標(biāo)準(zhǔn)輸入輸出設(shè)備上輸出一個(gè)字符,一般的標(biāo)準(zhǔn)輸出設(shè)備是屏幕終端。一般的標(biāo)準(zhǔn)輸出設(shè)備是屏幕終端。 putchar()與與getchar()不同,輸出字符做為函數(shù)的參不同,輸出字符做為函數(shù)的參數(shù),放在括號(hào)里。所以括號(hào)里的內(nèi)容

34、是不能缺省的。數(shù),放在括號(hào)里。所以括號(hào)里的內(nèi)容是不能缺省的。putchar()函數(shù)返回的數(shù)據(jù)類型為整型,值為字符的函數(shù)返回的數(shù)據(jù)類型為整型,值為字符的ASCII碼值。碼值。若想輸出字符若想輸出字符a,可以用幾種方式?,可以用幾種方式?int c ; c=a;putchar( c); 以及以及putchar(a); 和和putchar(97);對(duì)于不可打印的字符,輸出方式有兩種:對(duì)于不可打印的字符,輸出方式有兩種:putchar(007) ; 和和putchar(007);例例2.10輸入一個(gè)字符,按字符原封不動(dòng)輸出。輸入一個(gè)字符,按字符原封不動(dòng)輸出。#include stdio.hvoid m

35、ain() int c,i; c=getchar(); i=putchar(c);或者或者#include stdio.hvoid main() putchar(getchar() */ 什么叫什么叫“系統(tǒng)的仿效返回系統(tǒng)的仿效返回 ”?字符串常量字符串常量 用雙引號(hào)括起來(lái)的字符序列是字符串常量。用雙引號(hào)括起來(lái)的字符序列是字符串常量。 how are you 1234.5 字符串的存儲(chǔ)與字符不同。字符串的存儲(chǔ)與字符不同。C編譯程序在存儲(chǔ)字符編譯程序在存儲(chǔ)字符串常量時(shí)自動(dòng)采用串常量時(shí)自動(dòng)采用0作為字符串結(jié)束標(biāo)志。作為字符串結(jié)束標(biāo)志。 how實(shí)際上所占的字節(jié)數(shù)是實(shí)際上所占的字節(jié)數(shù)是4。 “a”與與a

36、是完全不同的,前者是字符串常量,占的是完全不同的,前者是字符串常量,占的字節(jié)數(shù)是字節(jié)數(shù)是2,后者是字符常量,占的字節(jié)數(shù)是,后者是字符常量,占的字節(jié)數(shù)是1。 字符串常量的輸出字符串常量的輸出 printf(how are you); printf(%s,how are you);l表達(dá)式的概念表達(dá)式的概念 表達(dá)式是用運(yùn)算符與圓括號(hào)將操作數(shù)連接起來(lái)所表達(dá)式是用運(yùn)算符與圓括號(hào)將操作數(shù)連接起來(lái)所構(gòu)成的式子。構(gòu)成的式子。C語(yǔ)言的操作數(shù)包括常量、變量、函數(shù)值語(yǔ)言的操作數(shù)包括常量、變量、函數(shù)值等。等。 根據(jù)表達(dá)式進(jìn)行運(yùn)算,得到的數(shù)值即為表達(dá)式的解。根據(jù)表達(dá)式進(jìn)行運(yùn)算,得到的數(shù)值即為表達(dá)式的解。 l表達(dá)式與簡(jiǎn)

37、單語(yǔ)句表達(dá)式與簡(jiǎn)單語(yǔ)句 在在C語(yǔ)言中,在一個(gè)表達(dá)式的后面加上分號(hào)語(yǔ)言中,在一個(gè)表達(dá)式的后面加上分號(hào)“;”就構(gòu)成了簡(jiǎn)單語(yǔ)句。就構(gòu)成了簡(jiǎn)單語(yǔ)句。 有意義的簡(jiǎn)單語(yǔ)句有意義的簡(jiǎn)單語(yǔ)句 無(wú)無(wú)意義的簡(jiǎn)單語(yǔ)句意義的簡(jiǎn)單語(yǔ)句 l種類及運(yùn)算種類及運(yùn)算 + - * / %注意注意:v 兩個(gè)整數(shù)相除,結(jié)果仍為整數(shù),商向下取整。兩個(gè)整數(shù)相除,結(jié)果仍為整數(shù),商向下取整。v 取模運(yùn)算符取模運(yùn)算符%實(shí)際上是數(shù)學(xué)運(yùn)算的求余數(shù)運(yùn)算,實(shí)際上是數(shù)學(xué)運(yùn)算的求余數(shù)運(yùn)算,其兩個(gè)操作對(duì)象都必須是整數(shù)其兩個(gè)操作對(duì)象都必須是整數(shù) 。v 減法運(yùn)算符還可以用做單目運(yùn)算符,是取負(fù)減法運(yùn)算符還可以用做單目運(yùn)算符,是取負(fù)v運(yùn)算。其余操作符均為雙目運(yùn)算符

38、。運(yùn)算。其余操作符均為雙目運(yùn)算符。 l算術(shù)表達(dá)式及算術(shù)運(yùn)算符的優(yōu)先級(jí)算術(shù)表達(dá)式及算術(shù)運(yùn)算符的優(yōu)先級(jí) 算術(shù)表達(dá)式就是用算術(shù)運(yùn)算符和圓括號(hào)將算術(shù)表達(dá)式就是用算術(shù)運(yùn)算符和圓括號(hào)將操作數(shù)連接起來(lái)的式子。算術(shù)表達(dá)式的解就是操作數(shù)連接起來(lái)的式子。算術(shù)表達(dá)式的解就是經(jīng)過(guò)算術(shù)運(yùn)算得到的表達(dá)式的值。經(jīng)過(guò)算術(shù)運(yùn)算得到的表達(dá)式的值。 算術(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ù)和圓括號(hào)的優(yōu)先級(jí)最高。同。函數(shù)和圓括號(hào)的優(yōu)先級(jí)最高。 注意:注意:v 算術(shù)表達(dá)式應(yīng)能正確的表達(dá)數(shù)學(xué)公式。算術(shù)表達(dá)式應(yīng)能正確的表

39、達(dá)數(shù)學(xué)公式。 例如:數(shù)學(xué)表達(dá)式是例如:數(shù)學(xué)表達(dá)式是 3+3+x x 2a 2a 相應(yīng)的相應(yīng)的C C語(yǔ)言表達(dá)式應(yīng)該是什么呢?語(yǔ)言表達(dá)式應(yīng)該是什么呢?v 算術(shù)表達(dá)式的結(jié)果應(yīng)該不超過(guò)其所能表示的算術(shù)表達(dá)式的結(jié)果應(yīng)該不超過(guò)其所能表示的 數(shù)的范圍。例如,最大的整型數(shù)是數(shù)的范圍。例如,最大的整型數(shù)是3276732767, 那么,那么,32767+332767+3就不會(huì)是正確的結(jié)果。而就不會(huì)是正確的結(jié)果。而 3276732767L+3L+3的結(jié)果是正確的,因?yàn)榈慕Y(jié)果是正確的,因?yàn)?276732767L L是長(zhǎng)是長(zhǎng) 整型數(shù)。整型數(shù)。l算術(shù)運(yùn)算符的結(jié)合性算術(shù)運(yùn)算符的結(jié)合性 運(yùn)算符的結(jié)合性是指如果一個(gè)操作數(shù)左邊和

40、運(yùn)算符的結(jié)合性是指如果一個(gè)操作數(shù)左邊和右邊的兩個(gè)運(yùn)算符的優(yōu)先級(jí)相同,應(yīng)該優(yōu)先計(jì)算右邊的兩個(gè)運(yùn)算符的優(yōu)先級(jí)相同,應(yīng)該優(yōu)先計(jì)算的操作符。的操作符。 例如:例如:a+b-c 操作數(shù)操作數(shù)b左右的運(yùn)算符左右的運(yùn)算符+和和-的優(yōu)先級(jí)相同,的優(yōu)先級(jí)相同,那么,是先計(jì)算那么,是先計(jì)算b-c,還是先計(jì)算,還是先計(jì)算a+b呢?呢?C語(yǔ)言語(yǔ)言規(guī)定雙目算術(shù)運(yùn)算符的結(jié)合性是自左至右,也就規(guī)定雙目算術(shù)運(yùn)算符的結(jié)合性是自左至右,也就是是b先與左邊先與左邊a結(jié)合,再與右邊結(jié)合,再與右邊c結(jié)合。所以是先結(jié)合。所以是先計(jì)算計(jì)算a+b,然后用,然后用a+b的結(jié)果減的結(jié)果減c。 雙目運(yùn)算符的結(jié)合性與數(shù)學(xué)運(yùn)算并無(wú)不同。雙目運(yùn)算符的結(jié)

41、合性與數(shù)學(xué)運(yùn)算并無(wú)不同。l普通賦值運(yùn)算符普通賦值運(yùn)算符 賦值表達(dá)式的一般形式是:賦值表達(dá)式的一般形式是: 變量名變量名= =表達(dá)式表達(dá)式 賦值語(yǔ)句的一般形式是:賦值語(yǔ)句的一般形式是: 變量名變量名= =表達(dá)式;表達(dá)式; 賦值運(yùn)算符的優(yōu)先級(jí)小于算術(shù)運(yùn)算符。賦值運(yùn)算符的優(yōu)先級(jí)小于算術(shù)運(yùn)算符。 賦值運(yùn)算符的結(jié)合性是自右至左,賦值運(yùn)算符的結(jié)合性是自右至左, 以以a=b=2為例為例 l復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符 把賦值運(yùn)算符與算術(shù)、位邏輯、移位運(yùn)算把賦值運(yùn)算符與算術(shù)、位邏輯、移位運(yùn)算符放在一起,就構(gòu)成復(fù)合賦值運(yùn)算符。符放在一起,就構(gòu)成復(fù)合賦值運(yùn)算符。 復(fù)合算術(shù)賦值運(yùn)算符有復(fù)合算術(shù)賦值運(yùn)算符有5個(gè)個(gè)+=

42、 、- =、*=、/=、%=。 還有與移位和位邏輯結(jié)合的復(fù)合賦值運(yùn)算符還有與移位和位邏輯結(jié)合的復(fù)合賦值運(yùn)算符5個(gè)(個(gè)(=、&=、=、|=)。)。 復(fù)合賦值運(yùn)算符的使用規(guī)則是:復(fù)合賦值運(yùn)算符的使用規(guī)則是:Xop=YXop=Y與與X=XopYX=XopY等價(jià)。等價(jià)。 l 自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換 l 強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換 l 賦值表達(dá)式的類型轉(zhuǎn)換賦值表達(dá)式的類型轉(zhuǎn)換 自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換 所謂所謂“自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換”就是系統(tǒng)根據(jù)規(guī)則自動(dòng)就是系統(tǒng)根據(jù)規(guī)則自動(dòng)將將兩個(gè)不同數(shù)據(jù)類型的運(yùn)算對(duì)象轉(zhuǎn)換成同一種數(shù)兩個(gè)不同數(shù)據(jù)類型的運(yùn)算對(duì)象轉(zhuǎn)換成同一種數(shù)據(jù)類型的過(guò)程。而且,對(duì)某些數(shù)據(jù)類型,即使據(jù)類型的過(guò)程。而且,對(duì)某些數(shù)

43、據(jù)類型,即使是兩個(gè)運(yùn)算對(duì)象的數(shù)據(jù)類型完全相同,也要做是兩個(gè)運(yùn)算對(duì)象的數(shù)據(jù)類型完全相同,也要做轉(zhuǎn)換,例如轉(zhuǎn)換,例如float。float double 高 long unsigned char 、short int 低 強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換 在在C語(yǔ)言中,允許程序員根據(jù)自己的意愿將語(yǔ)言中,允許程序員根據(jù)自己的意愿將一種數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換成另一種數(shù)據(jù)類型。一種數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換成另一種數(shù)據(jù)類型。強(qiáng)制轉(zhuǎn)換的格式為:強(qiáng)制轉(zhuǎn)換的格式為: (數(shù)據(jù)類型名數(shù)據(jù)類型名) 操作對(duì)象操作對(duì)象注意注意,強(qiáng)制轉(zhuǎn)換并不改變操作對(duì)象的數(shù)據(jù)類型,強(qiáng)制轉(zhuǎn)換并不改變操作對(duì)象的數(shù)據(jù)類型和數(shù)值。例如,和數(shù)值。例如,(int)f的確切含義是將

44、的確切含義是將f轉(zhuǎn)換成轉(zhuǎn)換成為整型值參與運(yùn)算,而為整型值參與運(yùn)算,而f本身的數(shù)據(jù)類型和數(shù)本身的數(shù)據(jù)類型和數(shù)值都沒(méi)有任何改變。值都沒(méi)有任何改變。賦值表達(dá)式的類型轉(zhuǎn)換賦值表達(dá)式的類型轉(zhuǎn)換 當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右邊的表達(dá)式的數(shù)據(jù)類型相同時(shí),不需要進(jìn)行數(shù)邊的表達(dá)式的數(shù)據(jù)類型相同時(shí),不需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。據(jù)類型的轉(zhuǎn)換。 當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右邊的表達(dá)式的數(shù)據(jù)類型不相同時(shí),系統(tǒng)負(fù)責(zé)將邊的表達(dá)式的數(shù)據(jù)類型不相同時(shí),系統(tǒng)負(fù)責(zé)將右邊的數(shù)據(jù)類型轉(zhuǎn)換成左邊的數(shù)據(jù)類型。此時(shí),右邊的數(shù)據(jù)類型轉(zhuǎn)換成左邊的數(shù)據(jù)類型。此時(shí)

45、,會(huì)有兩種情況產(chǎn)生,一種是轉(zhuǎn)換以后會(huì)丟失數(shù)會(huì)有兩種情況產(chǎn)生,一種是轉(zhuǎn)換以后會(huì)丟失數(shù)據(jù),另一種是轉(zhuǎn)換以后不會(huì)丟失數(shù)據(jù)。這與賦據(jù),另一種是轉(zhuǎn)換以后不會(huì)丟失數(shù)據(jù)。這與賦值號(hào)兩邊的表達(dá)式的數(shù)據(jù)類型所占的字節(jié)數(shù)及值號(hào)兩邊的表達(dá)式的數(shù)據(jù)類型所占的字節(jié)數(shù)及存儲(chǔ)表示方式有關(guān)。存儲(chǔ)表示方式有關(guān)。(詳細(xì)內(nèi)容自學(xué))詳細(xì)內(nèi)容自學(xué))例例3.1#include stdio.hvoid main() int c; /* char c;*/ c=B; printf(c=%c,c+a-A); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:c=b例例3.2#include stdio.hvoid main() char c; int i=0 x3241;

46、 printf(i=%cn,i); c=i; printf(c=%dn,c); printf(i=%dn,i); 運(yùn)行結(jié)果運(yùn)行結(jié)果i=Ac=65i=12865l 所謂關(guān)系運(yùn)算,實(shí)際上就是比較兩個(gè)數(shù)值所謂關(guān)系運(yùn)算,實(shí)際上就是比較兩個(gè)數(shù)值的大小。那么,比較兩個(gè)數(shù)值的大小的運(yùn)算符的大小。那么,比較兩個(gè)數(shù)值的大小的運(yùn)算符就是關(guān)系運(yùn)算符。就是關(guān)系運(yùn)算符。 關(guān)系運(yùn)算符有六個(gè)關(guān)系運(yùn)算符有六個(gè)、=、z; j=xyz; printf(%2d,%2d,i,j); printf(%2d,zy=3); printf(%2d,y+z=z+1);運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:1,0,0,0,1 如果將如果將“與、或、非與、或、

47、非”運(yùn)算應(yīng)用于邏輯值運(yùn)算應(yīng)用于邏輯值(邏輯真和邏輯假)則稱為邏輯運(yùn)算。(邏輯真和邏輯假)則稱為邏輯運(yùn)算。 C語(yǔ)言中的邏輯運(yùn)算符有三個(gè):語(yǔ)言中的邏輯運(yùn)算符有三個(gè): 邏輯與邏輯與 &、邏輯或、邏輯或 | 和邏輯非和邏輯非 ! 其中邏輯與和邏輯或是雙目運(yùn)算符,而邏輯其中邏輯與和邏輯或是雙目運(yùn)算符,而邏輯非是單目運(yùn)算符。非是單目運(yùn)算符。A B !A !B A&B A|B 邏輯真 邏輯真 邏輯假 邏輯假 邏輯真 邏輯真 邏輯真 邏輯假 邏輯假 邏輯真 邏輯假 邏輯真 邏輯假 邏輯真 邏輯真 邏輯假 邏輯假 邏輯真 邏輯假 邏輯假 邏輯真 邏輯真 邏輯假 邏輯假 邏輯運(yùn)算的規(guī)則與二進(jìn)制的位

48、邏輯是相邏輯運(yùn)算的規(guī)則與二進(jìn)制的位邏輯是相似的。似的。邏輯運(yùn)算的規(guī)則下表:邏輯運(yùn)算的規(guī)則下表: C語(yǔ)言系統(tǒng)對(duì)任何非語(yǔ)言系統(tǒng)對(duì)任何非0值都認(rèn)定為是邏輯值都認(rèn)定為是邏輯真,而將真,而將0認(rèn)定為邏輯假。認(rèn)定為邏輯假。 如果一個(gè)表達(dá)式參與邏輯運(yùn)算,只要這個(gè)如果一個(gè)表達(dá)式參與邏輯運(yùn)算,只要這個(gè)表達(dá)式的解為非表達(dá)式的解為非0,則系統(tǒng)就認(rèn)為這個(gè)表達(dá)式,則系統(tǒng)就認(rèn)為這個(gè)表達(dá)式的結(jié)果是邏輯真。的結(jié)果是邏輯真。 但是要注意,系統(tǒng)邏輯運(yùn)算的結(jié)果仍然只但是要注意,系統(tǒng)邏輯運(yùn)算的結(jié)果仍然只有兩個(gè):有兩個(gè):1(邏輯真)和(邏輯真)和0(邏輯假)。(邏輯假)。 邏輯運(yùn)算符經(jīng)常與關(guān)系運(yùn)算符一起使用。邏輯運(yùn)算符經(jīng)常與關(guān)系運(yùn)算符

49、一起使用。 C C語(yǔ)言表達(dá)式語(yǔ)言表達(dá)式( (x=10)&(x=10)&(x=100)的數(shù)學(xué)含的數(shù)學(xué)含義是:義是:1010 x x100100 邏輯運(yùn)算符的優(yōu)先級(jí)邏輯運(yùn)算符的優(yōu)先級(jí) !& | 高高 低低 !的優(yōu)先級(jí)高于算術(shù)運(yùn)算符(當(dāng)然也高于!的優(yōu)先級(jí)高于算術(shù)運(yùn)算符(當(dāng)然也高于關(guān)系運(yùn)算符)和賦值運(yùn)算符關(guān)系運(yùn)算符)和賦值運(yùn)算符 &和和|的優(yōu)先級(jí)高于賦值運(yùn)算符,但是低的優(yōu)先級(jí)高于賦值運(yùn)算符,但是低于算術(shù)運(yùn)算符和關(guān)系運(yùn)算符。于算術(shù)運(yùn)算符和關(guān)系運(yùn)算符。 !單目運(yùn)算符,其結(jié)合性是自右至左;!單目運(yùn)算符,其結(jié)合性是自右至左;&和和|的結(jié)合性是自左至右。的結(jié)合性是自左至右

50、。 計(jì)算表達(dá)式計(jì)算表達(dá)式79-!079-!0的值的值 注意注意: 在在C C語(yǔ)言中,如果邏輯運(yùn)算符的左操作數(shù)語(yǔ)言中,如果邏輯運(yùn)算符的左操作數(shù)已經(jīng)能夠確定表達(dá)式的解,則系統(tǒng)不再計(jì)算右已經(jīng)能夠確定表達(dá)式的解,則系統(tǒng)不再計(jì)算右操作數(shù)的值。操作數(shù)的值。 x=1 & y=0 x=1 & y=0 若若x x此時(shí)不為此時(shí)不為1 1,在檢測(cè),在檢測(cè)x=1x=1以后,就不以后,就不會(huì)再檢測(cè)會(huì)再檢測(cè)y=0y=0。因?yàn)?。因?yàn)閤=1x=1的結(jié)果是邏輯假,邏的結(jié)果是邏輯假,邏輯假與任何數(shù)進(jìn)行邏輯與操作結(jié)果都會(huì)是邏輯輯假與任何數(shù)進(jìn)行邏輯與操作結(jié)果都會(huì)是邏輯假。假。 x=y |x=0 若若x=y成立,則表達(dá)

51、式的值為真,不需要繼成立,則表達(dá)式的值為真,不需要繼續(xù)做續(xù)做x=0了。但是,若了。但是,若x=y不成立,由于不成立,由于x=0是是個(gè)賦值表達(dá)式,表達(dá)式的結(jié)果很可能是錯(cuò)誤的。個(gè)賦值表達(dá)式,表達(dá)式的結(jié)果很可能是錯(cuò)誤的。假設(shè)該表達(dá)式計(jì)算以前,假設(shè)該表達(dá)式計(jì)算以前,x值為,值為,y的值為,的值為,x=y的計(jì)算結(jié)果是,這時(shí)需要執(zhí)行賦值的計(jì)算結(jié)果是,這時(shí)需要執(zhí)行賦值x=0,表達(dá)式的結(jié)果仍然是,而實(shí)際上這時(shí)的表達(dá)式的結(jié)果仍然是,而實(shí)際上這時(shí)的x和和y的值均為,又滿足了的值均為,又滿足了x=y,這不是產(chǎn)生了矛,這不是產(chǎn)生了矛盾嗎?盾嗎?不要在一般的表達(dá)式中夾雜賦值運(yùn)算不要在一般的表達(dá)式中夾雜賦值運(yùn)算 +和和-

52、。 這兩個(gè)運(yùn)算符都是單目運(yùn)算符,其功能分別這兩個(gè)運(yùn)算符都是單目運(yùn)算符,其功能分別是將變量自身的內(nèi)容增是將變量自身的內(nèi)容增1和減和減1。 +i和和-i是前綴表示法,是前綴表示法,i+和和i-是后綴表是后綴表示法。如果直接在示法。如果直接在+i和和i+的后面加上分號(hào)構(gòu)的后面加上分號(hào)構(gòu)成成C的執(zhí)行語(yǔ)句,即的執(zhí)行語(yǔ)句,即+i;和和i+;前綴與前綴與后綴并無(wú)區(qū)別(減符號(hào)也一樣)。但是,將后綴并無(wú)區(qū)別(減符號(hào)也一樣)。但是,將它們用在表達(dá)式中則前綴與后綴是有區(qū)別的。它們用在表達(dá)式中則前綴與后綴是有區(qū)別的。 前綴表示法是先將前綴表示法是先將i值增值增/減減1,再在表達(dá),再在表達(dá)式中使用;而后綴表示法是先在表

53、達(dá)式中使式中使用;而后綴表示法是先在表達(dá)式中使用用i的值,再將的值,再將i值增值增/減減1。例如:例如: i=3; i=3; j=i+; j=+i; 結(jié)果結(jié)果 j的內(nèi)容為的內(nèi)容為3 j的內(nèi)容為的內(nèi)容為4 i的內(nèi)容為的內(nèi)容為4 i的內(nèi)容為的內(nèi)容為4 注意:注意:v 增增1/1/減減1 1運(yùn)算符的操作對(duì)象是一個(gè)變量運(yùn)算符的操作對(duì)象是一個(gè)變量 2+2+、-2-2以及以及( (x/y)+x/y)+均為非法均為非法v 增增1/1/減減1 1運(yùn)算符的優(yōu)先級(jí)高于算術(shù)運(yùn)算符,運(yùn)算符的優(yōu)先級(jí)高于算術(shù)運(yùn)算符, 與單目運(yùn)算符與單目運(yùn)算符- -(取負(fù))、?。ㄟ壿嫹牵┑模ㄈ∝?fù))、?。ㄟ壿嫹牵┑?優(yōu)先級(jí)相同,結(jié)合方向自右

54、至左。優(yōu)先級(jí)相同,結(jié)合方向自右至左。 例如表達(dá)式例如表達(dá)式 -i+ -i+ 等價(jià)于等價(jià)于 -(-(i+)i+)v副作用:副作用:printf(“ %d ,%d”,i,i+);在不同在不同 的編譯環(huán)境下結(jié)果有可能不同。的編譯環(huán)境下結(jié)果有可能不同。v盡量不要在一般的表達(dá)式中將增盡量不要在一般的表達(dá)式中將增1/1/減減1 1運(yùn)算運(yùn)算 符與其它運(yùn)算符混合使用。符與其它運(yùn)算符混合使用。 & | 按位取反按位取反 左移左移 右移右移 按位與按位與 按位或按位或 按位異或按位異或 操作數(shù)在實(shí)現(xiàn)位操作時(shí)按二進(jìn)制進(jìn)行運(yùn)算,操作數(shù)在實(shí)現(xiàn)位操作時(shí)按二進(jìn)制進(jìn)行運(yùn)算,7 7一般應(yīng)為無(wú)符號(hào)型整數(shù)。一般應(yīng)為無(wú)符號(hào)型

55、整數(shù)。 按位與按位與& 按位與的運(yùn)算規(guī)則是:按位與的運(yùn)算規(guī)則是:0&0=0 0&1=0 1&0=0 1&1=1例如:例如:char w1,w2,w3;w1=10; w2=8; w3= w1&w2 ; w3的內(nèi)容可以通過(guò)下式運(yùn)算:的內(nèi)容可以通過(guò)下式運(yùn)算: 00001010 00001000 (按位與(按位與&) 00001000 (結(jié)果)(結(jié)果) &運(yùn)算經(jīng)常用于把特定位清零(屏蔽)。運(yùn)算經(jīng)常用于把特定位清零(屏蔽)。例如,例如, a的值為的值為11011010,b的值為的值為11110000, a&b 11011010 & 11110000 11010000 相當(dāng)于把相當(dāng)于把a(bǔ)的低的低4位屏蔽,高位屏蔽,高4位不變。位不變。 按位或按位或 |按位或的運(yùn)算規(guī)則是:按位或的運(yùn)算規(guī)則是:0 | 0=0 0 | 1=1 1 | 0=1 1 | 1=1例如

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論