《c語言程序設(shè)計(jì)》第3章_第1頁
《c語言程序設(shè)計(jì)》第3章_第2頁
《c語言程序設(shè)計(jì)》第3章_第3頁
《c語言程序設(shè)計(jì)》第3章_第4頁
《c語言程序設(shè)計(jì)》第3章_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章C語言基礎(chǔ)池州師專計(jì)算機(jī)中心C

語言程序設(shè)計(jì)1本章主要內(nèi)容本章介紹C語言的基礎(chǔ),包括:數(shù)據(jù)類型運(yùn)算符和表達(dá)式均是程序設(shè)計(jì)的基本知識(shí)為什么討論這些知識(shí)?通常程序要對數(shù)據(jù)進(jìn)行操作處理:處理的對象是數(shù)據(jù)通過運(yùn)算符和表達(dá)式進(jìn)行操作21.3.2標(biāo)識(shí)符

(1)標(biāo)識(shí)符的定義:用來標(biāo)識(shí)變量、常量、函數(shù)等的字符序列。(2)標(biāo)識(shí)符的命名規(guī)則有效字符只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或者下劃線;C語言的標(biāo)識(shí)符由具體的C編譯器確定,ANSIC沒有相應(yīng)的規(guī)定。在Turbo2.0中,允許最長的標(biāo)識(shí)符長度是32。C語言的標(biāo)識(shí)符區(qū)分大小寫字母,標(biāo)識(shí)符中大小寫字母含義不同;3(3)標(biāo)識(shí)符的命名習(xí)慣變量名和函數(shù)名中的英文字母一般用小寫,以增加可讀性。見名知意,是指通過變量名就知道變量值的含義。如,name/xm(姓名)。C語言的標(biāo)識(shí)符不能是C語言規(guī)定的關(guān)鍵字。4例如:【例2.1】計(jì)算圓的面積,半徑為5cm。

程序如下:main(){float

r,area;

r=5;

area=3.14*r*r;

printf("%f\n",

area);}運(yùn)算結(jié)果是輸出圓的面積:78.500000程序中用到的數(shù)據(jù):r、area、5、3.14對數(shù)據(jù)進(jìn)行的運(yùn)算:*、=例jc2_15分析:計(jì)算機(jī)操作處理時(shí),要完成以下工作:在內(nèi)存中給半徑r和運(yùn)算結(jié)果area

開辟存儲(chǔ)空間,存放它們的值。應(yīng)該留多大的地方來存放它們的值?數(shù)據(jù)

5和3.14與r

、area

不同,它們是在編寫程序時(shí)就給出確定的值,在運(yùn)算過程中不會(huì)改變。這樣的數(shù)計(jì)算機(jī)怎么處理?對整數(shù)5

和小數(shù)3.14,計(jì)算機(jī)存放時(shí)是否有區(qū)別?涉及數(shù)據(jù)類型的基本知識(shí)6C語言的數(shù)據(jù)類型C數(shù)據(jù)類型數(shù)組類型結(jié)構(gòu)體類型共用體類型枚舉類型整型字符型實(shí)型(浮點(diǎn)型)空類型單精度型雙精度型基本類型指針類型構(gòu)造類型本章討論基本類型數(shù)據(jù)72.2.1常量在運(yùn)行程序的過程中值保持不變的量。主要包括整型常量、實(shí)型常量、字符常量、字符串常量。整型常量即整常數(shù),在C語言中整型常量可用三種形式表示。十進(jìn)制整數(shù):由0~9和正負(fù)號(hào)表示。八進(jìn)制整數(shù):由數(shù)字0開頭,后跟數(shù)字0~7表示。十六進(jìn)制整數(shù):由0x或0X,后跟0~9,A~F/a~f表示。例如:100-80+12301002401000730x380x100X100XFF0x0a8定義一個(gè)符號(hào)常量需要使用一條預(yù)處理命令#define(define的中文意思是“定義”),其格式為#define符號(hào)常量常量例如:#defineNUM20#definePI3.1415926有了上面的兩行文本,NUM的值就是30,PI的值就是3.1415926。定義一個(gè)符號(hào)常量,實(shí)際上就是為一個(gè)值常量起個(gè)名字。

