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

下載本文檔

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

文檔簡介

第2章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1C語言的數(shù)據(jù)類型

2.2常量

2.3變量

2.4運(yùn)算符與表達(dá)式

2.1C語言的數(shù)據(jù)類型

C語言有五種基本數(shù)據(jù)類型:字符型、整型、單精度實(shí)型、雙精度實(shí)型和空類型。這五種類型數(shù)據(jù)的長度和取值范圍隨處理器的類型和C語言編譯程序的實(shí)現(xiàn)而不同,整數(shù)與CPU字長相等,一個(gè)字符通常為一個(gè)字節(jié),浮點(diǎn)值的確切格式則根據(jù)實(shí)際而定。

C語言還提供了幾種聚合類型(AggregateTypes),包括數(shù)組、指針、結(jié)構(gòu)、共用體(聯(lián)合)、位域和枚舉。除void類型外,基本類型的前面可以有各種修飾符。修飾符用來改變基本類型的意義,以便更準(zhǔn)確地適應(yīng)各種情況的需求。修飾符如下:

·signed(有符號)。

·unsigned(無符號)。

·long(長型符)。

·short(短型符)。

修飾符signed、unsigned和long、short適用于字符和整數(shù)兩種基本類型,而long還可用于double(注意:由于longfloat與double意思相同,所以ANSI標(biāo)準(zhǔn)刪除了多余的longfloat)。

2.2常量

2.2.1整型常量

整型常量,也叫整常數(shù),可以有正負(fù)號。C語言整型常量可以用十進(jìn)制整數(shù)、八進(jìn)制整數(shù)和十六進(jìn)制整數(shù)三種不同的形式表示。在每一種常量后加小寫字母l或大寫字母L又得到十進(jìn)制長整型常量、八進(jìn)制長整型常量和十六進(jìn)制長整型常量。

1.十進(jìn)制整型常量

用數(shù)碼0~9表示的十進(jìn)制整數(shù)。如215、-236、0等。

2.十進(jìn)制長整型常量

在十進(jìn)制整型常量后加小寫字母l或大寫字母L表示的數(shù),如64L、65?783?l等都是十進(jìn)制長整型常量。

3.八進(jìn)制整型常量

以數(shù)字0開頭、用數(shù)碼0~7表示的整數(shù),開頭的數(shù)字0代表所表示的數(shù)為八進(jìn)制數(shù),以區(qū)別于十進(jìn)制整型常量。如04、-016、0237等(分別代表十進(jìn)制數(shù)4、-14、159)。

4.八進(jìn)制長整型常量

在八進(jìn)制整型常量后加小寫字母l或大寫字母L表示的數(shù),如064L、065753l等都是八進(jìn)制長整型常量。

5.十六進(jìn)制整數(shù)

以數(shù)字0和小寫字母x或大寫字母X開頭,用數(shù)碼0~9或小寫字母a~f或大寫字母A~F表示的十六進(jìn)制整數(shù),0x代表所表示的數(shù)為十六進(jìn)制數(shù),如0x123、-0x1fa、0x64等(分別代表十進(jìn)制數(shù)291、-506、100)。

6.十六進(jìn)制長整數(shù)

在十六進(jìn)制整型常量后加小寫字母l或大寫字母L表示的數(shù),如0x64L、0x65753l等都是十六進(jìn)制長整型常量。2.2.2實(shí)型常量

實(shí)型常量又稱實(shí)數(shù)或浮點(diǎn)數(shù)。C語言實(shí)型常量只使用十進(jìn)制,它有十進(jìn)制形式和指數(shù)形式兩種表示形式。

1.十進(jìn)制形式

十進(jìn)制形式由整數(shù)部分、小數(shù)點(diǎn)和小數(shù)部分組成。當(dāng)整數(shù)部分為0或小數(shù)部分為0時(shí)整數(shù)部分或小數(shù)部分的0都可以省略。例如:3.14、10.8、124.、.13、0.0等都是十進(jìn)制實(shí)數(shù)的表示形式,但這種表示形式不適合表示太小或太大的數(shù)。

