第三章數(shù)據(jù)類型_第1頁(yè)
第三章數(shù)據(jù)類型_第2頁(yè)
第三章數(shù)據(jù)類型_第3頁(yè)
第三章數(shù)據(jù)類型_第4頁(yè)
第三章數(shù)據(jù)類型_第5頁(yè)
已閱讀5頁(yè),還剩47頁(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)介

第三章數(shù)據(jù)類型第1頁(yè),共52頁(yè),2023年,2月20日,星期三第三章

數(shù)據(jù)類型、運(yùn)算符與表達(dá)式3.1基本概念1、C語(yǔ)言程序的組成特點(diǎn)

一個(gè)C源程序由函數(shù)構(gòu)成,其中至少包含一個(gè)主函數(shù)(main函數(shù))。

C程序總是由main函數(shù)開(kāi)始執(zhí)行。分號(hào)“;”是C語(yǔ)言的一部分。C程序書(shū)寫(xiě)格式自由,一行內(nèi)可以寫(xiě)多條語(yǔ)句,且語(yǔ)句中的空格和回車(chē)符均可忽略不計(jì)。程序的注釋部分應(yīng)括在/*……*/之間;/和*之間不允許留有空格;注釋都分允許出現(xiàn)在程序中的任何位置上。第2頁(yè),共52頁(yè),2023年,2月20日,星期三2、標(biāo)識(shí)符

C語(yǔ)言的標(biāo)識(shí)將可分為以下三類:一、關(guān)鍵字

C語(yǔ)言共有32個(gè)關(guān)用字;每個(gè)關(guān)鍵字在C程序中都代表著某一固定含意,所有關(guān)鍵字都要用小寫(xiě)英文字母表示,且這些關(guān)鍵字都不允許作為用戶標(biāo)識(shí)將使用。C語(yǔ)言中的關(guān)鍵字可見(jiàn)書(shū).二、預(yù)定義標(biāo)識(shí)符

這些標(biāo)識(shí)符在C而言中都具有特定含意,如C語(yǔ)言提供的庫(kù)函數(shù)的名字和預(yù)編譯處理命令。C語(yǔ)言語(yǔ)法允許用戶把這類標(biāo)識(shí)用作其它用途,但這將使這些預(yù)定義標(biāo)識(shí)符失去系統(tǒng)規(guī)定的原意。鑒于目前各種計(jì)算機(jī)系統(tǒng)的C語(yǔ)言已經(jīng)把這類標(biāo)識(shí)符作為統(tǒng)一的庫(kù)函數(shù)名或預(yù)編譯處理中的專用命令名使用,因此為了避免誤解,建議用戶不要把這些預(yù)定義標(biāo)識(shí)符作它用或?qū)⑺鼈冎匦露x。第3頁(yè),共52頁(yè),2023年,2月20日,星期三2、標(biāo)識(shí)符三、用戶標(biāo)識(shí)符用戶可以根據(jù)需要對(duì)C程序中用到的變量、符號(hào)常量、自己的函數(shù)或文件指針進(jìn)行命名,形成用戶標(biāo)識(shí)符。這類標(biāo)識(shí)符的構(gòu)成規(guī)則如下:由英文字母、數(shù)字、下劃線組成;且第一個(gè)字符不能是數(shù)字,必須是字母或下劃線。如:

sum,average,class,student_nameM.D,$123.#33,3D64,a>bERROR!大、小寫(xiě)英文字母的含意不同。標(biāo)識(shí)符中所允許包含的字符個(gè)數(shù)隨不同的C編譯系統(tǒng)而有所不同,通常可以識(shí)別前面6個(gè)字符。用戶取名時(shí),應(yīng)當(dāng)盡量遵循“簡(jiǎn)潔明了”和“見(jiàn)名知意”的原則。注意:

大寫(xiě)字母和小寫(xiě)字母被認(rèn)為是兩個(gè)不同的字符。因此,sum和SUM是兩個(gè)不同的變量名。習(xí)慣上,變量名用小寫(xiě)字母表示,以增加可讀性。第4頁(yè),共52頁(yè),2023年,2月20日,星期三3、C語(yǔ)言的數(shù)據(jù)類型

整型字符型單精度基本類型實(shí)型枚舉類型雙精度

數(shù)據(jù)類型數(shù)組類型構(gòu)造類型結(jié)構(gòu)體類型共用體類型指針類型

空類型

第5頁(yè),共52頁(yè),2023年,2月20日,星期三3.2常量(Constant)⒈常量的概念在程序中不能改變的量稱為常量。常量的類型由數(shù)據(jù)的外部表現(xiàn)形式確定。

