幻燈片-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頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C程序設(shè)計(jì)(chn x sh j)講師(jingsh):徐紅波Email: x_h_b共七十三頁 第3章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式 3.1 語言(yyn)的數(shù)據(jù)類型 算法處理的對象是數(shù)據(jù),而數(shù)據(jù)是以某種特定的形式存在的(例如整數(shù)、實(shí)數(shù)、字符等形式)。不同的數(shù)據(jù)之間往往還存在某些聯(lián)系(例如由若干個整數(shù)組成一個整數(shù)數(shù)組)。所謂數(shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)的組織形式。例如,數(shù)組就是一種數(shù)據(jù)結(jié)構(gòu)。處理同一類問題,如果數(shù)據(jù)結(jié)構(gòu)不同,算法也會不同。例如,對10個整數(shù)排序和對由10個整數(shù)構(gòu)成的數(shù)組排序的算法是不同的。因此,在考慮算法時,必須注意數(shù)據(jù)結(jié)構(gòu)。實(shí)際上,應(yīng)當(dāng)(yngdng)綜合考慮算法和數(shù)據(jù)結(jié)構(gòu),選擇最佳的數(shù)

2、據(jù)結(jié)構(gòu)和算法。 C語言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型形式出現(xiàn)的。共七十三頁C的數(shù)據(jù)類型如下(rxi):共七十三頁C語言中數(shù)據(jù)有常量與變量之分,它們分別屬于以上這些類型。由以上這些數(shù)據(jù)類型還可以構(gòu)成更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。例如利用(lyng)指針和結(jié)構(gòu)體類型可以構(gòu)成表、樹、棧等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。在程序中對用到的所有數(shù)據(jù)都必須指定其數(shù)據(jù)類型。共七十三頁3.2 常量(chngling)與變量3.2.1 常量(chngling)和符號常量(chngling)在程序運(yùn)行過程中,其值不能被改變的量稱為常量。常量區(qū)分為不同的類型,如12、0、-3為整型常量,4.6、-1.23為實(shí)型常量,a、d為字符常量。常量一般從其字面形

3、式即可判別。這種常量稱為字面常量或直接常量。也可以用一個(y )標(biāo)識符代表一個(y )常量,該標(biāo)識符稱為符號常量,即標(biāo)識符形式的常量。共七十三頁例3.1符號常量(chngling)的使用#define PRICE 30main()int num, total;num=10;total=num* PRICE;printf(“total=%d”, total);共七十三頁符號常量不同于變量,它的值在其作用域(本例中為主函數(shù))內(nèi)不能改變,也不能再被賦值。習(xí)慣上,符號常量名用大寫,變量名用小寫,以示區(qū)別。使用符號常量的好處(ho chu)是:(1)含義清楚(2)在需要改變一個常量時能做到“一改全改”。

4、共七十三頁3.2.2 變量(binling)其值可以改變的量稱為變量。一個(y )變量應(yīng)該有一個(y )名字,在內(nèi)存中占據(jù)一定的存儲單元。在該存儲單元中存放變量的值。變量名實(shí)際上是一個(y )符號地址,在對程序編譯連接時由系統(tǒng)給每一個(y )變量名分配一個(y )內(nèi)存地址。在程序中從變量中取值,實(shí)際上是通過變量名到相應(yīng)的內(nèi)存地址,從其存儲單元中讀取數(shù)據(jù)。共七十三頁用來標(biāo)識變量名、符號常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列稱為標(biāo)識符(identifier)。C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字母必須為字母或下劃線。合法的標(biāo)識符,也是合法的變量名:sum,

5、 average, _total, Class, day, month, Student_name, tan, lotus_1_2_3, BASIC, x_h_b不合法的標(biāo)識符和變量名:M.D.John, ¥123, #33, 3D64, ab注意,大寫字母和小寫字母被認(rèn)為是兩個不同的字符。因此,sum和SUM,Class和class是兩個不同的變量名。一般,變量名用小寫字母表示,與人們?nèi)粘A?xí)慣(xgun)一致,以增加可讀性。共七十三頁在C語言中,要求對所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用”。這樣做的目的是:(1)凡未被事先定義的,不作為變量名,這就能保證程序中變量名使用得正確。(

