數(shù)據(jù)類型及其運算_第1頁
數(shù)據(jù)類型及其運算_第2頁
數(shù)據(jù)類型及其運算_第3頁
數(shù)據(jù)類型及其運算_第4頁
數(shù)據(jù)類型及其運算_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章數(shù)據(jù)類型及其運算1《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算第2章數(shù)據(jù)類型及其運算2.1變量2.2常量2.3C語言的數(shù)據(jù)類型2.4運算符與表達式2.5數(shù)學(xué)函數(shù)2《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.1變量2.1.1內(nèi)存計算機中運行的程序,包括組成程序的指令和運行時所需要的數(shù)據(jù),存儲在計算機的內(nèi)存中。計算機采用二進制存儲數(shù)據(jù),每一位二進制數(shù)稱為1個比特(bit)。每8位二進制數(shù)構(gòu)成1個字節(jié)(byte),用大寫的B表示。為了方便訪問內(nèi)存中的數(shù)據(jù),給每個字節(jié)做一個標(biāo)記,這個標(biāo)記稱為地址。計算機的內(nèi)存采用一維線性編址。計算機存儲系統(tǒng)常用的單位包括千字節(jié)(KB)、兆字節(jié)(MB)和吉字節(jié)(GB)。3《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算4圖2-164KB內(nèi)存空間示意圖2.1變量2.1.2變量的基本概念程序運行時,其值能被改變的量稱為變量。變量實質(zhì)上就是計算機內(nèi)存中一段有名字的由一個或若干個連續(xù)的字節(jié)構(gòu)成的存儲空間。每個變量都有一個名字,通過變量的名字可以訪問到變量的存儲空間并獲得變量的數(shù)值。在C語言程序中通過定義變量來申請并命名這樣的存儲空間,并通過變量的名字來使用這段存儲空間。變量是程序中數(shù)據(jù)的臨時存放場所,可以用以保存程序運行時用戶輸入的數(shù)據(jù)和運算結(jié)果等。5《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.1變量【例2.1】計算兩數(shù)之和。6《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){

intm,n,sum; m=32; n=64; sum=m+n;

printf("sum=%d\n",sum); return0;}2.1變量2.1.2變量的基本概念1.變量定義源程序中:intm,n,sum;1行定義了3個用于存放整數(shù)的整型變量。int

表示整型數(shù)據(jù)類型。7《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算8圖2-2定義變量后內(nèi)存空間示意圖2.1變量2.1.2變量的基本概念2.變量賦值源程序中:m=32;n=64;2行為變量賦值。將“=”右邊的常量值賦給左邊的變量。9《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算10圖2-3變量賦值后內(nèi)存空間示意圖2.1變量2.1.2變量的基本概念3.運算并保存結(jié)果源程序中:sum=m+n;1行為計算m+n的值賦值給變量sum。11《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算圖2-4保存運算結(jié)果后內(nèi)存空間示意圖2.1變量2.1.2變量的基本概念4.顯示結(jié)果源程序中:printf("sum=%d\n",sum);1行在屏幕上顯示運算結(jié)果。運行結(jié)果:13《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算sum=962.1變量2.1.2變量的基本概念4.顯示結(jié)果

printf()函數(shù)調(diào)用中"sum=%d\n"稱為格式控制。格式控制中除了%號開始加后面的字符(例如本例中的“%d”)外,其余字符按原樣輸出。由“%”字符開始的稱為格式說明,例如“%d”表示這里以有符號數(shù)十進制形式輸出一個整數(shù),這個整數(shù)是格式控制"sum=%d\n"后面跟著的常量、變量或表達式的值,具體到本例就是"sum=%d\n"后面的變量sum的值。14《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.1變量2.1.3變量定義在C語言中,變量的必須遵循“先定義,后使用”的原則。變量定義的格式:

數(shù)據(jù)類型變量1[,變量2,…,變量n];注:這里[]表示可選項。例如,例2.1中的語句“intm,n,sum;”。15《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.1變量2.1.3變量定義每個變量必須有一個類型,如整型、字符型等,它指明給這個變量分配多大的存儲空間;每個變量還必須有一個名字,如x,y等,指明具體的變量名字。變量命名遵循標(biāo)識符命名規(guī)則,習(xí)慣上,變量名用小寫字母表示,以增加可讀性。一般情況下變量應(yīng)該先賦值再參與運算。一個變量的數(shù)值保存在該變量的存儲空間內(nèi),程序通過變量名可以引用變量值。16《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.1變量2.1.4變量的命名規(guī)則--標(biāo)識符與關(guān)鍵字C語言中的變量命名符合標(biāo)識符的命名規(guī)則。1.關(guān)鍵字關(guān)鍵字又稱保留字,是C語言中預(yù)先規(guī)定的具有固定含義的一些單詞,已被C語言編輯工具本身使用,不能被程序員另作其他用途。C語言共有32個關(guān)鍵字。2.標(biāo)識符(標(biāo)記和識別對象的符號)標(biāo)識符是指用來標(biāo)識變量名、符號常量名、函數(shù)名、數(shù)組名、類型名等有效的字符序列。17《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.1變量2.1.4變量的命名規(guī)則--標(biāo)識符與關(guān)鍵字C語言規(guī)定:標(biāo)識符只能由字母、數(shù)字、下劃線組成,并且只能由字母、下劃線開頭,不能是關(guān)鍵字。

如:abc、a12、x是合法的標(biāo)識符,abc$、12a、x+y、int不是合法的標(biāo)識符。18《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.1變量2.1.4變量的命名規(guī)則--標(biāo)識符與關(guān)鍵字使用標(biāo)識符時要注意:(1)C語言對英文字母的大小寫敏感,即同一字母的大小寫被認(rèn)為是兩個不同的字符。例如,total與TOTAL是不同的標(biāo)識符。(2)標(biāo)識符的命名最好是見名知意。即通過標(biāo)識符就知道其所表示的含義。通常應(yīng)選擇能表示數(shù)據(jù)含義的英文單詞(或縮寫)作標(biāo)識符,或以漢語拼音字頭作標(biāo)識符。例如:name/xm(姓名)、sex/xb(性別)、age/nl(年齡)、salary/gz(工資)。(3)標(biāo)識符的有效長度隨系統(tǒng)而異,如果超長,則超長部分被舍棄。19《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.1變量2.1.5變量的賦值與使用1.變量的賦值變量的值可以通過賦值表達式改變。