用標(biāo)識(shí)符代表一個(gè)常量9#definePRICE30main(){Intnum,total;Num=10;Total=num*PRICE;Printf(“total=%d”,total);}程序中用#define命令行定義PRICE代表常量30,此后凡文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算,程序運(yùn)行結(jié)果為Total=30用標(biāo)識(shí)符代表一個(gè)常量10注意符號(hào)常量不同于變量,它的值在其作用域內(nèi)不能改變,也不能再被賦值。如再用以下賦值語句給PRICE賦值,則是錯(cuò)誤的。PRICE=40;11變量1.變量的定義在程序運(yùn)行過程中,其值改變的數(shù)據(jù),稱為變量,變量用標(biāo)識(shí)符表示,稱為變量名。變量均分配一定量的存儲(chǔ)空間,處在數(shù)據(jù)區(qū)、堆棧區(qū)、堆區(qū)中,運(yùn)行中可以改變。相當(dāng)于給內(nèi)存地址取個(gè)名字-變量。2變量的兩個(gè)要素變量名,每個(gè)變量構(gòu)必須有一個(gè)名字-變量名,變量名遵循標(biāo)識(shí)符命名規(guī)則。變量值,再程序運(yùn)行過程中,變量值存儲(chǔ)在內(nèi)存中。在程序中,通過便兩名來引用變量的值。3變量的初始化與定義121變量定義的一般格式[存儲(chǔ)類型]數(shù)據(jù)類型變量名1[,變量名2,。。。,變量名n];例如:floatradius,length,area2變量初始化的一般格式:[存儲(chǔ)類型]數(shù)據(jù)類型變量名1[=初值1][,變量2[=初值2]…];例如:floatradius=2.5,length,area;132.2.2變量注意:變量必須“先定義后使用”系統(tǒng)為變量分配存儲(chǔ)單元,存儲(chǔ)變量的值。編寫程序時(shí)通過變量名來存、取變量值。在程序中從變量中取值,實(shí)際上就是通過變量名找到相應(yīng)的內(nèi)存地址,從其存儲(chǔ)單元中讀取數(shù)據(jù)。a510變量值為變量分配的存儲(chǔ)單元變量名例如:有變量a它的值是51014整型數(shù)據(jù)整型常量的表示方法整型變量1、整型數(shù)據(jù)在內(nèi)存中的存放形式2、整型變量的分類3、整型變量的定義4、整型變量的溢出15整型數(shù)據(jù)在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的如:十進(jìn)制數(shù)10的二進(jìn)制形式為1010,在微機(jī)上使用的C編譯系統(tǒng),每一個(gè)整型變量在內(nèi)存中占2個(gè)字節(jié)的空間。其中,整型變量對應(yīng)該2字節(jié)內(nèi)存單元的第一個(gè)字節(jié)內(nèi)存單元,即對應(yīng)“低地址”。下圖表示了數(shù)據(jù)在內(nèi)存中實(shí)際存放的情況。000000000000101016實(shí)際上,數(shù)值是以補(bǔ)碼表示的。一個(gè)正數(shù)的補(bǔ)碼和其原碼的形式相同。如果數(shù)值是負(fù)的,,求負(fù)數(shù)的補(bǔ)碼的方法是:將該數(shù)的絕對值的二進(jìn)制形式,按位取反再加1。最高位表示符號(hào)位,該位為0,表示數(shù)值為正;為1則數(shù)值為負(fù)。171方括號(hào)表示可選項(xiàng)int分配2Byte,long分配4Byte類型名稱類型符bit取值范圍整型(短整型)[signed]int[signed]short[int]16215~215-1(-32768~32767)無符號(hào)整型unsigned[int]160~216-1(0~65535)長整型[signed]long[int]32-231~231-1無符號(hào)長整型unsignedlong[int]320~232-1183.4浮點(diǎn)型數(shù)據(jù)3.4.1浮點(diǎn)型常量的表示方法3.4.2浮點(diǎn)型變量1。浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式2。浮點(diǎn)型變量的分類3。浮點(diǎn)型數(shù)據(jù)的舍入誤差3.4.3浮點(diǎn)型常量的類型19浮點(diǎn)型常量的表示方法C語言中的浮點(diǎn)數(shù)就是實(shí)數(shù)。浮點(diǎn)數(shù)有兩種表示形式:(1)十進(jìn)制小數(shù)形式:它由數(shù)字和小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn))。如,0.123,123.,等都是十進(jìn)制數(shù)。注意:0.0和0的區(qū)別(2)指數(shù)形式:1e31.8e-3-123E-6-.1E-31×1031.8×10-3

-123×10-6

-0.0.1×10-3字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù)。20注意:一個(gè)浮點(diǎn)數(shù)在用指數(shù)形式輸出時(shí),是按規(guī)范化的指數(shù)形式輸出的?!耙?guī)范化的指數(shù)形式”,即在字母e之前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(yīng)有一位,且只能有一位非零的數(shù)字。如:2.3478e23.0999E56.46e12都屬于規(guī)范化的指數(shù)形式。12.908e100.4578e3屬于不規(guī)范的指數(shù)形式。21浮點(diǎn)型變量一、浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式一個(gè)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中一般占4個(gè)字節(jié)。浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。如,3.14159在內(nèi)存中的存放方式可以用如下的圖示表示:+.314159122注意:1、標(biāo)準(zhǔn)C語言并無具體規(guī)定在32位中,用多少位表示小數(shù),多少位來表示指數(shù)部分,這由各C語言編譯系統(tǒng)自定。2、小數(shù)部分占的位(bit)數(shù)愈多,數(shù)的有效數(shù)字愈多,精度也就愈高。指數(shù)部分占的位數(shù)愈多,則能表示的數(shù)值范圍愈大。3、不少編譯系統(tǒng)以24位表示小數(shù)部分(包括符號(hào)),以8位表示指數(shù)部分(包括指數(shù)的符號(hào))。23二、浮點(diǎn)型變量的分類類型比特(位)數(shù)有效數(shù)字?jǐn)?shù)值范圍float326~7-3.4x10-38~3.4x1038double6415~16-1.7x10-308~1.7x10308longdouble12818~19-1.2x10-4932~1.2x10493224ANSIC并未具體規(guī)定每種類型數(shù)據(jù)的長度、精度和數(shù)值范圍。有的系統(tǒng)將double型所增加的32位全用于存放小數(shù)部分,這樣可以增加數(shù)值的有效位數(shù),減少舍入誤差。有的系統(tǒng)則將所增加位的一部分用于存放指數(shù)部分,這樣可以擴(kuò)大數(shù)值的范圍。對于每一個(gè)浮點(diǎn)型變量都應(yīng)在使用前加以定義。例如:

floatx,y;(指定x,y為單精度浮點(diǎn)數(shù))

doublez;(指定Z為雙精度浮點(diǎn)數(shù))

longdoublet;(指定t為長雙精度浮點(diǎn)數(shù))25三、浮點(diǎn)型數(shù)據(jù)的舍入誤差浮點(diǎn)型數(shù)據(jù)是由有限的存儲(chǔ)單元組成,因此能提供的有效數(shù)字總是有限的。在有效位以外的數(shù)字將被舍去。這樣以來,就會(huì)產(chǎn)生一些誤差。例題3。4(教材47頁)。26浮點(diǎn)型常量的類型C語言編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來處理。例如已定義一個(gè)浮點(diǎn)型變量f,有如下語句:

f=2.45678*2.45678;

系統(tǒng)首先把2.45678作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘積也是雙精度數(shù)。最后,取其前7位賦給浮點(diǎn)型變量f。若在數(shù)的后面加字母f或F(如1.65f、1.65F),這樣編譯系統(tǒng)就會(huì)把他們按照單精度(32位)來處理。

273.5字符型數(shù)據(jù)字符型數(shù)據(jù)char是那些用來表征英文字母、符號(hào)、漢字的數(shù)據(jù)。字符型數(shù)據(jù)實(shí)際上就是整型數(shù)據(jù),但是,它只占用1個(gè)字節(jié)(8位)的內(nèi)存單元,用于存放該字符號(hào)所對應(yīng)的ASCII碼的值。當(dāng)然也可把這一個(gè)字節(jié)的內(nèi)存單元用于存放一般的數(shù)據(jù)。本節(jié)主要介紹以下內(nèi)容:字符常量、字符變量、字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法、字符串常量283.5.1字符常量字符常量主要有以下兩種表示方法:(1)用單引號(hào)括起來一個(gè)直接輸入的字符如,‘A’、’a’、’3’等都是合法的字符。字符常量只能用單引號(hào)括起來,不能用雙引號(hào)或其它括號(hào)。(2)使用轉(zhuǎn)義字符轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線“\”開頭,后跟一個(gè)或者幾個(gè)字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。29常用的轉(zhuǎn)義字符及其含義:\0字符串結(jié)束標(biāo)志\n回車換行\(zhòng)t跳到下一個(gè)輸出位置\"雙引號(hào)字符\dddddd為1到3位八進(jìn)制數(shù)所代表的字符\xhhhh為1到2位十六進(jìn)制數(shù)所代表的字符例題3.5:轉(zhuǎn)義字符的使用。書48頁303.5.2字符變量字符變量用來存放字符常量,它只能放一個(gè)字符。在所有的編譯系統(tǒng)中都規(guī)定以一個(gè)字節(jié)來存放一個(gè)字符,或者說一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。如,charc1,c2;c1=‘a(chǎn)’,c2=‘b’;表示C1和C2為字符變量,各存放一個(gè)字符,對C1,C1賦初值分別為‘a(chǎn)’和‘b’.313.5.3字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法將一個(gè)字符常量放到一個(gè)字符變量中,實(shí)際上并不是把該字符本身放到內(nèi)存單元中,而是將該字符的ASCII代碼放到存儲(chǔ)單元中。如字符‘a(chǎn)’的ASCII代碼為十進(jìn)制數(shù)97,那么它在內(nèi)存中的存放形式為一個(gè)字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。以字符形式輸出時(shí),需要先將存儲(chǔ)單元中的ASCII代碼換成相應(yīng)字符,然后輸出。以整數(shù)形式輸出時(shí),直接將ASCII代碼作為整數(shù)輸出。例題3.6、3.7。書50-53頁01100001323.5.4字符串常量字符串常量是由一對雙引號(hào)括起來的字符序列。如“china”、”$12.5”。字符串常量有2個(gè)字節(jié)的存儲(chǔ)單元。不要將字符常量和字符串常量混淆,它們是有區(qū)別的:(1)字符常量由單引號(hào)括起來,字符串常量由雙引號(hào)括起來。(2)字符常量只能是單個(gè)字符,字符串常量則可以包含一個(gè)或多個(gè)字符。(3)可以把一個(gè)字符常量賦給一個(gè)字符變量,但不能把一個(gè)字符串常量賦給一個(gè)字符變量。C語言中沒有相應(yīng)的字符串變量。(4)字符常量占一個(gè)字節(jié)的內(nèi)存單元。字符串常量有兩個(gè)字節(jié)的存儲(chǔ)單元。333.6變量賦初值C語言允許在定義變量的同時(shí)給變量賦初值。例如:inta=5,b=10+2;