6、2)每一個變量被指定為一確定類型,在編譯時就能為其分配相應(yīng)的存儲單元。(3)指定每一變量屬于一個類型,這就便于在編譯時,據(jù)此檢查該變量所進(jìn)行(jnxng)的運(yùn)算是否合法。共七十三頁 3.3 整型數(shù)據(jù)3.3.1 整型常量(chngling)的表示方法整型常量(chngling)即整常數(shù)。C整常數(shù)可用以下三種形式表示:(1)十進(jìn)制整數(shù)。如123,-456,0。(2)八進(jìn)制整數(shù)。以數(shù)字0開頭的數(shù)是八進(jìn)制數(shù)。如0123表示八進(jìn)制數(shù)123,-011表示八進(jìn)制數(shù)-11。(3)十六進(jìn)制整數(shù)。以0 x開頭的數(shù)是十六進(jìn)制數(shù)。如0 x123代表十六進(jìn)制數(shù)123,-0 x12等于十六進(jìn)制數(shù)-12。共七十三頁3.3.

7、2 整型變量(binling)1、整型數(shù)據(jù)(shj)在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。int i;i=10;共七十三頁int i;i=-10;共七十三頁2、整型變量(binling)的分類 整型變量的基本類型符為int??梢愿鶕?jù)數(shù)值的范圍將變量定義(dngy)為基本整型、短整型或長整型。在int之前可以根據(jù)需要分別加上修飾符:short(短型)或long(長型)。因此有以下三種整型變量:(1)基本整型,以int表示。(2)短整型,以short int表示,或以short表示。(3)長整型,以long int表示,或以long表示。 為了充分利用變量的表數(shù)范圍,可以將變量定義為

8、“無符號”類型。對以上三種都可以加上修飾符unsigned,以指定是“無符號數(shù)”。如果加上修飾符signed,則指定是“有符號數(shù)”。如果既不指定為signed,也不指定為unsigned,則隱含為有符號。共七十三頁歸納起來,可以(ky)用以下6種整型變量。即:有符號基本整型 signed int無符號基本整型 unsigned int有符號短整型 signed short int無符號短整型 unsigned short int有符號長整型 signed long int無符號長整型 unsigned long int共七十三頁共七十三頁表3.1 ANSI標(biāo)準(zhǔn)定義的整數(shù)(zhngsh)類型類型

9、比特?cái)?shù)最小取值范圍signed int16-3276832767(-215215-1)unsigned int16065535(0216-1)signed short int16-3276832767(-215215-1)unsigned short int16065535(0216-1)long int32-21474836482147483647(-231231-1)unsigned long int3204294967295(0232-1)共七十三頁3、整型變量(binling)的定義例3.2整型變量的定義(dngy)與使用main()int a, b, c, d;unsigned u;

10、a=12; b=-24; u=10;c=a+u; d=b+u;printf(“a+u=%d, b+u=%dn”, c, d);共七十三頁4、整型數(shù)據(jù)(shj)的溢出在Turbo C中一個int型變量的最大允許值為32767,如果(rgu)再加1,會出現(xiàn)什么情況?例3.3整型數(shù)據(jù)的溢出main()int a, b;a=32767;b=a+1;printf(“%d,%d”, a, b);共七十三頁共七十三頁3.3.3 整型常量(chngling)的類型在將一個整型常量賦值給上述幾種類型的整型變量時如何做到類型匹配?請注意以下幾點(diǎn):(1)一個整數(shù),如果其值在-3276832767范圍內(nèi),認(rèn)為它是in

