C語言程序設(shè)計(jì)課件-第2章數(shù)據(jù)類型運(yùn)算符表達(dá)式_第1頁
C語言程序設(shè)計(jì)課件-第2章數(shù)據(jù)類型運(yùn)算符表達(dá)式_第2頁
C語言程序設(shè)計(jì)課件-第2章數(shù)據(jù)類型運(yùn)算符表達(dá)式_第3頁
C語言程序設(shè)計(jì)課件-第2章數(shù)據(jù)類型運(yùn)算符表達(dá)式_第4頁
C語言程序設(shè)計(jì)課件-第2章數(shù)據(jù)類型運(yùn)算符表達(dá)式_第5頁
已閱讀5頁,還剩57頁未讀 繼續(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á)式在C語言中,為解決問題,要采用各種類型的數(shù)據(jù),數(shù)據(jù)的類型不同,它所表達(dá)的數(shù)據(jù)范圍、精度和所占據(jù)的存儲(chǔ)空間均不相同,本章主要討C語言的3種基本數(shù)據(jù)類型:整型、浮點(diǎn)型、字符型。

2.1

c語言的數(shù)據(jù)類型幾種聚合類型:

數(shù)組指針結(jié)構(gòu)體共用體、位域和枚舉五種基本數(shù)據(jù)類型:

字符型整型單精度實(shí)型雙精度實(shí)型空類型基本數(shù)據(jù)類型

數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型整型實(shí)型字符型數(shù)組類型結(jié)構(gòu)體類型共用體類型枚舉類型

雙精度型單精度型基本類型的前面可以有各種修飾符:

修飾符用來改變基本類型的意義,以便更準(zhǔn)確地適應(yīng)各種情況的需求。

signed(有符號)

unsigned(無符號)

long(長型符)short(短型符)2.2常量的概念

程序運(yùn)行過程中其值不能被改變的量稱為常量。

2.2.1整型常量

也叫整常數(shù),是由一個(gè)或多個(gè)數(shù)字所組成的,可以有正負(fù)號。C整型常量可以用十進(jìn)制整數(shù)、八進(jìn)制整數(shù)和十六進(jìn)制整數(shù)三種不同的形式表示。

1)十進(jìn)制整數(shù)。如:215,-236,0等。

2)八進(jìn)制整數(shù)。如:04,-016,0237等(分別代表十進(jìn)制數(shù)4,-14,159)。

以數(shù)字0開頭,以區(qū)別于十進(jìn)制數(shù)。

3)十六進(jìn)制整數(shù)。如:0x123,-0x1fa,0x64等(分別代表十進(jìn)制數(shù)291,-506,100)。

以數(shù)字0加小寫(或大寫)字母x開頭。

2.2.2實(shí)型常量

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

1)十進(jìn)制形式。如:0.235,.235,-23.5,0.0,45.237等都 是十進(jìn)制形式的實(shí)數(shù)。

2)指數(shù)形式。如:-1.254E-3表示-1.254×10-3 0.123e5表示0.123×105

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

2.2.3字符型常量

1.定義

用一對單引號括起來的單個(gè)字符,稱為字符常量。例如: ‘a(chǎn)’、‘A’、‘1’、‘+’

字符常量具有值,它的值就是該字符的ASCII代碼,在內(nèi)存中占一個(gè)字節(jié)。如:

c=‘A’與c=65這兩個(gè)賦值語句是相同的。2.轉(zhuǎn)義字符----以反斜杠“\”開頭的轉(zhuǎn)義字符,將反斜杠“\”后面的字符轉(zhuǎn)變?yōu)榱硗庖环N含義。使用這種方法可以表示任何輸出的字母字符、專用字符、控制字符和圖形字符。轉(zhuǎn)義字符功能ASCII記號\a響鈴BEL\b退一格BS\ddd1~3位八進(jìn)制數(shù)所代表的ASCII字符ddd\f走紙換頁FF\n換行NL(NF)\r回車(不換行)CR\t橫向跳到下一個(gè)輸出區(qū)HT\v豎向跳格VT\xhh1~2位十六進(jìn)制數(shù)所代表的ASCII字符hh\\反斜杠字符\\’單引號字符’\”雙引號字符”\?問號字符?\0空Null例2-1用轉(zhuǎn)義字符輸出可打印字符和不可打印字符。

main()

printf(“please\t\H\n”);

程序運(yùn)行結(jié)果如下:

please□□H

2.2.4字符串常量

1.字符串常量的定義