doublex=23.568,y;charch1='a',ch2=66,ch3='\142';表示定義變量并對變量存儲(chǔ)單元賦值。錯(cuò)誤的初始化:

inta=3+b,b=5;

floatm=n=23.16;

343.7各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算整型、浮點(diǎn)型、字符型數(shù)據(jù)間可以混合運(yùn)算。在進(jìn)行混合運(yùn)算時(shí),其運(yùn)算的規(guī)則為:(1)不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。(2)轉(zhuǎn)換是根據(jù)運(yùn)算按步驟完成的,由編譯器自動(dòng)設(shè)置這個(gè)過程。(3)轉(zhuǎn)換的規(guī)則如54頁圖3-10。353.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式主要內(nèi)容:算術(shù)運(yùn)算符和算術(shù)表達(dá)式賦值運(yùn)算符和賦值表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式位運(yùn)算符和位運(yùn)算表達(dá)式條件運(yùn)算符和條件表達(dá)式逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式其他運(yùn)算符及其運(yùn)算363.8.1語言運(yùn)算符簡介變量用來存放數(shù)據(jù),運(yùn)算符則用來處理數(shù)據(jù)。運(yùn)算符將變量和常量連接起來的符合C語言語法規(guī)則的式子被稱為表達(dá)式。每個(gè)表達(dá)式都有值。根據(jù)運(yùn)算符所帶操作數(shù)的數(shù)量進(jìn)行劃分,C語言中的運(yùn)算符有三種類別:(1)單目運(yùn)算符:只帶一個(gè)操作數(shù)的運(yùn)算符。如,++、--運(yùn)算符。(2)雙目運(yùn)算符:帶兩個(gè)操作數(shù)的運(yùn)算符。如,+、-運(yùn)算符。(3)三目運(yùn)算符:帶三個(gè)操作數(shù)的運(yùn)算符。如,?運(yùn)算符。37C語言中運(yùn)算符和表達(dá)式的數(shù)量之多,在高級(jí)語言中是少見的。正是豐富的運(yùn)算符和表達(dá)式使C語言功能十分完善。這也是C語言的主要特點(diǎn)之一。所以要學(xué)好和用好C語言務(wù)必熟練掌握其運(yùn)算符的功能、特點(diǎn)及應(yīng)用。具體學(xué)習(xí)過程中應(yīng)把握如下幾個(gè)方面:(1)運(yùn)算符的功能:該運(yùn)算符主要用于做什么運(yùn)算。(2)與運(yùn)算量關(guān)系:要求運(yùn)算量的個(gè)數(shù)及運(yùn)算量的類型。(3)運(yùn)算符的優(yōu)先級(jí):表達(dá)式中包含多個(gè)不同運(yùn)算符時(shí)運(yùn)算符運(yùn)算的先后次序。(4)運(yùn)算符的結(jié)合性:同級(jí)別運(yùn)算符的運(yùn)算順序(5)運(yùn)算結(jié)果的類型:表達(dá)式運(yùn)算后最終得到的值的類型。383.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式基本的算術(shù)運(yùn)算符算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性強(qiáng)制類型轉(zhuǎn)換運(yùn)算符自增、自減運(yùn)算符有關(guān)表達(dá)式使用中的問題說明391、基本的算術(shù)運(yùn)算符(1)+(加法運(yùn)算符,或正值運(yùn)算符,如3+5、+3);(2)-(減法運(yùn)算符,或負(fù)值運(yùn)算符,如5-2、-3);(3)*(乘法運(yùn)算符,如3*5);(4)/(除法運(yùn)算符,如3/5);(5)%(模運(yùn)算符,或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如7%4的值為3);+、-、*、/運(yùn)算符既可用于整型數(shù)據(jù)的算術(shù)運(yùn)算,又可用于實(shí)型數(shù)據(jù)的算術(shù)運(yùn)算。而%只能用于整數(shù)。40注意C語言規(guī)定兩個(gè)整數(shù)相除,其商為整數(shù),小數(shù)部分被舍棄。例如:5/2的值是2,不是2.5。要得到2.5,則應(yīng)寫成5.0/2或者5/2.0%不能用于浮點(diǎn)型數(shù)據(jù),否則會(huì)出錯(cuò)。例如:5.4%2是非法的表達(dá)式,因?yàn)椋ブ荒苡糜谡蛿?shù)據(jù)的運(yùn)算。412、算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性(1)用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C算術(shù)表達(dá)式。運(yùn)算對象包括變量、常量、函數(shù)等。如,(x+y)/2-1,是合法的算術(shù)表達(dá)式。(2)C語言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級(jí)別高的次序執(zhí)行。(3)C語言規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性),算術(shù)運(yùn)算符的結(jié)合方向是“自左至右”42算術(shù)運(yùn)算符的優(yōu)先級(jí)別如下:()+-++--

*/%

+-

同級(jí)同級(jí)同級(jí)

單目雙目

低433、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需類型。轉(zhuǎn)換的一般形式:(類型名)(表達(dá)式)如:(double)a(將a轉(zhuǎn)換成double類型)(int)(x+y)(將x+y的值轉(zhuǎn)換成整型)(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)

