第三章 C語(yǔ)言第三章_第1頁(yè)
第三章 C語(yǔ)言第三章_第2頁(yè)
第三章 C語(yǔ)言第三章_第3頁(yè)
第三章 C語(yǔ)言第三章_第4頁(yè)
第三章 C語(yǔ)言第三章_第5頁(yè)
已閱讀5頁(yè),還剩68頁(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、語(yǔ)言程序設(shè)計(jì)第三章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式 一、c語(yǔ)言的數(shù)據(jù)類型 二、c語(yǔ)言的變量和常量2.1 常量和符號(hào)常量1 1、常量、常量: : 在程序運(yùn)行過(guò)程中,其值不能被改在程序運(yùn)行過(guò)程中,其值不能被改變的量。變的量。 每種數(shù)據(jù)類型都有常量,也都有變量。如整型每種數(shù)據(jù)類型都有常量,也都有變量。如整型常量、浮點(diǎn)型常量常量、浮點(diǎn)型常量. .例如:例如: 1212、4 4 、-67 -67 或或 3.143.14 5.6 5.6 或或 a a 、dd 從上可以看出常量可以是不同類型的從上可以看出常量可以是不同類型的. .2 2、常量分為兩種直接常量和符號(hào)常量。、常量分為兩種直接常量和符號(hào)常量。 直接常量直

2、將數(shù)值直接使用,如:直接常量直將數(shù)值直接使用,如:a=ba=b* *1010; ;當(dāng)用一個(gè)標(biāo)志符代表一個(gè)常量時(shí),稱為符號(hào)常量當(dāng)用一個(gè)標(biāo)志符代表一個(gè)常量時(shí),稱為符號(hào)常量. . 2.1 常量和符號(hào)常量1 1、常量、常量: : 在程序運(yùn)行過(guò)程中,其值不能被改在程序運(yùn)行過(guò)程中,其值不能被改變的量。變的量。 每種數(shù)據(jù)類型都有常量,也都有變量。如整型每種數(shù)據(jù)類型都有常量,也都有變量。如整型常量、浮點(diǎn)型常量常量、浮點(diǎn)型常量. .例如:例如: 1212、4 4 、-67 -67 或或 3.143.14 5.6 5.6 或或 a a 、dd 從上可以看出常量可以是不同類型的從上可以看出常量可以是不同類型的. .

3、2 2、常量分為兩種直接常量和符號(hào)常量。、常量分為兩種直接常量和符號(hào)常量。 直接常量直將數(shù)值直接使用,如:直接常量直將數(shù)值直接使用,如:a=ba=b* *1010; ;當(dāng)用一個(gè)標(biāo)志符代表一個(gè)常量時(shí),稱為符號(hào)常量當(dāng)用一個(gè)標(biāo)志符代表一個(gè)常量時(shí),稱為符號(hào)常量. . 上例中的上例中的price price 就稱為符號(hào)常量;凡在程序中出現(xiàn)的就稱為符號(hào)常量;凡在程序中出現(xiàn)的price price 都代表都代表3030。 price=price+5;price=price+5; /*正確否*/一般情況下,符號(hào)常量名用大寫(xiě)、變量用小寫(xiě)。一般情況下,符號(hào)常量名用大寫(xiě)、變量用小寫(xiě)。 例例: :#define pr

4、ice 30#define price 30main()main() int num, total; int num, total; num=10;num=10; total=num total=num* * price; price; printf(total=%d,total); printf(total=%d,total); 3 3、符號(hào)常量的聲明和使用、符號(hào)常量的聲明和使用一般放在程序的前端,與一般放在程序的前端,與#include #include 在一塊:在一塊:#define #define 符號(hào)常量名符號(hào)常量名 值值如:如:#define zero 0#define zero

5、0好處:好處: 含義清楚含義清楚 (#define second 60) (#define second 60) 一改全改一改全改 (#define pi 3.14)(#define pi 3.14)2.2 變量 在程序運(yùn)行過(guò)程中,在程序運(yùn)行過(guò)程中,其值可以改變其值可以改變的量稱為變的量稱為變量。量。 一個(gè)變量應(yīng)該有一個(gè)變量名,并且一個(gè)變量應(yīng)該有一個(gè)變量名,并且在內(nèi)存中占在內(nèi)存中占據(jù)一定的的存儲(chǔ)單元據(jù)一定的的存儲(chǔ)單元用來(lái)存放變量的值。用來(lái)存放變量的值。 注意:變量名與變量值的區(qū)別注意:變量名與變量值的區(qū)別 在在c c語(yǔ)言中,要求對(duì)所有用到的變量作強(qiáng)制定義,語(yǔ)言中,要求對(duì)所有用到的變量作強(qiáng)制定義

6、,即即“先定義、后使用先定義、后使用”。 因?yàn)椋阂驗(yàn)椋?1 1、 編譯程序不能翻譯未定義變量。編譯程序不能翻譯未定義變量。 2 2、 編譯程序在編譯時(shí)根據(jù)變量類型確定存儲(chǔ)編譯程序在編譯時(shí)根據(jù)變量類型確定存儲(chǔ)單元的數(shù)量并分配空間單元的數(shù)量并分配空間 3 3、編譯程序在編譯時(shí)根據(jù)變量類型進(jìn)行語(yǔ)法檢查。、編譯程序在編譯時(shí)根據(jù)變量類型進(jìn)行語(yǔ)法檢查。例,整型變量例,整型變量a a、b b可以進(jìn)行可以進(jìn)行“求余求余”運(yùn)算運(yùn)算 a % ba % b;若把若把a(bǔ) a、b b定義為實(shí)數(shù),則上述運(yùn)算非法。定義為實(shí)數(shù),則上述運(yùn)算非法。main() int i, studentno; i=5; studentno=5

7、; /*錯(cuò)在哪里錯(cuò)在哪里*/ j=3; /*錯(cuò)在哪里錯(cuò)在哪里*/ 一條變量說(shuō)明語(yǔ)句由數(shù)據(jù)類型和其后的一個(gè)或多一條變量說(shuō)明語(yǔ)句由數(shù)據(jù)類型和其后的一個(gè)或多個(gè)變量名組成。變量說(shuō)明的形式如下個(gè)變量名組成。變量說(shuō)明的形式如下: : 類型類型 ; 這里類型是指這里類型是指turbo c2.0turbo c2.0的有效數(shù)據(jù)類型。的有效數(shù)據(jù)類型。 變量表是一個(gè)或多個(gè)變量表是一個(gè)或多個(gè), , 每個(gè)標(biāo)識(shí)符之間每個(gè)標(biāo)識(shí)符之間用用,分隔。分隔。 例如例如: : int iint i int i, j, k; int i, j, k; char c, str5, char c, str5, * *p;p; 所謂所謂標(biāo)識(shí)

8、符標(biāo)識(shí)符是指常量、變量、語(yǔ)句標(biāo)號(hào)以及用戶是指常量、變量、語(yǔ)句標(biāo)號(hào)以及用戶自定義函數(shù)的名稱。自定義函數(shù)的名稱。 turbo c 2.0turbo c 2.0標(biāo)識(shí)符的定義十分靈活。作為標(biāo)識(shí)符標(biāo)識(shí)符的定義十分靈活。作為標(biāo)識(shí)符必須滿足以下規(guī)則必須滿足以下規(guī)則: : 1.1.所有標(biāo)識(shí)符必須由一個(gè)字母所有標(biāo)識(shí)符必須由一個(gè)字母(az, az)(az, az)或下或下劃線劃線(_)(_)開(kāi)頭開(kāi)頭; ; 2. 2.標(biāo)識(shí)符的其它部分可以用字母、下劃線或數(shù)字標(biāo)識(shí)符的其它部分可以用字母、下劃線或數(shù)字(09)(09)組成組成; ; 3. 3.大小寫(xiě)字母表示不同意義大小寫(xiě)字母表示不同意義, , 即代表不同的標(biāo)識(shí)即代表不同

9、的標(biāo)識(shí)符符; ; 4. 4.標(biāo)識(shí)符只有前標(biāo)識(shí)符只有前3232個(gè)字符有效個(gè)字符有效(turbo c)(turbo c) 5. 5.標(biāo)識(shí)符不能使用標(biāo)識(shí)符不能使用turbo c2.0turbo c2.0的關(guān)鍵字。的關(guān)鍵字。2.3標(biāo)識(shí)符下面舉出幾個(gè)正確和不正確的標(biāo)識(shí)符下面舉出幾個(gè)正確和不正確的標(biāo)識(shí)符: :正確正確-不正確不正確smartsmart-5smart5smart_decision_decision-bomb? bomb? key_boardkey_board-key.board key.board floatfloat-floatfloat三、整型數(shù)據(jù) 整型常量即整常數(shù)按不同的進(jìn)制區(qū)分整型常

10、量即整常數(shù)按不同的進(jìn)制區(qū)分, , 整型常數(shù)整型常數(shù)有三種表示方法有三種表示方法: : 十進(jìn)制數(shù)十進(jìn)制數(shù): : 以非以非0 0開(kāi)始的數(shù)開(kāi)始的數(shù) 如如:220, -560, 45900:220, -560, 45900八進(jìn)制數(shù)八進(jìn)制數(shù): : 以以0 0開(kāi)始的數(shù)開(kāi)始的數(shù) 如如:06; 0106, 05788:06; 0106, 05788十六進(jìn)制數(shù)十六進(jìn)制數(shù): : 以以0x0x或或0 x0 x開(kāi)始的數(shù)開(kāi)始的數(shù) 如如:0x0d, 0xff, 0 x4e :0x0d, 0xff, 0 x4e 3.1.整型常量 main() int i; i=11; printf(“i=%dn”,i); i=011; p

11、rintf(“i=%dn”,i); i=0 x11; printf(“i=%dn”,i); i=0x11; printf(“i=%dn”,i);程序的輸出結(jié)果是多少?程序的輸出結(jié)果是多少?注意:注意:可在整型可在整型常數(shù)常數(shù)后后添加一個(gè)添加一個(gè)ll或或ll字母字母表示該數(shù)為表示該數(shù)為長(zhǎng)整型數(shù)長(zhǎng)整型數(shù), ,如如22l, 0773l, 0xae4l22l, 0773l, 0xae4l。另外另外, , 所有整數(shù)的缺省類型是所有整數(shù)的缺省類型是intint,可在整型常數(shù),可在整型常數(shù)后添加一個(gè)后添加一個(gè)ll或或ll字母表示該數(shù)為長(zhǎng)整型數(shù)字母表示該數(shù)為長(zhǎng)整型數(shù), , 如如 22l,0773l, 0xae

12、4l22l,0773l, 0xae4l。若加上若加上一個(gè)一個(gè)uu或或uu字母表示該數(shù)為無(wú)符號(hào)字母表示該數(shù)為無(wú)符號(hào)整型數(shù),整型數(shù),如如27u, 0400u, 0 xb8000000u27u, 0400u, 0 xb8000000u。若加上一個(gè)若加上一個(gè)ulul或或ulul字母表示該數(shù)為無(wú)符號(hào)長(zhǎng)整字母表示該數(shù)為無(wú)符號(hào)長(zhǎng)整型型數(shù),如數(shù),如 27ul, 0400ul, 0 xb8000000ul27ul, 0400ul, 0 xb8000000ul。當(dāng)整數(shù)的值超出當(dāng)整數(shù)的值超出intint類型所能表示的范圍時(shí)稱為整類型所能表示的范圍時(shí)稱為整數(shù)數(shù)溢出溢出。 1 1整型變量的分類整型變量的分類: :加上不

13、同的修飾加上不同的修飾符符, , 整型變整型變量有以下幾種類型量有以下幾種類型; ; c c語(yǔ)言標(biāo)準(zhǔn)沒(méi)有規(guī)定整型變量在計(jì)算機(jī)內(nèi)存中所語(yǔ)言標(biāo)準(zhǔn)沒(méi)有規(guī)定整型變量在計(jì)算機(jī)內(nèi)存中所占的字節(jié)數(shù),它與具體的機(jī)器和操作系統(tǒng)有關(guān):占的字節(jié)數(shù),它與具體的機(jī)器和操作系統(tǒng)有關(guān): 3.2、整型變量2. 2. 整型變量的定義整型變量的定義可以用下列語(yǔ)句定義整型變量可以用下列語(yǔ)句定義整型變量: :int a, b; int a, b; / /* *a a、b b被定義為有符號(hào)短整型變量被定義為有符號(hào)短整型變量* */ /unsigned long c; unsigned long c; / /* *c c被定義為無(wú)符號(hào)長(zhǎng)

14、整型變量被定義為無(wú)符號(hào)長(zhǎng)整型變量* */ /unsigned short c,d; unsigned short c,d; / /* *指定變量指定變量c c、d d為無(wú)符號(hào)短整型為無(wú)符號(hào)短整型 * */ /long e,f; long e,f; / /* * 指定變量指定變量e e、f f為長(zhǎng)整型為長(zhǎng)整型* */ /程序中在函數(shù)的開(kāi)頭部分定義變量。程序中在函數(shù)的開(kāi)頭部分定義變量。main()main() int a,b,c,d; int a,b,c,d; / /* * 指定變量指定變量a a、b b、c c、d d為整型為整型 * */ / unsigned u; unsigned u; /

15、 /* * 指定變量指定變量u u為無(wú)符號(hào)整型為無(wú)符號(hào)整型 * */ / a = 12; b = -24; u = 10; a = 12; b = -24; u = 10; c = a + u; d = b+u; c = a + u; d = b+u; printf(a+u = %d, b+u = %dn, c,d); printf(a+u = %d, b+u = %dn, c,d); 程序運(yùn)行顯示:程序運(yùn)行顯示:a+u = 22, b+u = -14a+u = 22, b+u = -14 3. 3. 整型變量的溢出整型變量的溢出 main()main() int i,j; int i,j;

16、unsigned k,l,m; unsigned k,l,m; i=32767; i=32767; j=i+1; j=i+1; l=65535u; l=65535u; m=l+2; m=l+2; printf(j=%dn,j); printf(j=%dn,j); printf(l=%un,l); printf(l=%un,l); printf(m=%un,m); printf(m=%un,m); 象這類問(wèn)題體現(xiàn)了象這類問(wèn)題體現(xiàn)了c c語(yǔ)言靈活性所帶來(lái)的副作用。語(yǔ)言靈活性所帶來(lái)的副作用。這種錯(cuò)誤系統(tǒng)不給提示,由程序員自己控制。這種錯(cuò)誤系統(tǒng)不給提示,由程序員自己控制。四、實(shí)型數(shù)據(jù)實(shí)數(shù)(實(shí)數(shù)(rea

17、lreal)又稱為浮點(diǎn)數(shù)()又稱為浮點(diǎn)數(shù)(floatfloat), ,有兩種表達(dá)方式:有兩種表達(dá)方式:普通普通( (十進(jìn)制十進(jìn)制) )方式:方式:0.1230.123、 .123.123、 123.0123.0、 123.123.、 0.00.0(必須有小數(shù)點(diǎn))(必須有小數(shù)點(diǎn))指數(shù)方式:指數(shù)方式:123e3123e3或或123e3123e3、123e-2123e-2注意注意:字母:字母e(e(或或e)e)之前必須有數(shù)字之前必須有數(shù)字 e e后面指數(shù)必須為整數(shù)后面指數(shù)必須為整數(shù)規(guī)范化指數(shù)形式規(guī)范化指數(shù)形式:e e前的小數(shù)部分中,小數(shù)點(diǎn)左邊只能有一前的小數(shù)部分中,小數(shù)點(diǎn)左邊只能有一位非位非0 0數(shù)

18、字。如下面例子應(yīng)為:數(shù)字。如下面例子應(yīng)為: 1.23e51.23e5 錯(cuò)誤:錯(cuò)誤:0.123e60.123e64.1 實(shí)型常量4.2 實(shí)型變量精確程度例:例:float x,y; /float x,y; /* * 指定指定x x、y y為單精度實(shí)型變量為單精度實(shí)型變量 * */ /double z; /double z; /* * 指定指定z z為雙精度實(shí)型變量為雙精度實(shí)型變量 * */ /實(shí)型常量不分實(shí)型常量不分floatfloat和和doubledouble。問(wèn)題:如何用圖示的方法表示這些變量的內(nèi)存空間?問(wèn)題:如何用圖示的方法表示這些變量的內(nèi)存空間? 4.3 實(shí)型變量的誤差與精度main(

19、) float a,b; a=123456.789e5; b=a+20; printf(“%fn”,a); printf(“%fn”,b);注意輸出結(jié)果注意輸出結(jié)果main() float a; double b; a=111111.111; b=111111.111; printf(“%fn”,a); printf(“%fn”,b);注意輸出結(jié)果注意輸出結(jié)果五、字符型數(shù)據(jù)用用單引號(hào)單引號(hào)( (撇號(hào)撇號(hào)) )括起來(lái)的一個(gè)字符。括起來(lái)的一個(gè)字符。如:如:aa、xx、dd、?、$。注意,注意,aa和和aa是不同的字符常量。是不同的字符常量。因?yàn)橐驗(yàn)閏 c語(yǔ)言區(qū)分大小寫(xiě)。語(yǔ)言區(qū)分大小寫(xiě)。以以“”開(kāi)頭

20、的字符序列,稱為開(kāi)頭的字符序列,稱為“轉(zhuǎn)義序列轉(zhuǎn)義序列”。“”使其后面的字符變?yōu)榱硗獾囊饬x。見(jiàn)下表。使其后面的字符變?yōu)榱硗獾囊饬x。見(jiàn)下表。5.1 字符常量轉(zhuǎn)義序列主要用來(lái)控制打印機(jī)和屏幕輸出。轉(zhuǎn)義序列主要用來(lái)控制打印機(jī)和屏幕輸出。 例:例:printf(n sum is %dnn,sum);printf(n sum is %dnn,sum);比較下面兩句的區(qū)別:比較下面兩句的區(qū)別:printf(“this is a “test”); printf(“this is a “test”); / /* *出錯(cuò)出錯(cuò)* */ /printf(“this is a “test”); printf(“thi

21、s is a “test”); / /* *輸出輸出: :this is a “test”this is a “test”* */ / char c1,c2; /char c1,c2; /* * 定義定義c1c1、c2c2為字符變量為字符變量 * */ /c1 = a; c2 = b;c1 = a; c2 = b;字符變量在內(nèi)存中占一字節(jié)。字符變量在內(nèi)存中占一字節(jié)。問(wèn)題:如何用圖示的方法表示這些變量的內(nèi)存問(wèn)題:如何用圖示的方法表示這些變量的內(nèi)存空間?空間? 5.2 字符變量字符在內(nèi)存中以字符在內(nèi)存中以asciiascii碼存放。碼存放。 5.3 字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法main(

22、)main() char c1,c2; char c1,c2; c1 = a; c2 = b; c1 = a; c2 = b; printf(%c %c,c1+32,c2+32); printf(%c %c,c1+32,c2+32); 該例的輸出是:該例的輸出是: a b a b main()main() char c1,c2; char c1,c2; c1 = a; c2 = b; c1 = a; c2 = b; c1 = c1 - 32; c2 = c2 - 32; c1 = c1 - 32; c2 = c2 - 32; printf(%c %c,c1,c2); printf(%c %c,

23、c1,c2); c c語(yǔ)言允許字符和整數(shù)之間進(jìn)行運(yùn)算語(yǔ)言允許字符和整數(shù)之間進(jìn)行運(yùn)算 字符常量字符常量: 單引號(hào)單引號(hào)括起來(lái)的括起來(lái)的一個(gè)字符一個(gè)字符。字符串常量字符串常量:雙引號(hào)雙引號(hào)括起來(lái)的括起來(lái)的字符序列字符序列(0n0n個(gè)字符)。如:個(gè)字符)。如:how do you do., how do you do., china, a, $123.45china, a, $123.45字符串常量在內(nèi)存中的存放:字符串常量在內(nèi)存中的存放:每一個(gè)字符均以其每一個(gè)字符均以其asciiascii碼存放,碼存放,且最后添加一且最后添加一個(gè)個(gè)“空字符空字符”(二進(jìn)制(二進(jìn)制0000000000000000,

24、記為,記為nullnull或或 0 0 。 字 符。 字 符 0 0 在 內(nèi) 存 中 存在 內(nèi) 存 中 存 0 x 3 00 x 3 0 即即0010000000100000)。)。5.4 字符串常量例:字符串常量例:字符串常量“china”china”存放在內(nèi)存中的情況存放在內(nèi)存中的情況是:是:(6(6字節(jié)存儲(chǔ)器空間,不是字節(jié)存儲(chǔ)器空間,不是5 5字節(jié)字節(jié)) )因此,因此,字符字符aa和字符串和字符串a(chǎn)a的區(qū)別的區(qū)別是:是:字符字符a a :1 1字節(jié)字節(jié)(值為(值為9797) 字符串字符串a(chǎn)a:2 2字節(jié)字節(jié)(值為(值為97,097,0) 5.5 字符與整型的相互轉(zhuǎn)換main( ) mai

25、n( ) char c1,c2; char c1,c2; c1=a; c2=b; c1=a; c2=b; printf (“c1=%c,c2=%c n”,c1,c2); printf (“c1=%c,c2=%c n”,c1,c2); printf (“c1=%d,c2=%d n”,c1,c2); printf (“c1=%d,c2=%d n”,c1,c2); /*問(wèn)題:結(jié)果如何*/六、變量賦初值為什么要給變量賦初值?為什么要給變量賦初值?( (教室不打掃教室不打掃) )因?yàn)榉峙涞膬?nèi)存空間可能有一個(gè)因?yàn)榉峙涞膬?nèi)存空間可能有一個(gè)臟數(shù)據(jù)臟數(shù)據(jù)。如果。如果不賦初值,默認(rèn)初始值就是這個(gè)臟數(shù)據(jù)。不賦初值,

