版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章表達(dá)式與操作符表達(dá)式和語(yǔ)句的概念及其關(guān)系;各種操作符語(yǔ)句的使用;操作符之間的優(yōu)先級(jí)和結(jié)合性;了解詞法分析中的分析法;使用小括號(hào)改變操作符的執(zhí)行順序。5.1表達(dá)式和語(yǔ)句在C語(yǔ)言中,語(yǔ)句是程序功能的基本執(zhí)行單位,多個(gè)語(yǔ)句結(jié)合在一起可以完成一些特定的功能;而一個(gè)語(yǔ)句又由若干個(gè)表達(dá)式組成;此外,語(yǔ)句和表達(dá)式可以通過(guò)一定的手段來(lái)相互轉(zhuǎn)換。本節(jié)將討論表達(dá)式和語(yǔ)句的概念和使用。5.1.1表達(dá)式表達(dá)式是C語(yǔ)句的主體。在C語(yǔ)言中,表達(dá)式由操作符和操作數(shù)組成。操作符可以是+、-、*、/或%一類的運(yùn)算操作符,也可以是>、<或==之類的關(guān)系操作符,還可以是其他一些操作符。操作數(shù)是操作符的操作對(duì)象,可以是常量或變量。最簡(jiǎn)單的表達(dá)式可以只含有一個(gè)操作數(shù),例如:73.1415926“hello,world”variable5.1.1表達(dá)式根據(jù)表達(dá)式含有的操作符的個(gè)數(shù),可以把表達(dá)式分為簡(jiǎn)單表達(dá)式和復(fù)雜表達(dá)式:簡(jiǎn)單表達(dá)式是只含有一個(gè)操作符的表達(dá)式;復(fù)雜表達(dá)式含有兩個(gè)或兩個(gè)以上操作符。下面分析兩種表達(dá)式的含義和它們的執(zhí)行過(guò)程。1.簡(jiǎn)單表達(dá)式簡(jiǎn)單表達(dá)式由于只含有一個(gè)操作符,運(yùn)行方式比較簡(jiǎn)單。下面列舉了幾個(gè)簡(jiǎn)單表達(dá)式,其中接觸到的操作符在后面幾節(jié)將詳細(xì)講解。c=2 /*表達(dá)式1*/4+25 /*表達(dá)式2*/ptr==NULL /*表達(dá)式3*/key>max /*表達(dá)式4*/fun(b) /*表達(dá)式5*/5.1.1表達(dá)式2.復(fù)雜表達(dá)式在復(fù)雜表達(dá)式中,每一個(gè)操作符和它的操作數(shù)組成的表達(dá)式為復(fù)雜表達(dá)式的子表達(dá)式。例如:b=d+e;下列5個(gè)表達(dá)式都是復(fù)雜表達(dá)式,它們依次是上面的5個(gè)簡(jiǎn)單表達(dá)式的復(fù)雜化版本。c=b+2 /*表達(dá)式1*/4+25*3 /*表達(dá)式2*/*ptr==length /*表達(dá)式3*/key+incre>max /*表達(dá)式4*/fun(7+5-3) /*表達(dá)式5*/5.1.2語(yǔ)句語(yǔ)句是計(jì)算機(jī)運(yùn)行C程序的基本執(zhí)行單元,一個(gè)程序是由一系列的語(yǔ)句組成。在C語(yǔ)言中,一條完整的語(yǔ)句由表達(dá)式和分號(hào)的。例如:/*表達(dá)式;*/var=2;其中的表達(dá)式部分可以是最簡(jiǎn)單的表達(dá)式,也可以是很冗長(zhǎng)的復(fù)雜表達(dá)式,還可以為空。最簡(jiǎn)單的語(yǔ)句就是一條空語(yǔ)句,即只有一個(gè)分號(hào),如下所示;5.1.2語(yǔ)句這個(gè)語(yǔ)句雖然什么都沒(méi)有做,但是有時(shí)候在邏輯上卻需要這樣的空語(yǔ)句。例如,要求在一個(gè)數(shù)組里得到某個(gè)值的下標(biāo),程序如下所示:for(inti=0;i<max&&array[i]!=target;++i); /*功能已完整,無(wú)需執(zhí)行體*/上面是一個(gè)完整的for語(yǔ)句結(jié)構(gòu)。在功能上,只需要執(zhí)行循環(huán)判斷部分(i<max&&array[i]!=target;)就可以完成查找功能;但是,在程序結(jié)構(gòu)上,for結(jié)構(gòu)還需要一個(gè)循環(huán)體,因此這里需要一條空語(yǔ)句。關(guān)于for語(yǔ)句,在第5章將詳細(xì)討論。5.1.3復(fù)合語(yǔ)句復(fù)合語(yǔ)句,也可以稱為程序塊,是包含在花括號(hào)({})內(nèi)的多個(gè)語(yǔ)句的集合。標(biāo)準(zhǔn)形式如下所示:{語(yǔ)句1;語(yǔ)句2;語(yǔ)句3;……}5.1.3復(fù)合語(yǔ)句C語(yǔ)言的執(zhí)行都是逐條語(yǔ)句依次執(zhí)行的。但是為了實(shí)現(xiàn)一些復(fù)雜的功能,很多程序常常需要把幾條語(yǔ)句作為一個(gè)功能單元來(lái)執(zhí)行,這時(shí)就需要使用復(fù)合語(yǔ)句把多條語(yǔ)句綁定為一個(gè)整體。1.組成特殊語(yǔ)句結(jié)構(gòu)復(fù)合語(yǔ)句主要用在C語(yǔ)言的特殊語(yǔ)句中,比如if語(yǔ)句、for語(yǔ)句和while語(yǔ)句等,構(gòu)成這些語(yǔ)句的執(zhí)行體,以實(shí)現(xiàn)一些復(fù)雜的功能。例如,要執(zhí)行一個(gè)功能:當(dāng)a大于b時(shí),互換變量a和變量b的值;當(dāng)a不大于b時(shí),什么都不做。程序如下所示:01 /*當(dāng)a大于b時(shí),互換變量a和變量b的值*/02 if(a>b){ /*if語(yǔ)句*/03 c=a;04 a=b;05 b=c;06 }5.1.3復(fù)合語(yǔ)句如果不使用花括號(hào)把三條操作語(yǔ)句聯(lián)合為復(fù)合語(yǔ)句,將無(wú)法實(shí)現(xiàn)正常的功能,例如:01 if(a>b)02 c=a;03 a=b;04 b=c;對(duì)齊代碼后,等效于:01 if(a>b)02 c=a;03 a=b;04 b=c;5.1.3復(fù)合語(yǔ)句2.提高程序可讀性除了用在特殊語(yǔ)句內(nèi),復(fù)合還可以將一些完成單一功能的語(yǔ)句放在一個(gè)花括號(hào)中,以提高程序可讀性。3.嵌套使用復(fù)合語(yǔ)句還可以嵌套使用。5.1.3C操作符操作符是C語(yǔ)言的重要組成,也是本章要討論的重點(diǎn)。C語(yǔ)言提供了豐富的操作符,以完成各種各樣的功能。C語(yǔ)言共有45個(gè)操作符,簡(jiǎn)單地分類展示如下:后綴操作符(4個(gè)):()[].->算術(shù)操作符(7個(gè)):+-*/%++--符號(hào)操作符(2個(gè)):+-邏輯操作符(3個(gè)):!&&||5.1.3C操作符關(guān)系操作符(6個(gè)):>>=<<===!=位操作符(6個(gè)):~>><<&^|條件操作符(1個(gè)):?:賦值操作符(11個(gè)):=*=/=%=+=-=<<=>>=&=^=|=逗號(hào)操作符(1個(gè)):,轉(zhuǎn)型操作符(1個(gè)):(數(shù)據(jù)類型名)即(int)、(char)等地址操作符(2個(gè)):*&求字節(jié)操作符(1個(gè)):sizeof()5.1.3C操作符下面來(lái)討論如何區(qū)分既可作為運(yùn)算操作符,也可以作為地址操作符的*。01 pro=a*b;02 b=*ptr;03 pro=a**ptr; /*兩個(gè)*中間以及兩邊的空格可以為隨意多個(gè),也可以沒(méi)有*/5.2賦值操作符與賦值表達(dá)式賦值操作符是C語(yǔ)言中最常用的操作符之一,其功能是為變量賦值。由賦值操作符所組成的表達(dá)式稱為賦值表達(dá)式。本節(jié)將先討論賦值操作符和賦值表達(dá)式的使用,在介紹左值和右值的概念,最后討論賦值表達(dá)式中常見(jiàn)的類型轉(zhuǎn)換的問(wèn)題。5.2.1賦值操作符賦值操作符是一個(gè)二元操作符,其組成的賦值表達(dá)式的標(biāo)準(zhǔn)形式由變量、賦值操作符和一個(gè)表達(dá)式組成,如下所示:變量=表達(dá)式;賦值表達(dá)式的作用,就是把等號(hào)右邊的表達(dá)式的值賦值給等號(hào)左邊的變量。其中,賦值操作符左邊的變量也稱為左值,右邊的表達(dá)式稱為右值。賦值表達(dá)式的值即為語(yǔ)句執(zhí)行后左值的值。5.2.2賦值操作符的結(jié)合性
當(dāng)多個(gè)賦值操作符存在于同一條語(yǔ)句中時(shí),按照C標(biāo)準(zhǔn)的規(guī)定,將會(huì)按照從右到左的結(jié)合方式先執(zhí)行最右邊的賦值操作符,再依次向左執(zhí)行其余賦值操作符。例如:a=b=c=表達(dá)式;該語(yǔ)句會(huì)先執(zhí)行最右邊的賦值操作符,再執(zhí)行中間的,最后執(zhí)行左邊的,即等效于:a=(b=(c=表達(dá)式)); /*括號(hào)操作符的優(yōu)先級(jí)是最高的*/5.2.3左值和右值在C語(yǔ)言中,左值和右值是十分重要的概念。并不是所有的值都是可以改變的,可以改變的值被稱為左值。之所以要稱為左值,還因?yàn)橹挥锌梢愿淖兊闹挡拍芊旁谫x值操作符的左邊,即只有左值可以放在賦值操作符的左邊,也可以說(shuō)放在賦值操作符左邊的都是左值。左值可以是變量,如下所示:intyear=2008;int型變量year被賦值為2008。左值也可以是部分表達(dá)式,如下:int*month;*month=2;5.2.4賦值表達(dá)式中的類型轉(zhuǎn)換在賦值表達(dá)式中,當(dāng)把一種類型的數(shù)據(jù)賦值給不同類型的變量時(shí),編譯器會(huì)隱式地把該數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換為該變量的類型后才賦值。例如:intsmall=2008;longlongintlarge;large=small;5.2.5類型轉(zhuǎn)換操作符類型轉(zhuǎn)換操作符是操作符中十分獨(dú)特的一個(gè),由一個(gè)小括號(hào)及包含在小括號(hào)里的一個(gè)類型名稱組成,如下所示:(int)(longlongint)(float)類型轉(zhuǎn)換操作符也是一個(gè)一元操作符,只帶一個(gè)操作數(shù),使用時(shí)放在操作數(shù)的前面。它的作用是把操作數(shù)的值的數(shù)據(jù)類型改變?yōu)椴僮鞣械臄?shù)據(jù)類型。如下所示為類型轉(zhuǎn)換操作符的標(biāo)準(zhǔn)形式:(數(shù)據(jù)類型名)(表達(dá)式)5.2.5類型轉(zhuǎn)換操作符下面是幾個(gè)使用類型轉(zhuǎn)換符的實(shí)例:inti=(int)3.11;floatf=(float)7;shortintv=(shortint)28;其中,double型常量3.11會(huì)轉(zhuǎn)換為整型(會(huì)丟失數(shù)據(jù))后賦值給int型變量i,int型變量7會(huì)轉(zhuǎn)換為float型(不會(huì)丟失數(shù)據(jù))后賦值給float型變量f,int型數(shù)據(jù)28將轉(zhuǎn)換為shortint型(不會(huì)丟失數(shù)據(jù))后賦值給shortint型變量v。當(dāng)表達(dá)式不僅僅是一個(gè)變量或一個(gè)常量時(shí),需要把表達(dá)式放在小括號(hào)內(nèi)。例如:m=(int)(3.7+2.5)這時(shí),程序會(huì)對(duì)3.7和2.5的和類型轉(zhuǎn)換為int型。如果沒(méi)有括號(hào),只是:m=(int)3.7+2.55.3運(yùn)算操作符與運(yùn)算表達(dá)式數(shù)值計(jì)算離不開(kāi)運(yùn)算操作符,都要依靠運(yùn)算操作符將各種數(shù)值連接在一起來(lái)完成特定的數(shù)值計(jì)算。由運(yùn)算操作符組成的表達(dá)式為運(yùn)算表達(dá)式。本節(jié)將討論各種基本運(yùn)算操作符和運(yùn)算表達(dá)式的使用,同時(shí)還討論與它們密切相關(guān)的符號(hào)操作符,以及運(yùn)算表達(dá)式中的優(yōu)先級(jí)、結(jié)合性和類型轉(zhuǎn)換的問(wèn)題。5.3.1運(yùn)算操作符運(yùn)算操作符共有五個(gè),分別是加法操作符(+)、減法操作符(-)、乘法操作符(*)、除法操作符(/)和求余操作符(%)。它們均為二元操作符,即操作符前后都需要有一個(gè)操作數(shù)。5.3.1運(yùn)算操作符1.加法操作符加法操作符的功能即進(jìn)行加法運(yùn)算。例如:var=3+4+5+6+7;賦值操作符右側(cè)為一個(gè)復(fù)雜的加法表達(dá)式,程序?qū)⑾扔?jì)算3和4的和,再計(jì)算該和與5的和,再計(jì)算該和與6的和,再計(jì)算該和與7的和,最后將最終的和賦值給var。當(dāng)然,操作數(shù)也可以是變量。例如:printf(“sum=%d”,a+b); /*變量a和b為加法操作符的兩個(gè)操作數(shù)*/5.3.1運(yùn)算操作符2.減法操作符減法操作符的功能即,進(jìn)行減法運(yùn)算。例如:diff=512–128;賦值操作符右側(cè)即為減法表達(dá)式,將計(jì)算512和128的差作為該表達(dá)式的值,最后賦值給變量diff。5.3.1運(yùn)算操作符3.乘法操作符乘法操作符的功能是將它的操作數(shù)進(jìn)行乘法計(jì)算,得到的值作為乘法表達(dá)式的值。例如:area=length*width;賦值操作符右側(cè)即為一個(gè)乘法表達(dá)式,將計(jì)算變量length和變量width的乘積作為該子表達(dá)式的值,最后將該值賦值給area。5.3.1運(yùn)算操作符4.除法操作符除法操作符的功能是將它的操作數(shù)進(jìn)行除法運(yùn)算,將得到的值作為除法表達(dá)式的值。例如:rate=distance/time;賦值操作符右側(cè)為一個(gè)除法表達(dá)式,其功能是計(jì)算變量distance除以變量time的商,最后將該值賦給變量rate。5.3.1運(yùn)算操作符5.求余操作符求余操作符的功能是求其左側(cè)的操作數(shù)除以右側(cè)操作數(shù)的余數(shù)。例如:digit=number%10;賦值操作符右側(cè)為一個(gè)求余表達(dá)式,其作用為計(jì)算變量number除以10的余數(shù),即變量number的個(gè)位數(shù),最后將該值賦值給變量digit。5.3.2符號(hào)操作符減法操作符(-)和加法操作符(+)不僅可以作為運(yùn)算操作符,還可以作為符號(hào)操作符。1.負(fù)號(hào)操作符負(fù)號(hào)操作符是一元操作符,其作用是改變操作數(shù)的符號(hào)。它的操作數(shù)跟在操作符后面,可以是整型、浮點(diǎn)型或字符型的常量或變量。例如:-25-74.0-‘c’-a5.3.2符號(hào)操作符2.正號(hào)操作符正號(hào)操作符與負(fù)號(hào)操作符的使用方法類似,也是一元操作符,其操作數(shù)也放在操作符后面,也可以是整型、浮點(diǎn)型或字符型的常量或變量。但是,正號(hào)操作符的用途沒(méi)有負(fù)號(hào)操作符廣,因?yàn)楹蛿?shù)學(xué)意義上的正號(hào)意義,在一個(gè)數(shù)前面加上正號(hào)不會(huì)改變?cè)摂?shù)的值。例如:+(-25)+25+a5.3.3優(yōu)先級(jí)與結(jié)合性操作符的優(yōu)先級(jí)是指操作符執(zhí)行的先后順序。當(dāng)多個(gè)操作符共同存在于一個(gè)復(fù)雜表達(dá)式中時(shí),需要按照一定的先后順序執(zhí)行;優(yōu)先級(jí)高的操作符會(huì)比優(yōu)先級(jí)低的操作符先被執(zhí)行。例如:result=15+7*12–7/4;5.3.3優(yōu)先級(jí)與結(jié)合性下表總結(jié)了所有已接觸到的操作符的優(yōu)先級(jí)和結(jié)合性。其中優(yōu)先級(jí)從上到下依次降低。5.3.4數(shù)值運(yùn)算中的類型轉(zhuǎn)換
在運(yùn)算表達(dá)式中,當(dāng)不同類型的數(shù)值之間進(jìn)行運(yùn)算時(shí),編譯器也會(huì)像在賦值表達(dá)式中那樣進(jìn)行隱式的類型轉(zhuǎn)換。例如:area=4*7.5;其中,4為int型,7.5為double型。int型的4將先被轉(zhuǎn)換為double型再與double型的7.5相乘。5.3.4數(shù)值運(yùn)算中的類型轉(zhuǎn)換
數(shù)值運(yùn)算中的類型轉(zhuǎn)換遵從以下規(guī)則:char型和short型數(shù)據(jù),不管是unsigned還是signed,在計(jì)算中都要先無(wú)條件轉(zhuǎn)換為int型,即使是兩個(gè)char型或short型數(shù)值相加。float型計(jì)算前會(huì)無(wú)條件轉(zhuǎn)換為double型數(shù)值,以增加精度。其余類型的數(shù)值計(jì)算時(shí),都要轉(zhuǎn)換為數(shù)據(jù)類型級(jí)別較高的后再計(jì)算。5.3.4數(shù)值運(yùn)算中的類型轉(zhuǎn)換
數(shù)據(jù)類型級(jí)別是以能存儲(chǔ)的數(shù)值范圍來(lái)定義的,能儲(chǔ)存的數(shù)值范圍越大,數(shù)據(jù)類型級(jí)別越高。如下圖所示:5.3.5復(fù)合的賦值操作符賦值操作符與上面介紹的五種基本運(yùn)算操作符結(jié)合,可以組成復(fù)合的賦值操作符:+=,-=,*=,/=和%=。他們使用形式與賦值操作符相似,都是二元操作符,而且左側(cè)也只能為左值,右側(cè)為右值;但是功能上比賦值操作符復(fù)雜。1.+=該操作符由賦值操作符與加法操作符結(jié)合而成的,其使用形式為:左值+=右值;其作用為,將左值與右值相加的和賦給左值,等效于:左值=左值+右值;5.3.5復(fù)合的賦值操作符2.-=該操作符由賦值操作符與減法操作符結(jié)合而成的,其使用形式為:左值-=右值;其作用為,將左值與右值相減的差賦給左值,等效于:左值=左值-右值;3.*=該操作符由賦值操作符與乘法操作符結(jié)合而成的,其使用形式為:左值*=右值;其作用為,將左值與右值相乘的積賦給左值,等效于:左值=左值*右值5.3.5復(fù)合的賦值操作符4./=該操作符由賦值操作符與除法操作符結(jié)合而成的,其使用形式為:左值/=右值;其作用為,將左值與右值相除的商賦給左值,等效于:左值=左值/右值;5.%=該操作符由賦值操作符與求余操作符結(jié)合而成的,其使用形式為:左值%=右值;其作用為,將左值對(duì)右值求余的結(jié)果賦給左值,等效于:左值=左值%右值;5.4自增、自減操作符為了簡(jiǎn)化程序書(shū)寫(xiě),C語(yǔ)言中還定義了兩種操作符:自增操作符(++)和自減操作符(--)。這兩種操作符都是一元操作符,只帶一個(gè)操作數(shù);同時(shí),這兩個(gè)操作符可以放在它們的操作數(shù)的左邊,也可以放在右邊,兩者的功能是不同的。本節(jié)將介紹自增操作符和自減操作符的語(yǔ)法和使用時(shí)需要注意的問(wèn)題,同時(shí)還將討論貪婪法的內(nèi)容。5.4.1自增操作符顧名思義,自增操作符就是使自己的值增加的操作符。準(zhǔn)確地說(shuō),自增操作符的作用是將其唯一的操作數(shù)賦值為其自身值加1后的值。由于該操作數(shù)會(huì)被賦值,因此必須是左值,即要求其值是可以改變的。自增表達(dá)式的標(biāo)準(zhǔn)形式如下:左值++5.4.2自減操作符自減操作符與自增操作符使用方法完全一樣,也為一元操作符。它可以放在其唯一的操作數(shù)(稱為前自減操作符)的前面,也可以放在操作數(shù)的后面(稱為后自減操作符)。自減操作符的作用是將其操作數(shù)減1后再賦值給本身。自減操作符也有前自減操作符和后自減操作符:前自減操作符是在執(zhí)行所在語(yǔ)句前自減1,而后自減是在執(zhí)行語(yǔ)句后自減1。5.4.3優(yōu)先級(jí)與結(jié)合性自增操作符和自減操作符的優(yōu)先級(jí)與符號(hào)操作符相同。在上面的案例中,已經(jīng)接觸到它們的優(yōu)先級(jí)的使用,例如范例5-13中的第8行:y=--x+1;由于,自減操作符的級(jí)別最高,所以先執(zhí)行前自減的操作。但是需要注意的是,在第12行中:y=1+x--;5.4.4詞法分析:貪婪法詞法分析是指編譯器把C程序中的字符處理為一個(gè)個(gè)C語(yǔ)言中的符號(hào)的過(guò)程。C語(yǔ)言中的操作符有單字符的(例如=、+、-),也有兩個(gè)字符的(例如++、--),還有更多字符的(例如類型轉(zhuǎn)換操作符)。由于,C語(yǔ)言允許兩個(gè)操作符之間可以沒(méi)有空格(例如v=+d,其中=+為兩個(gè)操作符),因此某些字符在一起可以組合成多種不同情況的操作符,例如:++bbb;5.4.4詞法分析:貪婪法理論上,++除了可以視為前自增操作符,也可以視為兩個(gè)正號(hào)操作符,等效于:+(+bbb);例如:+++++++b; /*7個(gè)+*/按照貪婪法,分析的結(jié)果等效于:+++++++b;再進(jìn)行語(yǔ)法分析,自增操作符與加法操作符結(jié)合性為從右到左,分析結(jié)果等效于:++(++(++(+b)));5.4.5自增、自減操作符的副作用所謂自增操作符和自減操作符的副作用就是,它們?cè)趫?zhí)行它們所在語(yǔ)句之前或之后對(duì)操作數(shù)的自增和自減操作。由于這些操作與語(yǔ)句是在不同階段執(zhí)行的,在一些復(fù)雜的情況下,程序員常常因此會(huì)犯錯(cuò)誤。甚至于在不同的編譯器中,這些語(yǔ)句的結(jié)果也是不盡相同的。在編程過(guò)程中,應(yīng)當(dāng)盡量消除這些副作用可能導(dǎo)致錯(cuò)誤的隱患。5.5關(guān)系操作符與關(guān)系表達(dá)式在前面的范例中,已經(jīng)接觸到很多關(guān)系操作符的例子。關(guān)系操作符在C語(yǔ)言中主要用于進(jìn)行數(shù)值比較。由關(guān)系操作符組成的關(guān)系表達(dá)式通常用在程序中的控制選擇語(yǔ)句中。本節(jié)將討論關(guān)系操作符和關(guān)系表達(dá)式的使用,以及關(guān)系操作符的優(yōu)先級(jí)和結(jié)合性。5.5.1使用關(guān)系操作符關(guān)系操作符包括小于操作符(<)、大于操作符(>)、小于等于操作符(<=)、大于等于操作符(>=)、等于操作符(==)和不等于操作符(!=)6種。使用關(guān)系操作符的標(biāo)準(zhǔn)方式如下:1.小于操作符(<)表達(dá)式1<表達(dá)式2該表達(dá)式為小于表達(dá)式,當(dāng)表達(dá)式1的值小于表達(dá)式2的值時(shí),為真;否則,為假。2.小于等于操作符(<=)表達(dá)式1<=表達(dá)式2該表達(dá)式為小于等于表達(dá)式,當(dāng)表達(dá)式1的值小于等于表達(dá)式2的值時(shí),為真;否則,為假。5.5.1使用關(guān)系操作符3.大于操作符(>)表達(dá)式1>表達(dá)式2該表達(dá)式為大于表達(dá)式,當(dāng)表達(dá)式1的值大于表達(dá)式2的值時(shí),為真;否則,為假。4.大于等于操作符(>=)表達(dá)式1>=表達(dá)式2該表達(dá)式為大于表達(dá)式,當(dāng)表達(dá)式1的值大于等于表達(dá)式2的值時(shí),為真;否則,為假。5.等于操作符(==)表達(dá)式1==表達(dá)式2該表達(dá)式為等于表達(dá)式,當(dāng)表達(dá)式1的值等于表達(dá)式2的值時(shí),為真;否則,為假。5.5.1使用關(guān)系操作符6.不等于操作符(!=)表達(dá)式1!=表達(dá)式2該表達(dá)式為不等于表達(dá)式,當(dāng)表達(dá)式1的值不等于表達(dá)式2的值時(shí),為真;否則,為假。關(guān)系表達(dá)式的計(jì)算是一個(gè)比較的過(guò)程,如果被比較的兩個(gè)值類型不同,必須先進(jìn)行類型轉(zhuǎn)換。例如:4>4.312==‘f’第一個(gè)表達(dá)式中,int型4要轉(zhuǎn)換為double型后再比較;第二個(gè)表達(dá)式中,char型’f’要轉(zhuǎn)換為int型后再進(jìn)行比較。范例5-17演示了各種關(guān)系操作符的使用。5.5.2關(guān)系表達(dá)式的值雖然C99定義了_BOOL,但現(xiàn)在大部分編譯器并不支持這一類型,而即使_BOOL型也不是關(guān)系表達(dá)式的值類型。關(guān)系表達(dá)式值在C語(yǔ)言中實(shí)際上作為int型處理。同時(shí),已經(jīng)知道非0的數(shù)值的布爾值為真,而為0的數(shù)值的布爾值為假;那么反來(lái)過(guò),布爾值如何轉(zhuǎn)化為int型值?關(guān)系表達(dá)式的布爾值如何轉(zhuǎn)換為int型值?布爾值轉(zhuǎn)換為int型值,一般遵從以下規(guī)則:假
0真
1布爾值為真的關(guān)系表達(dá)式的int型值為1,布爾值為假的關(guān)系表達(dá)式的int型值為0。范例5-18驗(yàn)證了關(guān)系表達(dá)式的值和它的數(shù)據(jù)類型。5.5.3優(yōu)先級(jí)與結(jié)合性不同關(guān)系操作符的優(yōu)先級(jí)不同,其優(yōu)先級(jí)如下:較高優(yōu)先級(jí):<、<=、>、>=(這4個(gè)優(yōu)先級(jí)相同);較低優(yōu)先級(jí):==、!=(這2個(gè)優(yōu)先級(jí)相同)。相同優(yōu)先級(jí)的關(guān)系操作符的結(jié)合性為從左到右。關(guān)系運(yùn)算符的優(yōu)先級(jí)比賦值運(yùn)算符高,比運(yùn)算操作符低,例如:m=1+2*3==4;5.6邏輯操作符與邏輯表達(dá)式邏輯操作符包括邏輯與操作符(&&)、邏輯或操作符(||)和邏輯非操作符(!)三種,其功能是進(jìn)行各種邏輯運(yùn)算。含有邏輯操作符的表達(dá)式即為邏輯表達(dá)式。C語(yǔ)言中一些復(fù)雜功能的實(shí)現(xiàn)離不開(kāi)邏輯表達(dá)式的使用。本節(jié)將討論邏輯操作符和邏輯表達(dá)式的使用,同時(shí)還討論了如何化簡(jiǎn)邏輯表達(dá)式。5.6.1使用邏輯操作符三種邏輯操作符的使用形式如下:1.邏輯與操作符邏輯與操作符是個(gè)二元操作符,其標(biāo)準(zhǔn)調(diào)用方式如下:表達(dá)式1&&表達(dá)式2該表達(dá)式為邏輯與表達(dá)式,其中表達(dá)式1和表達(dá)式2可以為任意表達(dá)式,其功能為將兩個(gè)表達(dá)式的布爾值做邏輯與運(yùn)算。邏輯與運(yùn)算規(guī)則如下:真&&真=真真&&假=假假&&真=假假&&假=假5.6.1使用邏輯操作符2.邏輯或操作符邏輯或操作符也是二元操作符,其標(biāo)準(zhǔn)調(diào)用方式如下:表達(dá)式1||表達(dá)式2該表達(dá)式為邏輯或表達(dá)式,其中表達(dá)式1和表達(dá)式2也可以為任意表達(dá)式,其功能為將兩個(gè)表達(dá)式的布爾值做邏輯或運(yùn)算。邏輯或運(yùn)算規(guī)則如下:真||真=真真||假=真假|(zhì)|真=真假|(zhì)|假=假5.6.1使用邏輯操作符3.邏輯非操作符邏輯非操作符為一元操作符,只帶一個(gè)操作數(shù),使用時(shí)操作符位于操作數(shù)前,調(diào)用形式如下:!表達(dá)式1該表達(dá)式為邏輯非表達(dá)式,其中表達(dá)式1和表達(dá)式2也可以為任意表達(dá)式,其功能為將兩個(gè)表達(dá)式的布爾值做邏輯非運(yùn)算。邏輯非運(yùn)算規(guī)則如下:!真=假!假=真5.6.2邏輯表達(dá)式的值與關(guān)系表達(dá)式相同,雖然邏輯表達(dá)式在本書(shū)介紹中認(rèn)為是布爾值,但C編譯器中將其處理為int型。如果邏輯表達(dá)式的布爾值為真,則其int型值為1;如果其布爾值為假,則其int型值為0。5.6.3優(yōu)先級(jí)和結(jié)合性3個(gè)邏輯操作符的優(yōu)先級(jí)從高到低為:邏輯非操作符、邏輯與操作符和邏輯或操作符。結(jié)合性為從左到右。同時(shí),邏輯非操作符的優(yōu)先級(jí)與符號(hào)操作符一致,比運(yùn)算操作符高,更比關(guān)系操作符高;邏輯與操作符和邏輯或操作符的優(yōu)先級(jí)低于關(guān)系操作符,但高于賦值操作符。5.6.4化簡(jiǎn)邏輯表達(dá)式3個(gè)邏輯操作符組合使用時(shí),可以得到多個(gè)功能一致但形式不同的邏輯表達(dá)式。使用簡(jiǎn)單的邏輯表達(dá)式來(lái)代替復(fù)雜的表達(dá)式是提高程序邏輯性的一個(gè)重要方法。下面是兩組功能一樣的邏輯表達(dá)式:第一組表達(dá)式如下:!(a||b)!a&&!b第二組表達(dá)式如下:!(a&&b)!a||!b使用以上功能相同的兩組邏輯表達(dá)式可以對(duì)一些復(fù)雜的、邏輯不清的表達(dá)式進(jìn)行簡(jiǎn)化。5.7逗號(hào)操作符與逗號(hào)表達(dá)式逗號(hào)操作符是C語(yǔ)言中很重要的輔助型操作符。逗號(hào)操作符所在的表達(dá)式稱為逗號(hào)表達(dá)式。在逗號(hào)表達(dá)式中,逗號(hào)操作符將若干個(gè)表達(dá)式連接在一起形成一個(gè)語(yǔ)句。本節(jié)將討論逗號(hào)操作符和逗號(hào)表達(dá)式的使用。5.7.1使用逗號(hào)操作符逗號(hào)操作符是一個(gè)二元操作符,其標(biāo)準(zhǔn)使用形式如下:表達(dá)式1,表達(dá)式2該逗號(hào)表達(dá)式會(huì)以從左到右的順序先計(jì)算表達(dá)式1,再計(jì)算表達(dá)式2。逗號(hào)表達(dá)式的優(yōu)先級(jí)是所有操作符中最低的,因此可以將任意表達(dá)式直接作為逗號(hào)表達(dá)式的子表達(dá)式,且不會(huì)改變表達(dá)式的執(zhí)行順序和執(zhí)行邏輯。5.7.2逗號(hào)表達(dá)式的值與其余表達(dá)式一樣,逗號(hào)表達(dá)式也有一個(gè)值,其值等于表達(dá)式中最后一個(gè)子表達(dá)式的值。即:表達(dá)式1,表達(dá)式2,表達(dá)式3……
表達(dá)式n;上述表達(dá)式的值等于表達(dá)式n的值。范例5-22演示了逗號(hào)表達(dá)式的值及其使用方法。5.8操作符優(yōu)先級(jí)和結(jié)合性優(yōu)先級(jí)和結(jié)合性是操作符使用中十分重要的知識(shí),在前面的討論中已經(jīng)多次涉及。本節(jié)將總結(jié)C語(yǔ)言中所有操作符的優(yōu)先級(jí)和結(jié)合性,包括一些本章未介紹的操作符。此外,本節(jié)還介紹了兩種更好地使用表達(dá)式的方法。5.8.1優(yōu)先級(jí)和結(jié)合性操作符的優(yōu)先級(jí)代表了它被執(zhí)行的優(yōu)先度。當(dāng)一個(gè)復(fù)雜表達(dá)式里含有多個(gè)操作符時(shí),一般情況下,首先會(huì)根據(jù)操作符的優(yōu)先級(jí)來(lái)決定操作符的執(zhí)行順序;但操作符的優(yōu)先級(jí)相同時(shí),應(yīng)該根據(jù)操作符的結(jié)合性來(lái)判斷執(zhí)行順序。5.8.1優(yōu)先級(jí)和結(jié)合性右表是所有操作符優(yōu)先級(jí)和結(jié)合性的總結(jié)。5.8.1優(yōu)先級(jí)和結(jié)合性1.前置操作符前置操作符都是一元操作符,其優(yōu)先級(jí)為2,為第二高。很容易理解將它們得結(jié)合性規(guī)定為從右到左的原因,例如:+-
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版辦公家具設(shè)計(jì)與定制合同6篇
- 2025-2030全球綠光超快光纖激光器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 二零二五年度股權(quán)投資合同:初創(chuàng)企業(yè)Pre-A輪融資3篇
- 2025年度窗簾材料研發(fā)與應(yīng)用推廣合同2篇
- 二零二五版建筑工程合同履行中的合同續(xù)簽與重要因素2篇
- 2025年度物流服務(wù)合同:物流公司甲與貨主乙之間的物流服務(wù)協(xié)議3篇
- 二零二五版企業(yè)財(cái)務(wù)風(fēng)險(xiǎn)管理培訓(xùn)與實(shí)施合同2篇
- 2025年中國(guó)核輻射探測(cè)器行業(yè)市場(chǎng)全景監(jiān)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 二零二五年度數(shù)據(jù)中心運(yùn)維外包與節(jié)能減排技術(shù)協(xié)議3篇
- 2025年度環(huán)保碎石加工生產(chǎn)線承包合同3篇
- 廣東省潮州市潮安區(qū)2023-2024學(xué)年五年級(jí)上學(xué)期期末考試數(shù)學(xué)試題
- 醫(yī)療科研倫理審核制度
- 市政道路及設(shè)施零星養(yǎng)護(hù)服務(wù)技術(shù)方案(技術(shù)標(biāo))
- 鉆機(jī)操作規(guī)程專項(xiàng)培訓(xùn)考試題及答案
- 2024助貸委托服務(wù)協(xié)議合同模板
- 工程款結(jié)算協(xié)議書(shū)-景觀綠化結(jié)算
- 成人教育培訓(xùn)方案
- 王者榮耀各英雄各項(xiàng)初始、滿級(jí)屬性-成長(zhǎng)值
- 飲食春節(jié)健康宣教課件
- 《論語(yǔ)》學(xué)而篇-第一課件
- 光伏項(xiàng)目安全專項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論