C語言程序設(shè)計(jì)(同名14)課件_第1頁
C語言程序設(shè)計(jì)(同名14)課件_第2頁
C語言程序設(shè)計(jì)(同名14)課件_第3頁
C語言程序設(shè)計(jì)(同名14)課件_第4頁
C語言程序設(shè)計(jì)(同名14)課件_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章 C的基本數(shù)據(jù)類型及運(yùn)算 2.1 標(biāo)識(shí)符 2.2 數(shù)據(jù)類型 2.3 常量 2.4 變量 2.5 運(yùn)算符 2.6 表達(dá)式 2.7 數(shù)據(jù)類型, 運(yùn)算符與表達(dá)式舉例 2.1 標(biāo) 識(shí) 符 正確 不正確count 1 counttest123 hi!thereHigh-balance high.balancePI a+b 說明: (1) 與有些程序設(shè)計(jì)語言的規(guī)定不同, 在C語言中, 標(biāo)識(shí)符中大小寫字母是有區(qū)別的。程序中基本上都采用小寫字母表示各種標(biāo)識(shí)符,如變量名、數(shù)組名、函數(shù)名等。書寫的各種語句也均用小寫字母,而大寫字母只用來定義宏名等,用的不多。 (2) 不同的系統(tǒng)對標(biāo)識(shí)符的長度有不同的要求,

2、有的要求為6個(gè)字符,有的允許使用8個(gè)字符,而Turbo C系統(tǒng)下的有效長度為1至32個(gè)字符。 (3) 除了少數(shù)工作單元我們用單個(gè)字符作標(biāo)識(shí)符,一般的應(yīng)做到見名知意,以提高程序的可讀性。如用sum表示和, score表示成績, max表示最大等等。 2.1.2 關(guān)鍵字 ANSI C規(guī)定了32個(gè)關(guān)鍵字(保留字),不能再用作各種標(biāo)識(shí)符。下面列出32個(gè)關(guān)鍵字:auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, registe

3、r, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while。 它們用來表示C語言本身的特定成份, 具有相應(yīng)的語義, 可構(gòu)成所有的C語言語句。 C語言還使用下列12個(gè)標(biāo)識(shí)符作為編譯預(yù)處理的命令單詞, 但使用時(shí)前面應(yīng)加“”: define, elif, else, endif, error, if, ifdef, ifndef, include, line, progma, undef。 2.2 數(shù)據(jù)類型 2.2.1 基本數(shù)據(jù)類型 1. 基本數(shù)據(jù)類

4、型 表 2.1 C基本數(shù)據(jù)類型的長度和值域 字符型(char)變量用于存貯ASCII碼字符,也可存貯8位二進(jìn)制數(shù)。 整型(int)變量用于存貯整數(shù)。因其字長有限,故可表示的整數(shù)的范圍也有限。 單精度實(shí)型(float)和雙精度實(shí)型(double)變量用于存貯實(shí)數(shù),實(shí)數(shù)具有整數(shù)和小數(shù)兩部分或是帶指數(shù)的數(shù)據(jù)。表中的值域用絕對值表示。 無值型(void)有兩種用途:第一是明確地表示一個(gè)函數(shù)不返回任何值;第二是產(chǎn)生同一類型的指針。 2. 類型修飾符 除了無值類型外, 基本數(shù)據(jù)類型可以帶有各種修飾前綴。修飾符用于明確基本數(shù)據(jù)類型的含義,以準(zhǔn)確地適應(yīng)不同情況下的要求。類型修飾符種類如下: signed 有符