26、默認(rèn)初始值就是這個(gè)臟數(shù)據(jù)。( (舉舉例說(shuō)明例說(shuō)明) )1.1.定義的同時(shí)給變量賦初值定義的同時(shí)給變量賦初值如:如:int a=3; float b=3.1415;int a=3; float b=3.1415; char c=x; char c=x; 2.2.定義變量時(shí),可以對(duì)其中的一部分變量賦初定義變量時(shí),可以對(duì)其中的一部分變量賦初值值. .如:如: int a=3, b, c, d=8; int a=3, b, c, d=8; 3.3.把一個(gè)值賦給不同變量時(shí),要分別進(jìn)行。把一個(gè)值賦給不同變量時(shí),要分別進(jìn)行。 如不應(yīng)寫(xiě)為:如不應(yīng)寫(xiě)為:int a=b=c=3; int a=b=c=3; 而應(yīng)寫(xiě)

27、為:而應(yīng)寫(xiě)為: int a=3,b=3,c=3; int a=3,b=3,c=3; 4.4.初始化是在程序運(yùn)行時(shí),執(zhí)行本函數(shù)時(shí)賦以初始化是在程序運(yùn)行時(shí),執(zhí)行本函數(shù)時(shí)賦以初值的。初值的。 即不是編譯時(shí)賦以初值的。如:即不是編譯時(shí)賦以初值的。如: int a=3; int a=3; 相當(dāng)于:相當(dāng)于:int a; a=3; int a; a=3; int a,b,c=5; int a,b,c=5; 相當(dāng)于:相當(dāng)于:int a,b,c; int a,b,c; c=5;c=5; 七、各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算在在c c語(yǔ)言中,整、實(shí)、字符型數(shù)據(jù)間可以混合運(yùn)語(yǔ)言中,整、實(shí)、字符型數(shù)據(jù)間可以混合運(yùn)算,如:算