2.指數(shù)形式

指數(shù)形式由尾數(shù)、大寫字母E(或小寫字母e)和整數(shù)指數(shù)組成。它適合表示比較小或比較大的數(shù)。字符E(或e)前必須有數(shù)字,且其后的指數(shù)必須為整數(shù)。例如:3.0E+5或3.0e+5都表示3.0×105,1.23E-2表示1.230×10-2或0.0123。

說明:實(shí)型常量不分float型和double型。如果實(shí)型常量跟有后綴f或F,則被當(dāng)做float型,否則C語言編譯系統(tǒng)總是將其處理成雙精度型。一個(gè)實(shí)型常量可以賦給一個(gè)實(shí)型變量(float型或double型)。2.2.3字符型常量

1.定義

C語言中用一對單引號括起來的單個(gè)字符稱為字符常量。例如?'a'、'A'、'1'、'+'?等,其中?'a'、'A'?是兩個(gè)不同的字符常量。

在C語言中,字符常量的值就是該字符的ASCII代碼,在內(nèi)存中占一個(gè)字節(jié)。如c?=?'A'?與c=65這兩個(gè)賦值語句是相同的。

2.轉(zhuǎn)義字符

C語言還有一種特殊形式的字符常量,就是以反斜杠“\”開頭的轉(zhuǎn)義字符,所謂轉(zhuǎn)義字符,是指將反斜杠“\”后面的字符轉(zhuǎn)變?yōu)榱硗庖环N含義。使用這種方法可以表示任何輸出的字母字符、專用字符、控制字符和圖形字符。見表2.1。表2.1轉(zhuǎn)義字符及其功能表圖2.1例2.1的運(yùn)行結(jié)果程序說明:printf函數(shù)直接輸出雙引號內(nèi)的普通字符please,然后遇到轉(zhuǎn)義字符“\t”,其作用是橫向跳到下一個(gè)輸出區(qū)(每個(gè)輸出區(qū)占8列),即在第9列輸出字符H(因?yàn)閜lease占了6列,所以第一個(gè)輸出區(qū)還剩兩列,H字符輸出在第9列)。

3.字符常量

用單引號括起來的一個(gè)字符,如?'A'、'a'、'8'、'?'、'$'?等都是字符常量。2.2.4字符串常量

1.定義

字符串常量是用雙引號括起來的零個(gè)、一個(gè)或多個(gè)字符序列,如?"Iamastudent"。編譯程序自動(dòng)地在每一個(gè)字符串末尾添加串結(jié)束符“\0”,因此,所需要的存儲空間比字符串的字符個(gè)數(shù)多一個(gè)。

字符串中字符的個(gè)數(shù)稱為字符串長度。長度為0的字符串(即一個(gè)字符都沒有的字符串)稱為空串,表示為?""(一對緊連的雙引號)。

如果反斜杠和雙引號作為字符串中的有效字符,則必須使用轉(zhuǎn)義字符。

2.字符串的存儲

C語言規(guī)定:在存儲字符串常量時(shí),由系統(tǒng)在字符串的末尾自動(dòng)加一個(gè)“\0”作為字符串的結(jié)束標(biāo)志。

如果有一個(gè)字符串為“CHINA”,則它在內(nèi)存中的實(shí)際存儲如圖2.2所示。圖2.2字符串存儲示意圖該字符串實(shí)際占用內(nèi)存空間是6個(gè)字節(jié),最后一個(gè)字節(jié)是系統(tǒng)自動(dòng)加上的字符串的結(jié)束符——\0。比如在執(zhí)行語句printf("CHINA")時(shí),字符一個(gè)一個(gè)地輸出,直到遇上“\0”字符,就知道此字符串結(jié)束,輸出停止,而且不會輸出“\0”。值得注意的是:在源程序中書寫字符串常量時(shí),不需要加結(jié)束字符“\0”,否則畫蛇添足。