5、號(hào)unsigned 無符號(hào)long 長Short 短 表 2.2 C基本類型及其修飾符的所有組合 不同的計(jì)算機(jī)系統(tǒng)對各類數(shù)據(jù)所占內(nèi)存字節(jié)數(shù)有不同的規(guī)定,如int型有的系統(tǒng)占16位,有的占32位。long double型有的占128位,有的占64位。 有符號(hào)(signed)和無符號(hào)(unsigned)的整型量的區(qū)別在于它們的最高位的定義不同。如果定義的是有符號(hào)的整型(signed int),C編譯程序所產(chǎn)生的代碼就設(shè)定整型數(shù)的最高位為符號(hào)位,其余位表示數(shù)值大小。如最高位為0,則該整數(shù)為正;如最高位為1,則該整數(shù)為負(fù)。例如用8位二進(jìn)制表示時(shí): 大部分計(jì)算機(jī)表示有符號(hào)數(shù)時(shí)都使用二進(jìn)制補(bǔ)碼。原因及細(xì)節(jié)

6、將在微機(jī)原理課上學(xué)習(xí)。補(bǔ)碼的求法很簡單:正數(shù)補(bǔ)碼即原碼;負(fù)數(shù)的補(bǔ)碼是將其對應(yīng)原碼的各位(除符號(hào)位外)按位求反,然后加1。上述四個(gè)數(shù)用 8 位二進(jìn)制表示有符號(hào)數(shù)時(shí)機(jī)內(nèi)補(bǔ)碼值為: 有符號(hào)整數(shù)對于許多運(yùn)算都是很重要的。但是它所能表達(dá)的最大數(shù)的絕對值只是無符號(hào)數(shù)的一半。例如,32767的有符號(hào)整數(shù)表示為: 0111111111111111如果最高位設(shè)置為1,則該數(shù)就會(huì)被當(dāng)作-1。然而,如將該數(shù)定義為無符號(hào)整型(unsigned int),那么當(dāng)最高位設(shè)置為1時(shí),它就變成了65535。 2.2.3 指針類型 指針是C語言中一個(gè)重要概念。正確而靈活地運(yùn)用它,可以有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);能動(dòng)態(tài)分配內(nèi)存;能

7、方便地使用字符串;有效而方便地使用數(shù)組; 在調(diào)用函數(shù)時(shí)能得到多于一個(gè)的值;能直接處理內(nèi)存地址等。 指針類型迥異于前述各種數(shù)據(jù)類型,不管是簡單類型的數(shù)據(jù),還是構(gòu)造類型數(shù)據(jù),均是代表數(shù)據(jù)的,而指針類型是代表地址的。 2.3 常 量2.3.1 數(shù)值常量 1. 整型常量 整型常量也稱為整型常數(shù)或整數(shù)。 C整型常量按進(jìn)制分可分為十進(jìn)制整數(shù),八進(jìn)制整數(shù)和十六進(jìn)制整數(shù)。 1) 十進(jìn)制整數(shù) 十進(jìn)制整數(shù)以正負(fù)號(hào)開頭,后跟09的若干位數(shù)字構(gòu)成。如123, -456, 0等。 2) 八進(jìn)制整數(shù) 八進(jìn)制整數(shù)是以正負(fù)號(hào)開頭,第一位數(shù)字一定是0,后面跟07的數(shù)字。如八進(jìn)制數(shù)0123,相當(dāng)于十進(jìn)制數(shù)83;八進(jìn)制數(shù)-012,

8、相當(dāng)于十進(jìn)制數(shù)-10。 八進(jìn)制數(shù)與十進(jìn)制數(shù)的轉(zhuǎn)換,方法如下: 0123=182+281+380=64+16+3=83 3) 十六進(jìn)制整數(shù) 十六進(jìn)制整數(shù)是以正負(fù)號(hào)開頭,前兩位為0 x,后面跟09和af的數(shù)字。其中a代表10, b代表11, 其余類推。 如十六進(jìn)制數(shù)0 x123,相當(dāng)于十進(jìn)制數(shù)291;十六進(jìn)制數(shù)-0 x12,相當(dāng)于十進(jìn)制數(shù)-18。 十六進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),方法如下: 0 x123=1162+2161+3160=256+32+3=291 0 x1ab=1162+10161+11160=256+160+11=427 4) 二進(jìn)制數(shù), 字節(jié), 字, 位計(jì)算機(jī)內(nèi)所有的信息均用二進(jìn)制表示,