28、,如:10 + a + 1.5 - 8765.1234 10 + a + 1.5 - 8765.1234 * * b b1 1、不同類型數(shù)據(jù)間進(jìn)行運(yùn)算時(shí),要轉(zhuǎn)換成同一、不同類型數(shù)據(jù)間進(jìn)行運(yùn)算時(shí),要轉(zhuǎn)換成同一類型類型 轉(zhuǎn)換過(guò)程中,低類型向高類型靠攏,然后進(jìn)行轉(zhuǎn)換過(guò)程中,低類型向高類型靠攏,然后進(jìn)行運(yùn)算,不同類型之間轉(zhuǎn)換如下圖所示,運(yùn)算,不同類型之間轉(zhuǎn)換如下圖所示,橫向橫向左箭頭為必轉(zhuǎn),縱向箭頭表示有條件類型轉(zhuǎn)左箭頭為必轉(zhuǎn),縱向箭頭表示有條件類型轉(zhuǎn)換。換。 例:例: charchar數(shù)據(jù)在運(yùn)算前數(shù)據(jù)在運(yùn)算前必定必定轉(zhuǎn)換為轉(zhuǎn)換為intint數(shù)據(jù);數(shù)據(jù);intint數(shù)據(jù)數(shù)據(jù)可以轉(zhuǎn)換可以轉(zhuǎn)換為為unsi