提示:字符常量?'a'?與字符串常量?"a"?是兩回事,兩者有如下不同之處:

(1)定界符不同:字符常量使用單引號,而字符串常量使用雙引號;

(2)長度不同:字符常量的長度固定為1,而字符串常量的長度指字符串包含的字符個(gè)數(shù),可以是0,也可以是某個(gè)整數(shù),"a"?的長度是1;

(3)存儲要求不同:字符常量占用1個(gè)字節(jié)的存儲空間,存儲的是字符的ASCII碼值,而字符串常量除了要存儲有效的字符外,還要存儲一個(gè)結(jié)束標(biāo)志符“\0”,所以字符串常量要占用字符串長度?+1個(gè)字節(jié),因此字符串常量?"a"?占用兩個(gè)字節(jié)的存儲空間。 2.3變量

顧名思義,其值可以改變的量稱為變量。一個(gè)變量用一個(gè)名字來標(biāo)識,此名字稱為該變量的標(biāo)識符(為了增加程序的易讀性,應(yīng)盡可能以有意義的名字來標(biāo)識變量)。變量在內(nèi)存中占據(jù)一定的存儲單元,該存儲單元有一個(gè)確定的地址,該存儲單元存放變量的值,變量的值可以屬于不同的類型。所以變量有變量名、變量的地址、變量的類型和變量的值四個(gè)要素。注意,變量名和變量值是兩個(gè)不同的概念,變量名與內(nèi)存中的某一存儲單元即變量的地址相聯(lián)系,程序中的變量經(jīng)過編譯后都被翻譯為其存儲單元的地址,而變量值是指存放在該存儲單元中的某種類型的數(shù)據(jù)的值。同一個(gè)變量名對應(yīng)的變量在不同的時(shí)刻可以有不同的值。如圖2.3所示,對于變量a,它的存儲單元是確定的,它在某一個(gè)時(shí)刻取值3,另一時(shí)刻取值5,實(shí)際上就是在不同的時(shí)刻在同一存儲單元中存儲了不同的值。圖2.3不同時(shí)刻變量的存儲單元存儲不同的值在C語言中,夾在/**/中的內(nèi)容表示注釋,是對程序或語句添加的說明,注釋在程序運(yùn)行時(shí)并不執(zhí)行,但必要的注釋可提高程序的可讀性,因此在編寫程序的過程中,在適當(dāng)?shù)牡胤綉?yīng)該加上必要的注釋。

上述變量被說明后,根據(jù)不同的類型,由編譯程序分配不同大小的存儲單元。2.3.2變量的初始化及分類

在定義變量時(shí),給變量賦值稱為變量的初始化。

如inta=5,b;在定義變量a和b的同時(shí)給變量a賦值為5,是對變量a進(jìn)行初始化。

如inta,b;a=5;先定義兩個(gè)整型變量a和b,然后給變量a賦值為5,就不是初始化。

雖然上面兩例的執(zhí)行效果相同,但前者是對變量a進(jìn)行初始化,而后者是對變量a賦值。

變量按數(shù)據(jù)類型可分為整型變量、實(shí)型變量和字符變量三種。

1.整型變量

整型變量的基本類型符號為int。根據(jù)變量數(shù)值的取值范圍不同,再加上特定的前綴,又派生出多種類型。

1)整型變量的分類

整型變量根據(jù)其占用內(nèi)存字節(jié)數(shù)的不同分為以下三種類型:

(1)基本整型。類型關(guān)鍵字為int。

(2)短整型。類型關(guān)鍵字為short[int]。

(3)長整型。類型關(guān)鍵字為long[int]。

在上述三種類型前加上無符號整型標(biāo)記unsigned,則只能用來存儲無符號整數(shù)。于是又有下列類型的整型變量:

(1)無符號基本整型。類型關(guān)鍵字為unsignedint。

(2)無符號短整型。類型關(guān)鍵字為unsignedshort[int]。

(3)無符號長整型。類型關(guān)鍵字為unsignedlong[int]。

2)整型變量的值域