9、即計(jì)算機(jī)內(nèi)只有0和1,也只認(rèn)識(shí)由0和1組成的程序或數(shù)據(jù)。為什么在計(jì)算機(jī)中要使用二進(jìn)制數(shù)呢? 因?yàn)槎M(jìn)制數(shù)運(yùn)算規(guī)則簡單,用物理器材容易實(shí)現(xiàn),如電壓的高與低, 開關(guān)的開與關(guān),脈沖的有與無等等。 一個(gè)二進(jìn)制數(shù)0或1, 稱為“位”(bit)。在計(jì)算機(jī)存貯器中,為了便于管理,常將 8 個(gè)位稱為一個(gè)“字節(jié)”(byte),每個(gè)字節(jié)存放在一個(gè)存貯單元中,每個(gè)單元賦于一個(gè)存貯地址。 計(jì)算機(jī)在處理數(shù)據(jù)時(shí),每一個(gè)數(shù)據(jù)是一個(gè)“字”(word),字是由若干字節(jié)組成。字可以是1個(gè)字節(jié)(字符),2個(gè)字節(jié)(整數(shù)),4個(gè)字節(jié)(實(shí)數(shù),長整型數(shù)),8個(gè)字節(jié)(雙精度實(shí)數(shù))等等。 2. 單精度實(shí)型常量 1) 小數(shù)形式 一個(gè)實(shí)數(shù)可以是正

10、負(fù)號(hào)開頭,有若干位09的整數(shù),后跟一個(gè)小數(shù)點(diǎn)(必須有),再有若干位小數(shù)部分。如123.456, -21.37。 數(shù)12用實(shí)數(shù)表示必須寫成12.0或12.。 一個(gè)實(shí)數(shù)有數(shù)值范圍和有效位數(shù)的限制。實(shí)數(shù)的數(shù)值范圍是3.410-38|x|3.41038,當(dāng)小于3.410-38時(shí)按0對待(下溢), 而大于3.41038時(shí)則上溢,一個(gè)溢出的數(shù)是無意義的。實(shí)數(shù)僅有7位有效數(shù)字,超過七位的將是不精確的。 如1.2345678,在計(jì)算機(jī)內(nèi)僅保留為1.234567,第八位數(shù)無法保留而失去,并不是第八位向第七位四舍五入。當(dāng)上面的數(shù)要求用小數(shù)五位表示時(shí),則表達(dá)為1.23457,即第七位向第六位四舍五入。 2) 指數(shù)形

11、式 實(shí)數(shù)的指數(shù)形式也稱為科學(xué)計(jì)數(shù)法。一個(gè)實(shí)數(shù)的指數(shù)形式分成尾數(shù)部分和指數(shù)部分。尾數(shù)部分可以是整數(shù)形式或小數(shù)形式,指數(shù)部分是一個(gè)字母“e”后跟一個(gè)整數(shù)。如123e+01,-456.78e-01, 0e0等。由于實(shí)數(shù)僅有7位有效數(shù)字,因此在內(nèi)存中用三個(gè)字節(jié)來表示尾數(shù), 用一個(gè)字節(jié)來表示指數(shù),所以指數(shù)部分用兩位整數(shù)來表示。 在書寫時(shí)“e”與“E”完全等價(jià)。“e”前面必須有數(shù)字,“e”后面必須是整數(shù)。 3. 雙精度常量 當(dāng)一個(gè)數(shù)用實(shí)數(shù)表達(dá)時(shí),僅有七位有效數(shù)字,用長整型表達(dá)時(shí)僅有十位有效數(shù)字,實(shí)數(shù)的數(shù)值范圍也只能小于3.41038。 當(dāng)超過以上范圍時(shí),我們可以用雙精度常量來表達(dá)。 雙精度常量的取值范圍由