常量區(qū)分為不同的類型,如12、0、-3等為整型常量,4.6,-1.23等為實(shí)型常量,’a’,’d’為字符常量,一般從其字面形式即可判別,也可以用一個(gè)標(biāo)識(shí)符代表一個(gè)常量。#definePI3.1415926main()/*test1.c*/{floats,r,l;/*constfloatPI=3.1415926*/r=10.;l=2.*PI*r;s=PI*r*r;printf("l=%fs=%f\n",l,s);printf("PI=%f\n",PI);}第6頁(yè),共52頁(yè),2023年,2月20日,星期三2、符號(hào)常量概念:用一個(gè)標(biāo)識(shí)符代表一個(gè)常量。例:#definePRICE30main()/*

test2.c*/{

intnum,total;

num=10;total=num*PRICE;printf("total=%d",total);}第7頁(yè),共52頁(yè),2023年,2月20日,星期三3.3變量(Variable)⒈變量的概念變量是在程序中可以改變的量,變量具有三個(gè)特征:

⑴變量有名,用標(biāo)識(shí)符命名;

⑵變量有類型;

⑶在程序中可以改變。

變量對(duì)應(yīng)于內(nèi)存中某一地址下的幾個(gè)單元,變量名作為程序引用變量的標(biāo)志。變量的類型確定了變量在內(nèi)存中所占單元的數(shù)量及其表示的方式。變量的地址可以通過(guò)&運(yùn)算獲得。內(nèi)存inta;

a變量的引用標(biāo)志&a對(duì)應(yīng)a的地址。整型變量占兩個(gè)內(nèi)存單元。變量必須先說(shuō)明后使用!說(shuō)明的目的是確定變量的名字和類型。第8頁(yè),共52頁(yè),2023年,2月20日,星期三3.4整型數(shù)據(jù)⑴整型常量的表示整型常量根據(jù)表示的范圍可以有長(zhǎng)整型和一般整型,還可以表示為十進(jìn)制、八進(jìn)制、十六進(jìn)制。其中八進(jìn)制、十六進(jìn)制不能有符號(hào)。一般整型的表示進(jìn)制表示舉例范圍字節(jié)數(shù)十進(jìn)制2304 -32768~+32767 2八進(jìn)制04400 0~0177777 2十六進(jìn)制0xaa00 0x0000~0xffff 2長(zhǎng)整型的表示進(jìn)制表示舉例范圍字節(jié)數(shù)十進(jìn)制 -21234l -231~+231-1

4八進(jìn)制04400l 0~017777777774十六進(jìn)制 0xaa00l 0x0000----0xffffffff4第9頁(yè),共52頁(yè),2023年,2月20日,星期三3.4整型數(shù)據(jù)⑵整型變量的分類①有符號(hào)整型變量說(shuō)明說(shuō)明符 所占字節(jié)數(shù) 范圍

int 2 -32768~+32767short [int] 2 -32768~+32767long [int] 4 -2147483648~+2147483647②無(wú)符號(hào)整型變量說(shuō)明說(shuō)明符 所占字節(jié)數(shù) 范圍unsigned 2 0~65535unsignedshort 2 0~65535unsignedlong 4 0~4294967295unsignedd,e,f;第10頁(yè),共52頁(yè),2023年,2月20日,星期三3.4整型數(shù)據(jù)⑶整型變量的定義

C規(guī)定在程序中所有用到的變量都必須在程序中指定其類型,即“定義”。例如:

inta,b;(指定變量a,b為整型)

unsignedshortc,d;(指定變量c,d為無(wú)符號(hào)短整型)

1onge,f;(指定變量e,f為長(zhǎng)整型)

對(duì)變量的定義,一般是放在一個(gè)函數(shù)的開(kāi)頭部分(也可以放在程序中間,但作用域只限于某一分程序,這將在后面介紹)。第11頁(yè),共52頁(yè),2023年,2月20日,星期三3.4整型數(shù)據(jù)⑶整型變量的定義(舉例)/*test3.c*/main(){inta,b,c,d;/*指定a,b,c,d為整型變量*/

unsignedu;/*指定u為無(wú)符號(hào)整型變量*/

a=12;b=-24;u=10;c=a+u;d=b+u;printf("c=%dd=%d",c,d);}不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算。第12頁(yè),共52頁(yè),2023年,2月20日,星期三(1)浮點(diǎn)型常量的表示(只有十進(jìn)制表示)浮點(diǎn)型常量有兩種表示方式:小數(shù)表示方法,指數(shù)表示方法。不區(qū)分單、雙精度。小數(shù)表示方式規(guī)則:一個(gè)小數(shù)點(diǎn)、符號(hào)和至少一位數(shù)字。-2.01.0.11113-15.指數(shù)表示方式規(guī)則:規(guī)則:ne±m(xù)表示n×10mn小數(shù)部分,整型常量或小數(shù)形式表示的實(shí)型常量。指數(shù)部分,三位整數(shù)。