注意:表達(dá)式應(yīng)該用括號(hào)括起來。(int)x+y先將x轉(zhuǎn)換成整型,然后與y相加。例題3.8書57頁444、自增自減運(yùn)算符(1)自增(++)自減(--)運(yùn)算符作用是使變量的值增1或減1,其用法是自增(++)使單個(gè)變量的值增1,自減(--)使單個(gè)變量的值減1。(2)用法與規(guī)則前置運(yùn)算-運(yùn)算符放在變量之前:++變量、--變量。先使變量的值增(或減)1,然后再以變化后的值參與其它運(yùn)算,即先增減后運(yùn)算。后置運(yùn)算-運(yùn)算符放在變量之后:變量++、變量--。變量先參與其它運(yùn)算然后再使變量的值增(或減)1,即先運(yùn)算、后增減。45例如:i=3;j=++i;(i的值先變成4,再賦給j,j的值為4)j=i++;(先將i的值3賦給j,j的值為3,然后i變?yōu)?)i=3;

printf(“%d”,++i);輸出結(jié)果為“4”

printf(“%d”,i++);輸出結(jié)果為“3”46注意:++和--運(yùn)算符只能用于變量,不能用于常量和表達(dá)式。因?yàn)?+和--蘊(yùn)含著賦值操作。負(fù)號(hào)運(yùn)算符、++、--和強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的優(yōu)先級(jí)相同,當(dāng)這些運(yùn)算符連用時(shí),按照從左到右的順序計(jì)算,即具有結(jié)合性。兩個(gè)+和-之間不能有空格。在表達(dá)式中,連續(xù)使用同一變量進(jìn)行自增或自減運(yùn)算時(shí),很容易出錯(cuò),所以最好避免這種用法。如++i++是非法的表達(dá)式。自增自減運(yùn)算,常用于循環(huán)語句中,使循環(huán)控制變量加(或減)1,以及指針變量,使指針指向下(或上)一個(gè)地址。475、有關(guān)表達(dá)式使用中的問題說明見書58-59頁。483.9賦值運(yùn)算符和賦值表達(dá)式1、賦值運(yùn)算符賦值符號(hào)“=”就是賦值運(yùn)算符,它的作用是將一個(gè)表達(dá)式的值賦給一個(gè)變量,實(shí)際上是將特定的值寫到變量所對應(yīng)的內(nèi)存單元中。賦值運(yùn)算符是雙目運(yùn)算符,因?yàn)椤?”兩邊都要有操作數(shù)。“=”左邊是待賦值的變量,“=”右邊是要賦的值。賦值運(yùn)算符的一般形式為:變量=常量或變量或表達(dá)式如:intx,y,z;x=20;y=x;z=x+y;492、賦值表達(dá)式由賦值運(yùn)算符或復(fù)合賦值運(yùn)算符,將一個(gè)變量和一個(gè)表達(dá)式連接起來的表達(dá)式,稱為賦值表達(dá)式。(1)一般格式是:變量(復(fù)合)賦值運(yùn)算符表達(dá)式(2)賦值表達(dá)式的值任何一個(gè)表達(dá)式都有一個(gè)值,賦值表達(dá)式也不例外。被賦值變量的值,就是賦值表達(dá)式的值。例如,a=5這個(gè)賦值表達(dá)式,變量a的值“5”就是它的值。503、賦值語句按照C語言規(guī)定,任何表達(dá)式在其末尾加上分號(hào)就構(gòu)成語句。同樣對于賦值表達(dá)式來說,在其后面加分號(hào)就構(gòu)成了賦值語句。因此,x=8;a=b=c=5;都是賦值語句。4、賦值運(yùn)算符及賦值表達(dá)式的使用(1)多個(gè)變量連續(xù)賦值如,a=b=c=10.連續(xù)賦值的表達(dá)式的運(yùn)算順序是從右向左(又稱為右結(jié)合性)其相當(dāng)于表達(dá)式a=(b=(c=10))),即先對C賦值,然后再對b,對a賦值。51(2)賦值表達(dá)式的嵌套例如,a=(b=2)+(c=3)。其相當(dāng)于表達(dá)式a=((b=2)+(c=3)),因?yàn)椤?”的優(yōu)先級(jí)高于“=”的優(yōu)先級(jí),故不能等同于(a=(b=2))+(c=3)。它將首先對b賦值2,得賦值表達(dá)式b=2的值為2,再對c賦值為3,得賦值表達(dá)式c=3的值為3,再將兩個(gè)賦值表達(dá)式的值相加得5,然后將5賦值給a,最終表達(dá)式的值為5。52注意:(1)賦值語句“=”左邊必須是變量名或?qū)?yīng)某特定內(nèi)存單元的表達(dá)式,不能是常量或其它表達(dá)式。(2)賦值語句中的“=”表示賦值,不是代數(shù)中相等的意思。要表示相同的意思則應(yīng)用關(guān)系運(yùn)算符“==”表示,二者切勿混淆!532、類型轉(zhuǎn)換在C語言中,整型、實(shí)型和字符型數(shù)據(jù)間可以混合運(yùn)算。如果一個(gè)運(yùn)算符兩側(cè)的操作數(shù)類型不同,則系統(tǒng)按“先轉(zhuǎn)換,后運(yùn)算”的原則,首先將數(shù)據(jù)自動(dòng)轉(zhuǎn)換成同一類型,然后在同一類型數(shù)據(jù)間進(jìn)行運(yùn)算。(1)將浮點(diǎn)型數(shù)據(jù)賦給整型變量時(shí),舍棄浮點(diǎn)數(shù)的小數(shù)部分。如,i為整型變量,執(zhí)行“i=3.56”的結(jié)果是使i的值為3,以整數(shù)形式存儲(chǔ)在整型變量中。54(2)將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變,但以浮點(diǎn)型形式存儲(chǔ)到變量中。如,將23賦給float變量,即執(zhí)行f=23,先將23轉(zhuǎn)換成23.000000,再存儲(chǔ)到f中。(3)將一個(gè)double型數(shù)據(jù)賦給float變量時(shí),截取其前面7位有效數(shù)字,存放到float變量的存儲(chǔ)單元(4個(gè)字節(jié))中。(4)字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占1個(gè)字節(jié),而整型變量占2個(gè)字節(jié),因此,將字符數(shù)據(jù)(8個(gè)二進(jìn)制)放到整型變量存儲(chǔ)單元的低8位中。55(5)將一個(gè)int、short、long型數(shù)據(jù)賦給一個(gè)char變量時(shí),只將其低8位原封不動(dòng)地送到char型變量。(6)將帶符號(hào)地整型數(shù)據(jù)賦給long型變量時(shí),要進(jìn)行符號(hào)擴(kuò)展,將整型數(shù)的16位送到long型低16位中,如果int型數(shù)據(jù)位正書(符號(hào)位位0),則long型變量的高16位補(bǔ)0;如果int型變量為負(fù)值(符號(hào)位為1),則long型變量的高16位補(bǔ)1,以保持?jǐn)?shù)值不改變。56(7)將unsignedint型數(shù)據(jù)賦給longint型變量時(shí),不存在符號(hào)擴(kuò)展問題,只需將高位補(bǔ)0即可。(8)將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣(連原有的符號(hào)位也作為數(shù)值一起傳送)書61頁例題3.9573、復(fù)合的賦值運(yùn)算符再賦值符“=”之前加上其它運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。例如,a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3584、賦值表達(dá)式由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。它的一般形式為:<變量><賦值運(yùn)算符><表達(dá)式>對賦值表達(dá)式求解的過程是:先求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值,然后賦給賦值運(yùn)算符左側(cè)的變量。賦值運(yùn)算符左側(cè)的標(biāo)識(shí)符稱為“左值”。并不是任何對象都可以作為左值的,變量可以作為左值,而表達(dá)式a+b就不能作為左值,常變量也不能作為左值,因?yàn)槌W兞坎荒鼙毁x值。出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式稱為“右值”。書64頁。593.10逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式1、C語言提供一種特殊的運(yùn)算符-逗號(hào)運(yùn)算符。用它將兩個(gè)表達(dá)式連接起來。例如:3+5,6+8稱為逗號(hào)表達(dá)式,又稱為“順序求值運(yùn)算符”。逗號(hào)表達(dá)式的一般形式為:表達(dá)式1,表達(dá)式22、逗號(hào)表達(dá)式的求解過程為:先求解表達(dá)式1,再求解表達(dá)式2。整個(gè)逗號(hào)表達(dá)式的值是表達(dá)式2的值。賦值運(yùn)算符的優(yōu)先級(jí)別高于逗號(hào)運(yùn)算符。例如:對逗號(hào)表達(dá)式求解a=3*5,a*4最后結(jié)果為60603、逗號(hào)表達(dá)式的一般形式可以擴(kuò)展為:表達(dá)式1,表達(dá)式2,……,表達(dá)式n它的值為表達(dá)式n的值。4、逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的。注意:并不是任何地方出現(xiàn)的逗號(hào)都是作為逗號(hào)運(yùn)算符。例如,函數(shù)參數(shù)之間的逗號(hào)。61運(yùn)算符的有關(guān)概念作用:對運(yùn)算對象完成規(guī)定的操作運(yùn)算類型:按運(yùn)算對象分:單目、雙目、三目按功能分:算術(shù)、賦值、關(guān)系、邏輯條件、逗號(hào)、位、其他62運(yùn)算符的優(yōu)先級(jí)和結(jié)合性優(yōu)先級(jí)指各種運(yùn)算符號(hào)的運(yùn)算優(yōu)先順序例如:算術(shù)運(yùn)算優(yōu)先于關(guān)系運(yùn)算算術(shù)運(yùn)算中先*/后+-結(jié)合性指運(yùn)算符號(hào)和運(yùn)算對象的結(jié)合方向分為:從左向右(左結(jié)合)和從右向左(右結(jié)合)例如:算術(shù)運(yùn)算符為左結(jié)合