11、t型,它可以賦值給int型和long int型變量。(2)一個整數(shù),如果其值超過了上述范圍,而在-21474836482147483647范圍內(nèi),則認(rèn)為它是長整型,可以將它賦值給一個long int型變量。(3)如果某一計(jì)算機(jī)系統(tǒng)的C版本確定(qudng)short int與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與int型相同。因此,一個int型的常量也同時是一個short int型常量,可以賦給int型或short int型變量。(4)一個整常量后面加一個字母u或U,認(rèn)為是unsigned int型,如1234u,在內(nèi)存中按unsigned int規(guī)定的方式存放。(5)在一個整常

12、量后面加一個字母l或L,則認(rèn)為是long int型常量。共七十三頁 3.4 浮點(diǎn)型數(shù)據(jù)3.4.1 浮點(diǎn)型常量(chngling)的表示方法浮點(diǎn)數(shù)(floating-point number)就是實(shí)數(shù)(real number)。浮點(diǎn)數(shù)有兩種表示形式:(1)十進(jìn)制小數(shù)形式。它由數(shù)字和小數(shù)點(diǎn)組成。0.123、123.、123.0、0.0都是十進(jìn)制小數(shù)形式。(2)指數(shù)形式。如123e3或123E3都代表123103。注意字母e或E之前必須有數(shù)字,且e后面(hu mian)的指數(shù)必須為整數(shù),如e3、2.1e3.5、e3、e都不是合法的指數(shù)形式。共七十三頁3.4.2 浮點(diǎn)型變量(binling)1、浮點(diǎn)型

13、數(shù)據(jù)(shj)在內(nèi)存中的存放形式共七十三頁2、浮點(diǎn)型變量(binling)的分類浮點(diǎn)型變量分為(fn wi)單精度(float)型、雙精度(double)型和長雙精度(long double)型3類。在Turbo C中有關(guān)浮點(diǎn)型的數(shù)據(jù)見下表。類型比特?cái)?shù)有效數(shù)字?jǐn)?shù)值范圍float3267-3.410-383.41038double641516-1.710-3081.710308long double1281819-1.210-49321.2104932共七十三頁對每一個實(shí)型變量(binling)都應(yīng)在使用前加以定義。如:float x, y;double z;long double t;共七十三

14、頁3、浮點(diǎn)型數(shù)據(jù)(shj)的舍入誤差由于浮點(diǎn)型變量是由有限的存儲單元存儲的,因此能提供的有效數(shù)字總是有限的,在有效位以外的數(shù)字將被舍去。由此可能(knng)會產(chǎn)生一些誤差。例3.4實(shí)型數(shù)據(jù)的舍入誤差main()float a, b;a=123456.789e5;b=a+20;printf(“%f”, b);共七十三頁3.4.3 浮點(diǎn)型常量(chngling)的類型C語言編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來處理(chl)。f=2.45678*4523.65如果是在數(shù)的后面加字母f和F(如1.65f、654.87F),這樣編譯系統(tǒng)就會按單精度處理。一個浮點(diǎn)型常量可以賦給一個float型、double型

15、或long double變量。根據(jù)變量的類型截取浮點(diǎn)型常量中相應(yīng)的有效位數(shù)字。假如a已指定為單精度浮點(diǎn)型變量:float a;a=111111.111;共七十三頁3.5 字符型數(shù)據(jù)(shj)3.5.1 字符常量C語言的字符常量是用單撇號括起來(q li)的一個字符。如a、x、D、?、$等都是字符常量。除了以上形式的字符常量外,C還允許用一種特殊形式的字符常量,就是以一個字符“”開頭的字符序列。常用的以“”開頭的特殊字符見下表。共七十三頁轉(zhuǎn)義字符及其作用(zuyng)字符形式含義ASCII代碼n換行,將當(dāng)前位置移到下一行開頭10t水平制表(跳到下一個Tab位置)9b退格,將當(dāng)前位置移到前一列8r