n決定精度,一般精度為7位;m決定范圍,范圍10-38到10+38,當(dāng)超過(guò)范圍時(shí)稱為“溢出”,小于10-38稱為下溢,當(dāng)0處理,大于10+38,稱為上溢,系統(tǒng)出錯(cuò)!123.456表示為0.123456E+3-10000000

表示為-1e+70.0000123

表示為0.123e-43.5實(shí)型數(shù)據(jù)第13頁(yè),共52頁(yè),2023年,2月20日,星期三(2)實(shí)型變量

C實(shí)型變量分為單精度(float型)和雙精度(double型)兩類,對(duì)每一個(gè)實(shí)型變量都應(yīng)在使用前加以定義。如:floatx;/*一般,一個(gè)float型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位)*/doublez;/*一個(gè)double型數(shù)據(jù)占8個(gè)字節(jié)。*/

單精度實(shí)數(shù)提供7位有效數(shù)字,雙精度實(shí)數(shù)提供15~16位有效數(shù)字,數(shù)值的范圍隨機(jī)器系統(tǒng)而異。單精度實(shí)數(shù)的數(shù)值范圍約為10-38~1038,雙精度實(shí)數(shù)范圍約為10-308~10308。應(yīng)當(dāng)說(shuō)明,實(shí)型常量不分float型和double型。一個(gè)實(shí)型常量可以賦給一個(gè)float型或double型變量。根據(jù)變量的類型截取實(shí)型常量中相應(yīng)的有效位數(shù)字,3.5實(shí)型數(shù)據(jù)說(shuō)明符所占字節(jié)數(shù) 范圍精度f(wàn)loat 4 10-38~10+38 7位double 8 10-306~10+306 16位第14頁(yè),共52頁(yè),2023年,2月20日,星期三(2)實(shí)型變量例:main()/*test4.c*/{floats;s=111111.11;printf("\nfloat=%f",s);}3.5實(shí)型數(shù)據(jù)main()/*test5.c*/{doubles;s=111111.11;printf("\ndouble=%f",s);}第15頁(yè),共52頁(yè),2023年,2月20日,星期三

(3)實(shí)型數(shù)據(jù)的舍入問(wèn)題3.5實(shí)型數(shù)據(jù)浮點(diǎn)型變量包含精度和范圍兩個(gè)概念。超過(guò)精度位數(shù)后的位數(shù)值不確定。floata;a=1.1111111111;超過(guò)范圍溢出(Overflow)。floata,b,c;a=1.234e+20b=2.345e+21c=a*b

當(dāng)運(yùn)算結(jié)果大于10+38稱為上溢,系統(tǒng)出錯(cuò)。當(dāng)運(yùn)算結(jié)果小于10-38稱為下溢,當(dāng)0處理。超出精度部分,不準(zhǔn)確。超出1038,溢出。第16頁(yè),共52頁(yè),2023年,2月20日,星期三3.6字符型數(shù)據(jù)(1)字符常量的表示表示ASCII字符集中的一個(gè)字符。字符有一個(gè)整型值,即該字符的ASCII碼值。表示方法:’a’、’!’

。撇號(hào)定界的一個(gè)字符。值為:97(2)字符串常量的表示雙引號(hào)“定界的字符序列。系統(tǒng)會(huì)在最后一個(gè)字符后加NULL(ASCII碼值為0),標(biāo)志字符串的結(jié)束。如:”HEFEI””hello”’a’和”a”的區(qū)別??jī)?nèi)部’a’:97”a”:97NULL第17頁(yè),共52頁(yè),2023年,2月20日,星期三3.6字符型數(shù)據(jù)(3)轉(zhuǎn)義字符轉(zhuǎn)義字符是C語(yǔ)言表示字符的特殊方法,用來(lái)表示ASCII字符集中的控制字符,以及系統(tǒng)占用字符如:”。表示方法:①\字符;②

\八進(jìn)制(十六進(jìn)制整數(shù),小于256)

\b 表示回退一格字母\n 表示換到下一行頭 \r 表示回車(chē)到本行頭 \t表示TAB(占8列) \\ 表示\ \? 表示?符號(hào) \’ 表示’ \” 表示” \0 表示NULL八進(jìn)制十六進(jìn)制數(shù)\x41\101代表’A’printf(“\007”);響鈴printf(“語(yǔ)文\n數(shù)學(xué)\n”);例:“\\141\141abc\t”?統(tǒng)計(jì)該字符串的長(zhǎng)度第18頁(yè),共52頁(yè),2023年,2月20日,星期三

(4)轉(zhuǎn)義字符舉例