a-b+4

賦值運(yùn)算符為右結(jié)合

a=b=5(C語言規(guī)定見教材P297附錄B)63本章涉及的運(yùn)算符+-*/%++--+-=+=-=*=/=%=&=|=^=>>=<<=><>=<===!=&&||!&|^~<<>>?:,&sizeof

(數(shù)據(jù)類型標(biāo)識(shí)符)類型種類算術(shù)運(yùn)算符賦值運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符位運(yùn)算符條件運(yùn)算符逗號(hào)運(yùn)算符其他運(yùn)算符64表達(dá)式的有關(guān)概念什么是表達(dá)式由運(yùn)算符將運(yùn)算對象連接成的式子,它描述了一個(gè)具體的求值運(yùn)算過程。計(jì)算表達(dá)式的值按照運(yùn)算符的運(yùn)算規(guī)則求值求值時(shí)注意運(yùn)算符的優(yōu)先級(jí)和結(jié)合性表達(dá)式值的類型自動(dòng)轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換65例如:表達(dá)式:150+'b'*2-12.456b=(++a)-2a/=a*=(a=2)f=a>b>c--a||++b&&c++max=a>b?a:ba=3,a+=3,a*a 1/(float)a+666算術(shù)運(yùn)算算術(shù)運(yùn)算符的優(yōu)先級(jí)

