




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第2章數(shù)據(jù)類型與基本操作
程序的主要部分是由數(shù)據(jù)和執(zhí)行的語句組成的,計算機處理的對象是數(shù)據(jù)。C語言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型形式出現(xiàn)的。數(shù)據(jù)類型不同,它所表達(dá)數(shù)據(jù)的范圍、精度和所占據(jù)存儲空間的大小均不相同。因此在介紹程序的操作(即語句)之前應(yīng)當(dāng)對操作的對象有一個初步的了解。這樣才能更好理解操作的結(jié)果。數(shù)據(jù)類型2.1常量與變量
對于基本數(shù)據(jù)類型,按其取值是否可以改變可分為常量和變量兩種。在程序中,常量是可以不經(jīng)說明而直接引用的,而變量則必須先定義后使用。
2.1.1常量
在程序運行過程中,其值不改變的量稱為常量。常量可分為直接常量和符號常量兩種。直接常量,又叫字面常量,其數(shù)據(jù)類型可以從字面形式直接判斷出來。在C語言中,常量有不同的類型,分別是整型常量(int)、浮點型常量(float和double)、字符常量(char)、字符串常量,整型常量也還有短整型(shortint)、長整型(longint)和無符號型(unsignedint)等。1.整型常量
整型常量通常是指數(shù)學(xué)上的整數(shù),分為十進(jìn)制、八進(jìn)制、十六進(jìn)制常量。(1)十進(jìn)制整型常量形式,如15,19,123,-345等。(2)八進(jìn)制整型常量形式,以數(shù)字0開頭,如:05,012,0123都是八進(jìn)制,它們分別代表十進(jìn)制5,10,83。(3)十六進(jìn)制整型常量形式,以數(shù)字0和字母x(或大寫字母X)開頭。如:0x10,0Xff,0X8均為十六進(jìn)制整數(shù),它們分別代表十進(jìn)制數(shù)16,255,8。
注意:①八進(jìn)制數(shù)的各位數(shù)字可以是0~7。十六進(jìn)制數(shù)的各位數(shù)字可以是0~15,其中10、11、12、13、14、15既可以用大寫字母A,B,C,D,E,F(xiàn)表示,也可以用小寫字母a,b,c,d,e,f表示;②常量的長度及表示數(shù)據(jù)的范圍,通常與機器類型有關(guān)。
2.浮點型常量
浮點型常量也稱數(shù)值常量,它有正值和負(fù)值之分,只能用十進(jìn)制形式表示。浮點型常量可以用小數(shù)形式或指數(shù)形式表示,如345,.345,345.,3.14159,1.5e+5,2.9e-7等。后兩個數(shù)都采用了指數(shù)形式,分別表示1.5×10和2.9×10。浮點型常量不分單精度型和雙精度型,但可以賦給一個float型或double型變量。
5-7
注意:指數(shù)形式的浮點常量E或e前面必須有數(shù)字(尾數(shù)),E或e后面必須為整數(shù)(階碼),因此E8,6e7.8都是不合法的浮點常量。3.字符常量
字符常量是用一對單引號括起來的一個字符,如'a','A','?','#'。注意,單引號只是字符與其他部分的分隔符,或者說是字符常量的定界符,不是字符常量的一部分,當(dāng)輸出一個字符常量時不輸出此引號,不能用雙引號代替引號,如"a"不是字符常量。
注意:引號中的字符不能是引號或反斜杠。如‘’‘或’\‘都不是合法的字符常量。4.轉(zhuǎn)義字符C語言規(guī)定:①用反斜杠開頭后面跟一個字母代表一個控制字符;②\\代表“\”,用\‘代表單引號字符;③用\后跟1~3個八進(jìn)制數(shù)代表ASCII碼為該八進(jìn)制數(shù)的字符;用\x后跟1~2個十六進(jìn)制數(shù)代表ASCII碼為該十六進(jìn)制數(shù)的字符。字符形式功能字符形式功能\n換行\(zhòng)f走紙換頁\t橫向跳格(即跳到下一個輸出區(qū))\\反斜杠字符“\”\v豎向跳格\'單引號字符\b退格\ddd1~3位八進(jìn)制數(shù)所代表的字符\r回車\xhh1~2位十六進(jìn)制數(shù)所代表的字符4.轉(zhuǎn)義字符【例2.1】main(){charch;ch='\362';/*將八進(jìn)制數(shù)362的ASCII字符賦給ch*/printf("%c",ch);}在IBMPC機上運行可在顯示屏上輸出:≥當(dāng)然,也可以用以輸出其他字符,如:\101或\x41表示'A'\010或\x08表示\b\134或\x5C表示\\\012或\x0A表示\n5.字符串常量
在C語言中,把用一對雙引號括起來的零個或多個字符序列稱為字符串常量。如"hello","ProgramminginC","A","a",""等。字符串以雙引號為定界符,但雙引號并不屬于字符串。要在字符串插入引號,應(yīng)借助轉(zhuǎn)義字符。例如要處理字符串"Isay:'Goodbye!'"時,可以把它寫為"Isay:\'Goodbye!\'"。hello\01041011081081110字符常量與字符串常量的區(qū)別:
6.符號常量
【例2.2】符號常量的使用。#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d\n",total);}6.符號常量符號常量名用大寫,變量名用小寫,以示區(qū)別。使用符號常量的好處是:
(1)含義清楚。如上面的程序中,看程序時從PRICE就可知道它代表價格。因此定義符號常量名時應(yīng)考慮“見名知意”。在一個規(guī)范的程序中不提倡使用很多的常數(shù),如:sum=15*30*23.5*43。在檢查程序時搞不清各個常數(shù)究竟代表什么。應(yīng)盡量使用“見名知意”的變量名和符號常量。
(2)在需要改變一個常量時能做到“一改全改”。例如在程序中多處用到某物品的價格,如果價格用常數(shù)表示,則在價格調(diào)整時,就需要在程序中作多處修改,若用符號常量PRICE代表價格,只需改動一處即可。如:#definePRICE35在程序中所有以PRICE代表的價格就會一律自動改為35。2.1.2變量
變量指在程序運行中,其值可以發(fā)生變化的量。變量在內(nèi)存中占據(jù)一定的存儲單元,該存儲單元中存放變量的值。變量通常用來保存程序運行中的輸入數(shù)據(jù),計算獲得的中間結(jié)果和最終結(jié)果。一個變量應(yīng)該有一個名字,以便被引用,變量的命名規(guī)則和用戶標(biāo)識符相同,給變量取名時,為了便于理解程序,一般都采用“見名知意”的原則。
變量名變量值存儲單元a3標(biāo)識符
C語言中,有3類標(biāo)識符:(1)關(guān)鍵字。C語言規(guī)定了32個關(guān)鍵字,如int,float,for,if,else等,它們有特定的用途和含義,不能用作變量名。(2)系統(tǒng)預(yù)定義的標(biāo)識符。如系統(tǒng)提供的庫函數(shù)的名字sin,printf,main等以及預(yù)編譯命令define等。系統(tǒng)允許把它們另作它用,但這就會使它們失去原有作用,容易產(chǎn)生混亂,建議不要把它們用作變量名。(3)用戶標(biāo)識符。即用戶自己定義的標(biāo)識符,用來給程序中的變量、函數(shù)、符號常量、數(shù)組、結(jié)構(gòu)體、共用體、文件等命名。標(biāo)識符
C語言規(guī)定標(biāo)識符只能由字母(A~Z、a~z)、數(shù)字(0~9)和下劃線3種字符組成,且第一個字符必須為字母或下劃線。
下面的標(biāo)識符是合法的:ab1abx13name_studentsfilel_bufSIZE_PI下面不是合法的C標(biāo)識符:456th (數(shù)字開頭)cade-of-moves(含有非法的“-”)pieceflag (含有非法字符空格)$123.4 ($開頭,含有非法字符)w.w (含有非法字符“.”)a&b (含有非法字符“&”)標(biāo)識符ANSIC標(biāo)準(zhǔn)沒有規(guī)定標(biāo)識符的長度(標(biāo)識符中的字符個數(shù)),但各個C編譯系統(tǒng)都有自己的規(guī)定。有的系統(tǒng)(如IBMPC的MSC)取8個字符,假如程序中出現(xiàn)的變量名長度大于8個字符,則只有前面8個字符有效,后面的不被識別。例如,有兩個變量:student_name和student_number,由于二者的前8個字符相同,系統(tǒng)認(rèn)為這兩個變量是一回事而不加區(qū)別。可以將它們改為:stud_name和stud_num以使之區(qū)別。TurboC則允許變量名有32個字符。因此,在寫程序時應(yīng)了解所用系統(tǒng)對標(biāo)識符長度的規(guī)定,以免出現(xiàn)上面的混淆。
標(biāo)識符
在定義標(biāo)識符時,建議遵循以下原則:1)盡量做到“見名知意”,以增加程序的可讀性。如sum,area,score,day,name等。2)變量名和函數(shù)名用小寫,符號常量用大寫。3)在容易出現(xiàn)混淆的地方盡量避免使用容易認(rèn)錯的字符。如:0(數(shù)字)————O(大寫字母)————o(小寫字母)1(數(shù)字)————I(i的大寫字母)————l(L的小寫字母)2(數(shù)字)————Z(大寫字母)————z(小寫字母)1.變量的聲明變量聲明的格式為:數(shù)據(jù)類型符變量名1,變量2,……變量名n;例如:intx;inty;等效為:intx,y;【例2.3】整型變量的定義和引用。#include"stdio.h"main(){intx,y,z,s;/*基本整型變量定義,一次可定義一個或多個變量*/x=3;y=4;z=5; /*整型變量的賦值*/s=x+y+z; /*整型變量的引用*/printf("\ns=%d",s);}運行結(jié)果:S=12【例2.4】將例2.3中定義的整型變量類型和所賦數(shù)值做些修改。#include"stdio.h"main(){ inta; /*基本整型變量的定義*/ shortb; /*短整型變量的定義*/ longc; /*長整型變量的定義*/ unsignedlongs; /*無符號長整型變量的定義*/ a=32769;b=4;c=5; s=a+b+c; printf("s=%d\n",s);}運行結(jié)果:s=-32758變量的聲明
(1)不同類型的數(shù)據(jù)在內(nèi)存中占據(jù)不同長度的存儲空間,而且采用不同的表示方式(指數(shù)據(jù)在機器內(nèi)部的表示方式)。例如,一般的微型機,用兩個字節(jié)存放一個整數(shù),以定點形式存放;而用4個字節(jié)存放一個浮點型數(shù)據(jù),以指數(shù)形式存放。在程序中引用一個變量,實際上是對指定的存儲空間的引用,必須先開辟(分配)存儲空間才能引用它。
(2)一種數(shù)據(jù)類型對應(yīng)著一個值的范圍。
類型名稱類型符字節(jié)數(shù)有效數(shù)字絕對值范圍單精度float46~710-37~1038雙精度double815~1610-307~10308長雙精度longdouble1018~1910-4391~104392(3)一種數(shù)據(jù)類型對應(yīng)著一組允許的操作。例如,對整數(shù)數(shù)據(jù)可以進(jìn)行“求余”運算(5%2的值為1,即5除以2的余數(shù)為1),而實型數(shù)不能進(jìn)行求余運算。數(shù)值型數(shù)據(jù)可以進(jìn)行四則運算,而結(jié)構(gòu)體型數(shù)據(jù)就不能進(jìn)行四則運算。
2.變量的初始化C語言允許在說明變量的同時對其初始化
intsum=0;floatpi=3.1416;
charc='w';也可以對說明的變量的一部分初始化
inti,sum=0,j;2.2整型數(shù)據(jù)在計算機中的存儲方式
計算機中,內(nèi)存儲器的最小存儲單位稱為“位”(bit),每一個位中或存放0,或存放1,因此稱為二進(jìn)制位。大多數(shù)計算機把8個二進(jìn)制位組成一個“字節(jié)”(byte),并給4個字節(jié)分配一個地址。若干字節(jié)組成一個“字”(word),用一個字來存放一條機器指令或一個數(shù)據(jù)。一個字含多少個字節(jié)隨機器而不同。如果計算機系統(tǒng)字長為4個字節(jié)(一個字節(jié)為8個二進(jìn)制位),就稱這臺計算機的字長為32位。
一個字節(jié)有8個二進(jìn)制位,本書中把最右邊的一位稱為最低位,把最左邊的一位稱為最高位,用以存放整數(shù)的符號。所以也稱之為符號位。若是正整數(shù),最高位置0;若是負(fù)整數(shù),最高位置1。因此,從最高位就立刻能判別出存放的一個整數(shù)是正整數(shù)還是負(fù)整數(shù)。2.2整型數(shù)據(jù)在計算機中的存儲方式
C語言中,數(shù)值都是以補碼(complement)表示的。一個正整數(shù)的補碼和該數(shù)的原碼(即該數(shù)的二進(jìn)制形式)相同。
負(fù)數(shù)求“補碼”的步驟如下:(1)求原碼。把整數(shù)的絕對值用二進(jìn)制表示,最高位用于表示符號,0表示正數(shù),1表示負(fù)數(shù)。(2)求反碼。除符號位外把1轉(zhuǎn)換成0,把0轉(zhuǎn)換成1。(3)把所求得的反碼加1,結(jié)果即為所求的補碼。整型數(shù)據(jù)在計算機中的存儲方式
【例2.5】求十進(jìn)制數(shù)-5在計算機中的存儲形式。【例2.6】把內(nèi)存中以補碼形式存放的二進(jìn)制碼1111111111110110轉(zhuǎn)換成十進(jìn)制整數(shù)。2.3整型數(shù)據(jù)的溢出【例2.7】#include"stdio.h"voidmain(){inta,b;a=32767;b=a+1;printf("%d,%d\n",a,b);}在TurboC環(huán)境下運行結(jié)果為32767,-32768
2.4float和double類型數(shù)據(jù)在內(nèi)存中的表示
通常稱float為浮點類型,而稱double為雙精度類型,它們都用來表示浮點型數(shù),差別只在于長短不同,因而所能表示的數(shù)的范圍也不同。對于一個浮點型常量,可以用兩種形式表示它,即十進(jìn)制小數(shù)形式和指數(shù)形式。(1)十進(jìn)制小數(shù)形式,如123.45、-0.001。(2)指數(shù)形式,如123e2、1.23E4、.123e5、123000E-1。這幾部分的書寫規(guī)則是:(1)尾數(shù)部分不能省略,即e(或E)前必須有數(shù)據(jù)。(2)指數(shù)部分必須是整數(shù)。(3)尾數(shù)可以只有整數(shù)部分或只有小數(shù)部分。(4)指數(shù)、尾數(shù)都可以帶符號,如省略符號則隱含為正。2.5有符號的數(shù)據(jù)類型和無符號的數(shù)據(jù)類型
前面談到的short、int、long型數(shù)據(jù),都是指帶符號的,也就是含有signed(帶符號),因此,int與signedint等價;short與signedshort等價;long與signedlong等價。C語言還允許使用無符號(unsigned)的整型數(shù)據(jù),它將二進(jìn)制形式的最左邊一位不作為符號,而與右邊各位一起用來表示數(shù)值,也就是說,如果定義一個數(shù)據(jù)類型為unsignedint,則它只能存放正數(shù)而不能存放負(fù)數(shù)。字符型的數(shù)據(jù)也有signed和unsigned兩種類型。
基本數(shù)據(jù)歸納
類型類型標(biāo)識符長度取值范圍及精度字符型[signed]char8-128~+127unsignedchar80~255整型[signed]short[int]16-32768~+32767unsignedshort[int]160~65535[signed]long[int]32-2147483~+2147647unsignedlong[int]320~4294967295浮點型float32約±(3.4×10-38~3.4×1038),6位精度double64約±(1.7×10-308~1.7×10308),16位精度【例2.8】main(){charc;c=0362;printf("%d\n",c);}運行結(jié)果:-14【例2.9】以下程序的輸出結(jié)果為()。#include"stdio.h"voidmain(){unsignedinta=65535;intb=-2;printf("\na=%d,%u;b=%d,%u",a,a,b,b);}A.a(chǎn)=-1,65535;b=-2,65534 B.a(chǎn)=65535,65535;b=-2,65534C.a(chǎn)=65535,65535;b=65534,65535 D.a(chǎn)=-1,65535;b=65534,65534答案為A
2.6運算符和表達(dá)式
運算(即操作)是對數(shù)據(jù)的加工。C對數(shù)據(jù)的基本操作和處理幾乎全是由運算符來完成的。這些符號稱為運算符或操作符。被運算的對象——數(shù)據(jù)稱為運算量或操作數(shù)。運算符執(zhí)行對操作數(shù)的各種操作,按操作數(shù)的數(shù)目分類有單目(一元)運算符、雙目(二元)運算符和三目(三元)運算符;按運算符的功能分類有算術(shù)運算符、關(guān)系運算符、邏輯運算符、自增與自減運算符、賦值運算符和條件運算符。此外,表示數(shù)組下標(biāo)的“[]”、表示函數(shù)調(diào)用的“()”、表示順序求值的“,”,以及類型強制轉(zhuǎn)換符“(類型)”也都作為運算符看待。運算符和表達(dá)式
(1)算術(shù)運算符(+、-、*、/、++、--)。(2)關(guān)系運算符(>、<、==、>=、<=、!=)。(3)邏輯運算符(!、&&、||)。(4)位運算符(<<、>>、|、、&)。(5)賦值運算符(=及其擴展賦值運算符)。(6)條件運算(?:)。(7)逗號運算符(,)。(8)指針運算符(*和&)。(9)求字節(jié)運算符(sizeof)。(10)強制類型轉(zhuǎn)換運算符(類型)。(11)分量運算符(.、->)。(12)下標(biāo)運算符([])。(13)其他(如函數(shù)調(diào)用運算符)。表達(dá)式
表達(dá)式描述了對哪些數(shù)據(jù),以什么順序以及施以什么樣的操作。它由運算符與運算量組成,運算量可以是常量,也可以是變量,還可以是函數(shù),例如:a+3,t+sin(a),x=a+b等都是表達(dá)式。
C語言有以下幾類表達(dá)式:(1)算術(shù)表達(dá)式。如2+6.7*3.5+sin(0.5)。(2)關(guān)系表達(dá)式。如x>0,y<z+6。(3)邏輯表達(dá)式。如x>0&&y>0(表示x>0與y>0同時為真,這個邏輯運算表達(dá)式的結(jié)果才為真,&&是邏輯運算符,代表“與”)。
(5)逗號表達(dá)式。如a=3,y=4,z=8(用逗號連接若干個表達(dá)式,順序執(zhí)行這些表達(dá)式,整個逗號表達(dá)式的值是最后一個表達(dá)式的值,今為8)。(4)賦值表達(dá)式。如a=5.6。優(yōu)先級與結(jié)合性
表達(dá)式的運算規(guī)則是由運算符的功能和運算符的優(yōu)先級與結(jié)合性決定的。為使表達(dá)式按一定的順序求值,編譯程序時所有運算符分成若干組,按運算符執(zhí)行的先后順序為每組規(guī)定一個等級,稱為運算符的優(yōu)先級,優(yōu)先級高的運算符先執(zhí)行運算。處于同一優(yōu)先級的運算符順序稱為運算符的結(jié)合性,運算符的結(jié)合性有從左到右和從右到左兩種順序,簡稱左結(jié)合和右結(jié)合。2.6.1賦值運算符和賦值表達(dá)式“=”就是賦值運算符
由賦值運算符組成的表達(dá)式稱為賦值表達(dá)式。它的一般形式:
<變量><賦值符><表達(dá)式>如:x=5;x=10+y;
說明:(1)賦值運算符左邊必須是變量,右邊可以是常量、變量、函數(shù)調(diào)用或由常量、變量、函數(shù)調(diào)用組成的表達(dá)式。例如:x=10,y=x+10,y=func()都是合法的賦值表達(dá)式。(2)賦值符號“=”不同于數(shù)學(xué)的等號,它沒有相等的含義,“==”才表示兩邊是否相等。例如:C語言中x=x+1是合法的,而數(shù)學(xué)上不合法。(3)賦值運算時,當(dāng)賦值運算符兩邊的數(shù)據(jù)類型不同時,將由系統(tǒng)自動進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換原則是:先將賦值號右邊表達(dá)式的類型轉(zhuǎn)換為左邊變量的類型,然后賦值。2.復(fù)合賦值運算符
在賦值符“=”之前加上某些運算符,可以構(gòu)成復(fù)合賦值運算符,復(fù)合賦值運算符可以構(gòu)成賦值表達(dá)式。它的一般形式為:<變量><雙目運算符>=<表達(dá)式>如+=,-=,*=,/=,%=,<<=,>>=,&=,|=等。例如:a+=5 等價于:a=a+5x*=y+7 等價于:x=x*(y+7)r%=p 等價于:r=r%p注意:y*=a+b;應(yīng)等價于y=y*(a+b),而不是y=y*a+b。復(fù)合賦值運算符【例2.10】以下程序執(zhí)行的結(jié)果是()。#include"stdio.h"voidmain(){inta=10;a/=a+a;printf("%d\n",n);}【例2.11】有定義:“
inta=12;”
,表達(dá)式a+=a-=a*=a的值為()。A.12 B.144 C.0 D.132輸出的結(jié)果0答案C2.6.2算術(shù)運算符和算術(shù)表達(dá)式
算術(shù)運算符包括:+、-、*、/、%、++、--。
雙目運算符+、-、*、/的操作數(shù)可為任何整數(shù)或浮點數(shù)。對于“+”和“-”,還可用于指針加或減一個整數(shù)。雙目運算符的兩個操作數(shù)類型可以不同,運算前遵循類型的一般算術(shù)轉(zhuǎn)換規(guī)則自動轉(zhuǎn)換成相同的類型,運算結(jié)果的類型與轉(zhuǎn)換后操作數(shù)的類型相同。類型的一般算術(shù)轉(zhuǎn)換規(guī)則是值域較窄的類型向較寬的類型轉(zhuǎn)換。
例如:13+5:結(jié)果為整數(shù)18。兩個操作數(shù)類型相同,都為int,不執(zhí)行類型轉(zhuǎn)換。13.0+5:結(jié)果為雙精度浮點數(shù)18.0。操作數(shù)13.0類型為double,執(zhí)行加運算之前,5被轉(zhuǎn)換成double。
'd'–97:結(jié)果為整數(shù)3。'd'的類型為char,97為int,執(zhí)行減運算之前,'d'被轉(zhuǎn)換成int,'d'的ASCII值為整數(shù)100。算術(shù)運算符和算術(shù)表達(dá)式
對于除運算符“/”,如果兩操作數(shù)都是整數(shù),則執(zhí)行整數(shù)除,運算結(jié)果也是整數(shù),值為商的整數(shù)部分,小數(shù)部分被截去;否則,執(zhí)行浮點數(shù)除,運算結(jié)果是浮點數(shù)。例如:
15/5 結(jié)果為整數(shù)33/6 結(jié)果為整數(shù)0-8/5 結(jié)果為整數(shù)-115.0/3或15/3.0或15.0/3.0結(jié)果相同,均為雙精度浮點數(shù)5.0。算術(shù)運算符和算術(shù)表達(dá)式
對于求余運算符%,規(guī)定兩操作數(shù)必須都為整數(shù),運算結(jié)果也為整數(shù),值為左操作數(shù)除以右操作數(shù)所得的余數(shù),符號與左操作數(shù)相同。例如:
17%5或7%-5 結(jié)果為整數(shù)2-17%5 結(jié)果為整數(shù)-25%10 結(jié)果為整數(shù)510%5 結(jié)果為整數(shù)0整數(shù)除和求余運算存在下列關(guān)系:a%b=a-a/b*b
算術(shù)運算符和算術(shù)表達(dá)式
增1運算符++和減1運算符--是兩個獨特的單目運算符,其獨特之處在于它們既可以用作變量的前綴,又可以用作變量的后綴。這兩種用法的效果都是使變量增1或減1,但前綴式先自增(或自減)后引用,后綴式先引用后自增(或自減)。++i、--i 在使用i之前,先使i的值增1、減1。i++、i--在使用i之后,使i的值增1、減1。
若i的原先值為8
j=++i先使i的值加1,變?yōu)?,然后再送給j,因此,j的值為9。j=i++先將i的值送給j,這樣,j的值為8,然后i值再加1,變?yōu)?。注意:++和--運算的結(jié)合方向是自右向左的。算術(shù)運算符和算術(shù)表達(dá)式【例2.12】下面的程序說明“++”和“--”運算的用法。#include"stdio.h"voidmain(){intx=0,y=1;printf("x=%d,y=%d\n",x,y);printf("x++=%d\n",x++);printf("y--=%d\n",y--);printf("x=%d,y=%d\n",x,y);}運算結(jié)果:x=0,y=1x++=0y--=1x=1,y=02.6.3長度測試運算符sizeof
長度測試運算符sizeof可用來測試某個類型的變量所占用計算機內(nèi)存空間的字節(jié)長度。一般形式為:sizeof(類型名)
inta;a=sizeof(float);printf("%d",a);輸出結(jié)果為4
2.6.4關(guān)系運算符和關(guān)系表達(dá)式
符號優(yōu)先級<(小于),>(大于),<=(小于或等于),>=(大于或等于)高==(等于),!=(不等于)低注意:(1)關(guān)系運算符為雙目運算符,結(jié)合方向為自左至右。(2)C語言中沒有邏輯值,所以關(guān)系運算符的結(jié)果為真時用1表示(或為假時用0表示)。(3)算術(shù)運算符高于關(guān)系運算符。c>a+b等同于c>(a+b)a=b>c等同于a=(b>c)a>b!=c等同于(a>b)!=c關(guān)系運算符
關(guān)系表達(dá)式
由關(guān)系運算符、運算對象以及小括號組成的表達(dá)式稱為關(guān)系表達(dá)式。當(dāng)表達(dá)式成立時,返回值為整型值1;當(dāng)表達(dá)式不成立時,返回值為整型值0。關(guān)系運算符和關(guān)系表達(dá)式【例2.13】下列程序運行后的結(jié)果為()。main(){intx,a=3,b=5,y;x=10>5>3;y=a>=3+10;printf("%d,%d\n",x,y);}輸出結(jié)果
0,0
注意:y=a>=3+10;表達(dá)式相當(dāng)于y=(a>=(3+10)),故先算3+10再與a比較。因為算術(shù)運算符比關(guān)系運算符的優(yōu)先級高,小括號可以不寫,但寫了更清楚。2.6.5邏輯運算符與邏輯表達(dá)式邏輯運算符運算符意義級別&&與中||或低!非高邏輯表達(dá)式
用邏輯運算符將關(guān)系表達(dá)式連接起來就構(gòu)成了邏輯表達(dá)式。邏輯運算的對象可以是C語言中任意合法的表達(dá)式。邏輯表達(dá)式的運算結(jié)果為真用1(“真”)表示,為假用0(“假”)表示。例如:a>b&&x>y等同于(a>b)&&(x>y)a==b||x==y等同于(a==b)||(x==y)!a||a>b等同于(!a)||(a>b)邏輯運算符與邏輯表達(dá)式【例2.14】邏輯表達(dá)式!(5>3)&&(2<4)的值為()。答案為0
【例2.15】已知year為整型變量,不能使表達(dá)式(year%4==0&&year%100!=0)||(year%400==0)的值為“真”的數(shù)據(jù)是()。A.1990 B.1992 C.1996 D.2000
答案為A
邏輯運算符與邏輯表達(dá)式
在C語言中應(yīng)注意,如有邏輯表達(dá)式:a++&&b++,若a的初始值為0,表達(dá)式首先求a++的值,由于表達(dá)式a++的值為0,系統(tǒng)完全可以確定邏輯表達(dá)式的運算結(jié)果總是為0。因此將跳過b++不再對它進(jìn)行求值。在這種情況下,a的值將自增,由0變成1,而b的值將不變。若a的值不為0,則系統(tǒng)不能僅根據(jù)表達(dá)式a++的值來確定邏輯表達(dá)式的運算結(jié)果。因此必然再對運算符&&右邊的表達(dá)式b++進(jìn)行求值,這時將進(jìn)行b++的運算,使b的值改變。
又如以下邏輯表達(dá)式:a++||b++,若a的初始值為1,表達(dá)式首先求a++的值,由于表達(dá)式a++的值為1,無論表達(dá)式b++為何值,系統(tǒng)完全可以確定邏輯表達(dá)式的運算結(jié)果總是為1。因此也將跳過b++,不再對它進(jìn)行求值。在這種情況下a的值將自增1,b的值將不變。若a的值為0,則系統(tǒng)不能僅根據(jù)表達(dá)式a++=0的值來確定邏輯表達(dá)式的運算結(jié)果,因此必然再對運算符“||”右邊表達(dá)式b++進(jìn)行求值,將進(jìn)行b++的運算,使b的值改變。邏輯運算符與邏輯表達(dá)式【例2.16】定義:“inti=10,s=0;”,分別執(zhí)行下列語句,s和i的值是多少?
s=++s||++i;答案為:s=1,i=10。
【例2.17】定義:“intx=0,y=0,z=0;”,分別執(zhí)行下列語句后,各變量的值是多少?++x&&++y||++z答案為:x=1,y=1,z=0。
注意:關(guān)系運算符、算術(shù)運算符和賦值運算符之間的優(yōu)先級次序是:算術(shù)運算符優(yōu)先級別最高,關(guān)系運算符次之,賦值運算符最低。2.6.6條件運算符與條件運算表達(dá)式
條件運算符“?:”是C語言提供的唯一一個三目運算符,其應(yīng)用靈活,功能很強。條件運算表達(dá)式的一般格式為:
表達(dá)式1?表達(dá)式2:表達(dá)式3條件運算符與條件運算表達(dá)式【例2.18】從鍵盤讀入一個整數(shù)賦給x,如果x大于等于0,把x的平方賦給y,否則把x的2倍賦給y。y=x>=0?x*x:2*x;#include"stdio.h"voidmain(){intx,y;scanf("%d",&x);y=x>=0?x*x:2*x;printf("y=%d\n",y);}條件運算符與條件運算表達(dá)式【例2.19】已定義“intx=4,b=5,y;”,執(zhí)行語句:y=++x>b?x:b-->++x?++b:x后,x、b、y的值分別為_______。本題含有關(guān)系運算、算術(shù)運算、條件運算和賦值運算,分析:
條件運算符的結(jié)合方向為自右至左,條件運算符的優(yōu)先級別僅高于賦值運算符,比關(guān)系運算符和算術(shù)運算符都低。
是否需要求解表達(dá)式“b-->++x?++b:x”,取決于++x>b?的真假,若為真使得該表達(dá)式的值y為x,若為假,即再求解表達(dá)式“b-->++x?++b:x”。
本題++x>b為假,由于在判斷++x>b時x值為5,判斷b-->++x時x值為6,所以整個表達(dá)式的值為6。答案為x=6,b=4,y=6。
條件運算符與條件運算表達(dá)式【例2.20】分析下列程序的輸出結(jié)果。#include"stdio.h"voidmain(){ inti,j,k,a=3,b=2; i=(--a==b++)?--a:++b; j=a++; k=++b; printf("i=%d,j=%d,k=%d\n",i,j,k);}輸出的結(jié)果:i=1,j=1,k=4條件運算符與條件運算表達(dá)式【例2.21】請編制程序,任意輸入兩個整數(shù),輸出其中較小者。main(){ intn1,n2,min; clrscr(); printf("inputtwonumber(n1,n2):"); scanf("%d,%d",&n1,&n2); min=(n1>n2)?n2:n1; printf("min=%d",min);}條件運算符與條件運算表達(dá)式【例2.22】編制程序,輸入大寫字母,則輸出小寫字母;輸入小寫字母,則輸出大寫字母。main(){ charch; printf("inputanyletter:"); scanf("%c",&ch); ch=((ch>='A')&&(ch<='z'))?ch+32:ch-32; printf("output:%c\n",ch);}2.6.7逗號運算符與逗號表達(dá)式
逗號運算符,又稱“順序求值運算符”。逗號表達(dá)式的一般形式為:表達(dá)式1,表達(dá)式2或表達(dá)式1,表達(dá)式2,表達(dá)式3,…,表達(dá)式n
運算過程是:自左至右依次計算表達(dá)式1,表達(dá)式2,…,表達(dá)式n的值,而整個逗號表達(dá)式的值取最后的表達(dá)式n的值。
對于逗號表達(dá)式:
a=3*5,a*4(a=3*5,a*4),a+5要正確區(qū)分表達(dá)式的作用
①x=(a=3,6*3)②x=a=3,6*32.7不同類型數(shù)據(jù)間的轉(zhuǎn)換C語言允許數(shù)據(jù)的值從一種類型轉(zhuǎn)換為另一種類型。下列情況之一會引起類型轉(zhuǎn)換:(1)當(dāng)雙目運算符的兩個操作數(shù)類型不相同時,引起一般算術(shù)轉(zhuǎn)換(或稱運算符轉(zhuǎn)換)。(2)當(dāng)一個值賦予一個不同類型的變量時,引起賦值轉(zhuǎn)換。(3)當(dāng)一個值被強制為另一個類型時,引起強制類型轉(zhuǎn)換。(4)當(dāng)某個值作為參數(shù)傳給一個函數(shù)時,引起函數(shù)調(diào)用轉(zhuǎn)換。其中,賦值轉(zhuǎn)換、一般算術(shù)轉(zhuǎn)換和函數(shù)調(diào)用轉(zhuǎn)換是由系統(tǒng)自動隱含進(jìn)行的,強制類型轉(zhuǎn)換是由程序員使用強制運算符指定進(jìn)行的顯式類型轉(zhuǎn)換。1.一般算術(shù)轉(zhuǎn)換
一般算術(shù)轉(zhuǎn)換(簡稱算術(shù)轉(zhuǎn)換)的基本規(guī)則為:雙目運算符的兩個操作數(shù)中,值域較窄的那個類型向值域較寬的那個類型轉(zhuǎn)換。值域是類型所能表示的值的最大范圍。被轉(zhuǎn)換的兩個操作數(shù)可為任意類型。轉(zhuǎn)換規(guī)則如下:
(1)將表達(dá)式中的
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司行政藥品管理制度
- 2025商場租賃合同樣本
- 廣東省東莞市2024~2025學(xué)年 高二下冊第一次月考數(shù)學(xué)試卷附解析
- 2025年中考語文(長沙用)課件:復(fù)習(xí)任務(wù)群6 文學(xué)、文化常識
- 中國共產(chǎn)黨執(zhí)政:歷史和人民的選擇教學(xué)課件
- 2024年四川公務(wù)員行測(B類)真題及答案
- 志 委托編纂?yún)f(xié)議
- 2025年醫(yī)藥儲運部試題
- 超聲激勵下生物組織熱與應(yīng)力損傷的研究
- 藝術(shù)品鑒定技術(shù)創(chuàng)新-洞察闡釋
- 2022年《上海市初中語文課程終結(jié)性評價指南》中規(guī)定的個文言實詞
- 電影編劇勞動合同范本
- 甲醛釋放量測定不確定度報告
- 《汽車電工電子基礎(chǔ)》課程標(biāo)準(zhǔn)
- 南京市生物地理中考指導(dǎo)書答案
- 諾和諾德制藥
- 長三角地區(qū)地圖(可以隨意更改顏色、轉(zhuǎn)動、組合))
- SIDEL吹瓶機原理ppt課件
- 抹灰工程施工方案預(yù)拌砂漿
- MSG-3中文版課件
- 轉(zhuǎn)發(fā)省局《關(guān)于加強非煤礦山安全生產(chǎn)班組建設(shè)的指導(dǎo)意見》的通知
評論
0/150
提交評論