●字符串常量是用一對雙引號括起來的字符序列。

●字符串中字符的個(gè)數(shù)稱為字符串長度。

▼長度為0的字符串(即一個(gè)字符都沒有的字符 串)稱為空串,表示為””(一對緊連的雙引號)。

▼空格也是一個(gè)字符,長度為1。

例如:”Howareyou.”長度為12

”Goodmorning.”長度為13。

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

例如:C:\msdos\v6.22→“\\C:msdos\\v6.22”

Isay:“Iamastudent.”→

“Isay:\”Iamastudent.\””

2.字符串的存儲(chǔ)

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

如字符串”CHINA”在內(nèi)存中的實(shí)際存儲(chǔ):

CHINA\0提示:

字符常量‵a′與字符串常量“a“的不同之處:

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

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

(3)存儲(chǔ)要求不同:字符常量存儲(chǔ)字符的ASCII碼值,而字符串 常量,除了要存儲(chǔ)有效的字符外,還要存儲(chǔ)結(jié)束標(biāo)志符 "\0"。2.3變量

變量----其值可以改變的量稱為變量。

變量的標(biāo)識符----一個(gè)變量由一個(gè)名字來標(biāo)識,此名字稱為該 變量的標(biāo)識符(應(yīng)盡可能以有意義的名字來標(biāo)識變量, 以增加程序的易讀性)。

變量的存儲(chǔ)單元----存儲(chǔ)單元中存放變量的值。

變量的地址----存儲(chǔ)單元的地址。

注意:變量名、變量值和變量的地址是三個(gè)不同的概念,變量 名與內(nèi)存中的某一存儲(chǔ)單元相聯(lián)系,經(jīng)過編譯后變量名 都用變量地址代替;而變量值是指存放在該存儲(chǔ)單元中 的數(shù)據(jù)的值。同一個(gè)變量名對應(yīng)的變量在不同的時(shí)刻可 以有不同的值。

35a

圖2-1不同時(shí)刻變量的存儲(chǔ)單元存儲(chǔ)不同的值a補(bǔ)講標(biāo)識符

(1)字符集

C語言的字符集是指C程序中允許出現(xiàn)的字符,分為以下幾類:

英文字母(大、小寫):A,B,C,…,Z;a,b,c,…,z

數(shù)字:0,1,2,…,9

特殊字符:+,

,*,/,%,=,_,(,)~,!,◎,#,$,^,&,[,],\,.,

,“,{,},?,|以及空格等

轉(zhuǎn)義字符:\n,\t,\v,\b,\r,\f,\a,\“,\

,\\,\ddd,\xhh等

(2)標(biāo)識符

C語言中各種對象的名字。由字母(a-z,A-Z)、數(shù)字(0-9)和下劃線(_)組成,并且第一個(gè)字符必須為字母或下劃線。標(biāo)識符包括:符號常量名、變量名、函數(shù)名、類型名、文件名。例如,合法的標(biāo)識符和變量名:

data1,Day,x,program_1,aver,sum

非法的標(biāo)識符和變量名:

J.Agate,$50,a<b,3x在C語言中,大寫字母和小寫字母的含義是不同的.

(3)標(biāo)識符的分類

關(guān)鍵字又稱保留字,是C語言中一類特殊的標(biāo)識符。每個(gè)關(guān)鍵字有固定的含義,用戶不能改變關(guān)鍵字的用途。用戶標(biāo)識符用戶自定義標(biāo)識符是用戶根據(jù)自己的需要而定義的標(biāo)識符。為提高程序的可讀性,建議用戶使用有意義的名字來定義標(biāo)識符。用戶標(biāo)識符不能與關(guān)鍵字同名。2.3.1變量的聲明

變量有各種類型,在使用之前必須加以說明:

inti;/*說明i為整型變量*/

shortc,d,e;/*說明c,d,e為短整型變量*/

unsignedlongp,g;/*說明p,g為無符號長整型變量*/

floatx,y;/*說明x,y為單精度型變量*/

doublez;/*說明z為雙精度型變量*/

charch1,ch2;/*說明ch1,ch2為字符型變量*/2.3.2變量的初始化

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

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

如inta,b;

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

注:前者是對變量a進(jìn)行初始化,后者是對變量a賦值。

1.整形變量整型變量的基本類型符號為int。

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

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

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

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

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

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

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