例如,例2.1中的賦值表達式“m=32”。實際上,變量在定義后其值是不確定的,因此在使用前應(yīng)該先賦值,然后使用。變量的首次賦值可以稱為變量的初始化。

變量的初始化除了可以采用例2.1中所用的方式外,還可以在定義的同時進行初始化。20《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.1變量【例2.2】計算兩數(shù)之和。21《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){

intm=32,n=64,sum; sum=m+n;

printf("sum=%d\n",sum); return0;}運行結(jié)果:sum=962.1變量2.1.5變量的賦值與使用2.變量的使用變量可以參與運算,也可以保存運算結(jié)果。

例如,例2.2中的“sum=m+n;”語句,m,n是加法的兩個加數(shù),sum用于存放運算結(jié)果。23《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.2常量在程序運行時,其值不能被改變的量叫常量。在C語言中也可以用一個標(biāo)識符代表一個常量,這種標(biāo)識符稱為符號常量,即標(biāo)識符形式的常量,一般用大寫字母。例如,用PI表示3.14159。24《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.2常量【例2.3】常量的應(yīng)用。25《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){

printf("%d\n",1000); return0;}說明:源程序中的1000即為常量。運行結(jié)果:10002.2常量【例2.4】符號常量的使用。27《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算total=300源程序:#include<stdio.h>#definePRICE30intmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d\n",total);return0;}說明:程序中用“#definePRICE30”命令行定義PRICE代表常量30,此后凡在此源程序中出現(xiàn)的PRICE在預(yù)編譯階段均被30替換。運行結(jié)果:2.2常量使用符號常量的優(yōu)點:(1)含義清楚。

例如,用PRICE代表價格,看程序時從PRICE就可知道它代表價格。在一個規(guī)范的程序中不提倡使用太多常數(shù),應(yīng)盡量使用“見名知意”的符號常量。(2)需要改變一個常量的值時能做到“一改全改”。

例如,在程序中多處用到某物品的價格,如果價格用常數(shù)表示,則在價格調(diào)整時,就需要在程序中作多處修改,若用符號常量PRICE代表價格,只需改動一處即可。注意:“#define”是預(yù)處理命令,不要以“;”號結(jié)束。29《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3C語言的數(shù)據(jù)類型在C語言中所使用的每個數(shù)據(jù)都具有一個明確的數(shù)據(jù)類型。不同類型的數(shù)據(jù)在數(shù)據(jù)表示形式、合法的取值范圍、占用內(nèi)存空間大小及可以參與的運算種類等方面有所不同。C語言提供的數(shù)據(jù)類型分類見表“表2-2C語言的數(shù)據(jù)類型”。本章將主要介紹基本類型,包括整型、實型和字符型,其他類型的數(shù)據(jù)將在后續(xù)章節(jié)做詳細的介紹。30《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算數(shù)據(jù)類型分類關(guān)鍵字基本類型整型基本整型int長整型long短整型short無符號整型unsigned實型(浮點型)單精度實型float雙精度實型double字符型char枚舉類型enum無類型void構(gòu)造類型數(shù)組[]指針類型*結(jié)構(gòu)體struct共用體union表2-2C語言的數(shù)據(jù)類型2.3.1整型1.整型常量整型常量,即整常數(shù)。C語言中整常數(shù)可用以下三種形式表示。(1)十進制整數(shù)。十進制整型常量直接用數(shù)字表示,例如:5、100、0、-10等。(2)八進制整數(shù)。以0開頭的數(shù)是八進制數(shù)。例如:05、0100等。(3)十六進制整數(shù)。以0x或0X開頭的數(shù)是十六進制數(shù)。例如:0x5、0x1A0等。32《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.1整型【例2.5】八進制與十六進制數(shù)。33《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){

inta=0123,b=0x123

printf("a=%d,b=%d\n",a,b); return0;}運行結(jié)果:a=83,b=2912.3.1整型2.整型變量(1)整型變量可分為有符號和無符號型兩大類。這兩類又分為基本型、短整型和長整型三類。有符號整型變量的存儲單元存儲的是對應(yīng)數(shù)值的補碼。有符號型中又分為有符號整型、有符號短整型和有符號長整型,分別以signedint,signedshortint,signedlongint表示。35《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.1整型2.整型變量無符號型整型變量的存儲單元中全部二進位都用作存數(shù)值,不包括符號。無符號型中又分為無符號整型、無符號短整型和無符號長整型,分別以unsignedint,unsignedshortint,unsignedlongint表示。無符號型變量只能存放不帶符號的整數(shù),如123、4687等,而不能存放負(fù)數(shù),如-123、-3。36《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.1整型2.整型變量上述各類型整型變量占用的內(nèi)存字節(jié)數(shù),隨系統(tǒng)而異。在16位操作系統(tǒng)中(例如TC環(huán)境下),一般用2字節(jié)表示一個int型變量,long型4個字節(jié)、short型2個字節(jié)。在32位操作系統(tǒng)中(例如VC環(huán)境下),一般用4字節(jié)表示一個int型變量,long型4個字節(jié)、short型2個字節(jié)。顯然,不同類型的整型變量,其值域不同。37《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.1整型2.整型變量n位有符號整數(shù)的取值范圍是:-2n-1~2n-1-1。因此2個字節(jié)的有符號整型的取值范圍是-215(-32768)~215-1(32767);4個字節(jié)的有符號整型的取值范圍是-231(-2147483648)~231-1(2147483647)。n位無符號整數(shù)的取值范圍是:0~2n-1。因此2個字節(jié)的有符號整型的取值范圍是0~216-1(65535);4個字節(jié)的有符號整型的取值范圍是0~232-1(4294967295)。38《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算39類型符號關(guān)鍵字位數(shù)字節(jié)數(shù)數(shù)的表示范圍整型有[signed]int324-2147483648~2147483647[signed]short[int]162-32768~32767[signed]long[int]324-2147483648~2147483647無unsigned[int]3240~4294967295unsignedshort[int]1620~65535unsignedlong[int]3240~4294967295表2-3VC的整型數(shù)據(jù)注意:方括號內(nèi)為可選項。例如:有符號短整型可以表示為signedshortint、shortint、signedshort或short。2.3.1整型2.整型變量(2)整型變量的定義。C語言規(guī)定在程序中所有用到的變量都必須在程序中指定其類型,即“定義”。例如:

inta,b;/*指定變量a,b為整型*/unsignedshortc,d;/*指定變量c,d為無符號短整型*/longe,f;/*指定變量e,f為長整型*/注意:變量的定義,一般是放在一個函數(shù)的開頭部分。40《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.1整型【例2.6】整型變量的定義與使用。41《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){

inta; unsignedb; a=-20; b=40;

printf("a=%d,b=%u\n",a,b); return0;}注意:printf()調(diào)用中的“%u”表示按無符號十進制整型輸出。運行結(jié)果:a=-20,b=402.3.1整型3.整型常量的類型前面討論了整型變量的類別。實際上整型常量也是有類別的。在將一個整型常量賦值給上述幾種類別的整型變量時要注意類型匹配。(1)一個整數(shù)值在-32768~+32767范圍內(nèi),可以賦值給2個字節(jié)或4個字節(jié)的整型變量。(2)一個整數(shù)值超過了-32768~+32767范圍,而在-2147483648~2147483647范圍內(nèi),可以賦值給4個字節(jié)的整型變量。如果賦值給2個字節(jié)的整型變量將發(fā)生溢出錯誤。43《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.1整型3.整型常量的類型(3)如果一個C語言系統(tǒng)的shortint

與int型數(shù)據(jù)在內(nèi)存中占據(jù)字節(jié)數(shù)相同,則二者的范圍也相同。(4)一個常量后面加一個字母u或U表示為unsigned型常量。例如,24u表示無符號整型常量。注意:一個非負(fù)值的整常量可以賦值給unsigned型整變量,只要它的范圍不超過變量的表示范圍即可。例如,將50000賦給一個unsignedshortint型變量是可以的,而將70000賦給它是不行的,會發(fā)生溢出錯誤。44《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.1整型3.整型常量的類型(5)在一個整常量后面加一個字母l或L則認(rèn)為是1ongint型常量。例如:123l、432L,這往往用于函數(shù)調(diào)用中。45《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.2浮點型1.實型常量實型常量即實數(shù),在C語言中又稱浮點數(shù),實型常量有兩種表達形式:(1)十進制數(shù)形式:由數(shù)字和小數(shù)點組成。例如:3.14、9.8、.135等。注意:小數(shù)形式表示的實型常量必須要有小數(shù)點。(2)指數(shù)形式:尾數(shù)E(e)整型指數(shù)。例如:3.0E+5、123e3等。注意:字母E(或e)之前是十進制數(shù)形式的實數(shù),之后是整數(shù),二者都不可缺少。例如:e5、2.1e2.7、e等都不是合法的指數(shù)形式。46《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.2浮點型2.實型變量C語言中實型變量分為單精度(float型)和雙精度(double型)兩類,每一個實型變量都應(yīng)在使用前加以定義。例如:floatx,y;/*指定x,y為單精度實數(shù)*/doublez;/*指定z為雙精度實數(shù)*/47《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.2浮點型2.實型變量在一般系統(tǒng)中,一個float型數(shù)據(jù)在內(nèi)存中占4個字節(jié),一個double型數(shù)據(jù)占8個字節(jié)。單精度實數(shù)的數(shù)值范圍約為-1038~1038,雙精度實數(shù)范圍約為-10308~10308。單精度實數(shù)提供7位有效數(shù)字,雙精度實數(shù)提供15~16位有效數(shù)字。實型常量不分float型和double型(很多C編譯系統(tǒng)將實型常量作為雙精度數(shù)來處理),一個實型常量,可以賦給一個實型變量(float型或double型),當(dāng)然,這里要注意不要發(fā)生溢出錯誤。在實型常量后加字母f或F,表示它是float型。48《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.2浮點型2.實型變量實型數(shù)據(jù)與整型數(shù)據(jù)的處理有所不同,整型數(shù)據(jù)是可以精確存儲的,而實型數(shù)據(jù)通常無法精確存儲。實型常量會根據(jù)變量的類型截取相應(yīng)的有效位數(shù)字,因此要注意精度問題。49《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.2浮點型2.實型變量例如,以下程序段輸出的結(jié)果為“a=111111.109375,b=111111.111000”。這是由于a為float型變量只能接收7位有效數(shù)字,因此最后兩位小數(shù)不起作用。而b為double型,則能全部接收全部9位數(shù)字。floata=111111.111;doubleb=111111.111;