29、gnedunsigned數(shù)據(jù);數(shù)據(jù);floatfloat數(shù)據(jù)在運(yùn)算前數(shù)據(jù)在運(yùn)算前必定必定轉(zhuǎn)換為轉(zhuǎn)換為doubledouble數(shù)據(jù)數(shù)據(jù)( (即即使兩個(gè)使兩個(gè)floatfloat相加相加) ); intint數(shù)據(jù)可以轉(zhuǎn)換為數(shù)據(jù)可以轉(zhuǎn)換為doubledouble數(shù)據(jù)數(shù)據(jù)( (若另外一個(gè)運(yùn)若另外一個(gè)運(yùn)算數(shù)據(jù)為算數(shù)據(jù)為double)double),(直接轉(zhuǎn)換,不需先轉(zhuǎn)換,(直接轉(zhuǎn)換,不需先轉(zhuǎn)換為為unsignedunsigned,longlong,再轉(zhuǎn)換為,再轉(zhuǎn)換為doubledouble)。)。 上式的運(yùn)算次序是上式的運(yùn)算次序是: 進(jìn)行進(jìn)行10+a10+a運(yùn)算。先將運(yùn)算。先將aa轉(zhuǎn)換為整數(shù)轉(zhuǎn)換為整數(shù)9

30、797,運(yùn)算結(jié)果為整數(shù),運(yùn)算結(jié)果為整數(shù)107107。 進(jìn)行進(jìn)行i i* *f f運(yùn)算。先將運(yùn)算。先將i i和和f f均轉(zhuǎn)換為均轉(zhuǎn)換為doubledouble類型(實(shí)運(yùn)算過(guò)程總是類型(實(shí)運(yùn)算過(guò)程總是使用使用doubledouble類型,僅在把結(jié)果存入存儲(chǔ)器時(shí),才可能使用類型,僅在把結(jié)果存入存儲(chǔ)器時(shí),才可能使用floatfloat類型),運(yùn)算結(jié)果是類型),運(yùn)算結(jié)果是doubledouble類型。類型。 整數(shù)整數(shù)107107與與i i* *f f的積相加。先將整數(shù)的積相加。先將整數(shù)107107轉(zhuǎn)換為轉(zhuǎn)換為doubledouble類型類型(107.0107.0),運(yùn)算結(jié)果是),運(yùn)算結(jié)果是doubled