C語言中沒有規(guī)定以上各種數(shù)據(jù)占有內(nèi)存的字節(jié)數(shù),只要求一個(gè)short型數(shù)據(jù)不長于一個(gè)int型數(shù)據(jù),一個(gè)int型數(shù)據(jù)又不長于一個(gè)long型數(shù)據(jù)。具體實(shí)現(xiàn)由各計(jì)算機(jī)系統(tǒng)自行決定。表2.2列出了不同計(jì)算機(jī)上整型變量數(shù)據(jù)的取值范圍。表2.2不同計(jì)算機(jī)上整型變量數(shù)據(jù)的取值范圍

3)整型匹配規(guī)則

整型變量的類型匹配規(guī)則為:一個(gè)整型常量可以賦值給能容納其值的整型變量。

例如:值在-32?768~32?867的整型數(shù),可以賦值給int型變量和longint型變量,而值在-2?147?483?648~-327?687或327?688~2?147?483?647范圍內(nèi)的整型數(shù),就只能賦給longint型變量。圖2.4例2.2的運(yùn)行結(jié)果在上例中我們定義了4個(gè)不同類型的整型變量,多個(gè)語句寫在一行上是允許的(但是每一行寫一個(gè)語句可以增加易讀性),在輸出語句中雙引號內(nèi)的%d、%ld、%u都是輸出格式控制符,%d控制a,b按整型格式輸出,%ld控制x按長整型格式輸出,%u控制y按無符號整型格式輸出。

注意:把一個(gè)整型值賦給上述幾種類型的整型變量時(shí)類型要匹配,否則會出錯(cuò)。

2.實(shí)型變量

1)實(shí)型變量在內(nèi)存中的存放情況

實(shí)型變量在內(nèi)存中通常按指數(shù)形式存儲,并分成小數(shù)部分和指數(shù)部分分別存放。小數(shù)部分采用規(guī)范化的指數(shù)方式表示。不同類型的實(shí)型變量所占存儲空間不同,小數(shù)部分占位多少關(guān)系到數(shù)據(jù)的精度高低,占位越多則數(shù)據(jù)的有效位數(shù)越多,精度也就越高;指數(shù)部分占位越多,則可表示的數(shù)值范圍越大。

2)實(shí)型變量的分類

C語言的實(shí)型變量分為以下三類:

(1)單精度型。用float表示,一般占4個(gè)字節(jié)(32bit)、提供6~7位有效數(shù)字,數(shù)據(jù)的取值范圍是:-3.4×10-38~3.4×1038。例如:floatx,y;指定x和y為單精度實(shí)型變量。

(2)雙精度型。用double表示,一般占8個(gè)字節(jié)(64bit)、提供15~16位有效數(shù)字,數(shù)據(jù)的取值范圍是:-1.7×10-308~1.7×10308。例如doublea,c;指定a和c為雙精度實(shí)型變量。

(3)長雙精度型。用longdouble表示,一般占16個(gè)字節(jié)(128bit)、提供18~19位有效數(shù)字,數(shù)據(jù)的取值范圍是:-1.2×10-4932~1.2×104932。長雙精度型用得很少。圖2.5例2.3的運(yùn)行結(jié)果

3.字符變量

1)字符變量的定義

字符變量是用來存放字符常量的,一個(gè)字符變量只能放一個(gè)字符,而不是一個(gè)字符串。它的類型關(guān)鍵字為char,字符變量占用一個(gè)字節(jié)的內(nèi)存單元。例如:

charc1,c2; /*定義兩個(gè)字符變量:c1和c2*/

c1=?'a';c2=?'b'; /*給字符變量賦值*/

2)字符變量數(shù)據(jù)的存儲形式及其使用特點(diǎn)