main()/*test7.c*/{

printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk");}

運(yùn)行結(jié)果:

f_______gdeh______j_k

3.6字符型數(shù)據(jù)第19頁(yè),共52頁(yè),2023年,2月20日,星期三

(5)字符變量

一個(gè)字符占一個(gè)字節(jié).

字符型變量用來(lái)存放字符常量,注意只能放一個(gè)字符,不要以為在一個(gè)字符變量中可以放一個(gè)字符串(包括若干字符)。

字符變量的定義形式如下:

charc1,c2;它表示c1和c2為字符型變量,各可以放一個(gè)字符,因此可以用下面語(yǔ)句對(duì)c1、c2賦值:

c1=‘a(chǎn)’;c2=‘b’;一般以一個(gè)字節(jié)來(lái)存放一個(gè)字符,或者說(shuō)一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。3.6字符型數(shù)據(jù)說(shuō)明符所占字節(jié)數(shù) 范圍char 1 -128~+127unsignedchar 1 0~255第20頁(yè),共52頁(yè),2023年,2月20日,星期三

(6)字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法

將一個(gè)字符常量放到一個(gè)字符變量中,實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲(chǔ)單元中。例如字符‘a(chǎn)’的ASCII代碼為97,‘b’為98,。實(shí)際上是以二進(jìn)制形式存放的.3.6字符型數(shù)據(jù)c1c297980110000101100010main(){charc1,c2;

c1=97;c2=98;

printf(“%c%c”,c1,c2);}運(yùn)行結(jié)果:ab第21頁(yè),共52頁(yè),2023年,2月20日,星期三

(6)字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法

c1、c2被指定為字符變量。但在第3行中,將整數(shù)97和98分別賦給c1和c2,它的作用相當(dāng)于以下兩個(gè)賦值語(yǔ)句:

c1='a';c2='b'因?yàn)椤產(chǎn)’和‘b’的ASCII碼為97和98。也可以理解為將97和98兩個(gè)整數(shù)直接存放到cl和c2的內(nèi)存單元中。字符數(shù)據(jù)以ASCII碼存儲(chǔ),它的存儲(chǔ)形式與整數(shù)的存儲(chǔ)形式相類似。C語(yǔ)言使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。一個(gè)字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。以字符形式輸出時(shí),需要先將存儲(chǔ)單元中的ASCII碼轉(zhuǎn)換成相應(yīng)字符,然后輸出。以整數(shù)形式輸出時(shí),直接將ASCII碼作為整數(shù)輸出。也可以對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對(duì)它們的ASCII碼進(jìn)行算術(shù)運(yùn)算。3.6字符型數(shù)據(jù)第22頁(yè),共52頁(yè),2023年,2月20日,星期三

(6)字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。如:

inti;charc;i=’a’;c=97;是合法的。如果將i的值輸出得到97。輸出c可得字符‘a(chǎn)’。字符數(shù)據(jù)可以以字符形式輸出,也可以用整數(shù)形式輸出。例如在上面語(yǔ)句之后執(zhí)行語(yǔ)句:

printf(”%c,%d\n”,c,c);

printf(”%c,%d\n”,i,i);

printf(”%c,%d\n”,i-32,i-32);3.6字符型數(shù)據(jù)輸出的結(jié)果是什么?第23頁(yè),共52頁(yè),2023年,2月20日,星期三

(7)字符串常量

字符常量是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符。C語(yǔ)言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是一對(duì)雙引號(hào)括起來(lái)的字符序列。如:

“Howdoyoudo?!?,”CHINA”,”$123.45”都是字符串常量,可以輸出一個(gè)字符串,如

printf(”Howdoyoudo.”);

charc;c=’a’;

right!

c=”a”;

error!c=”CHINA”,也是錯(cuò)誤的。不能把一個(gè)字符串賦給一個(gè)字符變量。3.6字符型數(shù)據(jù)‘a(chǎn)’和“a”究竟有什么區(qū)別?第24頁(yè),共52頁(yè),2023年,2月20日,星期三

