已閱讀5頁(yè),還剩63頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式,2.1 C的數(shù)據(jù)類型,能被計(jì)算機(jī)處理的信息稱為數(shù)據(jù)(data)。在計(jì)算機(jī)科學(xué)領(lǐng)域中,數(shù)據(jù)是廣義的。數(shù)值、字符、文字、表格、圖形和圖像、聲音等都是數(shù)據(jù)。程序、算法處理的對(duì)象是數(shù)據(jù)。 C語(yǔ)言中數(shù)據(jù)是有類型的,數(shù)據(jù)的類型簡(jiǎn)稱數(shù)據(jù)類型。在C語(yǔ)言中討論數(shù)據(jù),總是把數(shù)據(jù)的表示、數(shù)據(jù)值和數(shù)據(jù)類型作為一個(gè)整體考察。,第二章 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式,2.1 C的數(shù)據(jù)類型,2.1 C的數(shù)據(jù)類型,注意 :,1、不同數(shù)據(jù)類型有不同的取值范圍P43(表3-1),p46(表3-2)。 2、不同的編譯系統(tǒng),數(shù)據(jù)分配字節(jié)不同。例如TC P43(表3-1)中int 型數(shù)據(jù)分配2個(gè)字節(jié)(16位),而VC+6.0中int型數(shù)據(jù)分配4個(gè)字節(jié)(32位)。 3、不同的數(shù)據(jù)類型有不同的操作。如整型數(shù)可以取余操作,實(shí)型數(shù)據(jù)卻不行;整型、實(shí)型數(shù)據(jù)可以有加法,字符數(shù)組不行。 4、不同的數(shù)據(jù)類型即使有相同的操作有時(shí)含義也不同,如指針數(shù)據(jù)自增1與整數(shù)自增1含義是不同的。,2.1 C的數(shù)據(jù)類型,注意 :,5、不同的數(shù)據(jù)類型對(duì)計(jì)算機(jī)可能出現(xiàn)的錯(cuò)誤不同。如整型數(shù)的溢出錯(cuò)誤,浮點(diǎn)數(shù)的精度的丟失(有效數(shù)字位數(shù)不夠)。 6、C語(yǔ)言的數(shù)據(jù)類型可以構(gòu)造復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。如使用結(jié)構(gòu)體數(shù)組可以構(gòu)造線性表。使用指針類型、結(jié)構(gòu)體類型可以構(gòu)造線性鏈表(棧、隊(duì)列)、樹、圖。(在數(shù)據(jù)結(jié)構(gòu)課程介紹),2.2 常量與變量,2、2、1 常量:在程序的運(yùn)行過程中,其值不能改變的量稱為常量。它相當(dāng)于數(shù)學(xué)中的常數(shù)。,在C語(yǔ)言中,常量可以分為一般常量和符號(hào)常量?jī)深悺?1.常量的使用(一):,2、2、1 常量:,2.常量的使用(二) 符號(hào)常量的使用: #define PI 3.1416 #include void main( ) float s,l; s=10*10*PI; l=2* PI*10; printf(“s=%fn,l=%fn“,s,l); printf(“PI=%fn“,PI) ,PI也是一個(gè)常量,稱為符號(hào)常量,它由#define命令定義,代表3.1416。該程序在編譯之前,會(huì)自動(dòng)將程序中所有的PI替換成3.1416。這樣程序?qū)⒌葍r(jià)于后面(三)的程序。,2、2、1 常量:,3. 常量的使用(三): #include void main( ) float s,l; s=10*10*3.1416; l=2* 3.1416*10; printf(“s=%fn,l=%fn“,s,l); printf(“PI=%fn“,3.1416) ,由于替換命令都是在編譯之前進(jìn)行的,所以類似于#define 這樣的命令被稱之為預(yù)處理命令。(例如 #include )預(yù)處理命令的命令行一般都是放在源程序中最前面的說明部分。,2、2、1 常量:,使用符號(hào)常量的好處:(1)含義清楚、見名知意。 (2)修改方便、一改全改。,思考:同是常量,符號(hào)常量在程序設(shè)計(jì)中有什么優(yōu)勢(shì)?,2、2、2 變量,在程序的運(yùn)行過程中,其值可以改變的量稱為變量。,1、變量名(用標(biāo)識(shí)符表示)、變量在內(nèi)存中占據(jù)的存儲(chǔ)單元、變量值三者關(guān)系。 變量名在程序運(yùn)行過程中不會(huì)改變,變量的值可以改變。 變量名遵守標(biāo)識(shí)符準(zhǔn)則。,2、2、2 變量,2、 變量的定義格式: 變量類型 變量名; int num;,2、2、2 變量,3、變量的特性,2、2、2 變量,4、變量:“先定義,后使用”。 1)只有定義過的變量才可以在程序中使用,這使得變量名的拼寫錯(cuò)誤容易發(fā)現(xiàn)。 2)定義過的變量屬于確定的類型,編譯系統(tǒng)可方便地檢查變量所進(jìn)行運(yùn)算的合法性。 3)在編譯時(shí)根據(jù)變量類型可以為變量確定存儲(chǔ)空間,“先定義后使用”使程序效率高。,2、2、2 變量,例(200903) 12. 若函數(shù)中有定義語(yǔ)句:int k;,則 B A)系統(tǒng)將自動(dòng)給k賦初值0 B)這是k中的值無(wú)定義 C)系統(tǒng)將自動(dòng)給k賦初值-1 D)這時(shí)k中無(wú)任何值,2、3 整型數(shù)據(jù),2.3.1整型常量的表示方法,1)十進(jìn)制。例如123,-456,0。 2)八進(jìn)制。以0開頭,后面跟幾位的數(shù)字(0-7)。 例如:0123=(123)8=(83)10;-011=(-11)8=(-9)10。 3)十六進(jìn)制。以0x開頭,后面跟幾位的數(shù)字(0-9,A-F)。 注意:AF(af)是不區(qū)分大小寫的。 例如:0x123=291,-0x12=-18 , 0xF=15 。,2.3.1整型常量的表示方法,4)整型常量的類型(整型常數(shù)的后綴, 在整型變量部分介紹,這里只要知道怎么表示)。 整型常量后綴可以用: u或U明確說明為無(wú)符號(hào)整型數(shù) l或L明確說明為長(zhǎng)整型數(shù).,例如:123L,123ul,123u,123UL,2.3.1整型常量的表示方法,1、以下選項(xiàng)中可作為C語(yǔ)言合法整數(shù)的是 c A)10110B B)0386 C)0Xffa D)x2a2 2、與十六進(jìn)制數(shù)200等值得十進(jìn)制數(shù)為(B) A)256 B)512 C)1024 D)2048,2.3.2 整型變量,1、整型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)據(jù)在內(nèi)存中以二進(jìn)制形式存放,事實(shí)上以補(bǔ)碼形式存放。 例如:定義一個(gè)整型變量i=10,,補(bǔ)充知識(shí)(參考計(jì)算機(jī)文化基礎(chǔ)等課程): 1)帶符號(hào)數(shù)的表示,原碼、反碼、補(bǔ)碼。 2)原碼-補(bǔ)碼相互轉(zhuǎn)化。正數(shù)的補(bǔ)碼與其原碼相同,負(fù)數(shù)的補(bǔ)碼是其對(duì)應(yīng)的絕對(duì)值的原碼數(shù)值位按位取反+1。,2.3.2 整型變量,例題:10,-10的計(jì)算機(jī)機(jī)內(nèi)表示。 思路:先將數(shù)值表示為二進(jìn)制形式(十進(jìn)制=二進(jìn)制,除2取余),即獲得數(shù)值的原碼。將原碼轉(zhuǎn)化為補(bǔ)碼,就是機(jī)內(nèi)表示。 10 =(1010)2 =(0000,0000,0000,1010) 原=(0000,0000,0000,1010)補(bǔ)。 -10=(-1010)2=(1000,0000,0000,1010) 原=(1111,1111,1111,0110)補(bǔ)。 從10,-10的計(jì)算機(jī)機(jī)內(nèi)表示可以看出正數(shù)、負(fù)數(shù)機(jī)內(nèi)表示(補(bǔ)碼表示)看上去明顯不同。,2.3.2 整型變量,2、整型變量的分類,整型變量的基本類型為int。通過加上修飾符,可定義更多的整數(shù)數(shù)據(jù)類型。,歸納起來(lái)可以用6種整型變量: l 有符號(hào)基本整型 :signedint l 有符號(hào)短整型 :signedshortint l 有符號(hào)長(zhǎng)整型 :signedlongint l 無(wú)符號(hào)基本整型 :unsigned int l 無(wú)符號(hào)短整型 :unsigned short int l 無(wú)符號(hào)長(zhǎng)整型 :unsigned long int,2.3.2 整型變量,2、整型變量的分類,1)根據(jù)表達(dá)范圍可以分為:基本整型 (int)、短整型(short )、長(zhǎng)整型(long )。用long型可以獲得大范圍的整數(shù),但同時(shí)會(huì)降低運(yùn)算速度。 2)根據(jù)是否有符號(hào)可以分為:有符號(hào)(signed,默認(rèn)),無(wú)符號(hào)(unsigned)-目的:擴(kuò)大表示范圍,有些情況只需要用正整數(shù)。 有符號(hào)整型數(shù)的存儲(chǔ)單元的最高位是符號(hào)位(0:正、1:負(fù)),其余為數(shù)值位。無(wú)符號(hào)整型數(shù)的存儲(chǔ)單元的全部二進(jìn)制位用于存放數(shù)值本身而不包含符號(hào)。,C標(biāo)準(zhǔn)沒有具體規(guī)定上面數(shù)據(jù)類型所占用的字節(jié)數(shù),只要求long型數(shù)據(jù)長(zhǎng)度不短于int型,short型不長(zhǎng)于int型。具體如何實(shí)現(xiàn),由各計(jì)算機(jī)系統(tǒng)自行決定。如微機(jī)上short,int都是16位,而long是32位;VAX750機(jī),int,long都是32位,而short是16位。,2.3.2 整型變量,2、整型變量的分類(p43 表3.1),2.3.2 整型變量,2、整型變量的分類,例子:保存整數(shù)13的各種整型數(shù)據(jù)類型。,2.3.2 整型變量,3、整型變量的定義,格式:變量類型 變量名表;,例如:,#include void main( ) int a,b,c,d; unsigned u; a=12; b=-24; u=10; c=a+u; d=b+u; printf(“a+u=%d,b+u=%dn”,c,d); 結(jié)果: a+u=22, b+u=-14,2.3.2 整型變量,3、整型變量的定義,說明: (1)變量定義時(shí),可以說明多個(gè)相同類型的變量。各個(gè)變量用“,”分隔。類型說明與變量名之間至少有一個(gè)空格間隔。 (2)最后一個(gè)變量名之后必須用“;”結(jié)尾。 (3)變量必須先定義后使用。 (4)也可以在定義變量的同時(shí),對(duì)變量進(jìn)行初始化。,2.3.2 整型變量,3、整型變量的定義,例2-2:變量初始化 #include void main() int a=3,b=5; printf(“a+b=%dn“,a+b); ,2.3.2 整型變量,4、整型數(shù)據(jù)的溢出,整型數(shù)最大允許值+1,最小允許值-1,會(huì)出現(xiàn)什么情況? 例如:32767+1=-32768;-32768-1=32767。,例2-2a:整型數(shù)據(jù)的溢出 #include void main() int a,b; a=32767; b=a+1; printf(“na=%d,a+1=%dn“,a,b); a=-32768; b=a-1; ; printf(“na=%d,a-1=%dn“,a,b); 結(jié)果:a=32767,a+1=-32768 a=-32768,a-1=32767 超出范圍就發(fā)生“溢出”,運(yùn)行時(shí)不報(bào)錯(cuò)。,2.4 實(shí)型(浮點(diǎn)型)數(shù)據(jù),2、4、1實(shí)型常量的表示方法,實(shí)數(shù)(浮點(diǎn)數(shù))有兩種表示形式: 1、十進(jìn)制小數(shù)形式。由數(shù)字,小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn))。 例如:.123、123.、123.0、0.0 2、 指數(shù)形式。格式:aEn。 例如:123e3、123E3都是實(shí)數(shù)的合法表示。,2、4、1實(shí)型常量的表示方法,指數(shù)形式注意: 1)字母e(或E)前面必須有數(shù)字,后面必須為整數(shù)。 例如:e3、2.1e3.5、.e3、e都不是合法的指數(shù)形式。 2)規(guī)范化的指數(shù)形式。在字母e或E之前的小數(shù)部分,小數(shù)點(diǎn)左邊應(yīng)當(dāng)有且只能有一位非0數(shù)字。用指數(shù)形式輸出時(shí),是按規(guī)范化的指數(shù)形式輸出的。 例如:2.3478e2、3.0999E5、6.46832e12都屬于規(guī)范化的指數(shù)形式。 3)實(shí)型常量都是雙精度,如果要指定它為單精度,可以加后綴f(實(shí)型數(shù)據(jù)類型參看實(shí)型變量部分說明)。,2、4、1實(shí)型常量的表示方法,1、 以下符合C語(yǔ)言語(yǔ)法的實(shí)型常量是(C) A)1.2E0.5 B)3.14.159E C).5E-3 D)E15 (13). 一下選項(xiàng)中,能用作數(shù)據(jù)常量的是 (200903)D A)o115 B)0118 C)1.5e1.5 D)115L,2、4、2 實(shí)型變量,1.實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式,一個(gè)實(shí)型數(shù)據(jù)一般在內(nèi)存中占4個(gè)字節(jié)(32位)。與整數(shù)存儲(chǔ)方式不同,實(shí)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。系統(tǒng)將實(shí)型數(shù)據(jù)分為小數(shù)部分和指數(shù)部分,分別存放。,實(shí)型數(shù)據(jù)存放的示意圖 :,標(biāo)準(zhǔn)C沒有規(guī)定用多少位表示小數(shù),多少位表示指數(shù)部分,由C編譯系統(tǒng)自定。例如,很多編譯系統(tǒng)以24位表示小數(shù)部分(包括符號(hào)),8位表示指數(shù)部分(包括指數(shù)的符號(hào)) 。小數(shù)部分占的位數(shù)多,實(shí)型數(shù)據(jù)的有效數(shù)字多,精度高;指數(shù)部分占的位數(shù)多,則表示的數(shù)值范圍大。,2、實(shí)型變量的分類,實(shí)型變量分為:?jiǎn)尉?float)、雙精度(double)、長(zhǎng)雙精度(long double)。,ANSI C沒有規(guī)定每種數(shù)據(jù)類型的長(zhǎng)度、精度和數(shù)值范圍。下表列出微機(jī)上常用的C編譯系統(tǒng)的情況。,對(duì)于每一個(gè)實(shí)型變量也都應(yīng)該先定義后使用。如 :,float x,y; double z; long double t;,3、實(shí)型數(shù)據(jù)的舍入誤差(對(duì)比:整型數(shù)據(jù)的溢出 ),實(shí)型變量是用有限的存儲(chǔ)單元存儲(chǔ)的,因此提供的有效數(shù)字是有限的,在有效位以外的數(shù)字將被舍去,由此可能會(huì)產(chǎn)生一些誤差。,3、實(shí)型數(shù)據(jù)的舍入誤差(對(duì)比:整型數(shù)據(jù)的溢出 ),結(jié)論: 由于實(shí)數(shù)存在舍入誤差,使用時(shí)要注意: (a)不要試圖用一個(gè)實(shí)數(shù)精確表示一個(gè)大整數(shù),記?。焊↑c(diǎn)數(shù)是不精確的。 (b)實(shí)數(shù)一般不判斷“相等”,而是判斷接近或近似。 (c)避免直接將一個(gè)很大的實(shí)數(shù)與一個(gè)很小的實(shí)數(shù)相加、相減,否則會(huì)“丟失”小的數(shù)。 (d)根據(jù)要求選擇單精度、雙精度。,2、5 字符型數(shù)據(jù),2、5、1字符常量,字符常量是用單引號(hào)()括起來(lái)的一個(gè)字符。,字符常量主要用下面幾種形式表示:,1、直接用單引號(hào)括起來(lái)一個(gè)字符(可顯示的字符),如,a、x、D、$、?、a、A、1、等都是字符常量。 錯(cuò)例,abc、我 2、字符的轉(zhuǎn)義表示法(ASCII碼表示)。 (1)、預(yù)先定義的一部分常用的轉(zhuǎn)義字符。如n-換行,t-水平制表。 書P48頁(yè)表3.3 ,記憶 (2)轉(zhuǎn)義表示格式:ddd或xhh(其中ddd,hh是字符的ASCII碼,ddd是1到3位8進(jìn)制數(shù)ASCII碼代表的字符、 hh是1到2位16進(jìn)制數(shù)ASCII碼代表的字符)。注意:不可寫成0xhh或0ddd(整數(shù))。 舉例:101:代表字母 A; 040: 代表空格符; 0或000:代表空操作符,即空字符, ASCII碼為0。 x3A,2、5、1字符常量,例:2.5.1 轉(zhuǎn)義字符的使用 #include void main() printf(“abctderftgn“); printf(“htibbjkn“); ,2、5 字符型數(shù)據(jù),2、5、2字符變量,字符型變量是用來(lái)存放字符數(shù)據(jù),且只能存放一個(gè)字符。所有編譯系統(tǒng)都規(guī)定一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。,字符變量定義形式: char cl,c2; c1=a; c2=b;,2、5、3字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用,將一個(gè)字符常量存放到字符變量中,是將該字符的ASCII碼存放到存儲(chǔ)單元中。,2、5、3字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用,可以看出字符數(shù)據(jù)以ASCII碼存儲(chǔ)的形式與整數(shù)的存儲(chǔ)形式類似,這使得字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用(當(dāng)作整型量)。 具體表現(xiàn)為: 1、可以將整型量賦值給字符變量,也可以將字符量賦值給整型變量。 2、可以對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算(即對(duì)它們的ASCII碼進(jìn)行算術(shù)運(yùn)算)。 3、一個(gè)字符數(shù)據(jù)既可以以字符形式輸出(ASCII碼對(duì)應(yīng)的字符),也可以以整數(shù)形式輸出(直接輸出ASCII碼)。 注意:盡管字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用,但是字符型只占1個(gè)字節(jié),即如果作為整數(shù)使用范圍0-255(無(wú)符號(hào)), -128-127(有符號(hào))。,2、5、3字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用,例2-7a:給字符變量賦以整數(shù)(字符型、整型數(shù)據(jù)通用 turbo c -128-127) #include “stdio.h” void main( ) /* 字符a的各種表達(dá)方法 */ char c1=a; char c2=x61; /* note:x,. */ char c3=141; char c4=97; char c5=0x61; /* note: 0x,0. */ char c6=0141; printf(“nc1=%c,c2=%c,c3=%c,c4=%c,c5=%c,c6=%cn“,c1,c2,c3,c4,c5,c6); printf(“c1=%d,c2=%d,c3=%d,c4=%d,c5=%d,c6=%dn“,c1,c2,c3,c4,c5,c6); c1=a,c2=a,c3=a,c4=a,c5=a,c6=a c1=97,c2=97,c3=97,c4=97,c5=97,c6=97 過程:整型數(shù)=機(jī)內(nèi)表示(兩個(gè)字節(jié))=取低8位賦值給字符變量,2、5、3字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用,例2-8a:大小寫字母的轉(zhuǎn)換(ASCII碼表:小寫字母比對(duì)應(yīng)的大寫字母的ASCII碼大32,本例還可以看出允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算,運(yùn)算時(shí)字符數(shù)據(jù)用ASCII碼值參與運(yùn)算) #include void main() char c1,c2,c3; c1=a; c2=b; c1=c1-32; c2=c2-32; c3=130; printf(“n%c %c %cn“,c1,c2,c3); printf(“%d %d %dn“,c1,c2,c3); A B ? 65 66 126 (此時(shí)如何處理?) (p52頁(yè)),2、5、4字符串常量,字符串常量:是一對(duì)雙引號(hào)(“”)括起來(lái)的字符序列。 例如:“How do you do?”,“CHINA”,“a”,“$123.45”.,注意: 1、區(qū)分字符常量與字符串常量。如a 和“a” 。 C語(yǔ)言規(guī)定:在每個(gè)字符串的結(jié)尾加一個(gè)“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以0(ASCII碼為0的字符)作為字符串結(jié)束標(biāo)志。 如:“CHINA”在內(nèi)存中的存儲(chǔ)應(yīng)當(dāng)是:(長(zhǎng)度=6),2、5、4字符串常量,2、不能將字符串賦給字符變量。 如:char c; c=a;(正確) c=“a”(錯(cuò)誤) 3、C語(yǔ)言沒有專門的字符串變量,如果想將一個(gè)字符串存放在變量中,可以使用字符數(shù)組。即用一個(gè)字符數(shù)組來(lái)存放一個(gè)字符串,數(shù)組中每一個(gè)元素存放一個(gè)字符。,2、6 變量賦初值,程序中常常需要對(duì)一些變量預(yù)先設(shè)置初值,C語(yǔ)言允許在定義變量的同時(shí)使變量初始化。 例如:,int a=3; /* 指定a為整型變量,初值為3 */ float f=3.56; /* 指定f為實(shí)型變量,初值為3.56 */ char c=a; /* 指定c為字符型變量,初值為a */,2、6 變量賦初值,可以只對(duì)定義的一部分變量賦初值。,int a,b=2,c=5; /* 指定a,b,c為整型變量,只對(duì)b、c初始化,b的初值為2 ,c的初值為5*/,初始化不是在編譯階段完成的,而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦予初值的,相當(dāng)于有一個(gè)賦值語(yǔ)句。,int a=3; 相當(dāng)于: int a; a=3;,2、7 各類數(shù)值型數(shù)據(jù)(整型、實(shí)型、字符型)的混合運(yùn)算,整型(包括int,short,long)和實(shí)型(包括float,double)數(shù)據(jù)可以混合運(yùn)算,另外字符型數(shù)據(jù)和整型數(shù)據(jù)可以通用,因此,整型、實(shí)型、字符型數(shù)據(jù)之間可以混合運(yùn)算。,例如:表達(dá)式10+a+1.5-8765.1234*b是合法的。 在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)先轉(zhuǎn)換成同一類型,然后進(jìn)行計(jì)算,轉(zhuǎn)換的方法有兩種:自動(dòng)轉(zhuǎn)換(隱式轉(zhuǎn)換);強(qiáng)制轉(zhuǎn)換。,考慮: int x=y=z=1;是否正確?,2、7 各類數(shù)值型數(shù)據(jù)(整型、實(shí)型、字符型)的混合運(yùn)算,1、自動(dòng)轉(zhuǎn)換(隱式轉(zhuǎn)換)自動(dòng)轉(zhuǎn)換發(fā)生在不同類型數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成。轉(zhuǎn)換規(guī)則:(參看圖),2、7 各類數(shù)值型數(shù)據(jù)(整型、實(shí)型、字符型)的混合運(yùn)算,注意: (1)類型不同,先轉(zhuǎn)換為同一類型,然后進(jìn)行運(yùn)算。 (2)圖中縱向的箭頭表示當(dāng)運(yùn)算對(duì)象為不同類型時(shí)轉(zhuǎn)換的方向。可以看到箭頭由低級(jí)別數(shù)據(jù)類型指向高級(jí)別數(shù)據(jù)類型,即數(shù)據(jù)總是由低級(jí)別向高級(jí)別轉(zhuǎn)換。即按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,保證精度不降低。 (3)圖中橫向向左的箭頭表示必定的轉(zhuǎn)換(不必考慮其它運(yùn)算對(duì)象)。如字符數(shù)據(jù)參與運(yùn)算必定轉(zhuǎn)化為整數(shù),float型數(shù)據(jù)在運(yùn)算時(shí)一律先轉(zhuǎn)換為雙精度型,以提高運(yùn)算精度(即使是兩個(gè)float型數(shù)據(jù)相加,也先都轉(zhuǎn)換為double型,然后再相加)。 (4)賦值運(yùn)算,如果賦值號(hào)“=”兩邊的數(shù)據(jù)類型不同,賦值號(hào)右邊的類型轉(zhuǎn)換為左邊的類型。這種轉(zhuǎn)換是截?cái)嘈偷霓D(zhuǎn)換,不會(huì)四舍五入。,2、7 各類數(shù)值型數(shù)據(jù)(整型、實(shí)型、字符型)的混合運(yùn)算,2、強(qiáng)制轉(zhuǎn)換: 強(qiáng)制轉(zhuǎn)換是通過類型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)。 一般形式:(類型說明符)表達(dá)式 功能:把表達(dá)式的結(jié)果強(qiáng)制轉(zhuǎn)換為類型說明符所表示的類型。 例如: (int)a 將a的結(jié)果強(qiáng)制轉(zhuǎn)換為整型量。 (int)(x+y) 將x+y的結(jié)果強(qiáng)制轉(zhuǎn)換為整型量。 (float)a+b 將a的內(nèi)容強(qiáng)制轉(zhuǎn)換為浮點(diǎn)數(shù),再與b相加。 說明: (1)類型說明和表達(dá)式都需要加括號(hào)(單個(gè)變量可以不加括號(hào)) (2)無(wú)論隱式轉(zhuǎn)換,強(qiáng)制轉(zhuǎn)換都是臨時(shí)轉(zhuǎn)換,不改變數(shù)據(jù)本身的類型和值。,2、7 各類數(shù)值型數(shù)據(jù)(整型、實(shí)型、字符型)的混合運(yùn)算,例2-9:強(qiáng)制類型轉(zhuǎn)換,2、8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,2.8.1 C運(yùn)算符簡(jiǎn)介,本章主要介紹算術(shù)運(yùn)算符(包括自增自減運(yùn)算符)、賦值運(yùn)算符、逗號(hào)運(yùn)算符,其它運(yùn)算符在以后相關(guān)章節(jié)中結(jié)合有關(guān)內(nèi)容陸續(xù)進(jìn)行介紹。,2.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式,1、算術(shù)運(yùn)算符 +(加法運(yùn)算符。如3+5) -(減法運(yùn)算符或負(fù)值運(yùn)算符。如5-2,-3) *(乘法運(yùn)算符。如3*5) /(除法運(yùn)算符。如5/2,5.0/2) %(模運(yùn)算符或求余運(yùn)算符,%要求兩側(cè)均為整型數(shù)據(jù)。如7%4的值為3)。 除了負(fù)值運(yùn)算符-單目運(yùn)算符外,其它都是雙目運(yùn)算符。 考慮:-7%4,7%-4,-7%-4 ;-3,3,-3 C語(yǔ)言規(guī)定: 符號(hào)由被除數(shù)決定。,2.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式,2、算術(shù)表達(dá)式 算術(shù)表達(dá)式:用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來(lái)的、符合C語(yǔ)法規(guī)則的式子,稱為算術(shù)表達(dá)式。運(yùn)算對(duì)象可以是常量、變量、函數(shù)等。,例如,下面是一個(gè)合法的C算術(shù)表達(dá)式。 a*b/c-1.5+a; x+sqrt(0.25*y)/(abs(a+b)-3.6).,2.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式,注意:C語(yǔ)言算術(shù)表達(dá)式的書寫形式與數(shù)學(xué)表達(dá)式的書寫形式有一定的區(qū)別: (1) C語(yǔ)言算術(shù)表達(dá)式的乘號(hào)(*)不能省略。 例如:數(shù)學(xué)式b2-4ac,相應(yīng)的C表達(dá)式應(yīng)該寫成: b*b-4*a*c。 (2) C語(yǔ)言表達(dá)式中只能出現(xiàn)字符集允許的字符。 例如:數(shù)學(xué)r2相應(yīng)的C表達(dá)式應(yīng)該寫成: PI*r*r(其中PI是已經(jīng)定義的符號(hào)常量) 。 (3)C語(yǔ)言算術(shù)表達(dá)式不允許有分子分母的形式。 例如,(a+b)/(c+d)。 (4)C語(yǔ)言算術(shù)表達(dá)式只使用圓括號(hào)改變運(yùn)算的優(yōu)先順序() 不要指望用 )??梢允褂枚鄬訄A括號(hào),此時(shí)左右括號(hào)必須配對(duì),運(yùn)算時(shí)從內(nèi)層括號(hào)開始,由內(nèi)向外依次計(jì)算表達(dá)式的值。,2.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式,3、(算術(shù))運(yùn)算符的優(yōu)先級(jí)與結(jié)合性(P.365附錄C) (1)C語(yǔ)言規(guī)定了運(yùn)算符的“優(yōu)先級(jí)”和“結(jié)合性”。在表達(dá)式求值時(shí),先按運(yùn)算符的“優(yōu)先級(jí)別”高低次序執(zhí)行。 如表達(dá)式:a-b*c等價(jià)于a-(b*c),“*”運(yùn)算符優(yōu)先級(jí)高于“-”運(yùn)算符。 (2)如果在一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先級(jí)別相同,則按規(guī)定的“結(jié)合方向”處理。 例如:a-b+c,到底是(a-b)+c還是a-(b+c)?(b先與a參與運(yùn)算還是先于c參與運(yùn)算?) 查附錄C可知:+/-運(yùn)算優(yōu)先級(jí)別相同,結(jié)合性為“自左向右”,即就是說b先與左邊的a結(jié)合。所以a-b+c等價(jià)于(a-b)+c。,2.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式,(3)在書寫多個(gè)運(yùn)算符的表達(dá)式時(shí),應(yīng)當(dāng)注意各個(gè)運(yùn)算符的優(yōu)先級(jí),確保表達(dá)式中的運(yùn)算符能以正確的順序參與運(yùn)算。對(duì)于復(fù)雜表達(dá)式為了清晰起見可以加圓括號(hào)“()”強(qiáng)制規(guī)定計(jì)算順序。,2.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式,4、自增、自減運(yùn)算符,單目運(yùn)算符,使變量的值增1或減1。如: + +i, i+ + - -i, i - - 注意: (1)+ +i, - -i(前置運(yùn)算):先自增、減,再參與運(yùn)算;i+ +, i - -(后置運(yùn)算):先參與運(yùn)算, 再自增、減。 例如:i=3,分析j=+ +i; j=i+ +; (2)自增、減運(yùn)算符只用于變量,而不能用于常量或表達(dá)式。 例如:6+ +,(a+b)+ +,(-i)+ +都不合法。 (3)+,-的結(jié)合方向是“自右向左”(優(yōu)先級(jí)高于算術(shù)運(yùn)算符)。 例如:-i+-(i+) 合法。 (4)自增、自減運(yùn)算符常用于循環(huán)語(yǔ)句中,使循環(huán)變量自動(dòng)加1,也用于指針變量,使指針指向下一個(gè)地址。,2.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式,5、有關(guān)表達(dá)式使用過程中的問題說明,(1)C運(yùn)算符和表達(dá)式使用靈活,利用這一點(diǎn)可以巧妙處理許多在其它語(yǔ)言中難以處理的問題。但是ANSI C并沒有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序,允許各編譯系統(tǒng)自己安排。這可能導(dǎo)致有些表達(dá)式對(duì)不同編譯系統(tǒng)有不同的解釋,并導(dǎo)致最終結(jié)果的不一致。 例1:a=f1( )+f2( )中f1,f2哪個(gè)先調(diào)用。 例2:i=3,表達(dá)式(i+)+(i+)+(i+)的值。有些系統(tǒng)等價(jià)3+4+5,Turbo C等價(jià)3+3+3,總之,不要寫別人看不懂(難看懂)、也不知道系統(tǒng)會(huì)怎樣執(zhí)行的程序。,2.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式,5、有關(guān)表達(dá)式使用過程中的問題說明,(2)C語(yǔ)言有的運(yùn)算符為一個(gè)字符,有的由兩個(gè)字符組成,C編譯系統(tǒng)在處理時(shí)盡可能多地將若干字符組成一個(gè)運(yùn)算符(在處理標(biāo)識(shí)符、關(guān)鍵字時(shí)也按同一原則處理)。如i+j將解釋為(i+)+j而不是i+(+j)。為避免誤解,最好采用大家都能理解的寫法,比如通過增加括號(hào)明確組合關(guān)系,改善可讀性。 (3)C語(yǔ)言中類似的問題還有函數(shù)調(diào)用時(shí),實(shí)參的求值順序,C標(biāo)準(zhǔn)也無(wú)統(tǒng)一規(guī)定。 如:i=3,printf(“%d,%d”,i,i+);有些系統(tǒng)執(zhí)行的結(jié)果為3,3;有些系統(tǒng)為4,3。,總之,不要寫別人看不懂(難看懂)、也不知道系統(tǒng)會(huì)怎樣執(zhí)行的程序。,2.9 賦值運(yùn)算符和賦值表達(dá)式,1、賦值運(yùn)算符、類型轉(zhuǎn)換 賦值運(yùn)算符:賦值符號(hào)“=”就是賦值運(yùn)算符。,例如:x=10+y; 執(zhí)行賦值運(yùn)算(操作),將10+y的值賦給變量x,同時(shí)整個(gè)表達(dá)式的值就是剛才所賦的值 。,說明: (1)賦值運(yùn)算符左邊必須是變量,右邊可以是常量、變量、函數(shù)調(diào)用或常量、變量、函數(shù)調(diào)用組成的表達(dá)式。 例如:x=10 y=x+10 y=func( )都是合法的賦值表達(dá)式。 (2) 賦值符號(hào)“=”不同于數(shù)學(xué)的等號(hào),它沒有相等的含義。 (“= =”相等) 例如:C語(yǔ)言中x=x+1是合法的(數(shù)學(xué)上不合法),它的含義是取出變量x的值加1,再存放 到變量x中。,2.9 賦值運(yùn)算符和賦值表達(dá)式,(3) 賦值運(yùn)算時(shí),當(dāng)賦值運(yùn)算符兩邊數(shù)據(jù)類型不同時(shí),將由系統(tǒng)自動(dòng)進(jìn)行類型轉(zhuǎn)換。 轉(zhuǎn)換原則是:先將賦值號(hào)右邊表達(dá)式類型轉(zhuǎn)換為左邊變量的類型,然后賦值。 將實(shí)型數(shù)據(jù)(單、雙精度)賦給整型變量,舍棄實(shí)數(shù)的小數(shù)部分。 將整型數(shù)據(jù)賦給單、雙精度實(shí)型變量,數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲(chǔ)到變量中。 將double型數(shù)據(jù)賦給float型變量時(shí),截取其前面7位有效數(shù)字,存放到float變量的存儲(chǔ)單元中(32bits)。但應(yīng)注意數(shù)值范圍不能溢出。將float型數(shù)據(jù)賦給double型變量時(shí),數(shù)值不變,有效位數(shù)擴(kuò)展到16位(64bits)。 字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占一個(gè)字節(jié),而整型變量為2個(gè)字節(jié),因此將字符數(shù)據(jù)(8bits)放到整型變量低8位中。 類型轉(zhuǎn)換等等見課本P59P61,不要死記硬背,上機(jī)實(shí)踐和自學(xué)掌握。,2.9 賦值運(yùn)算符和賦值表達(dá)式,(4)C語(yǔ)言的賦值符號(hào)“=”除了表示一個(gè)賦值操作外,還是一個(gè)運(yùn)算符,也就是說賦值運(yùn)算符完成賦值操作后,整個(gè)賦值表達(dá)式還會(huì)產(chǎn)生一個(gè)所賦的值,這個(gè)值還可以利用 。 例如:分析x=y=z=3+5這個(gè)表達(dá)式。根據(jù)優(yōu)先級(jí):原式x=y=z=(3+5);根據(jù)結(jié)合性(從右向左):x=(y=(z=(3+5)x=(y=(z=3+5) 運(yùn)算步驟 :,z=(z=3+5),1,2.9 賦值運(yùn)算符和賦值表達(dá)式,2、復(fù)合賦值運(yùn)算符 在賦值符“=”之前加上某些運(yùn)算符,可以構(gòu)成復(fù)合賦值運(yùn)算符,復(fù)合賦值運(yùn)算符可以構(gòu)成賦值表達(dá)式。C語(yǔ)言中許多雙目運(yùn)算符可以與賦值運(yùn)算符一起構(gòu)成復(fù)合運(yùn)算符,即: +=,-=,*=,/=,%=,=,&=,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能城市建設(shè)項(xiàng)目承包合同4篇
- 2025年度智能水電安裝與維護(hù)一體化承包合同范文4篇
- 2024版廣告合同購(gòu)銷
- 2025年度建筑節(jié)能環(huán)保材料研發(fā)與應(yīng)用合同2篇
- 2025年度企業(yè)內(nèi)部采購(gòu)人員廉潔自律合作協(xié)議3篇
- 2025年度特種車輛充電樁定制與安裝合同4篇
- 2024鐵路客運(yùn)服務(wù)合同范本3篇
- 2025年度智慧城市建設(shè)項(xiàng)目承包合同規(guī)范3篇
- 2025年度智能農(nóng)業(yè)化肥代銷合作協(xié)議范本4篇
- 中國(guó)藍(lán)寶石襯底材料行業(yè)市場(chǎng)調(diào)查研究及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 2023年上海英語(yǔ)高考卷及答案完整版
- 西北農(nóng)林科技大學(xué)高等數(shù)學(xué)期末考試試卷(含答案)
- 金紅葉紙業(yè)簡(jiǎn)介-2 -紙品及產(chǎn)品知識(shí)
- 《連鎖經(jīng)營(yíng)管理》課程教學(xué)大綱
- 《畢淑敏文集》電子書
- 頸椎JOA評(píng)分 表格
- 員工崗位能力評(píng)價(jià)標(biāo)準(zhǔn)
- 定量分析方法-課件
- 朱曦編著設(shè)計(jì)形態(tài)知識(shí)點(diǎn)
- 110kV變電站工程預(yù)算1
- 某系統(tǒng)安全安全保護(hù)設(shè)施設(shè)計(jì)實(shí)施方案
評(píng)論
0/150
提交評(píng)論