16、回車,將當(dāng)前位置移到本行開頭13f換頁,將當(dāng)前位置移到下頁開頭12代表一個反斜杠字符92代表一個單引號字符39”代表一個雙引號字符34a鳴鈴7ddd1到3位八進(jìn)制數(shù)所代表的字符xhh1到2位十六進(jìn)制數(shù)所代表的字符共七十三頁例3.5轉(zhuǎn)義字符的使用(shyng)#include void main()printf(“ abctderftgn”);printf(“htibbjkn”);共七十三頁3.5.2 字符(z f)變量字符變量用來(yn li)存放字符常量,它只能放一個字符,不要以為在一個字符變量中可以放一個字符串字符變量的定義形式如下: char c1, c2;c1=a; c2=b;在所有的

17、編譯系統(tǒng)中都規(guī)定以一個字節(jié)來存放一個字符,或者說一個字符變量在內(nèi)存中占一個字節(jié)共七十三頁3.5.3 字符數(shù)據(jù)在內(nèi)存(ni cn)中的存儲形式及其使用方法 將一個字符常量放到一個字符變量中,并不是把該字符本身(bnshn)放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。例如字符a的ASCII代碼為十進(jìn)制數(shù)97,b的ASCII代碼為十進(jìn)制數(shù)98,在內(nèi)存中變量c1、c2的值如下圖(a)所示。實(shí)際上是以二進(jìn)制形式存放的,如圖(b)所示。共七十三頁在內(nèi)存中字符數(shù)據(jù)以ASCII碼存儲,它的存儲形式就與整數(shù)的存儲形式類似(li s)。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。一個字符數(shù)據(jù)既

18、可以以字符形式輸出,也可以以整數(shù)形式輸出。以字符形式輸出時,需要先將存儲單元中的ASCII碼轉(zhuǎn)換成相應(yīng)字符,然后輸出。以整數(shù)形式輸出時,直接將ASCII碼作為整數(shù)輸出。也可以對字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時相當(dāng)于對它們的ASCII碼進(jìn)行算術(shù)運(yùn)算。共七十三頁例3.6向字符變量(binling)賦予整數(shù)#include void main() char c1, c2; c1=97; c2=98; printf(%c %cn, c1, c2);printf(%d %dn, c1, c2); 共七十三頁例3.7大小寫字母的轉(zhuǎn)換(zhunhun)#include void main() char c1, c

19、2;c1=a;c2=b; c1=c1-32; c2=c2-32; printf(%c %c, c1, c2);共七十三頁3.5.4 字符串常量(chngling)字符常量是由一對單撇號括起來的單個字符。C語言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是一對雙撇號括起來的字符序列。例如下面是合法的字符串常量:“How do you do.”,”CHINA”,”a”,”$123.45”可以輸出一個字符串,例如:printf(“How do you do.”);不要將字符常量與字符串常量混淆。a是字符常量,”a”是字符串常量,二者不同。C規(guī)定:在每一個字符串常量的結(jié)尾(jiwi)加一個

20、“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符0作為字符串結(jié)束標(biāo)志。0是一個ASCII碼為0的字符。共七十三頁“CHINA”在內(nèi)存(ni cn)中是:共七十三頁3.6 變量(binling)賦初值程序中常需要對一些變量預(yù)先設(shè)置初值。C語言允許在定義變量的同時使變量初始化。例如:int a=3;float f=3.56;char c=a;也可以使被定義的變量的一部分賦初值。例如:int a, b, c=5;如果對幾個(j )變量賦予同一個初值,應(yīng)寫成:int a=3, b=3, c=3;不能寫成:int a=b=c=3;共七十三頁初始化不是在編譯階段完成的(只有在第8章中介紹的

21、靜態(tài)存儲變量和外部變量的初始化是在編譯階段完成),而是在程序運(yùn)行時執(zhí)行本函數(shù)時賦初值的,相當(dāng)于一個(y )賦值語句。例如:int a=3;相當(dāng)于:int a;a=3;又如:int a, b, c=5;相當(dāng)于:int a, b, c;c=5;共七十三頁3.7 各類數(shù)值型數(shù)據(jù)間的混合(hnh)運(yùn)算整型(包括int、short、long)和浮點(diǎn)型(包括float、double)可以混合運(yùn)算。字符型數(shù)據(jù)(shj)可以與整型通用,因此,整型、浮點(diǎn)型、字符型數(shù)據(jù)(shj)間可以混合運(yùn)算。例如:10+a+1.5-8765.1234*b在進(jìn)行運(yùn)算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換的規(guī)則按