31、ouble類型。類型。 進(jìn)行進(jìn)行d/ed/e運(yùn)算。先將運(yùn)算。先將long elong e轉(zhuǎn)換為轉(zhuǎn)換為doubledouble類型,運(yùn)算結(jié)果是類型,運(yùn)算結(jié)果是doubledouble類型。類型。 進(jìn)行進(jìn)行- -運(yùn)算,結(jié)果為運(yùn)算,結(jié)果為doubledouble類型。類型。 八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式8.1 c運(yùn)算符簡(jiǎn)介8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式1 1、基本的算術(shù)運(yùn)算符、基本的算術(shù)運(yùn)算符 + +:加法或正值運(yùn)算符,如:加法或正值運(yùn)算符,如:2+3 2+3 、+5 +5 - -:減法或負(fù)值運(yùn)算符,如:減法或負(fù)值運(yùn)算符,如:8-3 8-3 、-6 -6 * *:乘法運(yùn)算符,:乘法運(yùn)算符, 如:如:3

32、3* *5 5 /: /: 除法運(yùn)算符,則可以是整或?qū)嵭蛿?shù)據(jù)。除法運(yùn)算符,則可以是整或?qū)嵭蛿?shù)據(jù)。如如5/3 5/3 % %:求余運(yùn)算符,兩側(cè)必是:求余運(yùn)算符,兩側(cè)必是整型數(shù)據(jù)整型數(shù)據(jù)。如如7%47%4 注:注:-5/3 = -1-5/3 = -1(余(余-2-2) 或或 -2(-2(余余+1)+1),turbo c turbo c 取取- -1 1結(jié)果(結(jié)果(“向零取整向零取整”)。)。 2 2、算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性、算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性算術(shù)表達(dá)式:算術(shù)表達(dá)式: 如:如:a a* *b/c-1.5+ab/c-1.5+a在在c c語(yǔ)言中,運(yùn)算符共有語(yǔ)言中,運(yùn)算符共有1

33、515個(gè)優(yōu)先級(jí),其中算術(shù)個(gè)優(yōu)先級(jí),其中算術(shù)運(yùn)算符的優(yōu)先級(jí)是:運(yùn)算符的優(yōu)先級(jí)是: * *、/ / 、% %(3 3級(jí))級(jí)) + + 、- -(4 4級(jí))級(jí)) 請(qǐng)見(jiàn)請(qǐng)見(jiàn)p375376 p375376 算術(shù)運(yùn)算符的結(jié)合方向:從左向右算術(shù)運(yùn)算符的結(jié)合方向:從左向右 注意:對(duì)于運(yùn)算符的結(jié)合方向,只需記住注意:對(duì)于運(yùn)算符的結(jié)合方向,只需記住三種三種運(yùn)算符是自右向左運(yùn)算符是自右向左的,其余都是自左向右的。的,其余都是自左向右的。這三種運(yùn)算符是:這三種運(yùn)算符是:?jiǎn)文窟\(yùn)算符、單目運(yùn)算符、三目運(yùn)算符三目運(yùn)算符(only one)(only one)、賦值運(yùn)算符賦值運(yùn)算符( (不計(jì)算好如何賦值?不計(jì)算好如何賦值?)

34、 )例:例: a = b + ca = b + c由于賦值運(yùn)算符由于賦值運(yùn)算符= =為右結(jié)合,為右結(jié)合,先執(zhí)行右邊的先執(zhí)行右邊的b+cb+c,再賦值給,再賦值給a a。8.3、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符一般形式:一般形式: (類型名)(類型名) (表達(dá)式)(表達(dá)式) 如:(如:(double)a double)a 將將a a轉(zhuǎn)換為轉(zhuǎn)換為doubledouble型型 (int)(x+y) (int)(x+y) 將將x+yx+y的值轉(zhuǎn)換為整型的值轉(zhuǎn)換為整型 (float)(5%3) (float)(5%3) 將將5%35%3的值轉(zhuǎn)換成單精度實(shí)型的值轉(zhuǎn)換成單精度實(shí)型 說(shuō)明:說(shuō)明:1.1.(intint)(x

35、+y) (x+y) 與與(int)x+y (int)x+y 意義不同意義不同 2. 2. 類型轉(zhuǎn)換后得到一個(gè)中間值,而原來(lái)變量本類型轉(zhuǎn)換后得到一個(gè)中間值,而原來(lái)變量本身的類型沒(méi)有發(fā)生變化。身的類型沒(méi)有發(fā)生變化。 3.(int)x3.(int)x不要寫(xiě)成不要寫(xiě)成int(x); int(x); / /* *c c語(yǔ)言中語(yǔ)言中不行,不行,c+c+允許允許* */ /main( )main( ) float x , i; x=3.6; i=(int) (x); float x , i; x=3.6; i=(int) (x); printf (“x=%f, i=%fn”,x,i); printf (“x

36、=%f, i=%fn”,x,i); 運(yùn)算結(jié)果:運(yùn)算結(jié)果:x=3.600000,x=3.600000, i=3.000000 i=3.000000思考:程序運(yùn)行期間,思考:程序運(yùn)行期間,x,ix,i的類型和值發(fā)生變化沒(méi)有?的類型和值發(fā)生變化沒(méi)有?8.4、自增、自減運(yùn)算符 +:增:增1 1運(yùn)算符,使變量值增運(yùn)算符,使變量值增1 1。 記憶:記憶:+在前,先加;在后,后加在前,先加;在后,后加 -:減:減1 1運(yùn)算符,使變量值減運(yùn)算符,使變量值減1 1。 如:如: +i ,-i+i ,-i:在使用變量:在使用變量i i之前,先使變量之前,先使變量i i加加(減)(減)1 1。 i+,i-i+,i-:

37、在使用變量:在使用變量i i之后,使變量之后,使變量i i值加值加(減)(減)1 1。 main( ) main( ) int i,j; i=3;j=+i; int i,j; i=3;j=+i; printf printf (“i=%d,j=%dn”,i,j); (“i=%d,j=%dn”,i,j); 運(yùn)算結(jié)果:運(yùn)算結(jié)果:i=4,j=4i=4,j=4main( ) main( ) int i,j; i=3;j=i+; int i,j; i=3;j=i+; printf printf (“i=%d,j=%dn”,i,j); (“i=%d,j=%dn”,i,j); 運(yùn)算結(jié)果:運(yùn)算結(jié)果:i=4,j=

38、3i=4,j=3說(shuō)明:說(shuō)明: 1.+,- -1.+,- -運(yùn)算符運(yùn)算符只能用于變量,而只能用于變量,而不能用于常量和表不能用于常量和表達(dá)式。達(dá)式。 如如a+,b-a+,b-是正確是正確的,而的,而5+,(x+y)- 5+,(x+y)- - -卻是錯(cuò)誤的。卻是錯(cuò)誤的。 2.+,- -運(yùn)算符的運(yùn)算符的結(jié)合方向是從右向結(jié)合方向是從右向左。左。 main( ) main( ) int i,j; int i,j; i=3; i=3; i+; i+; j=i;j=i; printf (“i=%d,j=%dn”,i,j); printf (“i=%d,j=%dn”,i,j); 運(yùn)算結(jié)果運(yùn)算結(jié)果? ?main