12、1.710-308|x|1.710308,有效位可達(dá)16位左右。一個(gè)數(shù)當(dāng)超過長整型數(shù)表達(dá)范圍或超過實(shí)數(shù)表達(dá)范圍時(shí)均按雙精度常量對待。一個(gè)雙精度常量在內(nèi)存中占8個(gè)字節(jié)。 長雙精度常量取值范圍在10-4931104932之間,有19位有效數(shù)字,在內(nèi)存中占16個(gè)字節(jié)。但它是由計(jì)算機(jī)系統(tǒng)決定的, 在Turbo C中,與double型一致。 2.3.2 字符常量 表 2.3 控制字符表示法 2.3.3 字符串常量 2.3.4 符號(hào)常量 1. 不帶參數(shù)的宏定義 宏定義命令define用來定義一個(gè)標(biāo)識(shí)符和一個(gè)字符串,在程序中每次遇到該標(biāo)識(shí)符時(shí)就用所定義的字符串替換它。這個(gè)標(biāo)識(shí)符叫做宏名,替換過程叫做宏替換或

13、宏展開。宏定義命令define的一般形式是: define 宏名 字符串 例如你想用PI表示數(shù)值3.14159, 可以用宏定義define來說明: define PI 3.14159這樣在編譯時(shí),每當(dāng)在源程序中遇到PI就自動(dòng)用3.14159代替,這就是宏展開。 若定義了一個(gè)宏名, 這個(gè)名字還可以做為其它宏定義的一個(gè)部分來使用。 例如: define PI 3.14159 define PI2 2*PI則在程序中出現(xiàn)的“PI2”處被“2*3.14159”來替換。 2.4 變 量 2.4.1 變量的定義 1. 變量定義變量定義的一般形式如下: 類型 變量名表; 這里,類型(type)必須是C語言的

14、有效數(shù)據(jù)類型。變量名表可以是一個(gè)或多個(gè)標(biāo)識(shí)符名,中間用逗號(hào)分隔,最后以分號(hào)結(jié)束。以下是一些變量定義的例子: int i, j, num; float a, b, sum; unsigned int ui; char c, ch, name; double x, total; 2. 說明 (1) 變量名可以是C語言中允許的合法標(biāo)識(shí)符, 用戶定義時(shí)應(yīng)遵循“見名知意”的原則,以利于程序的維護(hù)(今后所有標(biāo)識(shí)符均如此,不再重復(fù))。 (2) 每一個(gè)變量都必須進(jìn)行類型說明,這樣就可以保證程序中變量的正確使用。未經(jīng)類型說明的變量在編譯時(shí)將被指出是錯(cuò)誤的,也就是變量要先定義,后使用。 (3) 當(dāng)一個(gè)變量被指定為

15、某一確定類型時(shí),將為它分配若干相應(yīng)字節(jié)的內(nèi)存空間。如char型為1字節(jié),int型為2字節(jié),float為4字節(jié),double為8字節(jié)。當(dāng)然,不同的系統(tǒng)可能稍有差異。 (4) 變量可以在程序內(nèi)的三個(gè)地方定義: 在函數(shù)內(nèi)部, 在函數(shù)的參數(shù)(形參)定義中或在所有的函數(shù)外部。由此定義的變量分別稱為局部變量, 形式參數(shù)和全局變量。在不同地方定義的變量,其作用范圍不同。在同一層次定義的變量,不能與數(shù)組、指針、函數(shù)和其它變量同名。 (5) 變量是用來存放數(shù)據(jù)的,由于數(shù)據(jù)有不同的類型,因此要定義相應(yīng)類型的變量去存放它。這些數(shù)據(jù)稱為相應(yīng)變量的值。 2.4.2 C語言中各種類型的變量 1. 整型變量 整型變量用來存

16、放整型數(shù)值。整型變量可分為:基本型(int), 短整型(short int或short),長整型(long int或long)和無符號(hào)型(unsigned int, unsigned short, unsigned long)。 前三種整型變量存貯單元的最高位為符號(hào)位。0表示為正,1表示為負(fù)。無符號(hào)型變量存貯單元的所有位均表示數(shù)值。具體可參看表2.2。 在使用整型變量時(shí)一定要注意數(shù)值的范圍,超過該變量允許的使用范圍將導(dǎo)致錯(cuò)誤的結(jié)果。 2. 實(shí)型變量 實(shí)型變量分為單精度型(float)和雙精度型(double)兩類。其存放數(shù)據(jù)的差別是:單精度變量占4個(gè)字節(jié)內(nèi)存單元,有7位有效數(shù)字,數(shù)值范圍在3.