22、下圖所示。共七十三頁int i; float f; double d; long e;10+a+i*f-d/e共七十三頁3.8 算術(shù)(sunsh)運(yùn)算符和算術(shù)(sunsh)表達(dá)式3.8.1 C語言運(yùn)算符簡介C語言的運(yùn)算符范圍(fnwi)很寬,把除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運(yùn)算符處理,例如將賦值符“=”作為賦值運(yùn)算符、方括號作為下標(biāo)運(yùn)算符等。共七十三頁語言(yyn)的運(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)

23、算符 (? :)(7)逗號運(yùn)算符 (,)(8)指針運(yùn)算符 (* &)(9)求字節(jié)數(shù)運(yùn)算符 (sizeof)(10)強(qiáng)制(qingzh)類型轉(zhuǎn)換運(yùn)算符 (類型)(11)分量運(yùn)算符 (. -)(12)下標(biāo)運(yùn)算符 ()(13)其他 (如函數(shù)調(diào)用運(yùn)算符()共七十三頁3.8.2 算術(shù)(sunsh)運(yùn)算符和算術(shù)(sunsh)表達(dá)式1、基本的算術(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) /(除法(chf)運(yùn)算符,如5/3)(5)%(模運(yùn)算符,或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如7%4的值為3)

24、共七十三頁2、算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級和結(jié)合性 用算術(shù)運(yùn)算(yn sun)符和括號將運(yùn)算(yn sun)對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱C算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。例如,下面是一個合法的C算術(shù)表達(dá)式:a*b/c-1.5+a共七十三頁 C語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性。在表達(dá)式求值時,先按運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。如表達(dá)式a-b*c,b的左側(cè)為減號,右側(cè)為乘號,而乘號優(yōu)先于減號,因此,相當(dāng)于a-(b*c)。如果在一個運(yùn)算對象兩側(cè)的運(yùn)算符的優(yōu)先級別相同(xin tn),如a-b+c,則按規(guī)定的“結(jié)合方向”處理。共七十三頁 C語言規(guī)定

25、了各種運(yùn)算符的結(jié)合方向(結(jié)合性),算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣摇保聪茸蠛笥?,因此b先與減號結(jié)合,執(zhí)行a-b的運(yùn)算,再執(zhí)行加c的運(yùn)算。“自左至右的結(jié)合方向”又稱“左結(jié)合性”,即運(yùn)算對象先與左面的運(yùn)算符結(jié)合。以后可以看到有些運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆?,即右結(jié)合性(例如(lr),賦值運(yùn)算符)。 如果一個運(yùn)算符的兩側(cè)的數(shù)據(jù)類型不同,則會按3.7節(jié)所述,先自動進(jìn)行類型轉(zhuǎn)換,使二者具有同一種類型,然后進(jìn)行運(yùn)算。共七十三頁3、強(qiáng)制(qingzh)類型轉(zhuǎn)換運(yùn)算符可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個表達(dá)式轉(zhuǎn)換成所需類型。例如: (double)a (int)(x+y) (float)(5%3)其一般形式為

26、: (類型名)(表達(dá)式)注意,表達(dá)式應(yīng)該用括號(kuho)括起來。如果寫成 (int)x+y則只將x轉(zhuǎn)換成整型,然后與y相加。需要說明的是,在強(qiáng)制類型轉(zhuǎn)換時,得到一個所需類型的中間變量,原來變量的類型未發(fā)生變化。例如:(int)x如果已定義x為float型,進(jìn)行強(qiáng)制類型運(yùn)算后得到一個int型的中間變量,它的值等于x的整數(shù)部分,而x的類型不變。共七十三頁例3.8強(qiáng)制(qingzh)類型轉(zhuǎn)換#include void main()float x;int i;x=3.6;i=(int)x;printf(“x=%f, i=%dn”, x, i);共七十三頁4、自增、自減運(yùn)算符作用是使變量的值增1或減1

27、,例如(lr):+i,-ii+,i-粗略地看,+i和i+的作用相當(dāng)于i=i+1。但+i和i+不同之處在于+i是先執(zhí)行i=i+1后,再使用i的值;而i+是先使用i的值后,再執(zhí)行i=i+1。如果i的原值等于3,請分析下面的賦值語句:j=+i;j=i+;又例如:i=3;printf(“%d”, +i);輸出“4”。若改為printf(“%d”, i+);則輸出“3”。共七十三頁注意(zh y):(1)自增運(yùn)算符(+)和自減運(yùn)算符(-)只能用于變量,而不能用于常量或表達(dá)式,如5+或(a+b)+都是不合法的。(2)+和-的結(jié)合性是“自右至左”。(3)自增(減)運(yùn)算符常用于循環(huán)語句中,使循環(huán)變量自動加1;

28、也用于指針變量,使指針指向(zh xin)下一個地址。共七十三頁5、有關(guān)(yugun)表達(dá)式使用中的問題說明(1)C運(yùn)算符和表達(dá)式使用靈活,利用這一點(diǎn)可以巧妙(qiomio)地處理許多在其他語言中難以處理的問題。但是應(yīng)當(dāng)注意:ANSI C并沒有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序,允許各編譯系統(tǒng)自己安排。 (2)C語言中有的運(yùn)算符為一個字符,有的運(yùn)算符由兩個字符組成,在表達(dá)式中如何組合呢?(3)在調(diào)用函數(shù)時,實(shí)參數(shù)的求值順序,C標(biāo)準(zhǔn)并無統(tǒng)一規(guī)定。共七十三頁3.9 賦值運(yùn)算符和賦值表達(dá)式1、賦值運(yùn)算符賦值符號“=”就是賦值運(yùn)算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如“a=3”的作用是執(zhí)行(zhx

29、ng)一次賦值操作(或稱賦值運(yùn)算)。把常量3賦給變量a。也可以將一個表達(dá)式的值賦給一個變量。共七十三頁2、類型轉(zhuǎn)換如果(rgu)賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進(jìn)行類型轉(zhuǎn)換。(1)將浮點(diǎn)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄實(shí)數(shù)的小數(shù)部分。(2)將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲到變量中。(3)將一個double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單元(32位)中。但應(yīng)注意數(shù)值范圍不能溢出。將一個float型數(shù)據(jù)賦給double變量時,數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以64位存儲。共

30、七十三頁(4)字符型數(shù)據(jù)賦給整型變量(binling)時,由于字符只占1個字節(jié),而整型變量(binling)為2個字節(jié),因此將字符數(shù)據(jù)(8位)放到整型變量(binling)低8位中。共七十三頁字符型數(shù)據(jù)(shj)賦給整型變量:1、如果所用系統(tǒng)將字符(z f)處理為無符號的量或?qū)nsigned char型變量賦值,則將字符的8位放到整型變量低8位,高8位補(bǔ)零。共七十三頁2、如果所用系統(tǒng)將字符處理為帶符號的(即signed char),若字符最高位為0,則整型變量高8位補(bǔ)0;若字符最高位為1,則高8位全補(bǔ)1。這稱為”符號擴(kuò)展”,這樣做的目的是使數(shù)值(shz)保持不變。共七十三頁(5)將一個(y

31、)int、short、long型數(shù)據(jù)賦給一個(y )char型變量時,只將其低8位原封不動地送到char型變量(即截?cái)啵?。例如:int i=289;char c=a;c=i;共七十三頁(6)將帶符號(fho)的整型數(shù)據(jù)(int型)賦給long型變量時,要進(jìn)行符號(fho)擴(kuò)展,將整型數(shù)的16位送到long型低16位中,如果int型數(shù)據(jù)為正值(符號(fho)位為0),則long型變量的高16位補(bǔ)0;如果int型變量為負(fù)值(符號(fho)位為1),則long型變量的高16位補(bǔ)1,以保持?jǐn)?shù)值不改變。反之,若將一個long型數(shù)據(jù)賦給一個int型變量,只將long型數(shù)據(jù)中低16位原封不動地送到整型變量(

32、即截?cái)?。例如:int a;long b=8;a=b;共七十三頁(7)將unsigned int型數(shù)據(jù)賦給long int型變量時,不存在符號擴(kuò)展問題,只需將高位補(bǔ)0即可。將一個unsigned類型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的整型變量(例如:unsigned int-int,unsigned long-long,unsigned short-short),將unsigned型變量的內(nèi)容原樣(yun yn)送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整數(shù)的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。如:unsigned int a=65535;int b;b=a;共七十三頁(8)將非unsigned型數(shù)據(jù)賦