(6)無符號長整型。類型關(guān)鍵字為unsignedlong[int]。2)整型變量的值域整型數(shù)據(jù)類型16位機(jī)32位機(jī)所占位數(shù)取值范圍所占位數(shù)取值范圍int16-32768~3276732-231~(231-1)short16-32768~3276716-32768~32767Long32-231~(231-1)32-231~(231-1)unsignedint160~65535320~232unsignedshort160~65535160~65535unsignedlong320~(231-1)320~(231-1)3)整型匹配規(guī)則

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

例2-2寫出程序運(yùn)行結(jié)果。

main()

{inta,b;

longx;

unsignedy;

a=-123;

b=456;

x=50000;

y=a+b+x;

printf(“%d%d%ld%u\n”,a,b,x,y);

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

-1234565000050333

2.實(shí)型變量

1)實(shí)型變量在內(nèi)存中的存放情況----通常按指數(shù)形式存儲(chǔ),并分成小數(shù)部分和指數(shù)部分分別存放。不同類型的實(shí)型變量所占存儲(chǔ)空間不同,而小數(shù)部分占位越多則數(shù)據(jù)的有效位數(shù)越多,精度越高;指數(shù)部分占位越多,則可表示的數(shù)值范圍越大。

2)實(shí)型變量分為三類:

(1)單精度型。用float表示,一般占4個(gè)字節(jié)(32bit)、 提供6~7位有效數(shù)字,例如:

floatx,y;指定x,y為單精度實(shí)型變量。

(2)雙精度型。用double表示,一般占8個(gè)字節(jié)(64bit)、 提供15~16位有效數(shù)字,例如

doublea,c;指定a,c為雙精度實(shí)型變量。

(3)長雙精度型。用longdouble表示,一般占16個(gè)字節(jié) (128bit)、提供18~19位有效數(shù)字,用得很少。例2-3

分析下面程序的運(yùn)行結(jié)果。

main()

floata;doubleb;

a=123456789.888;

b=123456789.888;

printf(“a=%fb=%f\n”,a,b);

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

a=123456792.000000b=123456789.8880003.字符變量

1)字符變量的定義:

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

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

c1=‘a(chǎn)’;c2=‘b’;/*給字符變量賦值*/

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

●將一個(gè)字符常量存儲(chǔ)到一個(gè)字符變量中,實(shí)際上是將該字符的ASCII碼值(無符號整數(shù))存儲(chǔ)到字符內(nèi)存單元中。

●ASCII碼值的形式與整數(shù)的存儲(chǔ)形式是一樣的。因此C語言允許字符型數(shù)據(jù)與整型數(shù)據(jù)之間通用,并且允許對字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算。[例2-4]對字符型數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算并輸出字符變量的字符形式及整數(shù)形式。

/*程序功能:將字母進(jìn)行大、小寫轉(zhuǎn)換,并輸出轉(zhuǎn)換結(jié)果和字母的ASCII碼值*/

main()

{

charcl,c2;

c1=‘a(chǎn)’;c2=‘B’;

c1=cl-32;c2=c2+32;/*字母的大、小寫轉(zhuǎn)換*/

printf(“cl=%c,c2=%c\n”,cl,c2);/*以字符形式輸 出字符變量*/

printf(“cl=%d,c2=%d\n”,c1,c2);/*以整數(shù)形式輸 出字符變量*/

}

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

c1=A,c2=b

c1=65,c2=982.4運(yùn)算符與表達(dá)式

●運(yùn)算符是表示某種操作的符號。

●運(yùn)算符的操作對象稱為運(yùn)算數(shù)。

●用運(yùn)算符把運(yùn)算數(shù)連接起來形成的有意義的式子叫做表達(dá)式。2.4.1算術(shù)運(yùn)算符與表達(dá)式

(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ò)。如9%5,結(jié)果為4。

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

●單個(gè)常量、變量或函數(shù),可以看做是表達(dá)式的一種特例。稱 為簡單表達(dá)式。否則稱為復(fù)雜表達(dá)式。

●算術(shù)表達(dá)式的概念----表達(dá)式中的運(yùn)算符都是算術(shù)運(yùn)算符的 表達(dá)式。

例如:2+3

a*b-6%9+a/(x+y)補(bǔ)充:運(yùn)算符的優(yōu)先級與結(jié)合性

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

算術(shù)運(yùn)算符中取正(負(fù))值運(yùn)算為單目運(yùn)算,其余為雙目運(yùn)算。

結(jié)合性----當(dāng)一個(gè)操作數(shù)兩側(cè)的運(yùn)算符具有相同的優(yōu)先級時(shí), 該操作數(shù)先與哪邊的運(yùn)算符結(jié)合,自左至右的結(jié)合方 向,稱為左結(jié)合性。反之,稱為右結(jié)合性。