將一個(gè)字符常量存儲到一個(gè)字符變量中,實(shí)際上是將該字符的ASCII碼值(無符號整數(shù))存儲到字符內(nèi)存單元中。例如:'a'?的ASCII碼值為97,在內(nèi)存中變量c1的一個(gè)字節(jié)中存放01100001這樣一個(gè)二進(jìn)制數(shù)。因?yàn)樽址麛?shù)據(jù)在內(nèi)存中存儲的是字符的ASCII碼值(無符號整數(shù)),其形式與整數(shù)的存儲形式是一樣的,因此C語言允許字符型數(shù)據(jù)與整型數(shù)據(jù)之間通用,并且允許對字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,這些都是通過對它們的ASCII碼值進(jìn)行算術(shù)運(yùn)算來完成的。由程序運(yùn)行結(jié)果可知,一個(gè)字符型數(shù)據(jù),既可以以字符形式輸出,也可以以整數(shù)形式輸出。圖2.6例2.4的運(yùn)行結(jié)果 2.4運(yùn)算符與表達(dá)式

2.4.1算術(shù)運(yùn)算符及算術(shù)表達(dá)式

C語言規(guī)定的基本的算術(shù)運(yùn)算符有:

(1)加法運(yùn)算符或取正值運(yùn)算符:+,如1+2、+2。

(2)減法運(yùn)算符或取負(fù)值運(yùn)算符:-,如2-1、-2。

(3)乘法運(yùn)算符:*,如1*2。

(4)除法運(yùn)算符:/,如5/2。C語言規(guī)定:兩個(gè)整數(shù)相除,其商為整數(shù),小數(shù)部分被舍棄(即舍尾取整),如5/2=2。如果操作數(shù)中有負(fù)數(shù),取整通常采取“向零取整”的方法。如5/(-3)=-1。

(5)求余運(yùn)算符,或稱模運(yùn)算符:%,運(yùn)算符兩邊均要求是整數(shù),否則出錯(cuò),其結(jié)果是兩個(gè)整數(shù)相除的余數(shù),如9%5,結(jié)果為4。

表達(dá)式的概念:用運(yùn)算符和括號將運(yùn)算對象(常量、變量和函數(shù)等)連接起來組成符合C語言語法規(guī)則的式子稱為表達(dá)式。

單個(gè)常量、變量或函數(shù)可以看做是表達(dá)式的一種特例。將單個(gè)常量、變量或函數(shù)構(gòu)成的表達(dá)式稱為簡單表達(dá)式,其他表達(dá)式稱為復(fù)雜表達(dá)式。

算術(shù)表達(dá)式的概念:當(dāng)表達(dá)式中的運(yùn)算符都是算術(shù)運(yùn)算符時(shí),此表達(dá)式即為算術(shù)表達(dá)式。例如:2+3和a*b-6%9+a/(x+y)等都是算術(shù)表達(dá)式。算術(shù)運(yùn)算符的優(yōu)先級和結(jié)合性如表2.3所示。所謂運(yùn)算符優(yōu)先級是指表達(dá)式中出現(xiàn)多個(gè)運(yùn)算符時(shí),運(yùn)算符執(zhí)行的先后次序,例如先乘除后加減。而所謂結(jié)合性是指當(dāng)一個(gè)操作數(shù)兩側(cè)的運(yùn)算符具有相同的優(yōu)先級時(shí)運(yùn)算對象與運(yùn)算符的結(jié)合順序,即該操作數(shù)是先與左邊的運(yùn)算符結(jié)合還是先與右邊的運(yùn)算符結(jié)合。表2.3算術(shù)運(yùn)算符的優(yōu)先級和結(jié)合性2.4.2賦值運(yùn)算符及賦值表達(dá)式

1.賦值運(yùn)算符

賦值符號“=”就是賦值運(yùn)算符,它的作用是將一個(gè)表達(dá)式的值(或一個(gè)數(shù)據(jù))賦給一個(gè)變量。賦值運(yùn)算符的優(yōu)先級僅高于“,”運(yùn)算符。賦值運(yùn)算符的一般形式為

變量=賦值表達(dá)式;