39、( ) main( ) int i; i=3; int i; i=3; printf (“i1=%dn”,-i+); printf (“i1=%dn”,-i+); printf (“i2=%dn”,i); printf (“i2=%dn”,i); 運(yùn)算結(jié)果:運(yùn)算結(jié)果:i1=-3 i2=4 i1=-3 i2=4 注意:結(jié)合性自右向注意:結(jié)合性自右向左(單目運(yùn)算符)左(單目運(yùn)算符)main( ) main( ) int i; i=3; int i; i=3; printf (“i1=%dn”,-+i); printf (“i1=%dn”,-+i); printf (“i2=%dn”,i); pri

40、ntf (“i2=%dn”,i); 運(yùn)算結(jié)果:運(yùn)算結(jié)果:i1= -4 i2=4i1= -4 i2=4main( ) main( ) int i=3,j=3,k,q; int i=3,j=3,k,q; k=(i+)+(i+)+(i+); k=(i+)+(i+)+(i+); q=(+j)+(+j)+(+j); q=(+j)+(+j)+(+j); printf (“i=%d,j=%d,k=%d,q=%dn”,i,j,k,q); printf (“i=%d,j=%d,k=%d,q=%dn”,i,j,k,q); tctc運(yùn)算結(jié)果:運(yùn)算結(jié)果:i=6,j=6,k=9,q=18i=6,j=6,k=9,q=18

41、1)、無(wú)需深究的問(wèn)題表達(dá)式中的子表達(dá)式的求值順序各編譯系統(tǒng)是有表達(dá)式中的子表達(dá)式的求值順序各編譯系統(tǒng)是有差別的。差別的。 2)2)在在c c語(yǔ)言中運(yùn)算符的確定語(yǔ)言中運(yùn)算符的確定 在由多個(gè)字符組成的表達(dá)式中,應(yīng)在由多個(gè)字符組成的表達(dá)式中,應(yīng)盡可能多地盡可能多地從左向右從左向右將若干個(gè)字符組成一個(gè)運(yùn)算符。將若干個(gè)字符組成一個(gè)運(yùn)算符。 如:如:i+j i+j 其結(jié)合性是:其結(jié)合性是:(i+)+j (i+)+j 不是:不是:i+(+j) i+(+j) 。 3)printf 3)printf 函數(shù)輸出實(shí)參的順序函數(shù)輸出實(shí)參的順序 如:如:int i=3; printf (“%d,%dn”,i,i+);

42、int i=3; printf (“%d,%dn”,i,i+); 有的系統(tǒng)按從左到右的順序求值,輸出結(jié)果是:有的系統(tǒng)按從左到右的順序求值,輸出結(jié)果是:3,3 3,3 而而turbo c turbo c 是按從右到左順序求值,輸出結(jié)果是按從右到左順序求值,輸出結(jié)果是:是:4,3 4,3 結(jié)論:不寫(xiě)別人甚至自己都看不懂的程序,也結(jié)論:不寫(xiě)別人甚至自己都看不懂的程序,也不寫(xiě)那些不知道系統(tǒng)會(huì)怎樣運(yùn)行的程序不寫(xiě)那些不知道系統(tǒng)會(huì)怎樣運(yùn)行的程序. . 九、 賦值運(yùn)算符和賦值表達(dá)式9.1、賦值運(yùn)算符“=”“=”是賦值號(hào),也是賦值運(yùn)算符是賦值號(hào),也是賦值運(yùn)算符 功能:將賦值號(hào)右邊表達(dá)式的值賦給賦值號(hào)左功能:將賦

43、值號(hào)右邊表達(dá)式的值賦給賦值號(hào)左邊的變量,賦值號(hào)同時(shí)含有計(jì)算的功能。邊的變量,賦值號(hào)同時(shí)含有計(jì)算的功能。 如:如:a=3; b=xa=3; b=x* *y; y; a,b a,b變量中原來(lái)不管存放什么值,執(zhí)行賦值語(yǔ)變量中原來(lái)不管存放什么值,執(zhí)行賦值語(yǔ)句后,新值將取代舊值句后,新值將取代舊值 9.2、類型轉(zhuǎn)換(1)(1)實(shí)型數(shù)據(jù)賦給整型變量時(shí),舍去實(shí)型數(shù)據(jù)的實(shí)型數(shù)據(jù)賦給整型變量時(shí),舍去實(shí)型數(shù)據(jù)的小數(shù)部分。小數(shù)部分。如:如:int i; i=3.56; int i; i=3.56; 結(jié)果結(jié)果i i的值為的值為3 3 (2)(2)整型數(shù)據(jù)賦給實(shí)型變量時(shí),數(shù)值不變,但以整型數(shù)據(jù)賦給實(shí)型變量時(shí),數(shù)值不變,

44、但以浮點(diǎn)形式存放于內(nèi)存。浮點(diǎn)形式存放于內(nèi)存。 如:如: float a=23; float a=23; 先將先將2323轉(zhuǎn)換成轉(zhuǎn)換成23.00000023.000000,然后送,然后送a a中。中。 double b=23; double b=23; 先將先將2323轉(zhuǎn)換為轉(zhuǎn)換為23.00000000000000,23.00000000000000,然后送然后送b b中中 (3)double(3)double型數(shù)據(jù)賦給型數(shù)據(jù)賦給floatfloat變量變量 截取其前面的截取其前面的7 7位有效數(shù)字,存放到位有效數(shù)字,存放到floatfloat單元,單元,應(yīng)注意數(shù)值范圍不能溢出應(yīng)注意數(shù)值范圍不能