結(jié)合性是C語言的獨(dú)有概念。除單目運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算符是右結(jié)合性外,其他運(yùn)算符都是左結(jié)合性。

運(yùn)算種類結(jié)

性優(yōu)先級+,

(單目)右結(jié)合性高低*,/,%左結(jié)合性+,

(雙目)左結(jié)合性2.表達(dá)式求值

●按運(yùn)算符的優(yōu)先級高低次序執(zhí)行。例如:先乘除后加減。

●如果在一個(gè)運(yùn)算對象(或稱操作數(shù))兩側(cè)的運(yùn)算符的優(yōu)先級 相同,則按C語言規(guī)定的結(jié)合方向(結(jié)合性)進(jìn)行。

例如:算術(shù)運(yùn)算符的結(jié)合方向是“自左至右”,即:

在執(zhí)行”a-b+c時(shí),變量b先與減號結(jié)合,執(zhí)行〝a-b〞; 然后再執(zhí)行加c的運(yùn)算。2.4.2賦值運(yùn)算符及賦值表達(dá)式1.賦值運(yùn)算符(1)基本賦值運(yùn)算符(”=”)變量名

表達(dá)式如SUM=28;將賦值運(yùn)算符右邊表達(dá)式的值存放到以左邊變量名所代表的存儲(chǔ)單元中。(2)復(fù)合賦值運(yùn)算符一般形式為:

變量

雙目運(yùn)算符=

表達(dá)式等價(jià)于:變量=變量雙目運(yùn)算符(表達(dá)式)例如:

i+=5等價(jià)于:i=i+5x*=y(tǒng)+8等價(jià)于:

x=x*(y+8)C語言共有10種:+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,‖=2.賦值表達(dá)式

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

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

例:x=a*b-6%9+a/(x+y);

a+=a-a*a;

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

●任何一個(gè)表達(dá)式都有一個(gè)值。

●將賦值運(yùn)算符右側(cè)的表達(dá)式的值賦給左邊的變量,賦值表達(dá) 式的值就是被賦值變量的值。

例如:x=5這個(gè)賦值表達(dá)式的值為5(x變量的值也是5)。說明:賦值運(yùn)算符的左邊必須是變量,右邊的表達(dá)式可以是常量、變量、表達(dá)式和函數(shù)調(diào)用表達(dá)式。一個(gè)表達(dá)式有一個(gè)值及其類型,等于計(jì)算表達(dá)式所得結(jié)果的值和類型。賦值表達(dá)式作為表達(dá)式也是有值的,它的值就是左邊變量的最終值。賦值運(yùn)算符的優(yōu)先級和結(jié)合性賦值運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符。例如:x*=3+y%6中優(yōu)先級最高的是“%”,然后是“+”,最低的是“*=”。賦值運(yùn)算符具有右結(jié)合性。若出現(xiàn)多個(gè)賦值運(yùn)算符,則從右向左結(jié)合.如:

x=y=z=0相當(dāng)于:x=(y=(z=0))提示:<1>賦值表達(dá)式中的“表達(dá)式”又可以是一個(gè)賦值表達(dá)式。例如:a=(b=1),把b=1的值賦給a,所以整個(gè)賦值表達(dá)式值就等于1,即a=1。賦值運(yùn)算符按照“自右向左”的組合順序,因此〝a=(b=1)〞就等價(jià)于〝a=b=1〞。(即右結(jié)合性)<2>賦值表達(dá)式也可以包含復(fù)合賦值運(yùn)算符。如a+=a-=a*=a,如果a的初值是2,此賦值表達(dá)式的運(yùn)算過程是:先計(jì)算〝a*=a〞的值,即相當(dāng)于a=a*a=2*2=4。再計(jì)算〝a-=4〞的值,即相當(dāng)于a=a-4=4-4=0。最后計(jì)算〝a+=0〞的值,即相當(dāng)于a=a+0=0+0=0。賦值的類型轉(zhuǎn)換

如果表達(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.2;〞的結(jié)果是a的值為1。

<2>將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變,但以浮點(diǎn)形式存放在變量的存儲(chǔ)單元中。如有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ù)字,存放到單精度變量的存儲(chǔ)單元中,但要注意范圍不能溢出。

2.4.4關(guān)系運(yùn)算符與關(guān)系表達(dá)式在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系,用來決定程序下一步的走向。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。1.關(guān)系運(yùn)算符在C語言中有以下關(guān)系運(yùn)算符,如表2-4所示:關(guān)系運(yùn)算符關(guān)系表達(dá)式說明<