17、4e-383.4e+38之間。而雙精度變量占有8個(gè)字節(jié)內(nèi)存單元,有1516位有效數(shù)字,數(shù)值范圍在1.7e-3081.7e+308之間。 3. 字符型變量 字符型(char)變量內(nèi)存放字符型常量, 在內(nèi)存單元中僅占一個(gè)字節(jié)。 其內(nèi)存中存放的是該字符的ASCII碼, 因此字符型變量也可存貯數(shù)值范圍為0255或-128127之間的整型常數(shù)。 在C語言中,字符型與整型的界限不是很分明的,在一個(gè)字節(jié)內(nèi)是可互相轉(zhuǎn)換的。 5. 其它類型變量 C語言中無字符串變量,但可以用字符數(shù)組或字符型指針來表達(dá)字符串。另外還有指針型變量,結(jié)構(gòu)體型變量, 共用體型變量等, 這些將在后續(xù)章節(jié)中介紹。 C語言中沒有邏輯型變量,

18、 所有非零數(shù)值被認(rèn)為是邏輯“真”, 而數(shù)值零被認(rèn)為是邏輯“假”。無值型類型一般不用來說明變量, 只用在函數(shù)或指針中。 2.4.3 變量的初始化 程序中常需要對一些變量預(yù)先設(shè)置初值。 C規(guī)定, 可以在定義變量時(shí)同時(shí)使變量初始化。變量初始化只需定義變量時(shí)在變量名后面加一等號(hào)及一個(gè)常數(shù)。它的一般形式是: 類型 變量名=常數(shù); 以下是幾個(gè)示例: char ch=a; int first=0; float x=123.45; 2.5 運(yùn) 算 符 (1) 算術(shù)運(yùn)算符(+, -, *, /, %, +, -)。(2) 關(guān)系運(yùn)算符(, =, =, !KG-*8=)。(3) 邏輯運(yùn)算符(!, &, |)。(4)

19、 位運(yùn)算符(, , |, , &)。(5) 賦值運(yùn)算符(=, 及其雙目運(yùn)算符的擴(kuò)展賦值運(yùn)算符)。(6) 條件運(yùn)算符(? :)。(7) 逗號(hào)運(yùn)算符(,)。(8) 指針運(yùn)算符(*, &)。(9) 求字節(jié)數(shù)運(yùn)算符(sizeof)。(10) 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(類型)。(11) 分量運(yùn)算符(, -)。(12) 下標(biāo)運(yùn)算符( )。(13) 圓括號(hào)運(yùn)算符( )。 2.5.1 算術(shù)運(yùn)算符和賦值運(yùn)算符 表 2.4 算術(shù)運(yùn)算符和賦值運(yùn)算符 說明: (1) +, -, *, / 與數(shù)學(xué)中運(yùn)算類似, 先乘除后加減, 也就是按優(yōu)先級順序進(jìn)行運(yùn)算,優(yōu)先級小的先運(yùn)算。要改變運(yùn)算順序只要加括號(hào)就可以了,括號(hào)全部為圓括號(hào),必

20、須注意括號(hào)的配對,它們適用于C的幾乎全部數(shù)據(jù)類型(指針類除外)的各種運(yùn)算(+, -除外)。除法運(yùn)算符(/)在用于兩個(gè)整型數(shù)據(jù)運(yùn)算時(shí),其運(yùn)算結(jié)果也是整數(shù),余數(shù)總是被截掉。如1/2的結(jié)果是0;10/3的結(jié)果是3。 (2) 求余運(yùn)算符(%)僅用于整型數(shù)據(jù),不能用于實(shí)型和雙精度實(shí)型。它的作用是取整數(shù)除法的余數(shù)。如1%2的結(jié)果是1; 10%3的結(jié)果也是1。 (3) 賦值運(yùn)算符(=)是將右邊表達(dá)式的值賦給左邊的變量。 賦值運(yùn)算符左邊必須是變量等有存貯單元的元素,而不能是常量或表達(dá)式。如x=x+1是合法的,即把x的值加上1后再賦給x,而x+1=x卻是非法的,因?yàn)閤+1不是一個(gè)存貯單元, 不能被賦以值。賦值號(hào)

