




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章數(shù)據(jù)類(lèi)型與基本操作
程序的主要部分是由數(shù)據(jù)和執(zhí)行的語(yǔ)句組成的,計(jì)算機(jī)處理的對(duì)象是數(shù)據(jù)。C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類(lèi)型形式出現(xiàn)的。數(shù)據(jù)類(lèi)型不同,它所表達(dá)數(shù)據(jù)的范圍、精度和所占據(jù)存儲(chǔ)空間的大小均不相同。因此在介紹程序的操作(即語(yǔ)句)之前應(yīng)當(dāng)對(duì)操作的對(duì)象有一個(gè)初步的了解。這樣才能更好理解操作的結(jié)果。數(shù)據(jù)類(lèi)型2.1常量與變量
對(duì)于基本數(shù)據(jù)類(lèi)型,按其取值是否可以改變可分為常量和變量?jī)煞N。在程序中,常量是可以不經(jīng)說(shuō)明而直接引用的,而變量則必須先定義后使用。
2.1.1常量
在程序運(yùn)行過(guò)程中,其值不改變的量稱(chēng)為常量。常量可分為直接常量和符號(hào)常量?jī)煞N。直接常量,又叫字面常量,其數(shù)據(jù)類(lèi)型可以從字面形式直接判斷出來(lái)。在C語(yǔ)言中,常量有不同的類(lèi)型,分別是整型常量(int)、浮點(diǎn)型常量(float和double)、字符常量(char)、字符串常量,整型常量也還有短整型(shortint)、長(zhǎng)整型(longint)和無(wú)符號(hào)型(unsignedint)等。1.整型常量
整型常量通常是指數(shù)學(xué)上的整數(shù),分為十進(jìn)制、八進(jìn)制、十六進(jìn)制常量。(1)十進(jìn)制整型常量形式,如15,19,123,-345等。(2)八進(jìn)制整型常量形式,以數(shù)字0開(kāi)頭,如:05,012,0123都是八進(jìn)制,它們分別代表十進(jìn)制5,10,83。(3)十六進(jìn)制整型常量形式,以數(shù)字0和字母x(或大寫(xiě)字母X)開(kāi)頭。如: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既可以用大寫(xiě)字母A,B,C,D,E,F(xiàn)表示,也可以用小寫(xiě)字母a,b,c,d,e,f表示;②常量的長(zhǎng)度及表示數(shù)據(jù)的范圍,通常與機(jī)器類(lèi)型有關(guān)。
2.浮點(diǎn)型常量
浮點(diǎn)型常量也稱(chēng)數(shù)值常量,它有正值和負(fù)值之分,只能用十進(jìn)制形式表示。浮點(diǎn)型常量可以用小數(shù)形式或指數(shù)形式表示,如345,.345,345.,3.14159,1.5e+5,2.9e-7等。后兩個(gè)數(shù)都采用了指數(shù)形式,分別表示1.5×10和2.9×10。浮點(diǎn)型常量不分單精度型和雙精度型,但可以賦給一個(gè)float型或double型變量。
5-7
注意:指數(shù)形式的浮點(diǎn)常量E或e前面必須有數(shù)字(尾數(shù)),E或e后面必須為整數(shù)(階碼),因此E8,6e7.8都是不合法的浮點(diǎn)常量。3.字符常量
字符常量是用一對(duì)單引號(hào)括起來(lái)的一個(gè)字符,如'a','A','?','#'。注意,單引號(hào)只是字符與其他部分的分隔符,或者說(shuō)是字符常量的定界符,不是字符常量的一部分,當(dāng)輸出一個(gè)字符常量時(shí)不輸出此引號(hào),不能用雙引號(hào)代替引號(hào),如"a"不是字符常量。
注意:引號(hào)中的字符不能是引號(hào)或反斜杠。如‘’‘或’\‘都不是合法的字符常量。4.轉(zhuǎn)義字符C語(yǔ)言規(guī)定:①用反斜杠開(kāi)頭后面跟一個(gè)字母代表一個(gè)控制字符;②\\代表“\”,用\‘代表單引號(hào)字符;③用\后跟1~3個(gè)八進(jìn)制數(shù)代表ASCII碼為該八進(jìn)制數(shù)的字符;用\x后跟1~2個(gè)十六進(jìn)制數(shù)代表ASCII碼為該十六進(jìn)制數(shù)的字符。字符形式功能字符形式功能\n換行\(zhòng)f走紙換頁(yè)\t橫向跳格(即跳到下一個(gè)輸出區(qū))\\反斜杠字符“\”\v豎向跳格\'單引號(hào)字符\b退格\ddd1~3位八進(jìn)制數(shù)所代表的字符\r回車(chē)\xhh1~2位十六進(jìn)制數(shù)所代表的字符4.轉(zhuǎn)義字符【例2.1】main(){charch;ch='\362';/*將八進(jìn)制數(shù)362的ASCII字符賦給ch*/printf("%c",ch);}在IBMPC機(jī)上運(yùn)行可在顯示屏上輸出:≥當(dāng)然,也可以用以輸出其他字符,如:\101或\x41表示'A'\010或\x08表示\b\134或\x5C表示\\\012或\x0A表示\n5.字符串常量
在C語(yǔ)言中,把用一對(duì)雙引號(hào)括起來(lái)的零個(gè)或多個(gè)字符序列稱(chēng)為字符串常量。如"hello","ProgramminginC","A","a",""等。字符串以雙引號(hào)為定界符,但雙引號(hào)并不屬于字符串。要在字符串插入引號(hào),應(yīng)借助轉(zhuǎn)義字符。例如要處理字符串"Isay:'Goodbye!'"時(shí),可以把它寫(xiě)為"Isay:\'Goodbye!\'"。hello\01041011081081110字符常量與字符串常量的區(qū)別:
6.符號(hào)常量
【例2.2】符號(hào)常量的使用。#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d\n",total);}6.符號(hào)常量符號(hào)常量名用大寫(xiě),變量名用小寫(xiě),以示區(qū)別。使用符號(hào)常量的好處是:
(1)含義清楚。如上面的程序中,看程序時(shí)從PRICE就可知道它代表價(jià)格。因此定義符號(hào)常量名時(shí)應(yīng)考慮“見(jiàn)名知意”。在一個(gè)規(guī)范的程序中不提倡使用很多的常數(shù),如:sum=15*30*23.5*43。在檢查程序時(shí)搞不清各個(gè)常數(shù)究竟代表什么。應(yīng)盡量使用“見(jiàn)名知意”的變量名和符號(hào)常量。
(2)在需要改變一個(gè)常量時(shí)能做到“一改全改”。例如在程序中多處用到某物品的價(jià)格,如果價(jià)格用常數(shù)表示,則在價(jià)格調(diào)整時(shí),就需要在程序中作多處修改,若用符號(hào)常量PRICE代表價(jià)格,只需改動(dòng)一處即可。如:#definePRICE35在程序中所有以PRICE代表的價(jià)格就會(huì)一律自動(dòng)改為35。2.1.2變量
變量指在程序運(yùn)行中,其值可以發(fā)生變化的量。變量在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,該存儲(chǔ)單元中存放變量的值。變量通常用來(lái)保存程序運(yùn)行中的輸入數(shù)據(jù),計(jì)算獲得的中間結(jié)果和最終結(jié)果。一個(gè)變量應(yīng)該有一個(gè)名字,以便被引用,變量的命名規(guī)則和用戶(hù)標(biāo)識(shí)符相同,給變量取名時(shí),為了便于理解程序,一般都采用“見(jiàn)名知意”的原則。
變量名變量值存儲(chǔ)單元a3標(biāo)識(shí)符
C語(yǔ)言中,有3類(lèi)標(biāo)識(shí)符:(1)關(guān)鍵字。C語(yǔ)言規(guī)定了32個(gè)關(guān)鍵字,如int,float,for,if,else等,它們有特定的用途和含義,不能用作變量名。(2)系統(tǒng)預(yù)定義的標(biāo)識(shí)符。如系統(tǒng)提供的庫(kù)函數(shù)的名字sin,printf,main等以及預(yù)編譯命令define等。系統(tǒng)允許把它們另作它用,但這就會(huì)使它們失去原有作用,容易產(chǎn)生混亂,建議不要把它們用作變量名。(3)用戶(hù)標(biāo)識(shí)符。即用戶(hù)自己定義的標(biāo)識(shí)符,用來(lái)給程序中的變量、函數(shù)、符號(hào)常量、數(shù)組、結(jié)構(gòu)體、共用體、文件等命名。標(biāo)識(shí)符
C語(yǔ)言規(guī)定標(biāo)識(shí)符只能由字母(A~Z、a~z)、數(shù)字(0~9)和下劃線(xiàn)3種字符組成,且第一個(gè)字符必須為字母或下劃線(xiàn)。
下面的標(biāo)識(shí)符是合法的:ab1abx13name_studentsfilel_bufSIZE_PI下面不是合法的C標(biāo)識(shí)符:456th (數(shù)字開(kāi)頭)cade-of-moves(含有非法的“-”)pieceflag (含有非法字符空格)$123.4 ($開(kāi)頭,含有非法字符)w.w (含有非法字符“.”)a&b (含有非法字符“&”)標(biāo)識(shí)符ANSIC標(biāo)準(zhǔn)沒(méi)有規(guī)定標(biāo)識(shí)符的長(zhǎng)度(標(biāo)識(shí)符中的字符個(gè)數(shù)),但各個(gè)C編譯系統(tǒng)都有自己的規(guī)定。有的系統(tǒng)(如IBMPC的MSC)取8個(gè)字符,假如程序中出現(xiàn)的變量名長(zhǎng)度大于8個(gè)字符,則只有前面8個(gè)字符有效,后面的不被識(shí)別。例如,有兩個(gè)變量:student_name和student_number,由于二者的前8個(gè)字符相同,系統(tǒng)認(rèn)為這兩個(gè)變量是一回事而不加區(qū)別??梢詫⑺鼈兏臑?stud_name和stud_num以使之區(qū)別。TurboC則允許變量名有32個(gè)字符。因此,在寫(xiě)程序時(shí)應(yīng)了解所用系統(tǒng)對(duì)標(biāo)識(shí)符長(zhǎng)度的規(guī)定,以免出現(xiàn)上面的混淆。
標(biāo)識(shí)符
在定義標(biāo)識(shí)符時(shí),建議遵循以下原則:1)盡量做到“見(jiàn)名知意”,以增加程序的可讀性。如sum,area,score,day,name等。2)變量名和函數(shù)名用小寫(xiě),符號(hào)常量用大寫(xiě)。3)在容易出現(xiàn)混淆的地方盡量避免使用容易認(rèn)錯(cuò)的字符。如:0(數(shù)字)————O(大寫(xiě)字母)————o(小寫(xiě)字母)1(數(shù)字)————I(i的大寫(xiě)字母)————l(L的小寫(xiě)字母)2(數(shù)字)————Z(大寫(xiě)字母)————z(小寫(xiě)字母)1.變量的聲明變量聲明的格式為:數(shù)據(jù)類(lèi)型符變量名1,變量2,……變量名n;例如:intx;inty;等效為:intx,y;【例2.3】整型變量的定義和引用。#include"stdio.h"main(){intx,y,z,s;/*基本整型變量定義,一次可定義一個(gè)或多個(gè)變量*/x=3;y=4;z=5; /*整型變量的賦值*/s=x+y+z; /*整型變量的引用*/printf("\ns=%d",s);}運(yùn)行結(jié)果:S=12【例2.4】將例2.3中定義的整型變量類(lèi)型和所賦數(shù)值做些修改。#include"stdio.h"main(){ inta; /*基本整型變量的定義*/ shortb; /*短整型變量的定義*/ longc; /*長(zhǎng)整型變量的定義*/ unsignedlongs; /*無(wú)符號(hào)長(zhǎng)整型變量的定義*/ a=32769;b=4;c=5; s=a+b+c; printf("s=%d\n",s);}運(yùn)行結(jié)果:s=-32758變量的聲明
(1)不同類(lèi)型的數(shù)據(jù)在內(nèi)存中占據(jù)不同長(zhǎng)度的存儲(chǔ)空間,而且采用不同的表示方式(指數(shù)據(jù)在機(jī)器內(nèi)部的表示方式)。例如,一般的微型機(jī),用兩個(gè)字節(jié)存放一個(gè)整數(shù),以定點(diǎn)形式存放;而用4個(gè)字節(jié)存放一個(gè)浮點(diǎn)型數(shù)據(jù),以指數(shù)形式存放。在程序中引用一個(gè)變量,實(shí)際上是對(duì)指定的存儲(chǔ)空間的引用,必須先開(kāi)辟(分配)存儲(chǔ)空間才能引用它。
(2)一種數(shù)據(jù)類(lèi)型對(duì)應(yīng)著一個(gè)值的范圍。
類(lèi)型名稱(chēng)類(lèi)型符字節(jié)數(shù)有效數(shù)字絕對(duì)值范圍單精度f(wàn)loat46~710-37~1038雙精度double815~1610-307~10308長(zhǎng)雙精度longdouble1018~1910-4391~104392(3)一種數(shù)據(jù)類(lèi)型對(duì)應(yīng)著一組允許的操作。例如,對(duì)整數(shù)數(shù)據(jù)可以進(jìn)行“求余”運(yùn)算(5%2的值為1,即5除以2的余數(shù)為1),而實(shí)型數(shù)不能進(jìn)行求余運(yùn)算。數(shù)值型數(shù)據(jù)可以進(jìn)行四則運(yùn)算,而結(jié)構(gòu)體型數(shù)據(jù)就不能進(jìn)行四則運(yùn)算。
2.變量的初始化C語(yǔ)言允許在說(shuō)明變量的同時(shí)對(duì)其初始化
intsum=0;floatpi=3.1416;
charc='w';也可以對(duì)說(shuō)明的變量的一部分初始化
inti,sum=0,j;2.2整型數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)方式
計(jì)算機(jī)中,內(nèi)存儲(chǔ)器的最小存儲(chǔ)單位稱(chēng)為“位”(bit),每一個(gè)位中或存放0,或存放1,因此稱(chēng)為二進(jìn)制位。大多數(shù)計(jì)算機(jī)把8個(gè)二進(jìn)制位組成一個(gè)“字節(jié)”(byte),并給4個(gè)字節(jié)分配一個(gè)地址。若干字節(jié)組成一個(gè)“字”(word),用一個(gè)字來(lái)存放一條機(jī)器指令或一個(gè)數(shù)據(jù)。一個(gè)字含多少個(gè)字節(jié)隨機(jī)器而不同。如果計(jì)算機(jī)系統(tǒng)字長(zhǎng)為4個(gè)字節(jié)(一個(gè)字節(jié)為8個(gè)二進(jìn)制位),就稱(chēng)這臺(tái)計(jì)算機(jī)的字長(zhǎng)為32位。
一個(gè)字節(jié)有8個(gè)二進(jìn)制位,本書(shū)中把最右邊的一位稱(chēng)為最低位,把最左邊的一位稱(chēng)為最高位,用以存放整數(shù)的符號(hào)。所以也稱(chēng)之為符號(hào)位。若是正整數(shù),最高位置0;若是負(fù)整數(shù),最高位置1。因此,從最高位就立刻能判別出存放的一個(gè)整數(shù)是正整數(shù)還是負(fù)整數(shù)。2.2整型數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)方式
C語(yǔ)言中,數(shù)值都是以補(bǔ)碼(complement)表示的。一個(gè)正整數(shù)的補(bǔ)碼和該數(shù)的原碼(即該數(shù)的二進(jìn)制形式)相同。
負(fù)數(shù)求“補(bǔ)碼”的步驟如下:(1)求原碼。把整數(shù)的絕對(duì)值用二進(jìn)制表示,最高位用于表示符號(hào),0表示正數(shù),1表示負(fù)數(shù)。(2)求反碼。除符號(hào)位外把1轉(zhuǎn)換成0,把0轉(zhuǎn)換成1。(3)把所求得的反碼加1,結(jié)果即為所求的補(bǔ)碼。整型數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)方式
【例2.5】求十進(jìn)制數(shù)-5在計(jì)算機(jī)中的存儲(chǔ)形式。【例2.6】把內(nèi)存中以補(bǔ)碼形式存放的二進(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)境下運(yùn)行結(jié)果為32767,-32768
2.4float和double類(lèi)型數(shù)據(jù)在內(nèi)存中的表示
通常稱(chēng)float為浮點(diǎn)類(lèi)型,而稱(chēng)double為雙精度類(lèi)型,它們都用來(lái)表示浮點(diǎn)型數(shù),差別只在于長(zhǎng)短不同,因而所能表示的數(shù)的范圍也不同。對(duì)于一個(gè)浮點(diǎn)型常量,可以用兩種形式表示它,即十進(jìn)制小數(shù)形式和指數(shù)形式。(1)十進(jìn)制小數(shù)形式,如123.45、-0.001。(2)指數(shù)形式,如123e2、1.23E4、.123e5、123000E-1。這幾部分的書(shū)寫(xiě)規(guī)則是:(1)尾數(shù)部分不能省略,即e(或E)前必須有數(shù)據(jù)。(2)指數(shù)部分必須是整數(shù)。(3)尾數(shù)可以只有整數(shù)部分或只有小數(shù)部分。(4)指數(shù)、尾數(shù)都可以帶符號(hào),如省略符號(hào)則隱含為正。2.5有符號(hào)的數(shù)據(jù)類(lèi)型和無(wú)符號(hào)的數(shù)據(jù)類(lèi)型
前面談到的short、int、long型數(shù)據(jù),都是指帶符號(hào)的,也就是含有signed(帶符號(hào)),因此,int與signedint等價(jià);short與signedshort等價(jià);long與signedlong等價(jià)。C語(yǔ)言還允許使用無(wú)符號(hào)(unsigned)的整型數(shù)據(jù),它將二進(jìn)制形式的最左邊一位不作為符號(hào),而與右邊各位一起用來(lái)表示數(shù)值,也就是說(shuō),如果定義一個(gè)數(shù)據(jù)類(lèi)型為unsignedint,則它只能存放正數(shù)而不能存放負(fù)數(shù)。字符型的數(shù)據(jù)也有signed和unsigned兩種類(lèi)型。
基本數(shù)據(jù)歸納
類(lèi)型類(lèi)型標(biāo)識(shí)符長(zhǎng)度取值范圍及精度字符型[signed]char8-128~+127unsignedchar80~255整型[signed]short[int]16-32768~+32767unsignedshort[int]160~65535[signed]long[int]32-2147483~+2147647unsignedlong[int]320~4294967295浮點(diǎn)型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);}運(yùn)行結(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運(yùn)算符和表達(dá)式
運(yùn)算(即操作)是對(duì)數(shù)據(jù)的加工。C對(duì)數(shù)據(jù)的基本操作和處理幾乎全是由運(yùn)算符來(lái)完成的。這些符號(hào)稱(chēng)為運(yùn)算符或操作符。被運(yùn)算的對(duì)象——數(shù)據(jù)稱(chēng)為運(yùn)算量或操作數(shù)。運(yùn)算符執(zhí)行對(duì)操作數(shù)的各種操作,按操作數(shù)的數(shù)目分類(lèi)有單目(一元)運(yùn)算符、雙目(二元)運(yùn)算符和三目(三元)運(yùn)算符;按運(yùn)算符的功能分類(lèi)有算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、自增與自減運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算符。此外,表示數(shù)組下標(biāo)的“[]”、表示函數(shù)調(diào)用的“()”、表示順序求值的“,”,以及類(lèi)型強(qiáng)制轉(zhuǎn)換符“(類(lèi)型)”也都作為運(yùn)算符看待。運(yùn)算符和表達(dá)式
(1)算術(shù)運(yùn)算符(+、-、*、/、++、--)。(2)關(guān)系運(yùn)算符(>、<、==、>=、<=、!=)。(3)邏輯運(yùn)算符(!、&&、||)。(4)位運(yùn)算符(<<、>>、|、、&)。(5)賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)。(6)條件運(yùn)算(?:)。(7)逗號(hào)運(yùn)算符(,)。(8)指針運(yùn)算符(*和&)。(9)求字節(jié)運(yùn)算符(sizeof)。(10)強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符(類(lèi)型)。(11)分量運(yùn)算符(.、->)。(12)下標(biāo)運(yùn)算符([])。(13)其他(如函數(shù)調(diào)用運(yùn)算符)。表達(dá)式
表達(dá)式描述了對(duì)哪些數(shù)據(jù),以什么順序以及施以什么樣的操作。它由運(yùn)算符與運(yùn)算量組成,運(yùn)算量可以是常量,也可以是變量,還可以是函數(shù),例如:a+3,t+sin(a),x=a+b等都是表達(dá)式。
C語(yǔ)言有以下幾類(lèi)表達(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同時(shí)為真,這個(gè)邏輯運(yùn)算表達(dá)式的結(jié)果才為真,&&是邏輯運(yùn)算符,代表“與”)。
(5)逗號(hào)表達(dá)式。如a=3,y=4,z=8(用逗號(hào)連接若干個(gè)表達(dá)式,順序執(zhí)行這些表達(dá)式,整個(gè)逗號(hào)表達(dá)式的值是最后一個(gè)表達(dá)式的值,今為8)。(4)賦值表達(dá)式。如a=5.6。優(yōu)先級(jí)與結(jié)合性
表達(dá)式的運(yùn)算規(guī)則是由運(yùn)算符的功能和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性決定的。為使表達(dá)式按一定的順序求值,編譯程序時(shí)所有運(yùn)算符分成若干組,按運(yùn)算符執(zhí)行的先后順序?yàn)槊拷M規(guī)定一個(gè)等級(jí),稱(chēng)為運(yùn)算符的優(yōu)先級(jí),優(yōu)先級(jí)高的運(yùn)算符先執(zhí)行運(yùn)算。處于同一優(yōu)先級(jí)的運(yùn)算符順序稱(chēng)為運(yùn)算符的結(jié)合性,運(yùn)算符的結(jié)合性有從左到右和從右到左兩種順序,簡(jiǎn)稱(chēng)左結(jié)合和右結(jié)合。2.6.1賦值運(yùn)算符和賦值表達(dá)式“=”就是賦值運(yùn)算符
由賦值運(yùn)算符組成的表達(dá)式稱(chēng)為賦值表達(dá)式。它的一般形式:
<變量><賦值符><表達(dá)式>如:x=5;x=10+y;
說(shuō)明:(1)賦值運(yùn)算符左邊必須是變量,右邊可以是常量、變量、函數(shù)調(diào)用或由常量、變量、函數(shù)調(diào)用組成的表達(dá)式。例如:x=10,y=x+10,y=func()都是合法的賦值表達(dá)式。(2)賦值符號(hào)“=”不同于數(shù)學(xué)的等號(hào),它沒(méi)有相等的含義,“==”才表示兩邊是否相等。例如:C語(yǔ)言中x=x+1是合法的,而數(shù)學(xué)上不合法。(3)賦值運(yùn)算時(shí),當(dāng)賦值運(yùn)算符兩邊的數(shù)據(jù)類(lèi)型不同時(shí),將由系統(tǒng)自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換。轉(zhuǎn)換原則是:先將賦值號(hào)右邊表達(dá)式的類(lèi)型轉(zhuǎn)換為左邊變量的類(lèi)型,然后賦值。2.復(fù)合賦值運(yùn)算符
在賦值符“=”之前加上某些運(yùn)算符,可以構(gòu)成復(fù)合賦值運(yùn)算符,復(fù)合賦值運(yùn)算符可以構(gòu)成賦值表達(dá)式。它的一般形式為:<變量><雙目運(yùn)算符>=<表達(dá)式>如+=,-=,*=,/=,%=,<<=,>>=,&=,|=等。例如:a+=5 等價(jià)于:a=a+5x*=y+7 等價(jià)于:x=x*(y+7)r%=p 等價(jià)于:r=r%p注意:y*=a+b;應(yīng)等價(jià)于y=y*(a+b),而不是y=y*a+b。復(fù)合賦值運(yùn)算符【例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ù)運(yùn)算符和算術(shù)表達(dá)式
算術(shù)運(yùn)算符包括:+、-、*、/、%、++、--。
雙目運(yùn)算符+、-、*、/的操作數(shù)可為任何整數(shù)或浮點(diǎn)數(shù)。對(duì)于“+”和“-”,還可用于指針加或減一個(gè)整數(shù)。雙目運(yùn)算符的兩個(gè)操作數(shù)類(lèi)型可以不同,運(yùn)算前遵循類(lèi)型的一般算術(shù)轉(zhuǎn)換規(guī)則自動(dòng)轉(zhuǎn)換成相同的類(lèi)型,運(yùn)算結(jié)果的類(lèi)型與轉(zhuǎn)換后操作數(shù)的類(lèi)型相同。類(lèi)型的一般算術(shù)轉(zhuǎn)換規(guī)則是值域較窄的類(lèi)型向較寬的類(lèi)型轉(zhuǎn)換。
例如:13+5:結(jié)果為整數(shù)18。兩個(gè)操作數(shù)類(lèi)型相同,都為int,不執(zhí)行類(lèi)型轉(zhuǎn)換。13.0+5:結(jié)果為雙精度浮點(diǎn)數(shù)18.0。操作數(shù)13.0類(lèi)型為double,執(zhí)行加運(yùn)算之前,5被轉(zhuǎn)換成double。
'd'–97:結(jié)果為整數(shù)3。'd'的類(lèi)型為char,97為int,執(zhí)行減運(yùn)算之前,'d'被轉(zhuǎn)換成int,'d'的ASCII值為整數(shù)100。算術(shù)運(yùn)算符和算術(shù)表達(dá)式
對(duì)于除運(yùn)算符“/”,如果兩操作數(shù)都是整數(shù),則執(zhí)行整數(shù)除,運(yùn)算結(jié)果也是整數(shù),值為商的整數(shù)部分,小數(shù)部分被截去;否則,執(zhí)行浮點(diǎn)數(shù)除,運(yùn)算結(jié)果是浮點(diǎn)數(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é)果相同,均為雙精度浮點(diǎn)數(shù)5.0。算術(shù)運(yùn)算符和算術(shù)表達(dá)式
對(duì)于求余運(yùn)算符%,規(guī)定兩操作數(shù)必須都為整數(shù),運(yùn)算結(jié)果也為整數(shù),值為左操作數(shù)除以右操作數(shù)所得的余數(shù),符號(hào)與左操作數(shù)相同。例如:
17%5或7%-5 結(jié)果為整數(shù)2-17%5 結(jié)果為整數(shù)-25%10 結(jié)果為整數(shù)510%5 結(jié)果為整數(shù)0整數(shù)除和求余運(yùn)算存在下列關(guān)系:a%b=a-a/b*b
算術(shù)運(yùn)算符和算術(shù)表達(dá)式
增1運(yùn)算符++和減1運(yùn)算符--是兩個(gè)獨(dú)特的單目運(yùn)算符,其獨(dú)特之處在于它們既可以用作變量的前綴,又可以用作變量的后綴。這兩種用法的效果都是使變量增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)?。注意:++和--運(yùn)算的結(jié)合方向是自右向左的。算術(shù)運(yùn)算符和算術(shù)表達(dá)式【例2.12】下面的程序說(shuō)明“++”和“--”運(yùn)算的用法。#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);}運(yùn)算結(jié)果:x=0,y=1x++=0y--=1x=1,y=02.6.3長(zhǎng)度測(cè)試運(yùn)算符sizeof
長(zhǎng)度測(cè)試運(yùn)算符sizeof可用來(lái)測(cè)試某個(gè)類(lèi)型的變量所占用計(jì)算機(jī)內(nèi)存空間的字節(jié)長(zhǎng)度。一般形式為:sizeof(類(lèi)型名)
inta;a=sizeof(float);printf("%d",a);輸出結(jié)果為4
2.6.4關(guān)系運(yùn)算符和關(guān)系表達(dá)式
符號(hào)優(yōu)先級(jí)<(小于),>(大于),<=(小于或等于),>=(大于或等于)高==(等于),!=(不等于)低注意:(1)關(guān)系運(yùn)算符為雙目運(yùn)算符,結(jié)合方向?yàn)樽宰笾劣?。?)C語(yǔ)言中沒(méi)有邏輯值,所以關(guān)系運(yùn)算符的結(jié)果為真時(shí)用1表示(或?yàn)榧贂r(shí)用0表示)。(3)算術(shù)運(yùn)算符高于關(guān)系運(yùn)算符。c>a+b等同于c>(a+b)a=b>c等同于a=(b>c)a>b!=c等同于(a>b)!=c關(guān)系運(yùn)算符
關(guān)系表達(dá)式
由關(guān)系運(yùn)算符、運(yùn)算對(duì)象以及小括號(hào)組成的表達(dá)式稱(chēng)為關(guān)系表達(dá)式。當(dāng)表達(dá)式成立時(shí),返回值為整型值1;當(dāng)表達(dá)式不成立時(shí),返回值為整型值0。關(guān)系運(yùn)算符和關(guān)系表達(dá)式【例2.13】下列程序運(yùn)行后的結(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比較。因?yàn)樗阈g(shù)運(yùn)算符比關(guān)系運(yùn)算符的優(yōu)先級(jí)高,小括號(hào)可以不寫(xiě),但寫(xiě)了更清楚。2.6.5邏輯運(yùn)算符與邏輯表達(dá)式邏輯運(yùn)算符運(yùn)算符意義級(jí)別&&與中||或低!非高邏輯表達(dá)式
用邏輯運(yùn)算符將關(guān)系表達(dá)式連接起來(lái)就構(gòu)成了邏輯表達(dá)式。邏輯運(yùn)算的對(duì)象可以是C語(yǔ)言中任意合法的表達(dá)式。邏輯表達(dá)式的運(yùn)算結(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)邏輯運(yùn)算符與邏輯表達(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
邏輯運(yùn)算符與邏輯表達(dá)式
在C語(yǔ)言中應(yīng)注意,如有邏輯表達(dá)式:a++&&b++,若a的初始值為0,表達(dá)式首先求a++的值,由于表達(dá)式a++的值為0,系統(tǒng)完全可以確定邏輯表達(dá)式的運(yùn)算結(jié)果總是為0。因此將跳過(guò)b++不再對(duì)它進(jìn)行求值。在這種情況下,a的值將自增,由0變成1,而b的值將不變。若a的值不為0,則系統(tǒng)不能僅根據(jù)表達(dá)式a++的值來(lái)確定邏輯表達(dá)式的運(yùn)算結(jié)果。因此必然再對(duì)運(yùn)算符&&右邊的表達(dá)式b++進(jìn)行求值,這時(shí)將進(jìn)行b++的運(yùn)算,使b的值改變。
又如以下邏輯表達(dá)式:a++||b++,若a的初始值為1,表達(dá)式首先求a++的值,由于表達(dá)式a++的值為1,無(wú)論表達(dá)式b++為何值,系統(tǒng)完全可以確定邏輯表達(dá)式的運(yùn)算結(jié)果總是為1。因此也將跳過(guò)b++,不再對(duì)它進(jìn)行求值。在這種情況下a的值將自增1,b的值將不變。若a的值為0,則系統(tǒng)不能僅根據(jù)表達(dá)式a++=0的值來(lái)確定邏輯表達(dá)式的運(yùn)算結(jié)果,因此必然再對(duì)運(yùn)算符“||”右邊表達(dá)式b++進(jìn)行求值,將進(jìn)行b++的運(yùn)算,使b的值改變。邏輯運(yùn)算符與邏輯表達(dá)式【例2.16】定義:“inti=10,s=0;”,分別執(zhí)行下列語(yǔ)句,s和i的值是多少?
s=++s||++i;答案為:s=1,i=10。
【例2.17】定義:“intx=0,y=0,z=0;”,分別執(zhí)行下列語(yǔ)句后,各變量的值是多少?++x&&++y||++z答案為:x=1,y=1,z=0。
注意:關(guān)系運(yùn)算符、算術(shù)運(yùn)算符和賦值運(yùn)算符之間的優(yōu)先級(jí)次序是:算術(shù)運(yùn)算符優(yōu)先級(jí)別最高,關(guān)系運(yùn)算符次之,賦值運(yùn)算符最低。2.6.6條件運(yùn)算符與條件運(yùn)算表達(dá)式
條件運(yùn)算符“?:”是C語(yǔ)言提供的唯一一個(gè)三目運(yùn)算符,其應(yīng)用靈活,功能很強(qiáng)。條件運(yùn)算表達(dá)式的一般格式為:
表達(dá)式1?表達(dá)式2:表達(dá)式3條件運(yùn)算符與條件運(yùn)算表達(dá)式【例2.18】從鍵盤(pán)讀入一個(gè)整數(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);}條件運(yùn)算符與條件運(yùn)算表達(dá)式【例2.19】已定義“intx=4,b=5,y;”,執(zhí)行語(yǔ)句:y=++x>b?x:b-->++x?++b:x后,x、b、y的值分別為_(kāi)______。本題含有關(guān)系運(yùn)算、算術(shù)運(yùn)算、條件運(yùn)算和賦值運(yùn)算,分析:
條件運(yùn)算符的結(jié)合方向?yàn)樽杂抑磷螅瑮l件運(yùn)算符的優(yōu)先級(jí)別僅高于賦值運(yùn)算符,比關(guān)系運(yùn)算符和算術(shù)運(yùn)算符都低。
是否需要求解表達(dá)式“b-->++x?++b:x”,取決于++x>b?的真假,若為真使得該表達(dá)式的值y為x,若為假,即再求解表達(dá)式“b-->++x?++b:x”。
本題++x>b為假,由于在判斷++x>b時(shí)x值為5,判斷b-->++x時(shí)x值為6,所以整個(gè)表達(dá)式的值為6。答案為x=6,b=4,y=6。
條件運(yùn)算符與條件運(yùn)算表達(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條件運(yùn)算符與條件運(yùn)算表達(dá)式【例2.21】請(qǐng)編制程序,任意輸入兩個(gè)整數(shù),輸出其中較小者。main(){ intn1,n2,min; clrscr(); printf("inputtwonumber(n1,n2):"); scanf("%d,%d",&n1,&n2); min=(n1>n2)?n2:n1; printf("min=%d",min);}條件運(yùn)算符與條件運(yùn)算表達(dá)式【例2.22】編制程序,輸入大寫(xiě)字母,則輸出小寫(xiě)字母;輸入小寫(xiě)字母,則輸出大寫(xiě)字母。main(){ charch; printf("inputanyletter:"); scanf("%c",&ch); ch=((ch>='A')&&(ch<='z'))?ch+32:ch-32; printf("output:%c\n",ch);}2.6.7逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式
逗號(hào)運(yùn)算符,又稱(chēng)“順序求值運(yùn)算符”。逗號(hào)表達(dá)式的一般形式為:表達(dá)式1,表達(dá)式2或表達(dá)式1,表達(dá)式2,表達(dá)式3,…,表達(dá)式n
運(yùn)算過(guò)程是:自左至右依次計(jì)算表達(dá)式1,表達(dá)式2,…,表達(dá)式n的值,而整個(gè)逗號(hào)表達(dá)式的值取最后的表達(dá)式n的值。
對(duì)于逗號(hào)表達(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不同類(lèi)型數(shù)據(jù)間的轉(zhuǎn)換C語(yǔ)言允許數(shù)據(jù)的值從一種類(lèi)型轉(zhuǎn)換為另一種類(lèi)型。下列情況之一會(huì)引起類(lèi)型轉(zhuǎn)換:(1)當(dāng)雙目運(yùn)算符的兩個(gè)操作數(shù)類(lèi)型不相同時(shí),引起一般算術(shù)轉(zhuǎn)換(或稱(chēng)運(yùn)算符轉(zhuǎn)換)。(2)當(dāng)一個(gè)值賦予一個(gè)不同類(lèi)型的變量時(shí),引起賦值轉(zhuǎn)換。(3)當(dāng)一個(gè)值被強(qiáng)制為另一個(gè)類(lèi)型時(shí),引起強(qiáng)制類(lèi)型轉(zhuǎn)換。(4)當(dāng)某個(gè)值作為參數(shù)傳給一個(gè)函數(shù)時(shí),引起函數(shù)調(diào)用轉(zhuǎn)換。其中,賦值轉(zhuǎn)換、一般算術(shù)轉(zhuǎn)換和函數(shù)調(diào)用轉(zhuǎn)換是由系統(tǒng)自動(dòng)隱含進(jìn)行的,強(qiáng)制類(lèi)型轉(zhuǎn)換是由程序員使用強(qiáng)制運(yùn)算符指定進(jìn)行的顯式類(lèi)型轉(zhuǎn)換。1.一般算術(shù)轉(zhuǎn)換
一般算術(shù)轉(zhuǎn)換(簡(jiǎn)稱(chēng)算術(shù)轉(zhuǎn)換)的基本規(guī)則為:雙目運(yùn)算符的兩個(gè)操作數(shù)中,值域較窄的那個(gè)類(lèi)型向值域較寬的那個(gè)類(lèi)型轉(zhuǎn)換。值域是類(lèi)型所能表示的值的最大范圍。被轉(zhuǎn)換的兩個(gè)操作數(shù)可為任意類(lèi)型。轉(zhuǎn)換規(guī)則如下:
(1)將表達(dá)式中的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 刮塑合同范例
- 產(chǎn)假合同范例
- 兼職業(yè)務(wù)合同范例
- 農(nóng)資賒銷(xiāo)合同范本
- 履帶吊施工方案
- 加盟項(xiàng)目服務(wù)合同范例
- 公司入股協(xié)議合同范例
- 陳洪綬作品中“石”的意象造型探究
- 基于寫(xiě)作自動(dòng)評(píng)價(jià)系統(tǒng)的混合反饋對(duì)高中生英語(yǔ)寫(xiě)作成績(jī)與寫(xiě)作準(zhǔn)確性的影響研究
- 凍融與鹽蝕耦合作用下混凝土孔結(jié)構(gòu)發(fā)展規(guī)律與宏細(xì)觀(guān)性能關(guān)系研究
- 【公開(kāi)課課件】6.4.3余弦定理、正弦定理1課件-2021-2022學(xué)年高一下學(xué)期數(shù)學(xué)人教A版(2019)必修第二冊(cè)
- 防水板臺(tái)車(chē)施工方案
- 提高地下室管線(xiàn)一次性安裝合格率
- 小學(xué)三年級(jí)數(shù)獨(dú)比賽“六宮”練習(xí)題
- 實(shí)驗(yàn)一、儀器的認(rèn)領(lǐng)、洗滌、干燥及樣品的稱(chēng)量
- 通橋(2013)8388A常用跨度梁橋面附屬設(shè)施_圖文
- SF_T 0112-2021 法醫(yī)臨床影像學(xué)檢驗(yàn)實(shí)施規(guī)范_(高清版)
- 干部調(diào)動(dòng)介紹信(存根)Word版
- 油田科研單位有效發(fā)揮技術(shù)專(zhuān)家作用初探
- 席位卡A4紙打印模板(共3頁(yè))
- 研究生英語(yǔ)寫(xiě)譯教程基礎(chǔ)級(jí)第三版袁錫興楊若東寫(xiě)作篇Chapter1Theparagraph
評(píng)論
0/150
提交評(píng)論