如果表達(dá)式值的類型與被賦值變量的類型不一致,但都是數(shù)值型或字符型時(shí),系統(tǒng)自動(dòng)地將表達(dá)式的值轉(zhuǎn)換成被賦值變量的數(shù)據(jù)類型,然后賦給變量。具體有以下幾種情況:

(1)將實(shí)型數(shù)據(jù)(單、雙精度實(shí)數(shù))賦給整型變量時(shí),舍棄實(shí)數(shù)的小數(shù)部分,在內(nèi)存中以整數(shù)形式存放,如a為整型變量,運(yùn)行“a=1.56;”的結(jié)果是a的值為1。

(2)將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變,但以浮點(diǎn)形式存放在變量的存儲單元中。如有a=12,而a是float變量,運(yùn)行時(shí),先將12轉(zhuǎn)換成12.00000,然后再存放到a中。若a是double型變量,則先將12轉(zhuǎn)換成12.0000000000000,再以雙精度浮點(diǎn)數(shù)形式存放到變量a中。

(3)將一個(gè)雙精度數(shù)據(jù)賦給一個(gè)單精度變量時(shí),截取前面7位有效數(shù)字存放到單精度變量的存儲單元中,但要注意范圍不能溢出。如:

floatf;

doubled=123.456789e100

f=d;

就會出現(xiàn)溢出錯(cuò)誤。

2.賦值表達(dá)式

1)賦值表達(dá)式

由賦值運(yùn)算符或復(fù)合賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來而形成的表達(dá)式稱為賦值表達(dá)式。賦值表達(dá)式的一般格式為

<變量><(復(fù)合)賦值運(yùn)算符><表達(dá)式>

2)賦值表達(dá)式的求解過程

將賦值運(yùn)算符右側(cè)表達(dá)式的值賦給左邊的變量,賦值表達(dá)式的值就是被賦值變量的值。任何一個(gè)表達(dá)式都有一個(gè)值,賦值表達(dá)式也不例外。2.4.3復(fù)合賦值運(yùn)算

1.復(fù)合賦值運(yùn)算符

復(fù)合賦值運(yùn)算符是由賦值運(yùn)算符“=”之前再加上一個(gè)雙目運(yùn)算符構(gòu)成的。例如:

i+=1; /*“+=”為復(fù)合賦值運(yùn)算符*/

a*=b-2; /*“x=”為復(fù)合賦值運(yùn)算符*/

r%=3; /*“%=”為復(fù)合賦值運(yùn)算符*/

C語言規(guī)定了如下10種復(fù)合賦值運(yùn)算符:

+=,-=,*=,/=,%=; /*復(fù)合算術(shù)運(yùn)算符(5個(gè))*/

&=,∧=,1=,<<=,>>=。 /*復(fù)合位運(yùn)算符(5個(gè))*/

2.復(fù)合賦值運(yùn)算

復(fù)合賦值運(yùn)算的一般格式為

它等價(jià)于:

變量=變量雙目運(yùn)算符(表達(dá)式)

當(dāng)表達(dá)式為簡單表達(dá)式時(shí),表達(dá)式外的一對圓括號才可缺省,否則可能出錯(cuò)。2.4.4關(guān)系運(yùn)算符與關(guān)系表達(dá)式

1.關(guān)系運(yùn)算符

在C語言中有以下關(guān)系運(yùn)算符,如表2.4所示。表2.4C語言中使用的關(guān)系運(yùn)算符關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為左結(jié)合。關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。在六個(gè)關(guān)系運(yùn)算符中,<、<=、>、>=?的優(yōu)先級相同,其高于?==?和?!=,==?和?!=?的優(yōu)先級相同。

2.關(guān)系表達(dá)式

關(guān)系表達(dá)式的一般形式為:表達(dá)式關(guān)系運(yùn)算符表達(dá)式

例如:a+b>c-d、x>3/2、'a'+1<c、-i-5*j==k+1都是合法的關(guān)系表達(dá)式。由于表達(dá)式也可以是關(guān)系表達(dá)式。因此也允許出現(xiàn)嵌套的情況,例如:a>(b>c)、a!=(c==d)等。關(guān)系表達(dá)式的值是“真”和“假”,用“1”和“0”表示。如5>0的值為“真”,即為1。(a=3)?>?(b=5),由于3?>?5不成立,故其值為假,即為0。