(7)字符串常量C規(guī)定:在每一個(gè)字符串的結(jié)尾加一個(gè)“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。c規(guī)定以字符‘\0’作為字符串結(jié)束標(biāo)志?!甛0’是一個(gè)ASCII碼為0的字符,從ASCII代碼表中可以看到ASCII碼為0的字符是,“空操作字符”,即它不引起任何控制動(dòng)作,也不是一個(gè)可顯示的字符。如果有一個(gè)字符串,“CHINA”實(shí)際上在內(nèi)存中是:3.6字符型數(shù)據(jù)CHINA\0它的長(zhǎng)度6個(gè)字符,最后一個(gè)字符為’\0’。但在輸出時(shí)不輸出.例如:printf(”Howdoyoudo?!保┹敵鰰r(shí)一個(gè)一個(gè)字符輸出,直到遇到最后的’\0’字符,就知道字符串結(jié)束,停止輸出?!?’,字符是系統(tǒng)自動(dòng)加上的。第25頁(yè),共52頁(yè),2023年,2月20日,星期三3.7變量賦初值

程序中常需要對(duì)一些變量預(yù)先設(shè)置初值。C規(guī)定,可以在定義變量時(shí)同時(shí)使變量初始化。如:

inta=3;指定a為整型變量,初值為3

floatf=3.56;指定f為實(shí)型變量,初值為3.56

charc=’a’;指定c為字符變量,初值為‘a(chǎn)’

也可以使被定義的變量的一部分賦初值。如:

inta,b,c=5表示a、b、c為整型變量,只有c初始化,值為5。如果對(duì)幾個(gè)變量賦以同一個(gè)初值,不能寫(xiě)成:

inta=b=c=3;

ERROR!而應(yīng)寫(xiě)成:

inta=3,b=3,c=3;

RIGHT!

第26頁(yè),共52頁(yè),2023年,2月20日,星期三3.7變量賦初值初始化不是在編譯階段完成的(只有在后面介紹的靜態(tài)存儲(chǔ)變量和外部變量的初始化是在編譯階段完成的),而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦以初值的。相當(dāng)于有一個(gè)賦值語(yǔ)句,例如

inta=3;相當(dāng)于:

inta;/指定a為整型變量

a=3;/賦值語(yǔ)句,將3賦予a/又如

inta,b,c=5;相當(dāng)于:

inta,b,c;/指定a、b、c為整型變量/

c=5;/將5賦給c/

第27頁(yè),共52頁(yè),2023年,2月20日,星期三3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算

整型、單精度型、雙精度型數(shù)據(jù)可以混合運(yùn)算。前已述及,字符型數(shù)據(jù)可以與整型通用,因此,整型、實(shí)型(包括單、雙精度)、字符型數(shù)據(jù)間可以混合運(yùn)算。例如10+‘a(chǎn)’+1.5-8765.1234*‘b’是合法的。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換的規(guī)則按下圖所示

double

float

long

unsigned

int

char,short第28頁(yè),共52頁(yè),2023年,2月20日,星期三3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算圖中橫向向左的箭頭表示必定的轉(zhuǎn)換,如字符數(shù)據(jù)必定先轉(zhuǎn)換為整數(shù),short型轉(zhuǎn)為int型,float型數(shù)據(jù)在運(yùn)算時(shí)一律轉(zhuǎn)換成雙精度型,以提高運(yùn)算精度(即使是兩個(gè)float型數(shù)據(jù)在加化成double型,然后再相加)。

縱向的箭頭表示當(dāng)運(yùn)算對(duì)象為不同類型時(shí)轉(zhuǎn)換的方向。例如int型與doub1e型數(shù)據(jù)進(jìn)行運(yùn)算,先將int型的數(shù)據(jù)轉(zhuǎn)換成圖double型,然后在兩個(gè)同類型(double型)數(shù)據(jù)進(jìn)行運(yùn)算,結(jié)果為double型。注意箭頭方向只表示數(shù)據(jù)類型級(jí)別的高低,由低向高轉(zhuǎn)換,不要理解為int型先轉(zhuǎn)成unsigned型,再轉(zhuǎn)成1ong型,再轉(zhuǎn)成double型。如果一個(gè)Int型數(shù)據(jù)與一個(gè)double型數(shù)據(jù)運(yùn)算,是直接將int型轉(zhuǎn)成double型。同理,一個(gè)int型與一個(gè)Long型數(shù)據(jù)運(yùn)算,先將int型轉(zhuǎn)換成1ong型。第29頁(yè),共52頁(yè),2023年,2月20日,星期三3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算換言之,如果有一個(gè)數(shù)據(jù)是float型或double型,則另一數(shù)據(jù)要先轉(zhuǎn)為double型,結(jié)果為double型。如果二個(gè)數(shù)據(jù)中最高級(jí)別為1ong型,則另一數(shù)據(jù)先轉(zhuǎn)為1ong型,結(jié)果為1ong型。其它依此類推。舉例說(shuō)明:假設(shè)已指定i為整型變量,f為float變量,d為double型變量,e為1ong型,有下面式子:10十’a’+i*f-d/e運(yùn)算次序?yàn)椋孩龠M(jìn)行10+’a’的運(yùn)算,先將‘a(chǎn)’轉(zhuǎn)換成整數(shù)97,運(yùn)算結(jié)果為107。②進(jìn)行i*f的運(yùn)算。先將i與f都轉(zhuǎn)成double型,運(yùn)算結(jié)果為dOuble型。③整數(shù)107與i*f的積相加。先將整數(shù)107轉(zhuǎn)換成雙精度數(shù)(小數(shù)點(diǎn)后加若干個(gè)0,即107.000…00),結(jié)果為double型。④將變量e化成double型,d/e結(jié)果為double型。⑤將10十’a’+i*f的結(jié)果與”d/e結(jié)果為double型。上述的類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的。第30頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.9.1C運(yùn)算符簡(jiǎn)介C的運(yùn)算符有以下幾類:

1.算術(shù)運(yùn)算符(+-*/%)

2.關(guān)系運(yùn)算符(><==>=<=!=)

3.邏輯運(yùn)算符(?。Γ|)

4.位運(yùn)算符(<<>>~|^&)

5.賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)

6.條件運(yùn)算符(?:)

7.逗號(hào)運(yùn)算符(,)

8.指針運(yùn)算符(*和&)第31頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.9.1C運(yùn)算符簡(jiǎn)介C的運(yùn)算符有以下幾類:

9.求字節(jié)數(shù)運(yùn)算符(sizeof)

10.強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(類型)11.分量運(yùn)算符(.→)

12.下標(biāo)運(yùn)算符([])

13.其它(如函數(shù)調(diào)用運(yùn)算符())

第32頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式程序重要的一點(diǎn)是對(duì)數(shù)據(jù)按照算法進(jìn)行處理(運(yùn)算)。C語(yǔ)言的運(yùn)算功能強(qiáng)大。數(shù)據(jù)通過(guò)運(yùn)算符連接的式子稱為表達(dá)式,表達(dá)式根據(jù)運(yùn)算對(duì)象及運(yùn)算關(guān)系得到一個(gè)值。分類介紹如下:⒈變量賦值運(yùn)算格式:

V=expression;/*將expression的值賦給變量V*/inta=2;/*說(shuō)明賦值,編譯時(shí)賦值。*/intb;b=3+2;/*說(shuō)明后賦值,執(zhí)行時(shí)賦值。*/說(shuō)明:⑴=是賦值號(hào)(動(dòng)詞);⑵賦值運(yùn)算的左值只能是變量。a=a+2;iCount=iCount+10;a+2=12;/*Error!*/⑶賦值號(hào)兩邊類型應(yīng)該一致,如不一致,以變量類型轉(zhuǎn)換。inta=2.5;/*2a*/這里a的值等于2第33頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式1.基本的算術(shù)運(yùn)算功能:完成各種類型數(shù)據(jù)的加、減、乘、除及求余數(shù)運(yùn)算。雙目算術(shù)運(yùn)算(兩個(gè)運(yùn)算對(duì)象參加的運(yùn)算)運(yùn)算運(yùn)算規(guī)則示例+加2+3-減a-b*乘2*(-a)/除12/3.0%求余數(shù)15%4只能對(duì)整型或字符型數(shù)據(jù)運(yùn)算。余數(shù)符號(hào)與被除數(shù)相同。-12%5-2?-12%(-5)“向零取整”.-5/3=-1第34頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式2.算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合級(jí)(附錄III)表達(dá)式:數(shù)據(jù)通過(guò)運(yùn)算符連接的式子C算術(shù)表達(dá)式:用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來(lái)的、符合C語(yǔ)言語(yǔ)法規(guī)則的式子。如:a*b/c-1.5+’a’

求表達(dá)式的值時(shí),先按運(yùn)算符的優(yōu)先級(jí)別高到低的次序執(zhí)行。

a+b*c–(x+y)/c算術(shù)運(yùn)算符的結(jié)合方向?yàn)椋骸白宰笾劣摇?/p>

a-b+c如果參加運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為實(shí)數(shù),則結(jié)果是double型,因?yàn)樗袑?shí)數(shù)都按double型進(jìn)行運(yùn)算.如果一個(gè)運(yùn)算符的兩側(cè)的數(shù)據(jù)類型不同,則會(huì)按右邊所述,先自動(dòng)進(jìn)行類型轉(zhuǎn)換,使二者具有同一種類型,然后進(jìn)行運(yùn)算。double

float

long

unsigned

int

char,short第35頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需類型

(double)a

(將a轉(zhuǎn)換成double類型)

(int)(x+y)(將調(diào)x+y的值轉(zhuǎn)換成整型)

(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)其一般形式為:

(類型名)(表達(dá)式)注意:表達(dá)式應(yīng)該用括號(hào)括起來(lái)。如果寫(xiě)成