21、有別于數(shù)學(xué)中的等號(hào),這一點(diǎn)是要注意的。 (4) +, -僅用于整型變量,指針變量。用于整型變量在原值上加1或減1;用于指針變量是取下一地址或上一地址。 關(guān)于指針部分的使用在第八章中介紹。 增1和減1運(yùn)算符用在表達(dá)式中時(shí),寫法是有差別的:如果運(yùn)算符在操作數(shù)前面, 則在表達(dá)式“引用”該操作數(shù)前,先對其作加1或減1運(yùn)算; 如果運(yùn)算符在操作數(shù)之后,則先“引用”該操作數(shù),然后再對它作加1或減1運(yùn)算??紤]以下程序: main( ) int x, y; x=10; y=+x; printf(%d, %dn, x, y); 運(yùn)算結(jié)果為 11, 11此時(shí)y的值和x的值都為11。 然而換一種寫法: main( )

22、 int x, y; x=10; y=x+; printf(%d, %dn, x, y); 運(yùn)行結(jié)果為 11, 10 此時(shí)y的值是10,而x的值自增后為11。上述兩種情況x都變成了11,而y的值卻不同。它們的差別只在于給x加1的時(shí)機(jī)不同。 此時(shí)賦值即為引用。 再如進(jìn)行輸出操作時(shí),有以下程序段: x=10; printf(x=%dn, +x); 運(yùn)行結(jié)果為x=11,執(zhí)行其下一條語句時(shí)x也是11, 而程序段: x=10; printf(x=%dn, x+); (5) +, -, *, /, % 可以與賦值號(hào)=組成復(fù)合賦值運(yùn)算符+=, -=, *=, /=, %=。 如a=a+b可以寫成a+=b,a

23、=a*b可以寫成a*=b。其余類推。 這樣書寫簡練,運(yùn)行速度快,也提高了編譯效率。 2.5.2 關(guān)系運(yùn)算符和邏輯運(yùn)算符 表 2.5 關(guān)系和邏輯運(yùn)算符 說明: (1) 當(dāng)關(guān)系運(yùn)算符兩邊的值滿足關(guān)系時(shí)為真, 返回1; 如不滿足關(guān)系時(shí)為假,返回0。例如: x=10; printf(%dn, x=9);則輸出為1。又如: x=5; printf(%dn, x=9); 則輸出為0。 字符比較按其ASCII碼值進(jìn)行, 如A, =, , 31); 運(yùn)行輸出結(jié)果為0。因?yàn)閮蓚€(gè)是同一優(yōu)先級,53的結(jié)果為1, 而11的關(guān)系不滿足,所以最后結(jié)果為0。又如: printf(%dn, 1=1135); 運(yùn)行輸出結(jié)果為1

24、。因?yàn)榈膬?yōu)先級比=高,則111+12完全等價(jià)于10(1+12), 其結(jié)果當(dāng)然是假(即0)。 (5) 在關(guān)系和邏輯運(yùn)算符組成的表達(dá)式中, 也可以像算術(shù)表達(dá)式一樣, 用圓括號(hào)來改變運(yùn)算的自然優(yōu)先次序,如! 1&0其值為假,因?yàn)橄葓?zhí)行! 1, 然后才執(zhí)行&。然而加上圓括號(hào)! (1&0)后改變了運(yùn)算順序,則執(zhí)行! 0操作結(jié)果為1,即其值為真。 (6) 在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的值時(shí),才執(zhí)行該運(yùn)算符。例如: 當(dāng)兩個(gè)邏輯量a|b時(shí),當(dāng)a為真時(shí)則不再求b的值, 而取值為真(即1)。 當(dāng)兩個(gè)邏輯量a&b時(shí),當(dāng)a為假,則同樣不再求b的值,