printf("a=%f,b=%lf\n",a,b)注意:printf()調(diào)用中的“%f”和“%lf”分別表示按單精度實型和雙精度實型輸出后面的變量的值。50《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算51類型符號關(guān)鍵字所占位數(shù)字節(jié)數(shù)數(shù)的表示范圍實型有float324-3.4e-38~3.4e38有double648-1.7e-308~1.7e308表2-4VC的實型數(shù)據(jù)2.3.3字符型1.字符常量C語言中的字符常量是用單引號括起來的一個字符,例如,'A'、'b'、'1'、'+'、'?'、'$'等都是字符常量。字符常量實質(zhì)上就是字符對應(yīng)的ASCII碼的值。例如,'A'實際上就是65。除了以上形式的字符常量外,C還允許用一種特殊形式的字符常量,就是以一個“\”開頭的字符序列,例如,前面已經(jīng)遇到過的,在printf()函數(shù)中的'\n',它代表一個“換行”符。反斜杠引導(dǎo)的字符稱為轉(zhuǎn)義字符,其意思是將反斜杠(\)后面的字符變成另外的意思。如果字符常量是反斜杠或單引號本身,必須使用轉(zhuǎn)義字符:'\\'、'\'’表示。52《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算53轉(zhuǎn)義字符含義轉(zhuǎn)義字符含義\n換行\(zhòng)t水平制表\v垂直制表\b退格\r回車\f換頁\a響鈴\\反斜線\'單引號\"雙引號\ddd1~3位8進制數(shù)代表的字符\xhh1~2位16進制數(shù)代表的字符表2-5轉(zhuǎn)義字符及其含義注:‘\ddd’和’\xhh’是用ASCII碼(八進制數(shù)、十六進制數(shù))表示的一個字符。例如,‘\101’代表字符‘A’、‘\012’代表“換行”。這種方法可以表示ASCII碼碼表中的所有字符。2.3.3字符型【例2.7】轉(zhuǎn)義字符的應(yīng)用。54《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){ printf("\101\x42C\n");

printf("Isay:\"Howareyou?\"\n");

printf("\\CProgram\\\n");

printf("Turbo\'C\'\n"); return0;}注意:printf()調(diào)用中的“%u”表示按無符號十進制整型輸出。運行結(jié)果:ABCIsay:"Howareyou?"\CProgram\Turbo'C'2.3.3字符型【例2.8】轉(zhuǎn)義字符的應(yīng)用。56《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){

printf("Y\b=\n"); return0;}注意:printf()調(diào)用中的“%u”表示按無符號十進制整型輸出。運行結(jié)果:程序分析:實際上,程序輸出了字符“Y”,只是字符“Y”很快被后面字符“\b”回退一格所替代,因此屏幕上看不到字符“Y”。=2.3.3字符型2.字符變量字符型變量用來存儲字符常量。將一個字符常量存儲到一個字符變量中,實際上是將該字符的ASCII碼值存儲到內(nèi)存單元中。字符變量的定義形式如下:charc1,c2;它表示c1和c2為字符型變量,分別可以用于存放一個字符,因此可以用下面語句對c1、c2賦值:c1='a';c2='b';58《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.3字符型2.字符變量一般以一個字節(jié)來存放一個字符,或者說一個字符變量在內(nèi)存中占一個字節(jié)。字符數(shù)據(jù)在內(nèi)存中是以ASCII碼的值來存儲的,它的存儲形式與整數(shù)的存儲形式相類似。在C語言中,字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以相互通用。一個字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。以字符形式輸出時,需要先將存儲單元中數(shù)值根據(jù)ASCII碼碼表換成相應(yīng)字符進行輸出。以整數(shù)形式輸出時,直接將存儲單元中的數(shù)值進行輸出。59《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.3字符型【例2.9】字符變量分別以字符形式和整數(shù)形式輸出。60《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){ charch1,ch2; ch1='a'; ch2='b';

printf("ch1=%c,ch2=%c\n",ch1,ch2);

printf("ch1=%d,ch2=%d\n",ch1,ch2); return0;}運行結(jié)果:程序分析:因為'a'和'b'的ASCII碼值為97和98。c1='a'和c2='b'是先將字符常量'a'和'b'轉(zhuǎn)換為字符所對應(yīng)的ASCII碼值97和98,然后存放到內(nèi)存單元中?!?c”表示將存儲單元的數(shù)值根據(jù)ASCII碼碼表換成相應(yīng)字符進行輸出?!?d”表示將存儲單元的數(shù)值按十進制數(shù)進行輸出。ch1=a,ch2=bch1=97,ch2=982.3.3字符型2.字符變量字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。例如:

inti;charc;i='a';c=97;上述賦值是合法的。如果將i的值輸出得到97,如按字符形式輸出c可得字符'a'。C程序允許對字符數(shù)據(jù)進行算術(shù)運算,此時就是對它們的ASCII碼值進行算術(shù)運算。62《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.3字符型【例2.10】字符數(shù)據(jù)的算術(shù)運算。63《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){charch1,ch2;ch1='a';ch2='B';printf("ch1=%c,ch2=%c\n",ch1–32,ch2+32)printf("ch1+ch2=%d\n",ch1+ch2);return0;}運行結(jié)果:ch1=A,ch2=bch1+ch2=1632.3.3字符型3.字符串常量字符串常量是用一對雙引號括起來的若干字符序列。字符串中字符的個數(shù)稱為字符串長度。例如,"Howdoyoudo."、"Goodmorning."等,都是字符串常量,其長度分別為14和13(空格也是一個字符)。長度為0的字符串(即一個字符都沒有的字符串)稱為空串。65《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.3字符型3.字符串常量如果反斜杠和雙引號作為字符串中的有效字符,則必須使用轉(zhuǎn)義字符。例如:(1)字符串C:\windows對應(yīng)的字符串常量表示為"C:\\windows"(2)字符串Isay:"Goodbye!"對應(yīng)的字符串常量表示為"Isay:\"Goodbye!\""66《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.3字符型3.字符串常量不要將字符常量與字符串常量混淆,二者是完全不同的概念。字符常量使用單引號,而字符串常量使用雙引號。'a'是字符常量,"a"是字符串常量,兩者不同。假設(shè)c被指定為字符變量:charc;c='a';是正確的。而