x<y小于<=x<=y小于或等于>

x>y大于>=x>=y大于或等于==x==y等于!=x!=y不等于說明:

關(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。【例2.6】關(guān)系表達(dá)式實(shí)例:

voidmain(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d/n",'a'+5<c,-i-2*j>=k+1);printf("%d,%d/n",1<j<5,x-5.25<=x+y);printf("%d,%d/n",i+j+k==-2*j,k==j==i+5);}

字符變量是以它對應(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.4.5邏輯運(yùn)算符

與邏輯表達(dá)式1.邏輯運(yùn)算符

C語言中提供了三種邏輯運(yùn)算符:&&與運(yùn)算,雙目運(yùn)算符,具有左結(jié)合性||或運(yùn)算,雙目運(yùn)算符,具有左結(jié)合性!非運(yùn)算,單目運(yùn)算符,具有右結(jié)合性2.邏輯運(yùn)算符優(yōu)先次序

邏輯非 !高 算術(shù)運(yùn)算符 關(guān)系運(yùn)算符<、<=、>、>= 同

==、!= 同 邏輯與 &&

邏輯或 ||

賦值運(yùn)算符 =低

例:a>b&&c>d等價(jià)于(a>b)&&(c>d)!b==c||d<a等價(jià)于((!b)==c)||(d<a)a+b>c&&x+y<b等價(jià)于((a+b)>c)&&((x+y)<b)3.邏輯運(yùn)算的值

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

1)與運(yùn)算&&

參與運(yùn)算的兩個(gè)量都為真時(shí),結(jié)果才為真,否則為假。例如,5>0&&4>2,由于5>0為真,4>2也為真,相與的結(jié)果也為真。

2)或運(yùn)算||

參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。兩個(gè)量都為假時(shí),結(jié)果為假。例如:5>0||5>8,由于5>0為真,相或的結(jié)果也就為真。

3)非運(yùn)算!

參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。例如:!(5>0)的結(jié)果為假。

雖然C編譯在給出邏輯運(yùn)算值時(shí),以“1”代表“真”,“0”代表“假”。但反過來在判斷一個(gè)量是為“真”還是為“假”時(shí),以“0”代表“假”,凡是非“0”的數(shù)值作為“真”。

例如:由于5和3均為非“0”因此5&&3的值為“真”,即為1。

又如:5||0的值為“真”,即為1。4.邏輯表達(dá)式

邏輯表達(dá)式的一般形式為:

表達(dá)式邏輯運(yùn)算符表達(dá)式

邏輯表達(dá)式中的表達(dá)式可以又是邏輯表達(dá)式,從而組成了嵌套的情形。

例如:(a&&b)&&c。根據(jù)邏輯運(yùn)算符的左結(jié)合性,上式也可寫為:a&&b&&c。邏輯表達(dá)式的值是式中各種邏輯運(yùn)算的最后值,以“1”和“0”分別代表“真”和“假”?!纠?.7】邏輯表達(dá)式。voidmain(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d/n",!x*!y,!!!x);printf("%d,%d/n",x||i&&j-3,i<j&&x<y);printf("%d,%d/n",i==5&&c&&(j=8),x+y||i+j+k);}

本例中!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的值作為條件表達(dá)式的值,否則以表達(dá)式3的值作為整個(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á)式?!纠?.8】求兩個(gè)整數(shù)的最大值。main(){inta,b,max;printf("\ninputtwonumbers:");scanf("%d%d",&a,&b);printf("max=%d",a>b?a:b);}2.4.7逗號運(yùn)算符與逗號表達(dá)式

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

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

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

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

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

例如:逗號表達(dá)式〝a=2+3,a*6,a/3〞,先求解a=2+3,得a=5;再求a*6=30,由于a*6的值30沒賦給a變量,所以再求a/3時(shí),a的值仍為5,a/3=1,所以最后逗號表達(dá)式的值等于1。

又例如:求逗號表達(dá)式〝(a=2*3,a*4),a+4〞的值,先求解a=2*3,得a=6;再求a*4=24;由于a*4的值沒有賦給a變量,a的值仍然是6,所以最后求解a+4=10,逗號表達(dá)式的值為10。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ì)算:

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

②x=a=1,2*3:此式是一個(gè)逗號表達(dá)式,變量x為1,即x=1,而逗號表達(dá)式

溫馨提示

  • 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

提交評論