()+-++--

*/%

+-

同級(jí)同級(jí)同級(jí)

單目雙目

低沒有乘方運(yùn)算符,要計(jì)算a3要寫作a*a*a的連乘,或用標(biāo)準(zhǔn)庫函數(shù)pow(a,3)“/”的運(yùn)算對象可為各種類型數(shù)據(jù),但是當(dāng)進(jìn)行兩個(gè)整型數(shù)據(jù)相除時(shí),運(yùn)算結(jié)果也是整型數(shù)據(jù)“%”要求運(yùn)算對象必須是整型數(shù)據(jù),功能是求兩數(shù)相除的余數(shù),余數(shù)的符號(hào)與被除數(shù)的符號(hào)相同。67自增自減運(yùn)算++--是單目運(yùn)算符有前綴和后綴兩種形式

前綴形式:先自增(自減)再引用;后綴形式:先引用再自增(自減);功能:前綴形式++a

等價(jià)于

a=a+1

--

a

等價(jià)于

a=a–1

后綴形式a++

等價(jià)于a=a+1

a--

等價(jià)于a=a–1表達(dá)式的值會(huì)不同68例如:當(dāng)a=5時(shí)⑴++a表達(dá)式的值為6,且

a=6⑵

a++表達(dá)式的值為5,且

a=6⑶

b=++a

等價(jià)于

a=a+1;b=a

表達(dá)式的值為6,且a=6,

b=6⑷b=a++等價(jià)于

b=a;a=a+1

表達(dá)式的值為5,且a=6,

b=5

69說明:++和--的運(yùn)算對象只能是變量(或運(yùn)算結(jié)果是變量的表達(dá)式),不能是常量(或運(yùn)算結(jié)果是數(shù)值的表達(dá)式)。

例如:

5++、(a+2)++

不合法。具有右結(jié)合性,結(jié)合方向?yàn)閺挠业阶蟆@纾?/p>

–a++

等價(jià)于-(a++)

如果有多個(gè)運(yùn)算符連續(xù)出現(xiàn)時(shí),C系統(tǒng)盡可能多的從左到右將字符組合成一個(gè)運(yùn)算符例如:

i+++j

等價(jià)于(i++)+j

-i+++-j

等價(jià)于-(i++)+(-j)

70main(){inta=5;

printf("%d%d\n",a,a++);}說明(續(xù)):對函數(shù)參數(shù)的求值順序:

TurboC系統(tǒng)先計(jì)算最右邊的參數(shù)值,再依次計(jì)算左面的參數(shù)值。【例2.5】有多個(gè)函數(shù)參數(shù)且為同一變量自增的運(yùn)算處理。

輸出結(jié)果:65運(yùn)行例2.571說明(續(xù)):【例2.6】有多個(gè)函數(shù)參數(shù)且為同一變量多次自增的運(yùn)算處理。

main(){inta=5;

printf("%d%d\n",a,(a++)+(a++));}輸出結(jié)果:711運(yùn)行例2.672賦值運(yùn)算賦值運(yùn)算符(右結(jié)合)

=+=-=*=/=%=&=|=^=>>=<<=賦值表達(dá)式將表達(dá)式的值存入變量對應(yīng)的內(nèi)存單元中m=12b=(++a)-2m%=3+n等價(jià)于

m=m%(3+n)x*=(x=5)73說明:賦值號(hào)左邊必須是變量,右邊可以是C語言任意合法的表達(dá)式例如:n=t+2<s合法

a+b=15

不合法賦值運(yùn)算符僅優(yōu)先于“,”,且具有右結(jié)合性例如:

a=b=b*c>10等價(jià)于:a=(b=(

(b*c)>10)

)賦值號(hào)與數(shù)學(xué)中的等號(hào)含義不同例如:數(shù)學(xué)中a=b

等價(jià)于b=aC語言中a=b不等價(jià)于b=a74關(guān)系運(yùn)算關(guān)系運(yùn)算符(左結(jié)合)

>>=<<=

==!=較高較低關(guān)系表達(dá)式用關(guān)系運(yùn)算符將運(yùn)算對象連接成的式子例如:12<'C'+1(字符型數(shù)據(jù)比較ASCII值)a==b>=c等價(jià)于a==(b>=c)