程序說明:在本例中求出了各種關(guān)系運(yùn)算符的值。字符變量是以它對應(yīng)的ASCII碼參與運(yùn)算的。對于含多個(gè)關(guān)系運(yùn)算符的表達(dá)式,如k==j==i+5,根據(jù)運(yùn)算符的左結(jié)合性,先計(jì)算k==j,該式不成立,其值為0;再計(jì)算0==i+5,也不成立,故表達(dá)式值為0。圖2.7例2.5的運(yùn)行結(jié)果2.4.5邏輯運(yùn)算符與邏輯表達(dá)式

1.邏輯運(yùn)算符

C語言提供了三種邏輯運(yùn)算符:&&?(與運(yùn)算),||?或運(yùn)算,!?(非運(yùn)算)。&&?和?||?均為雙目運(yùn)算符,具有左結(jié)合性。!為單目運(yùn)算符,具有右結(jié)合性。

2.運(yùn)算符優(yōu)先級

邏輯運(yùn)算符的優(yōu)先級關(guān)系如表2.5所示。表2.5邏?輯?運(yùn)?算?符

3.邏輯運(yùn)算的值

邏輯運(yùn)算的值也為“真”和“假”兩種,用“1”和“0”來表示。其求值規(guī)則如下:

(1)與運(yùn)算&&:參與運(yùn)算的兩個(gè)量都為真時(shí),結(jié)果才為真,否則為假。

(2)或運(yùn)算||:參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。兩個(gè)量都為假時(shí),結(jié)果為假。

(3)非運(yùn)算!:參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。

4.邏輯表達(dá)式

邏輯表達(dá)式中的表達(dá)式可以又是邏輯表達(dá)式,這樣就組成了嵌套的情形。例如:(a&&b)&&c。根據(jù)邏輯運(yùn)算符的左結(jié)合性,上式也可寫為:a&&b&&c。邏輯表達(dá)式的值是式中各種邏輯運(yùn)算的最后值,以“1”和“0”分別代表“真”和“假”。

【例2.6】邏輯表達(dá)式。

程序如下:圖2.8例2.6的運(yùn)行結(jié)果程序說明:本例中!x和!y分別為0,!x*!y也為0,故其輸出值為0。由于x為非0,故!!!x的邏輯值為0。對x||i&&j-3,先計(jì)算j-3的值為非0,再求i&&j-3的邏輯值為1,故x||i&&j-3的邏輯值為1。對i?<?j&&x?<?y,由于i?<?j的值為1,而x<y為0,故表達(dá)式的值為1和0相與,最后為0。對i==5&&c&&(j=8),由于i==5為假,即值為0,該表達(dá)式由兩個(gè)與運(yùn)算組成,所以整個(gè)表達(dá)式的值為0。對x+y||i+j+k,由于x+y的值為非0,故整個(gè)或表達(dá)式的值為1。2.4.6條件運(yùn)算符與條件表達(dá)式

1.條件運(yùn)算符

條件運(yùn)算符為“?”和“:”,它是一個(gè)三目運(yùn)算符,即有三個(gè)參與運(yùn)算的量。

2.條件表達(dá)式

1)一般形式

由條件運(yùn)算符組成條件表達(dá)式的一般形式為

表達(dá)式1?表達(dá)式2:表達(dá)式3

2)求值規(guī)則

條件表達(dá)式的求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為整個(gè)條件表達(dá)式的值,否則以表達(dá)式2的值作為整個(gè)條件表達(dá)式的值。

3)條件表達(dá)式的使用

條件表達(dá)式通常用于賦值語句之中。如條件語句:

if(a>b)max=a;

elsemax=b;

可用條件表達(dá)式寫為

max=(a>b)?a:b;