(int)x+y:只將x轉(zhuǎn)換成整型,然后與y相加。需要說(shuō)明的是在強(qiáng)制類型轉(zhuǎn)換時(shí),得到一個(gè)所需類型的中間變量,原來(lái)變量的類型未發(fā)生變化。例如(int)x(不要寫(xiě)成int(x))如果x原指定為float型,進(jìn)行強(qiáng)制類型運(yùn)算后得到一個(gè)int型的中間變量,它的值等于x的整數(shù)部分,而x的類型不變(仍為float型,)第36頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需類型

main()/*test8.c*/{floatx;

x=3.6;i=(int)x;printf(“x=%f,i=%d”x,i);

}結(jié)論:兩種類型轉(zhuǎn)換:一種是系統(tǒng)自動(dòng)進(jìn)行類型轉(zhuǎn)換一種是強(qiáng)制類型轉(zhuǎn)換

當(dāng)自動(dòng)類型轉(zhuǎn)換不能實(shí)現(xiàn)目的時(shí),可以用強(qiáng)制類型轉(zhuǎn)換。如:“%”運(yùn)算符要求其兩側(cè)均為整型量,若x為float型,則“x%3”不合法,必須用:(int)x%3”。強(qiáng)制類型轉(zhuǎn)換運(yùn)算優(yōu)先于%運(yùn)算,因此先進(jìn)行(int)x的運(yùn)算,得到一個(gè)整型的中間變量,然后再對(duì)3求模。此外,在函數(shù)調(diào)用時(shí),有時(shí)為了使實(shí)參與形參類型一致,可以用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符得到一個(gè)所需類型的參數(shù)。第37頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式4.類型轉(zhuǎn)換小結(jié)運(yùn)算對(duì)象的類型相同,運(yùn)算結(jié)果取運(yùn)算對(duì)象相同的類型。inta;floatb;b=2/3;/*0b0.0*/a=5.0/2.0;/*2.5a0*/運(yùn)算對(duì)象的類型不同,先將低等類型轉(zhuǎn)換為高等類型后再進(jìn)行運(yùn)算,運(yùn)算結(jié)果取高等類型。等級(jí)原則如下:charintlongdoublefloat2*16.0+15.0doublefloatdouble運(yùn)算時(shí)可以實(shí)行類型的強(qiáng)制轉(zhuǎn)換,格式如下:(type)expression只對(duì)當(dāng)前表達(dá)式起作用。(float)a/(int)’c’+(float)(a+10)第38頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式4.自加、自減運(yùn)算(單目運(yùn)算):

本章重點(diǎn)、難點(diǎn)運(yùn)算符前置后置運(yùn)算關(guān)系++++aa++a=a+1

----aa--a=a-1說(shuō)明:①運(yùn)算對(duì)象只能是一個(gè)變量(不能對(duì)常量和表達(dá)式)。②前置是先運(yùn)算,后引用,而后置則是先引用,后運(yùn)算。2++;/*Error!*/inti,x;i=5;x=i++;/*x=i;i=i+1;*/i=5;x=++i;/*i=i+1;x=i;*/結(jié)合方向:自右至左第39頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式4.自加、自減運(yùn)算(單目運(yùn)算)自增、自減運(yùn)算符的用法與運(yùn)算規(guī)則示例。main()/***A1.c***/{

intx=6,y;

printf("x=%d\n",x); /*輸出x的初值*/

y=++x; /*前置運(yùn)算*/

printf("y=++x:x=%d,y=%d\n",x,y);

y=x--; /*后置運(yùn)算*/

printf("y=x--:x=%d,y=%d\n",x,y);}第40頁(yè),共52頁(yè),2023年,2月20日,星期三3.9算術(shù)運(yùn)算符和算術(shù)表達(dá)式5.有關(guān)表達(dá)式使用中的問(wèn)題說(shuō)明C運(yùn)算符和表達(dá)式使用靈活a=3;j=(a++)+(a++)+(a++);printf(“a=%d,j=%d”,a,j);

結(jié)果為:a=6j=9如何理解?(test9.c)

i+++j為(i++)+j還是i+(++j)呢?

C編譯系統(tǒng)在處理時(shí)盡可能多地(自左向右)將若干個(gè)字符組成一個(gè)運(yùn)算符。

i+++j=(i++)+ji=3;printf(“%d,%d”,i,i++);(test10.c)

在多數(shù)系統(tǒng)中對(duì)函數(shù)參數(shù)的求值順序是自右而左。故上面的結(jié)果為:4,3