25、 而取值為假(即0)。 同理, a|b|c式中當(dāng)a為真時(shí), 直接取值為真(即1);a&b&c式中當(dāng)a為假時(shí),直接取值為假(即0)。此時(shí)若b, c為賦值表達(dá)式,則賦值操作就沒有進(jìn)行。 (7) 邏輯運(yùn)算的轉(zhuǎn)換。 !(a|b)可寫成!a&!b,而! (a&b)可寫成! a|! b。 2.5.4 條件運(yùn)算符和逗號(hào)運(yùn)算符 1. 條件運(yùn)算符 運(yùn)算符的一般形式是: 表達(dá)式1 ? 表達(dá)式2:表達(dá)式3 其含義是: 先求表達(dá)式1的值,如果為真(非零), 則求表達(dá)式2的值, 并把它作為整個(gè)表達(dá)式的值;如表達(dá)式1的值為假(零), 則求表達(dá)式3的值, 并把它作為整個(gè)表達(dá)式的值。 例如: x=10; y=x9 ? 100

26、:200; 2. 逗號(hào)運(yùn)算符 逗號(hào)運(yùn)算符“,”也稱順序求值運(yùn)算符, 其運(yùn)算優(yōu)先級為15,也是最低的,結(jié)合方向是自左至右。 逗號(hào)運(yùn)算符的左邊總是不返回的,也就是說逗號(hào)右邊表達(dá)式的值才是整個(gè)表達(dá)式的值。例如: x=(y=3, y+1) 該表達(dá)式括號(hào)內(nèi)是逗號(hào)表達(dá)式,由于結(jié)合方向是自左至右, 先將3賦給y, 然后計(jì)算表達(dá)式y(tǒng)+1,其值為4,逗號(hào)左邊的值不返回,逗號(hào)右邊的值才是整個(gè)表達(dá)式的值,所以表達(dá)式的值為4,最后將4賦給x。 由于逗號(hào)運(yùn)算符的級別最低, 所以以整體先求值時(shí)一般均需加圓括號(hào)。 2.5.5 其它運(yùn)算符 表 2.7 其它運(yùn)算符 2.5.6 運(yùn)算符的優(yōu)先級和結(jié)合方向 表 2.8 C語言運(yùn)算符

27、的優(yōu)先級和結(jié)合方向 表 2.8 C語言運(yùn)算符的優(yōu)先級和結(jié)合方向 2.6 表 達(dá) 式 2.6.1 C的各種表達(dá)式 1. 算術(shù)表達(dá)式 算術(shù)表達(dá)式的形式如下: 算術(shù)表達(dá)式中運(yùn)算對象(操作數(shù))是數(shù)值, 也可以是字符(按其ASCII碼值進(jìn)行運(yùn)算),運(yùn)算結(jié)果(即表達(dá)式的值)是數(shù)值。如: a+b*c-d/e 2. 關(guān)系表達(dá)式 關(guān)系表達(dá)式的形式如下: 關(guān)系表達(dá)式中運(yùn)算對象是數(shù)值,也可以是字符(取其ASCII碼值), 其運(yùn)算結(jié)果是邏輯量,即為“真”時(shí)取1,為“假”時(shí)取0。 3. 邏輯表達(dá)式 邏輯表達(dá)式的形式如下: 邏輯表達(dá)式的運(yùn)算對象是邏輯量。在C語言中無邏輯量,因此規(guī)定將非零的值按“真”對待,零值按“假”對待

28、。而運(yùn)算結(jié)果為“真”時(shí)取1, 為“假”時(shí)取0。 4. 條件表達(dá)式 條件表達(dá)式的形式如下: ? : 其中表達(dá)式1的值按邏輯值對待,非零為“真”,零值為“假”。 而當(dāng)表達(dá)式1值為“真”(非零)時(shí),條件表達(dá)式的值為表達(dá)式2的值; 而當(dāng)表達(dá)式1的值為“假”(零)時(shí),條件表達(dá)式的值為表達(dá)式3的值。如y=x ? a: b,若x=3則y=a,若x=0,則y=b。 表達(dá)式2或表達(dá)式3還可以是另一個(gè)條件表達(dá)式, 應(yīng)注意它們是自右至左的結(jié)合方向。如ab? a: cd? c:d相當(dāng)于ab? a:(cd? c:d), 當(dāng)a=1, b=2, c=3, d=4時(shí),此條件表達(dá)式的值等于4。 5. 逗號(hào)表達(dá)式 逗號(hào)表達(dá)式的形