33、給長度相同(xin tn)的unsigned型變量,也是原樣照賦(連原有的符號位也作為數(shù)值一起傳送)。如:例3.9有符號數(shù)據(jù)傳送給無符號變量main()unsigned a;int b=-1;a=b;printf(“%d”, a);共七十三頁3、復(fù)合(fh)的賦值運(yùn)算符在賦值符“=”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。例如:a+=3 等價于 a=a+3x*=y+8 等價于 x=x*(y+8)x%=3 等價于 x=x%3凡是二元(二目)運(yùn)算符,都可以與賦值符一起組合成復(fù)合賦值符。C語言規(guī)定(gudng)可以使用10種復(fù)合賦值運(yùn)算符。即:+= -= *= /= %= = &= = |=共七十

34、三頁4、賦值表達(dá)式由賦值運(yùn)算符將一個變量和一個表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。它的一般形式為: 賦值運(yùn)算符左側(cè)的標(biāo)識符稱為“左值”(left value)。并不是任何(rnh)對象都可以作為左值的,變量可以作為左值,而表達(dá)式a+b就不能作為左值,常變量也不能作為左值,因?yàn)槌W兞坎荒鼙毁x值。出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式稱為“右值”(right value)。顯然左值也可以出現(xiàn)在賦值運(yùn)算符右側(cè),因而凡是左值都可以作為右值。共七十三頁賦值表達(dá)式中的“表達(dá)式”,又可以是一個賦值表達(dá)式。例如:a=(b=5)a=b=c=5a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)a+