第41頁(yè),共52頁(yè),2023年,2月20日,星期三3.10賦值運(yùn)算符和賦值表達(dá)式1.賦值運(yùn)算符賦值符號(hào)“=”就是賦值運(yùn)算符,它的作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量3賦給變量a,也可以將一個(gè)表達(dá)式的值賦給一個(gè)變量。2.類型轉(zhuǎn)換(重點(diǎn)、難點(diǎn))如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時(shí),在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。(1).將實(shí)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時(shí),舍棄實(shí)數(shù)的小數(shù)部分。如i為整型變量,執(zhí)行“i=3.56”的結(jié)果是使i的值為3。(2).將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值下變,但以浮點(diǎn)數(shù)形式存儲(chǔ)到變量中,如將23賦給float變量f,即f=23,先將23轉(zhuǎn)換成23.000000,再存儲(chǔ)在f中。如將23賦給double型變量d,即d=23,則將23補(bǔ)足有效位數(shù)字為23.00000000000000,然后以雙精度浮點(diǎn)數(shù)形式存儲(chǔ)到d中。第42頁(yè),共52頁(yè),2023年,2月20日,星期三3.10賦值運(yùn)算符和賦值表達(dá)式(3).將一個(gè)double型數(shù)據(jù)賦給float變量時(shí),截取其前面7位有效數(shù)字,存放到float變量的存儲(chǔ)單元中。

(4).字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占一個(gè)字節(jié),而整型變量為2個(gè)字節(jié),因此將字符數(shù)據(jù)(8位)放到整型變量低8位中。有兩種情況:

如果所用系統(tǒng)將字符處理為無(wú)符號(hào)的量或?qū)nsignedchar型變量賦值,則將字符的8位放到整型變量低8位,高8位補(bǔ)零。例如:將字符‘\376’(八進(jìn)制)賦給int型變量I0000000011111110如果所用系統(tǒng)將字符處理為帶符號(hào)的量,若字符最高位為0.則整型變量高8位補(bǔ)0;若字符最高位為1.則高8位全補(bǔ)1,這稱為“符號(hào)擴(kuò)展”.這樣做的目的是使數(shù)值保持不變,如變量c(字符、‘\376’)以整數(shù)形式輸出為一2,i的值也是一2。1111111111111110第43頁(yè),共52頁(yè),2023年,2月20日,星期三3.10賦值運(yùn)算符和賦值表達(dá)式(5).將一個(gè)int、short、long型數(shù)據(jù)賦給char變量時(shí),只將其低8位原封不動(dòng)地送到char型變量中。例:IntI=289;charc;c=I;0000000100100001(6).將帶符號(hào)的整型數(shù)據(jù)(int型)賦給1ong型變量時(shí)。要進(jìn)行符號(hào)擴(kuò)展,如果int型數(shù)據(jù)為正值(符號(hào)位為0).則1ong型變量的高16位補(bǔ)0;如int型變量為負(fù)值(符號(hào)位為1),則1ong型變量的高16位補(bǔ)1,將整型數(shù)(int型)的16位送到1ong型低16位中,以保持?jǐn)?shù)值不改變。反之,若將一個(gè)1ong型數(shù)據(jù)賦給一個(gè)int型變量,只將1ong型數(shù)據(jù)中低16位原封不動(dòng)送到整型變量(即截?cái)啵?0100001I=289C=33?Longb=‘\x6823’;inta;a=b;第44頁(yè),共52頁(yè),2023年,2月20日,星期三3.10賦值運(yùn)算符和賦值表達(dá)式(7)將unsignedint型數(shù)據(jù)賦給longint,不存在擴(kuò)展問(wèn)題,只需將高位補(bǔ)0即可。將一個(gè)unsignedint型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的整型變量(例如unsignedint→int,unsignedlong→long,unsignedshort→short)將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過(guò)相應(yīng)整型的范圍,則會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤。如:

unsignedinta=65535(216-1);intb;b=a;printf(“%d”,b);將a整個(gè)送到b中,由于b是int型,第1位是符號(hào)位,成了負(fù)數(shù)。(-1的補(bǔ)碼)運(yùn)行結(jié)果為:-1第45頁(yè),共52頁(yè),2023年,2月20日,星期三3.10賦值運(yùn)算符和賦值表達(dá)式3.復(fù)合的賦值運(yùn)算符(重點(diǎn)、難點(diǎn))運(yùn)算符表達(dá)式示例運(yùn)算關(guān)系+=a+=3a=a+3-=b=cb=b-c*=a*=2a=a*2/=s/=ts=s/t%=a%=5a=a%5說(shuō)明:①運(yùn)算對(duì)象的左值只能是一個(gè)變量。(a+2)+=5;/*Error!*/②%=運(yùn)算的對(duì)象,必須是整性。思考:a=12;a/=a+a;?a第46頁(yè),共52頁(yè),2023年,2月20日,星期三3.10賦值運(yùn)算符和賦值表達(dá)式4.賦值表達(dá)式

賦值表達(dá)式:由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子。(結(jié)尾無(wú)分號(hào))它的一般形式為:(變量)(賦值運(yùn)算符)(表達(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)論