29、式如下: 表達(dá)式1,表達(dá)式2, 表達(dá)式n 逗號(hào)表達(dá)式按逗號(hào)間的順序依次從左至右執(zhí)行, 但整個(gè)逗號(hào)表達(dá)式的值為最后一個(gè)逗號(hào)右邊表達(dá)式的值 6. 賦值表達(dá)式 賦值表達(dá)式是最常用的表達(dá)式, 形式如下: 賦值運(yùn)算符即=,又稱為賦值號(hào)。賦值號(hào)左邊必須是變量、 數(shù)組元素等有存貯單元的元素,賦值號(hào)的右邊可以是各類表達(dá)式, 也可以是另一個(gè)賦值表達(dá)式。因此a=b=c是合法的,即相當(dāng)于a=(b=c),因?yàn)樗亲杂抑磷蠼Y(jié)合的,即c值先賦給b, b=c賦值表達(dá)式的值為b的值,然后再賦給a,整個(gè)表達(dá)式的值也為a的值。 賦值表達(dá)式的求值順序是先計(jì)算賦值號(hào)右邊表達(dá)式的值,再轉(zhuǎn)換成表達(dá)式左邊變量的類型,再進(jìn)行賦值,此值也是賦

30、值表達(dá)式的值。 2.6.2 表達(dá)式中的類型轉(zhuǎn)換 轉(zhuǎn)換的規(guī)則為: (1) 轉(zhuǎn)換的結(jié)果必定是3種基本類型:int, long或double型。 因此兩個(gè)char型的數(shù)據(jù)運(yùn)算,也要先轉(zhuǎn)換成int型,運(yùn)算結(jié)果也是int型;只要有一個(gè)數(shù)據(jù)是float型,都要先轉(zhuǎn)換成double型,最后結(jié)果也是double型。 (2) 各類型級別由低到高的順序?yàn)閏har, int, unsigned, long, unsigned long, float, double。除如(1)所述要進(jìn)行char或short向int, float向double的轉(zhuǎn)換外,其余類型的混合運(yùn)算均按此順序由低到高自動(dòng)轉(zhuǎn)換。另外,C語言規(guī)定,有

31、符號(hào)類型數(shù)據(jù)與無符號(hào)類型數(shù)據(jù)進(jìn)行混合運(yùn)算,結(jié)果為無符號(hào)類型。例如,int型數(shù)據(jù)和unsigned類型數(shù)據(jù)的運(yùn)算結(jié)果為unsigned型。 例 2.3 考慮圖2.1中的類型轉(zhuǎn)換。 圖 2.1 類型轉(zhuǎn)換示例 例 2.4 類型轉(zhuǎn)換。 float x; int i; x=i=3.14159;則變量i的值為3, 而變量x的值為3.0而不是3, 也不是3.14159。 (3) 可以使用強(qiáng)制類型轉(zhuǎn)換。通過使用強(qiáng)制類型轉(zhuǎn)換(type), 可以強(qiáng)迫表達(dá)式的值轉(zhuǎn)換為某一特定類型。一般的形式是: (類型) 表達(dá)式其中類型(type)是C語言標(biāo)準(zhǔn)數(shù)據(jù)類型。 例如你想確保表達(dá)式x/2成為float型, 你可以寫成如下形式: (float)(x/2) 當(dāng)然, 如x為整型時(shí)則會(huì)丟失信息。 如寫成: (float)x/2則表達(dá)式的結(jié)果為double型。 例 2.5 整型數(shù)據(jù)相除。 程序: main( ) in

溫馨提示

  • 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

提交評論