c="a";是錯誤的。67《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.3字符型3.字符串常量在C語言中,每一個字符串的結(jié)尾包含一個“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C語言以字符'\0'作為字符串結(jié)束標(biāo)志。'\0'是一個ASCII碼值為0的字符??沾?"實際在內(nèi)存中占有一個字節(jié),即包含一個字符'\0'。68《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.3字符型3.字符串常量例如:字符串"hello"內(nèi)存中它占6個字節(jié),最后一個字節(jié)為'\0':例如,在printf("Howdoyoudo.")中,輸出時一個一個字符輸出,直到遇到最后的'\0'字符,就知道字符串結(jié)束,停止輸出。注意,在寫字符串時不必加'\0',否則畫蛇添足。'\0'字符是系統(tǒng)自動加上的。69《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算hello\02.3.3字符型3.字符串常量字符串"a",實際上包含2個字符:'a'和'\0',因此,把它賦給一個字符變量是錯誤的。嚴(yán)格的說,在C語言中字符串只有常量,沒有變量,而且字符串不是一種數(shù)據(jù)類型。在C語言中字符串如果需要按變量的方式進行處理,需要用字符數(shù)組來存放,即用一個字符型數(shù)組來存放一個字符串。70《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.4類型轉(zhuǎn)換在C語言中,整型、實型和字符型數(shù)據(jù)間可以混合運算。如果一個運算符兩側(cè)的操作數(shù)的數(shù)據(jù)類型不同,則系統(tǒng)按“先轉(zhuǎn)換、后運算”的原則,首先將數(shù)據(jù)自動轉(zhuǎn)換成同一類型,然后在同一類型數(shù)據(jù)間進行運算。類型轉(zhuǎn)換有自動進行的,也有強制執(zhí)行的。前者稱為隱式類型轉(zhuǎn)換,后者稱為強制類型轉(zhuǎn)換。71《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.4類型轉(zhuǎn)換1.隱式類型轉(zhuǎn)換隱式類型轉(zhuǎn)換主要又可分為兩類:算術(shù)轉(zhuǎn)換和賦值轉(zhuǎn)換。(1)算術(shù)轉(zhuǎn)換:算術(shù)轉(zhuǎn)換主要出現(xiàn)在算術(shù)運算過程中,轉(zhuǎn)換規(guī)則如圖2-5所示。72《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算73圖2-5算術(shù)運算中的類型轉(zhuǎn)換規(guī)則2.3.4類型轉(zhuǎn)換說明:(1)圖中橫向向左的箭頭表示必定進行的轉(zhuǎn)換,也就是說系統(tǒng)會先將char型數(shù)據(jù)轉(zhuǎn)換為int型行數(shù)據(jù)、short型數(shù)據(jù)先轉(zhuǎn)換為int型數(shù)據(jù)、float型數(shù)據(jù)轉(zhuǎn)換為double型數(shù)據(jù),然后進行運算。例如,當(dāng)兩個float型數(shù)據(jù)做加法運算時系統(tǒng)首先將2個加數(shù)換成雙精度型然后再相加以提高運算精度。74《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.4類型轉(zhuǎn)換說明:(2)縱向的箭頭表示當(dāng)運算對象為不同類型時轉(zhuǎn)換的方向。例如,int型與double型數(shù)據(jù)進行運算,先將int型的數(shù)據(jù)轉(zhuǎn)換成double型,然后兩個同類型(double型)數(shù)據(jù)進行運算,結(jié)果為double型。75《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.4類型轉(zhuǎn)換注意:箭頭方向只表示數(shù)據(jù)類型級別的高低,由低向高轉(zhuǎn)換,不要理解為int型先轉(zhuǎn)換成unsigned型,再轉(zhuǎn)換成long型,再轉(zhuǎn)換成double型。如果一個int型數(shù)據(jù)與一個double型數(shù)據(jù)運算,是直接將int型轉(zhuǎn)換成double型。同理,一個int型與一個long型數(shù)據(jù)運算,先將int型轉(zhuǎn)直接換成long型。76《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.4類型轉(zhuǎn)換假設(shè)定義ch為字符型變量,i為整型變量,f為float型變量,d為double型變量,則下式:

ch/i+f*d–(f+i)運算過程如圖示。77《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.4類型轉(zhuǎn)換(2)賦值轉(zhuǎn)換:賦值轉(zhuǎn)換主要出現(xiàn)在賦值表達式中,不管賦值運算符右邊是什么類型,都要轉(zhuǎn)換為賦值運算符左邊的變量類型。若賦值運算符右邊的值大于左邊變量的表示范圍,則賦值時會發(fā)生溢出錯誤。78《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.4類型轉(zhuǎn)換2.強制類型轉(zhuǎn)換C語言提供了強制類型轉(zhuǎn)換運算符來實現(xiàn)強制類型轉(zhuǎn)換。語法格式:(類型)表達式例如:(int)3.579《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.4類型轉(zhuǎn)換2.強制類型轉(zhuǎn)換如果一個變量在進行運算時進行了強制類型轉(zhuǎn)換,使用強制轉(zhuǎn)換類型得到的是一個所需類型的中間量,變量本身的類型及數(shù)值都不會發(fā)生變化。例如:

intx=5;floaty=3.5;x=x+(int)yy的值是3.5,在進行加法運算時強制轉(zhuǎn)換為int型、值為3參與運算。運算結(jié)束后,y仍然是float型,其值仍然是3.5。80《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.5選擇正確的數(shù)據(jù)類型在進行C語言程序設(shè)計過程中正確選擇數(shù)據(jù)類型是非常重要的,下面以2道例題進行說明。81《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.5選擇正確的數(shù)據(jù)類型【例2.11】整型數(shù)據(jù)的溢出。82《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){

inta,b; a=32767; b=a+1;

printf("a=%d,b=%d\n",a,b); return0;}在TC環(huán)境下的運行結(jié)果:

在VC環(huán)境下的運行結(jié)果:a=32767,b=-32768a=32767,b=327682.3.5選擇正確的數(shù)據(jù)類型程序分析:TC環(huán)境是一個16位的開發(fā)環(huán)境,int類型的變量是用2個字節(jié)存放采用補碼進行編碼的有符號數(shù)。2個字節(jié)的補碼的表示范圍為-32768~32767。32767加1后產(chǎn)生溢出。實際上32767的補碼為0111111111111111B,加1后變?yōu)椋?000000000000000B,這是-32768的補碼,所以變量b輸出的值為-32768。VC環(huán)境是一個32位的開發(fā)環(huán)境,int是用4個字節(jié)存放采用補碼進行編碼的有符號數(shù)。4個字節(jié)的補碼的表示范圍為-2147483648~2147483647。32767加1后不會產(chǎn)生溢出。84《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算在TC環(huán)境下將程序修改為:#include<stdio.h>intmain(){ longinta,b; a=32767; b=a+1;

printf("a=%ld,b=%ld\n",a,b); return0;}注意:printf()函數(shù)調(diào)用中的“%ld”表示按長整型輸出后面變量的值。運行結(jié)果:a=32767,b=327682.3.5選擇正確的數(shù)據(jù)類型【例2.12】華氏溫度到攝氏溫度的轉(zhuǎn)換。轉(zhuǎn)換公式為:

式中:f代表華氏溫度,c代表攝氏溫度。86《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){ floatf,c; f=64.0; c=(5/9)*(f–32);

printf("f=%f\nc=%f\n",f,c); return0;}式中printf()函數(shù)調(diào)用中“%f”表示按實數(shù)形式輸出數(shù)據(jù)。運行結(jié)果:f=64.000000c=0.0000002.3.5選擇正確的數(shù)據(jù)類型結(jié)果分析:“c=0.000000”顯然是錯誤的。“/”是除法運算,如果被除數(shù)和除數(shù)都是整數(shù),則其結(jié)果也是整除(小數(shù)部分被舍去)。因為5和9都是整型常量,所以“5/9”的結(jié)果是0。如果要獲得正確結(jié)果,只需要將程序中的整型常量“5”改為實型常量“5.0”即可。修改后的運行結(jié)果:88《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算f=64.000000c=17.7777782.3.6sizeof運算符sizeof是C語言的一種單目運算符,sizeof運算符以字節(jié)形式給出了其操作數(shù)的存儲空間大小。可以利用sizeof運算符判斷數(shù)據(jù)類型的字節(jié)長度。使用方法:

sizeof(類型說明符);注意:sizeof不是一個函數(shù),字節(jié)數(shù)的計算在程序編譯時進行,而不是在程序執(zhí)行過程中才計算出來。89《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.3.6sizeof運算符【例2.13】確定整型數(shù)據(jù)類型的字節(jié)長度。90《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算源程序:#include<stdio.h>intmain(){

printf("%d,%d,%d\n",sizeof(short

int),

sizeof(int),sizeof(long

int)); return0;}在TC(16位系統(tǒng))環(huán)境下的運行結(jié)果:

在VC(32位系統(tǒng))環(huán)境下的運行結(jié)果:

程序分析:在TC中,int變量占2個字節(jié);在VC中,int變量占4個字節(jié)。2,2,42,4,42.4運算符與表達式運算符是告訴編譯程序執(zhí)行特定算術(shù)或邏輯操作的符號。C語言的運算范圍很寬,除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算符處理。運算符主要分為三大類:算術(shù)運算符、關(guān)系運算符與邏輯運算符。除此之外,還有一些用于完成特殊任務(wù)的運算符。運算符、常量和變量構(gòu)成C語言的表達式。92《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.1運算符的優(yōu)先級與結(jié)合性C語言規(guī)定了運算符的優(yōu)先級和結(jié)合性。C語言中運算符的優(yōu)先級共分為15級,1級最高,15級最低。在表達式中,一個操作數(shù)兩側(cè)的運算符優(yōu)先級不同時,先進行優(yōu)先級較高的運算;兩側(cè)的運算符優(yōu)先級相同時,按運算符的結(jié)合性所規(guī)定的結(jié)合方向處理。93《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.1運算符的優(yōu)先級與結(jié)合性所謂結(jié)合性是指,當(dāng)一個操作數(shù)兩側(cè)的運算符具有相同優(yōu)先級時該操作數(shù)是先與左邊的運算符結(jié)合,還是先與右邊的運算符結(jié)合。自左至右的結(jié)合方向,稱為左結(jié)合性。反之,稱為右結(jié)合性。例如,算術(shù)運算符的結(jié)合性是左結(jié)合性,因此,表達式“x-y+z”先執(zhí)行“x-y”運算,然后再執(zhí)行“+z”運算。再如賦值運算符的結(jié)合性是右結(jié)合性,因此,表達式“x=y=z”先執(zhí)行“y=z”運算,然后再執(zhí)行變量x的賦值運算。94《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.2算術(shù)運算符和算術(shù)表達式1.算術(shù)運算符算術(shù)運算符有五種,如表2-6所示。95《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算96《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算+加法運算符,如3+6正值運算符,如+2-減法運算符,如6-3負(fù)值運算符,如-2*乘法運算符,如3*6/除法運算符,如6/3%求余運算符(或稱模運算符),如7%4表2-6五種基本算術(shù)運算符2.4.2算術(shù)運算符和算術(shù)表達式注意:(1)運算符“%”只用于整型(包括字符型,實際上字符型可以看作是1個字節(jié)的整型),它的兩側(cè)都必須是整型操作數(shù)。如果不是整型數(shù),必須將操作數(shù)強制轉(zhuǎn)換成整型再進行求余運算,否則將出現(xiàn)編譯錯誤。(2)若操作數(shù)中有負(fù)值,求余的原則為:先取絕對值求余數(shù),余數(shù)的符號取被除數(shù)的符號。例如:-10%3的結(jié)果為-1;10%-3的結(jié)果為1,即采取“向零取整”的方法。97《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.2算術(shù)運算符和算術(shù)表達式2.算術(shù)運算符的優(yōu)先級與結(jié)合性算術(shù)運算符的優(yōu)先級:先乘除、后加減;括號優(yōu)先。算術(shù)運算符的結(jié)合性:左結(jié)合性。98《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.2算術(shù)運算符和算術(shù)表達式3.算術(shù)表達式算術(shù)表達式是指用算術(shù)運算符和括號將運算對象(也稱操作數(shù),如常量、變量、函數(shù)等)連接起來,符合C語法規(guī)則的式子。例如:

a+b*c+d

根據(jù)算術(shù)運算符的優(yōu)先級與結(jié)合性,算術(shù)表達式“a+b*c+d”等效為“(a+(b*c))+d”。99《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.2算術(shù)運算符和算術(shù)表達式4.自增運算符和自減運算符(1)自增運算符

自增運算符(++)是單目運算符,其作用使單個變量的值增1。自增運算符有兩種使用情況:1)前置:++i。先執(zhí)行i=i+1,再使用i值;2)后置:i++。先使用i值,再執(zhí)行i=i+1。100《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.2算術(shù)運算符和算術(shù)表達式例如:j=3; k=++j;

執(zhí)行“k=++j”語句后,k=4,j=4。上述語句等效為:j=3; j=j+1; k=j;再如:j=3; k=j++;

執(zhí)行“k=j++;”語句后,k=3,j=4。上述語句等效為:j=3; k=j; j=j+1;101《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.2算術(shù)運算符和算術(shù)表達式(2)自減運算符

自減運算符(--)也是單目運算符,其作用使單個變量的值減1。自減運算符種類也有兩種使用情況:前置:--i。先執(zhí)行i=i-1,再使用i值;后置:i--。先使用i值,再執(zhí)行i=i-1。102《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.2算術(shù)運算符和算術(shù)表達式例如:j=3; k=--j;

執(zhí)行“k=--j;”語句后,k=2,j=2。上述語句等效為:j=3; j=j-1; k=j;再如:j=3; k=j--;

執(zhí)行“k=j--;”語句后,k=3,j=2。上述語句等效為:j=3; k=j; j=j-1103《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.2算術(shù)運算符和算術(shù)表達式說明:①自增運算符(++)、自減運算符(--),只能用于變量,不能用于常量和表達式。

例如,5++、--(a+b)等都是非法的。因為5是常量,常量的值不能改變。(a+b)++也不可能實現(xiàn),假如a+b的值為5,那么自增后得到的6放在什么地方呢?無變量可供存放。104《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.2算術(shù)運算符和算術(shù)表達式說明:②++和--的結(jié)合方向是“自右至左”,其優(yōu)先級高于算術(shù)運算符。

例如,i=3,-i++相當(dāng)于-(i++),因此表達式的值為-3,i=4。③自增運算符、自減運算符,常用于循環(huán)語句中,使循環(huán)控制變量加(或減)1,以及指針變量中,使指針指向下(或上)一個地址。105《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.3賦值運算符和賦值表達式1.賦值運算符賦值運算符“=”的作用是將一個數(shù)據(jù)賦給一個變量。語法格式:

變量=表達式功能:將“=”右側(cè)的常量或表達式計算所得的值賦給左側(cè)的變量。例如,“x=5”的作用是執(zhí)行一次賦值操作,將常量5賦給變量x。106《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.3賦值運算符和賦值表達式2.復(fù)合賦值運算符在賦值符“=”之前加上其他雙目運算符,可以構(gòu)成復(fù)合賦值運算符。語法格式:

變量雙目運算符=表達式其中“雙目運算符=”就是復(fù)合賦值運算符。它等價于:變量=變量雙目運算符表達式107《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.3賦值運算符和賦值表達式例如:a+=3等價于a=a+3x%=3等價于x=x%3x*=y+8等價于x=x*(y+8)/*注意:“+”的優(yōu)先級高于“*=”*/C語言規(guī)定的10種復(fù)合賦值運算符如下:+=,-=,*=,/=,%=;/*復(fù)合算術(shù)運算符5個*/&=,^=,|=,<<=,>>=。/*復(fù)合位運算符5個*/108《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.3賦值運算符和賦值表達式3.賦值運算符的優(yōu)先級與結(jié)合性賦值運算符和復(fù)合賦值運算符的優(yōu)先級為14級,在所有C語言的運算符中僅高于逗號運算符。賦值運算符和復(fù)合賦值運算符的結(jié)合性:右結(jié)合性。109《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.3賦值運算符和賦值表達式4.賦值表達式由賦值運算符將一個變量和一個表達式連接起來的式子稱為賦值表達式。語法格式:變量賦值運算符/復(fù)合賦值運算符表達式例如:“a=5”、“a+=5”都是賦值表達式。賦值表達式的求解過程:將賦值運算符右側(cè)的“表達式”的值賦給左側(cè)的變量。110《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.3賦值運算符和賦值表達式4.賦值表達式賦值表達式的值:賦值運算結(jié)束后,賦值表達式左側(cè)變量的值就是賦值表達式的值。例如,賦值表達式“a=5”的值為5(變量a的值也是5)。例如,根據(jù)賦值運算符的結(jié)合性,表達式“a=b=10”等價于“a=(b=10)”,即先將常量10賦給變量b,賦值表達式“b=10”的值為10,再將賦值表達式“b=10”的值(10)賦給變量a。111《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.3賦值運算符和賦值表達式在C語言中,賦值表達式可以出現(xiàn)在其它表達式中參與運算。例如,加法表達式“(b=4)+(c=6)”。執(zhí)行該表達式后:b等于4;c等于6;表達式的值為10。將賦值運算作為一種表達式,使賦值操作不僅可以構(gòu)成賦值語句,而且可以出現(xiàn)在其它表達式中,這是C語言靈活性的一種表現(xiàn)。112《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.3賦值運算符和賦值表達式下面是一些賦值表達式的例子:a=b=c=5 (表達式值為5,a、b、c值均為5)a=5+(c=6) (表達式值為11,a值為11,c的值為6)a=(b=4)+(c=6) (表達式值為10,a值為10,b值為4,c值為6)a=(b=10)/(c=2) (表達式值為5,a值為5,b值為10,c值為2)113《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.4關(guān)系運算符和關(guān)系表達式1.關(guān)系運算符所謂“關(guān)系運算”實際上就是“比較運算”,即將兩個數(shù)據(jù)進行比較,判定兩個數(shù)據(jù)是否符合給定的關(guān)系。例如,“a>b”中的“>”表示大于關(guān)系運算。如果a的值是5,b的值是3,則大于關(guān)系運算“>”的結(jié)果為“真”,即條件成立;如果a的值是2,b的值是3,則大于關(guān)系運算“>”的結(jié)果為“假”,即條件不成立。114《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.4關(guān)系運算符和關(guān)系表達式C語言提供6種關(guān)系運算符:<(小于) <=(小于或等于) >(大于) >=(大于或等于)==(等于) !=(不等于)注意:在C語言中,“等于”關(guān)系運算符是雙等號“==”,而不是單等號“=”。單等號“=”是賦值運算符。115《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.4關(guān)系運算符和關(guān)系表達式關(guān)系運算符的優(yōu)先級:(1)在關(guān)系運算符中,前4個優(yōu)先級相同,后2個也相同,且前4個高于后2個。(2)關(guān)系運算符的優(yōu)先級,低于算術(shù)運算符,高于賦值運算符。關(guān)系運算符的結(jié)合性:左結(jié)合性。116《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.4關(guān)系運算符和關(guān)系表達式3.關(guān)系表達式關(guān)系表達式是指用關(guān)系運算符將兩個表達式連接起來進行關(guān)系運算的式子。例如,下面的關(guān)系表達式都是合法的:a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b',(a>b)==(b>c)關(guān)系運算的結(jié)果非“真”即“假”。在C語言中沒有邏輯型數(shù)據(jù),“邏輯真”用整數(shù)“1”表示,“邏輯假”用整數(shù)“0”表示。即關(guān)系表達式的值是1(真)或0(假)。關(guān)系表達式的值,還可以參與其他運算,例如算術(shù)運算、邏輯運算等。117《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.4關(guān)系運算符和關(guān)系表達式下面是一些關(guān)系表達式的例子(假設(shè)num1=3,num2=4,num3=5):(1)num1>num2的值為0(假)。(2)(num1>num2)!=num3的值為1(真)。因為“num1>num2”的值為0,num3的值為5,二則不相等為真。(3)num1<num2<num3的值為1(真)。因為關(guān)系運算符為左結(jié)合性,先計算表達式“num1<num2”,其值為1,而num3的值為5,1<5為真。(4)(num1<num2)+num3的值為6。這是一個加法表達式,因為“num1<num2”的值為1,num3的值為5,1+5=6。(5)num3>num2>num1的值為0(假)。因為關(guān)系運算符為左結(jié)合性,先計算表達式“num3>num2”,其值為1,而num1的值為3,1>3為假。118《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.5邏輯運算符和邏輯表達式1.邏輯運算符在C語言中有三種邏輯運算符:&&(邏輯與)、||(邏輯或)和?。ㄟ壿嫹牵?。邏輯運算符的運算規(guī)則:(1)&&:當(dāng)且僅當(dāng)兩個運算量的值都為“真”時,運算結(jié)果為1(真),否則為0(假)。(2)||:當(dāng)且僅當(dāng)兩個運算量的值都為“假”時,運算結(jié)果為0(假),否則為1(真)。(3)!:當(dāng)運算量的值為“真”時,運算結(jié)果為0(假);當(dāng)運算量的值為“假”時,運算結(jié)果為1(真)。119《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.5邏輯運算符和邏輯表達式注意:(1)關(guān)系表達式和邏輯表達式的運算結(jié)果都是1或0,用整數(shù)“1”表示“邏輯真”,用“0”表示“邏輯假”。(2)在C語言中,在判斷一個數(shù)據(jù)表示的是“真”還是“假”時,是以0和非0為根據(jù)。如果數(shù)據(jù)為0,則表示“邏輯假”;如果為非0,則表示“邏輯真”。C語言中的邏輯運算如表2-7所示。120《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算121變量a變量b非!a與a&&b或a||b非0非0011非000010非010100100表2-7C語言中的邏輯運算例如,!5的值為0。2.4.5邏輯運算符和邏輯表達式2.邏輯運算符的優(yōu)先級與結(jié)合性(1)邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低。即由高到低依次為:!→&&→||。(2)邏輯運算符與其他種類運算符的優(yōu)先級關(guān)系。由高到低依次為:!→算術(shù)運算→關(guān)系運算→&&→||→賦值運算。(3)邏輯運算符是左結(jié)合性。122《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.5邏輯運算符和邏輯表達式3.邏輯表達式邏輯表達式是指用邏輯運算符將一個或多個表達式連接起來進行邏輯運算的式子。例如,下面的表達式都是邏輯表達式:(x>=0)&&(x<10)(x<1)||(x>5)!(x==0)(year%4==0)&&(year%100!=0)||(year%400==0)123《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.5邏輯運算符和邏輯表達式說明:(1)邏輯運算符兩側(cè)的操作數(shù),除可以是0和非0的整數(shù)外,也可以是其他任何類型的數(shù)據(jù),如實型、字符型等。(2)在計算邏輯表達式時,只有在必須執(zhí)行下一個表達式才能求解時,才求解該表達式。也就是說:對于邏輯與運算,如果第一個操作數(shù)被判定為“假”,系統(tǒng)不再判定或求解第二操作數(shù);對于邏輯或運算,如果第一個操作數(shù)被判定為“真”,系統(tǒng)不再判定或求解第二操作數(shù)。124《C語言程序設(shè)計》第2章數(shù)據(jù)類型及其運算2.4.5邏輯運算符和邏輯表達式例如:

in

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論