35、=a-=a*a將賦值表達(dá)式作為表達(dá)式的一種(y zhn),使賦值操作不僅可以出現(xiàn)在賦值語句中,而且可以以表達(dá)式形式出現(xiàn)在其他語句(如輸出語句、循環(huán)語句等)中,如:printf(“%d”, a=b);共七十三頁3.10 逗號(duho)運(yùn)算符和逗號(duho)表達(dá)式C語言提供一種特殊的運(yùn)算符逗號運(yùn)算符。用它將兩個表達(dá)式連接起來。例如:3+5, 6+8稱為逗號表達(dá)式,又稱“順序求值運(yùn)算符”。逗號表達(dá)式的一般形式為:表達(dá)式1, 表達(dá)式2逗號表達(dá)式的求解過程是:先求解表達(dá)式1,再求解表達(dá)式2。整個逗號表達(dá)式的值是表達(dá)式2的值。一個(y )逗號表達(dá)式又可以與另一個(y )表達(dá)式組成一個(y )新的逗號表達(dá)式,例如:(a=3*5, a*4), a+5逗號表達(dá)式的一般形式可以擴(kuò)展為表達(dá)式1, 表達(dá)式2, 表達(dá)式3, , 表達(dá)式n共七十三頁習(xí)題(xt)3.6寫出以下程序(chngx)的運(yùn)行結(jié)果:#include void

溫馨提示

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

評論

0/150

提交評論