與(a==b)>=c不等價(jià)關(guān)系運(yùn)算符優(yōu)先于賦值,低于算術(shù)75說明:關(guān)系運(yùn)算的結(jié)果應(yīng)該是邏輯值。C語言用數(shù)值用1表示邏輯真,0表示邏輯假例如:7>5的值是1,5>7的值是0

'a'>'b'的值是0,'a'<'b'

的值是1即關(guān)系表達(dá)式的值:0或1實(shí)型數(shù)可進(jìn)行大于或小于比較,但通常不進(jìn)行==或!=的關(guān)系運(yùn)算76邏輯運(yùn)算符邏輯運(yùn)算符&&||!邏輯運(yùn)算符的運(yùn)算規(guī)則運(yùn)算對象邏輯運(yùn)算結(jié)果aba&&ba||b!a非0非0110非000100非00110000177邏輯表達(dá)式邏輯表達(dá)式用邏輯運(yùn)算符將運(yùn)算對象連接成的式子例如:0&&'b'a&&b||c&&da||b-5||c/4!x+y>=z邏輯運(yùn)算符的優(yōu)先級(jí)和結(jié)合性:!是單目運(yùn)算符,右結(jié)合,高于算術(shù)&&和||是雙目運(yùn)算符,左結(jié)合,高于賦值運(yùn)算符,低于關(guān)系運(yùn)算符78邏輯運(yùn)算規(guī)則從左到右依次進(jìn)行邏輯計(jì)算運(yùn)算對象為非0表示邏輯真運(yùn)算對象為0表示邏輯假邏輯運(yùn)算的結(jié)果為0或1例如設(shè):a=15,b=0,c=-2a&&b&&c結(jié)果為0a||b||c結(jié)果為1(a+c)||b&&c結(jié)果為179邏輯運(yùn)算規(guī)則(續(xù))運(yùn)算按照從左至右的順序進(jìn)行,一旦能夠確定邏輯表達(dá)式的值,就立即結(jié)束運(yùn)算——邏輯運(yùn)算的短路性質(zhì)例如設(shè):a=1,b=0,c=-2a&&b&&c(a++)||++b&&--c為0,運(yùn)算終止,表達(dá)式值為0為非0,運(yùn)算終止,表達(dá)式值為1且a為2,b為0,c為-2(b,c保持原值)80關(guān)系與邏輯運(yùn)算符的應(yīng)用表示數(shù)學(xué)公式a>b>c判斷a,b,c三條線段能否組成一個(gè)三角形

a,b不同時(shí)為負(fù)

a+b>c&&a+c>b&&b+c>aa>=0||b>=0!(a<0&&b<0)(a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)a>b&&b>c81位運(yùn)算符~&^|<<>>位邏輯運(yùn)算符移位運(yùn)算符單目位運(yùn)算符的運(yùn)算對象只能是整型數(shù)據(jù)或字符型數(shù)據(jù),不能是實(shí)型數(shù)據(jù)運(yùn)算對象一律按二進(jìn)制補(bǔ)碼參加運(yùn)算,并按位進(jìn)行運(yùn)算位運(yùn)算的結(jié)果是一個(gè)整型數(shù)據(jù)低于單目、算術(shù)運(yùn)算符,高于其他運(yùn)算符低于單目、算術(shù)和關(guān)系運(yùn)算符,高于其他運(yùn)算符82位邏輯運(yùn)算符的運(yùn)算規(guī)則假設(shè)ai和bi均是一個(gè)二進(jìn)制位(bit)

運(yùn)算對象邏輯運(yùn)算結(jié)果aibiai&biai|biai

^bi?ai000001010111100110111100例如:假設(shè)a=10,b=010求a&b、a|b、a^b、?a83程序如下:

main(){inta=10,b=010;

printf("%d%d\n",a&b,a|b);

printf("%d%d\n",a^b,~a);}輸出結(jié)果:8102-110000000000001010&00000000000010000000000000001000即:a&b的值是80000000000001010?

1111111111110101即:?a的值是-11運(yùn)行jc2_b84移位運(yùn)算例如:a<<ba+8>>b-1等價(jià)于(a+8)>>(b-1)例如:假設(shè)a=10,b=2,求a<<b、a+8>>b-1

main(){inta=10,b=2;

printf("%d%d\n",a<<b,a+8>>b-1);}輸出結(jié)果:409運(yùn)行jc2_c請自行分析運(yùn)行結(jié)果85條件表達(dá)式運(yùn)算條件運(yùn)算符:?:條件表達(dá)式的一般形式表達(dá)式1?表達(dá)式2:表達(dá)式3例如:m<n?x:a+3a++>=10&&b-->20?a:bx=3+a>5?100:200C語言中唯一的三目運(yùn)算符,要正確區(qū)分用?和:分隔的表達(dá)式涉及條件運(yùn)算符的優(yōu)先級(jí)與結(jié)合性86條件運(yùn)算符優(yōu)先級(jí)條件運(yùn)算符優(yōu)先級(jí)高于賦值、逗號(hào)運(yùn)算符,低于其他運(yùn)算符例如:⑴m<n?

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論