45、溢出 如:如:float f; float f; double d=123.45678e65; double d=123.45678e65; f=d; f=d; 由于數(shù)據(jù)溢出,由于數(shù)據(jù)溢出,f f將得到錯(cuò)誤的值將得到錯(cuò)誤的值 float float 數(shù)據(jù)賦給數(shù)據(jù)賦給doubledouble變量時(shí),數(shù)值不變,有變量時(shí),數(shù)值不變,有效位擴(kuò)展到效位擴(kuò)展到1616位。位。(4)(4)字符型數(shù)據(jù)賦給整型變量字符型數(shù)據(jù)賦給整型變量 (5)int, short, long(5)int, short, long型數(shù)據(jù)賦給型數(shù)據(jù)賦給charchar變量變量, ,則則將其低位賦給將其低位賦給charchar型變量

46、型變量 (6)long(6)long型數(shù)據(jù)賦給型數(shù)據(jù)賦給intint型變量型變量, ,將將longlong型數(shù)據(jù)的型數(shù)據(jù)的低低1616位賦給位賦給intint型變量型變量 (7)(7)將將unsigned intunsigned int型數(shù)據(jù)賦給型數(shù)據(jù)賦給longlong型變量時(shí)型變量時(shí): : 將將unsigned intunsigned int型數(shù)據(jù)送到型數(shù)據(jù)送到long intlong int型變量型變量的低的低1616位,位,long intlong int的變量高的變量高1616位補(bǔ)位補(bǔ)0 0 若無(wú)符號(hào)數(shù)據(jù)賦給相同長(zhǎng)度的帶符號(hào)的變量若無(wú)符號(hào)數(shù)據(jù)賦給相同長(zhǎng)度的帶符號(hào)的變量時(shí),則原樣賦給。

47、時(shí),則原樣賦給。 要注意數(shù)據(jù)的有效位占據(jù)符號(hào)位要注意數(shù)據(jù)的有效位占據(jù)符號(hào)位, ,若最高位為若最高位為1 1,則賦值后新變量的值成負(fù)。,則賦值后新變量的值成負(fù)。 (8)(8)將帶符號(hào)的數(shù)賦給長(zhǎng)度相同的無(wú)符號(hào)變量將帶符號(hào)的數(shù)賦給長(zhǎng)度相同的無(wú)符號(hào)變量 原樣賦給原樣賦給 main( )main( ) unsigned int a; unsigned int a; int b= -1; int b= -1; a=b; a=b; printf (“a=% u,b=%dn”,a,b); printf (“a=% u,b=%dn”,a,b); 運(yùn)算結(jié)果:運(yùn)算結(jié)果: a=65535,b= -1a=65535,b

48、= -1 9.3、復(fù)合的賦值運(yùn)算符在賦值號(hào)前加其它運(yùn)算符,可以構(gòu)成復(fù)合運(yùn)算符。在賦值號(hào)前加其它運(yùn)算符,可以構(gòu)成復(fù)合運(yùn)算符。 如:如: a=a+b a=a+b 等價(jià)于等價(jià)于 a+=ba+=b x=x x=x* *(y+8) (y+8) 等價(jià)于等價(jià)于 x x* *=y+8=y+8 x=x%3 x=x%3 等價(jià)于等價(jià)于 x%=3x%=3 為了便于記憶,將賦值號(hào)左邊移到賦值號(hào)右邊,賦值號(hào)為了便于記憶,將賦值號(hào)左邊移到賦值號(hào)右邊,賦值號(hào)左邊再補(bǔ)上變量名。左邊再補(bǔ)上變量名。 如:如:a+= b a+= b a+a+復(fù)制到復(fù)制到= =右邊右邊, ,等號(hào)左邊補(bǔ)操作數(shù)等號(hào)左邊補(bǔ)操作數(shù)a a a=a+b a=a+

49、b 其中其中a a是變量,是變量,b b是表達(dá)式是表達(dá)式 x x* *= y+8 - = y+8 - x=xx=x* *(y+8)(y+8) 而不是而不是x=xx=x* *y+8y+8 c c語(yǔ)言中,有十個(gè)二元運(yùn)算符:語(yǔ)言中,有十個(gè)二元運(yùn)算符:+ +、- -、* *、/ /、% %、& &、 、| | 可與賦值號(hào)一起構(gòu)成復(fù)合運(yùn)算符;可與賦值號(hào)一起構(gòu)成復(fù)合運(yùn)算符;其優(yōu)點(diǎn)是:簡(jiǎn)化程序,提高編譯效率。其優(yōu)點(diǎn)是:簡(jiǎn)化程序,提高編譯效率。9.4、賦值表達(dá)式由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子。由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子。 (1)(1)一般形式:一般形式:

50、 a=5; a=5;(2)(2)賦值表達(dá)式求解過(guò)程:賦值表達(dá)式求解過(guò)程: 計(jì)算賦值號(hào)右邊表達(dá)式的值,然后賦給左邊的變量。計(jì)算賦值號(hào)右邊表達(dá)式的值,然后賦給左邊的變量。 如:如:a=3+5 a=3+5 在在c c語(yǔ)言中,表達(dá)式又可以是賦值表達(dá)式,如語(yǔ)言中,表達(dá)式又可以是賦值表達(dá)式,如a=(b=5);a=(b=5);其中其中 b=5b=5是賦值表達(dá)式,其值是是賦值表達(dá)式,其值是5 5,因此,因此a a的值是的值是5 5,整,整個(gè)表達(dá)式的值是個(gè)表達(dá)式的值是5 5。 (3)(3)賦值運(yùn)算符的結(jié)合順序:從右向左賦值運(yùn)算符的結(jié)合順序:從右向左 因此:因此:a=(b=5) a=(b=5) 與與 a=b=5 a=b=5 是等價(jià)的。是等價(jià)的。 賦值表達(dá)式的例子:賦值表達(dá)式的例子: a=b=c=5a=b=c=5 表達(dá)式的值為表達(dá)式的值為5 5,a,b,ca,b,c的值為的值為5 5。 a=5+(c=6)a=5+(c=6) 表達(dá)式的

溫馨提示

  • 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)論