執(zhí)行該語句的語義是:如果a?>?b為真,則把a(bǔ)賦予max,否則把b賦予max。使用條件表達(dá)式時(shí),還應(yīng)注意以下幾點(diǎn):

(1)條件運(yùn)算符的運(yùn)算優(yōu)先級低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值符。因此

max=(a>b)?a:b

可以去掉括號而寫為

max=a>b?a:b。

(2)條件運(yùn)算符由“?”和“:”組成,是一對運(yùn)算符,不能分開單獨(dú)使用。

(3)條件運(yùn)算符的結(jié)合方向是自右至左。例如:

a>b?a:c>d?c:d

應(yīng)理解為:a>b?a:(c>d?c:d),這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式3又是一個(gè)條件表達(dá)式。圖2.9例2.7的運(yùn)行結(jié)果2.4.7逗號運(yùn)算符與逗號表達(dá)式

C語言提供一種用“,”連接起來的式子,稱為逗號表達(dá)式。逗號運(yùn)算符又稱順序求值運(yùn)算符。

1.逗號表達(dá)式的一般形式及求解過程

逗號表達(dá)式的一般形式為

表達(dá)式1,表達(dá)式2,……,表達(dá)式n

逗號表達(dá)式的求解過程:由逗號隔開的一系列表達(dá)式從自左至右依次計(jì)算各表達(dá)式的值,“表達(dá)式n”即最后一個(gè)表達(dá)式的值為整個(gè)逗號表達(dá)式的值。

2.逗號在C語言中不同情況下的作用

并不是任何地方出現(xiàn)的逗號都是逗號運(yùn)算符。很多情況下,逗號僅用作分隔符。

(1)逗號在變量說明表和初始值表中起分隔作用。例如:

intx,y,z[6];

(2)在函數(shù)的參數(shù)表中,逗號作為各參數(shù)的分隔符。例如:語句

printf(″%d,%d,%d″,x,y,z);

中的逗號是分隔符。但是如果改為

printf(″%d,%d,%d″,(x,y,z),y,z);

則“(x,y,z)”就是一逗號表達(dá)式,即該括號中的逗號是逗號運(yùn)算符,其值是z的值。最后兩個(gè)逗號是分隔符,表示有三個(gè)輸出項(xiàng)。

3.逗號作為運(yùn)算符中較低的優(yōu)先級

逗號作為運(yùn)算符在所有運(yùn)算符中級別是最低的。因此需要注意以下兩個(gè)表達(dá)式的計(jì)算:

(1)?x=(a=1,2*3):此式的運(yùn)算是將一個(gè)逗號表達(dá)式的值賦給變量x,即x=6。

(2)?x=a=1,2*3:此式是一個(gè)逗號表達(dá)式,變量x為1,即x=1,而逗號表達(dá)式的值為6。2.4.8取址運(yùn)算符&

例1.2中“&n1,&n2,&n3”中的“&”是“地址運(yùn)算符”,&n1指取n1在內(nèi)存中的地址。下面用例子來加以說明。運(yùn)行時(shí)按以下方式輸入“abc”的值:

①按十進(jìn)制格式輸入“abc”的值時(shí),兩個(gè)值之間用空格隔開;

②按十進(jìn)制格式輸出“a,b,c”的值時(shí),“,”原樣輸出,所以兩個(gè)值之間用逗號隔開。

運(yùn)行結(jié)果如下如圖2.10所示。

程序說明:scanf函數(shù)的作用是從鍵盤輸入a、b、c三個(gè)變量的值,按照它們的地址存儲到相應(yīng)的內(nèi)存單元中去。圖2.10例2.8的運(yùn)行結(jié)果2.4.9運(yùn)算符的優(yōu)先級與結(jié)合性

1.?C語言中運(yùn)算符的優(yōu)先級和結(jié)合性

所謂運(yùn)算符優(yōu)先級是指表達(dá)式中出現(xiàn)多個(gè)運(yùn)算符時(shí),運(yùn)算符執(zhí)行的先后次序,

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論