版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式3.1C的數(shù)據(jù)類型算法處理的對(duì)象是數(shù)據(jù),考慮算法時(shí)要注意數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)是以種特定的形式存在的:整、實(shí)、字符等。算法與編程是相輔相成的,考慮的問題有:
1.數(shù)據(jù)的描述:稱數(shù)據(jù)結(jié)構(gòu),加工處理的數(shù)據(jù)類型。
2.動(dòng)作的描述:告訴計(jì)算機(jī)要的操作步驟。數(shù)據(jù)結(jié)構(gòu):反映不同數(shù)據(jù)的構(gòu)造形式。不同語(yǔ)言所提供的數(shù)據(jù)結(jié)構(gòu)是不同的,因而算法也有差異。例如:對(duì)十個(gè)整數(shù)進(jìn)行排序和對(duì)十個(gè)整數(shù)構(gòu)成的數(shù)組排序算法是不同的。在考慮算法時(shí),必須考慮數(shù)據(jù)結(jié)構(gòu),以便選擇最佳設(shè)計(jì)方案。C語(yǔ)言提供的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型的形式出現(xiàn)的用指針、結(jié)構(gòu)體還可構(gòu)成鏈表、樹、棧等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)整型字符型實(shí)型(浮點(diǎn)型)枚舉類型單精度型雙精度型數(shù)組類型結(jié)構(gòu)體類型共用體類型基本類型構(gòu)造類型指針類型空類型(void)數(shù)據(jù)類型3.2常量與變量3.2.1常量和符號(hào)常量常量:在程序執(zhí)行過程中,數(shù)值始終保持不變的量。
整型:5,-26,0
實(shí)型:3.14,-2.45,2.17178
字符:‘a(chǎn)’,‘1’,‘A’,‘$’
標(biāo)識(shí)符(符號(hào))#definepi3.14
常量一般從其字面形式即可判別常量例T3-1.c#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf(“total=%d”,total);}輸出:total=300符號(hào)常量:見名知意,程序中一改全改.3.2.2變量
變量:在程序執(zhí)行過程中,其值可以變化的量。說明:1.變量名:由合法標(biāo)識(shí)符(函數(shù)、數(shù)組、文件、結(jié)構(gòu)體等名稱都稱標(biāo)識(shí)符)組成。2.標(biāo)識(shí)符構(gòu)成:
字母、數(shù)字、下劃線。第一個(gè)字符必須是字母或下劃線,如:
ab,_12,a3c5均為合法標(biāo)識(shí)符,而5ba$e,wang-1為非法。3.標(biāo)識(shí)符長(zhǎng)度:
一般1~8個(gè)合法字符(Tc中,長(zhǎng)度達(dá)248個(gè)字符,有效字符前32個(gè))。4.標(biāo)識(shí)符中:大小寫字母是有區(qū)別,如,A,a是兩個(gè)不同的標(biāo)識(shí)符。5.變量的使用:按先定義后使用的原則進(jìn)行。6.變量類型能進(jìn)行有關(guān)運(yùn)算的合法性檢查,如a%b,兩邊必須是整型數(shù)據(jù)。7.不同類型的變量,在內(nèi)存中占據(jù)不同的存儲(chǔ)單元,變量所對(duì)應(yīng)的單元中存放變量的值,
要區(qū)分變量名和變量值兩個(gè)不同的概念。
3.3整型數(shù)據(jù)3.3.1整型常量1、十進(jìn)制整數(shù):如29,-36,02、八進(jìn)制整數(shù):以0開頭,后跟0~7中的若干數(shù)字;
如:0123(83)103、十六進(jìn)整制:以0x開頭,后跟0~9,A,B,C,D,E,F(可小寫)中的若干字符,如0xA2(162)103.3.2整型變量1、整型變量在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進(jìn)制補(bǔ)碼形式存放的。
例:inti,j;i=10;j=-10;
正數(shù)的補(bǔ)碼:與原碼相同。求負(fù)數(shù)補(bǔ)碼:①求該數(shù)的絕對(duì)值的二進(jìn)制;
②對(duì)其值求反加1i10數(shù)據(jù)i存放示意圖數(shù)據(jù)i在內(nèi)存中實(shí)際存放情況0000000000001010-10j數(shù)據(jù)j存放示意圖數(shù)據(jù)j在內(nèi)存中實(shí)際存放情況11111111111101102、整型變量的分類
根據(jù)數(shù)值的范圍可定義以下類型的變量:
1、基本型:用int 定義
2、短整型:用shortint或short定義
3、長(zhǎng)整型:用longint或long定義整型:unsignedint
4、無(wú)符號(hào)型:短整:unsignedshort
長(zhǎng)整:unsignedlong
無(wú)符號(hào)數(shù)據(jù)的特點(diǎn):
最高位不是作為符號(hào)位,而是作為存放有效數(shù)值本身,它不能存放負(fù)數(shù)。例:inta;/*a的數(shù)值范圍為-32768~32767*/unsignedintb;/*b的數(shù)值范圍為0~65535*/符號(hào)位有符號(hào)整型變量a=327670111111111111111
無(wú)符號(hào)整型變量b=655351111111111111111
數(shù)值有效位
類型比特?cái)?shù)取值范圍int16-32768~32767short16-32768~32767long32-2147483648~2147483647unsignedint160~65535unsignedshort160~65535unsignedlong320~4294967297ANSI標(biāo)準(zhǔn)定義的整數(shù)類型3、整型變量的定義:對(duì)變量強(qiáng)制類型定義的目的:讓編譯為其分配內(nèi)存單元。
各種變量的定義一般在函數(shù)的開始部分,也可以在分程序{}中定義,若在分程序中定義,其作用域僅在分程序中有效。例T3-2.cmain(){inta,b,c,d;
unsignedintu;a=12;b=-24;u=10;c=a+u;d=b+u;{inta;a=8*9;printf(“a=%d\n”,a);}/*加上此復(fù)合語(yǔ)句結(jié)果?*/printf(“a+u=%d,b+u=%d\n”,c,d);}
運(yùn)算結(jié)果:a+u=22,b+u=-14
由此可見:
不同類型的整型數(shù)據(jù)可以進(jìn)行混合運(yùn)算4、整型數(shù)據(jù)的溢出
int型變量最大允許值為32767,如果大于此數(shù),將產(chǎn)生溢出例3.3整型數(shù)據(jù)的溢出情況main(){inta,b;a=32767;b=a+1;printf(“%d,%d”,a,b);}運(yùn)行結(jié)果:32767,-32768
0111111111111111a:→327671000000000000000b:
→-32768
從上圖可知,變量a的最高位為0,低15位為1,表示32767而變量b最高位為1,低15位為0,表示-32768。
此種情況,編譯系統(tǒng)不會(huì)報(bào)錯(cuò),這要靠編程者的細(xì)心和經(jīng)驗(yàn)。3.3.3、整型常量的類型
整型常量本身隱含了某種數(shù)據(jù)類型,將整型常量賦給整型變量時(shí),要考慮常量的大小和變量所能表示的數(shù)據(jù)范圍。
一個(gè)整數(shù),其值在如下范圍:
(1)-32768~32767
int,shortint,longint(2)-2147483648~2147483647longint(3)對(duì)于非負(fù)數(shù),如:0~65535
unsignedint,unsignedshort0~4294967295unsignedlong
說明:
1.常量中無(wú)unsigned類型的數(shù),正整數(shù)可賦給unsigned變量,只要數(shù)值不超過范圍。2.在整型常量后加l或L表示長(zhǎng)整型常量,如:456L。
3.在函數(shù)調(diào)用時(shí),若被調(diào)用函數(shù)的形參是長(zhǎng)整型變量,則要求主調(diào)函數(shù)的實(shí)參也是長(zhǎng)整型數(shù)據(jù)。3.4實(shí)型數(shù)據(jù)3.4.1實(shí)型常量的表示方法
實(shí)數(shù)又稱浮點(diǎn)數(shù)
1.十進(jìn)制形式:由數(shù)字和小數(shù)點(diǎn)組成,如:3.14,0.26,0.0,326.452.指數(shù)形式:由尾數(shù)部分、字母e或E、指數(shù)部分組成。如:48.62e+12,其中:48.62為尾數(shù),+12為指數(shù),e為基數(shù)10,它表示48.621012
C規(guī)定:e的前面要有數(shù)字,e的后面要有整數(shù)。3.4.2實(shí)型變量1、實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式
float型變量:32位
double型變量:64位數(shù)符
階符
d29(7位階碼)d23
d22(23位規(guī)格化數(shù)補(bǔ)碼)d0
2127-1≈1038數(shù)符
階符
d61(10位階碼)d52
d51(52位規(guī)格化數(shù)補(bǔ)碼)d021024-1≈103082、實(shí)型變量的分類
float型表示數(shù)的范圍:最大正數(shù):(1-2-23)2127=1038最小負(fù)數(shù):-12127=-1038
接近0的正數(shù):2-1
2-128=3.910-38
接近0的負(fù)數(shù):-(2-1+2-23)2-128=-3.910-38
double型表示數(shù)的范圍:最大正數(shù):(1-2-52
)21023=10308
最小負(fù)數(shù):-121023=-10308
接近0的正數(shù):2-1
2-1024=10-308
接近0的負(fù)數(shù):-(2-1+2-52)2-1024=-10-308longdouble型表示數(shù)的范圍:最大正數(shù):-10-4931~104931
實(shí)型常量可賦給float或double型變量,根據(jù)變量類型截取實(shí)型常量的有效位。
單精度實(shí)型數(shù)據(jù)(float)表數(shù)范圍:
十進(jìn)制形式:7位有效位指數(shù)形式:.
e
雙精度實(shí)型數(shù)據(jù)(double)表數(shù)范圍:十進(jìn)制形式:16位有效位指數(shù)形式:.
e
雙精度實(shí)型數(shù)據(jù)(longdouble)
表示數(shù)據(jù)范圍:十進(jìn)制形式:16位有效位指數(shù)形式:.
e
x3、實(shí)型數(shù)據(jù)的舍入誤差
實(shí)型數(shù)據(jù)是由有限的存儲(chǔ)單元來存儲(chǔ)的,因此提供的有效數(shù)字總是有限的,在有效位以外的數(shù)字將被舍去,由此可能會(huì)有一些誤差。例T3-4.cmain(){floata,b;longdoublec;a=123456.678e5;b=a+20;c=123456789.123456789e4923;printf(“a=%f\nb=%f\nc=%Lf\n”,a,b,c);}輸出結(jié)果:
a=12345678848.000000b=12345678848.000000c=1.234567891234567890000000000000000000000e+4931
a的值比20大的多,a+20的理論值是12345678920,而實(shí)型變量有效位只有7位,因此,后面的數(shù)字是無(wú)意義的,應(yīng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)相加或相減,以免造成誤差。3.4.3實(shí)型常量的類型1、未加說明,系統(tǒng)將實(shí)型常量作為雙精度處理例:floatf;f=2.45678*4532.65
系統(tǒng)將兩數(shù)按雙精度運(yùn)算,然后將前7位賦給實(shí)型變量f,
缺點(diǎn):浪費(fèi)系統(tǒng)資源,降低運(yùn)算速度;
解決的辦法:在數(shù)的后面加f,如2.45678f,系統(tǒng)將其按單精度數(shù)運(yùn)算。2、實(shí)型常量賦給float或double類型變量時(shí),根據(jù)變量的類型截取實(shí)型常量的有效位。例T3-4-1.cmain(){floatf1;doublef2;f1=111111.111;f2=111111.11111;printf(“f1=%f\nf2=%lf\n”,f1,f2);}輸出結(jié)果:f1=111111.109375f2=111111.1111103.5字符型數(shù)據(jù)3.5.1字符常量
字符常量:用一對(duì)單引號(hào)括起的一個(gè)字符,如‘a(chǎn)’,‘A’,‘#’,‘9’說明:1.字符常量的值是該字符在ASCII碼中的碼值。
2.‘a(chǎn)’和‘A’是兩個(gè)不同的字符常量,‘a(chǎn)’97,‘A’653.‘\’開頭的字符序列稱為特殊形式的字符常量(轉(zhuǎn)義字符)
常用的轉(zhuǎn)義字符功能及碼值轉(zhuǎn)義字符功能十進(jìn)制的ASCII碼值
\a響鈴7\b退格8\f換頁(yè)12\n換行10\r回車13\t橫向跳八格9\ddd三位八進(jìn)制\101‘A’\xhh兩位十六進(jìn)制\x42‘B’例T3-5.cmain(){printf(“---------------\n”);printf(“-ab-c\t-de\rf\tg\n”);printf(“h\ti\b\bj-k\n”);}運(yùn)行后屏幕顯示結(jié)果:
----------------
fgde
hj-k注意:打印機(jī)和屏幕顯示結(jié)果不同。不會(huì)象屏幕那樣會(huì)“抹掉”原字符,能夠真正反映輸出的過程和結(jié)果。運(yùn)行后打印機(jī)顯示結(jié)果:
----------------fabgde
hjik3.5.2字符變量
字符變量:用于存放一個(gè)字符常量。字符變量的定義形式:如:
charc1,c2;/*定義c1,c2為字符型變量,占一個(gè)字節(jié)*/c1=‘a(chǎn)’;c2=‘b’;/*將字符常量‘a(chǎn)’,‘b’賦給c1和c2*/2.5.3字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及使用方法字符常量存放到字符變量中,是把其ASCII碼值存放到內(nèi)存中,由于其存儲(chǔ)形式與整數(shù)存儲(chǔ)形式相似,所以整、字符型數(shù)據(jù)之間可通用。例T3-6.cmain(){charc1,c2;c1=97;c2=98;printf(“c1=%c,c2=%c\n”,c1,c2);printf(“c1=%d,c2=%d\n”,c1,c2);}運(yùn)行結(jié)果:c1=a,c2=bc1=97,c2=98c1c29798←內(nèi)存中變量c1、c2的值c1c2←內(nèi)存中變量c1、c2實(shí)際存儲(chǔ)形式0110000101100010例T3-7.c大小寫字母的轉(zhuǎn)換main(){charc1,c2;c1=‘a(chǎn)’;c2=‘b’;c1=c1-32;c2=c2-32;printf(c1=%c,c2=%c\n”,c1,c2);}運(yùn)行結(jié)果:c1=A,c2=B01100001a存儲(chǔ)(ASCII碼)“%c”“%d”a97輸出格式符顯示例T3-7-1.c字符數(shù)據(jù)與整型數(shù)據(jù)之間可以相互賦值main(){inti;charc;c=97;i=‘a(chǎn)’;printf(“%c,%d\n”,c,c);
printf(“%c,%d\n”,i,i);}運(yùn)行結(jié)果:a,97a,97
在TurboC中,字符數(shù)據(jù)占一個(gè)字節(jié),當(dāng)ASCII碼值在128~255之間時(shí),其最高位為1,占據(jù)了符號(hào)位,以數(shù)據(jù)輸出時(shí)為負(fù)數(shù),以字符輸出時(shí)是對(duì)應(yīng)的字符,以無(wú)符號(hào)數(shù)據(jù)輸出時(shí),也是其對(duì)應(yīng)的數(shù)據(jù)。例:T3-7-2.cmain(){charc1=‘\376’;unsignedcharc2=‘\376’;printf(“%d,%c\n”,c1,c1);printf(“%d,%c\n”,c2,c2);}運(yùn)行結(jié)果:-2,(-2的補(bǔ)碼)
254,
1111111011111110數(shù)值位符號(hào)位Charc1Unsignedc23.5.4字符串常量字符串常量:用一對(duì)雙引號(hào)括起的字符序列。
如:“BEIJING”,“CHINA”,“$123”,“a”
字符串使用的有關(guān)說明:字符串可出現(xiàn)在輸出函數(shù)中;如:printf(“ThisisaCprogram.\n”);2.字符常量與字符串常量是不同的;如:charc1,c2;c1=‘a(chǎn)’;可以
c2=“a”;錯(cuò)誤不能把字符串賦給字符型變量,字符串在內(nèi)存中存放時(shí),系統(tǒng)自動(dòng)加字符串結(jié)束符‘\0’,該字符在ASCII碼中的碼值為0,是空操作符,即無(wú)動(dòng)作,不顯示。
a\0
a
a\0
a3.C中無(wú)字符串變量,字符串可以賦給字符數(shù)組;4.若字符串為“CHINA”,它在內(nèi)存中的實(shí)際存儲(chǔ)形式是:
其長(zhǎng)度是6而不是5,最后一個(gè)字符是‘\0’,是系統(tǒng)自動(dòng)加上的,不能人為加上此字符,它既無(wú)顯示或打印輸出也無(wú)任何動(dòng)作。
CHINA03.6變量賦初值方法有:定義的同時(shí)給變量賦初值如:inta=3;floatb=3.1415;charc=‘x’;2.定義變量時(shí),可以對(duì)其中的一部分變量賦初值
如:inta=3,b,c,d=8;3.把一個(gè)常量賦給不同變量時(shí),最好分別進(jìn)行。如:inta=b=c=3;
而應(yīng)寫為:inta=3,b=3,c=3;4.初始化是在程序運(yùn)行時(shí),執(zhí)行本函數(shù)時(shí)賦以初值的。
如:inta=3;相當(dāng)于:inta;a=3;3.7各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算在C語(yǔ)言中,整、實(shí)、字符型數(shù)據(jù)間可以混合運(yùn)算一、不同類型數(shù)據(jù)間進(jìn)行運(yùn)算時(shí),要轉(zhuǎn)換成同一類型
轉(zhuǎn)換過程中,低類型向高類型靠攏,然后進(jìn)行運(yùn)算,不同類型之間轉(zhuǎn)換如下圖所示,橫向左箭頭為必轉(zhuǎn),縱向箭頭表示有條件類型轉(zhuǎn)換。
高doublefloat
long
unsigned
低int
char,chort二、類型轉(zhuǎn)換進(jìn)一步說明
1.當(dāng)兩數(shù)都為float時(shí),都要轉(zhuǎn)換為double型
2.當(dāng)一個(gè)為float型,而另一個(gè)為char型時(shí),則都要 轉(zhuǎn)換為double型。
3.當(dāng)一個(gè)為long型,而另一個(gè)為int型時(shí),則將另一個(gè)也轉(zhuǎn)換為long型例:T3-7-3.cmain(){floata;
doubleb;a=10+‘a(chǎn)’+1.5-8765.1234*’b’;b=10+‘a(chǎn)’+1.5-8765.1234*‘b’;printf(“a=%f,b=%f\n”,a,b);}運(yùn)行結(jié)果:a=-858873.562500,b=-858873.5932003.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.8.1C運(yùn)算符簡(jiǎn)介除控制語(yǔ)句(if,while,for…)和輸入/輸出函數(shù);大部分操作都作為運(yùn)算符處理。1.算術(shù)運(yùn)算符:+、-、*、/、%2.關(guān)系運(yùn)算符:>、>=、<、<=、==、!=3.邏輯運(yùn)算符:!、&&、||4.位運(yùn)算符:<<、>>、~、|、^、&5.賦值運(yùn)算符:=6.條件運(yùn)算符:?:7.逗號(hào)運(yùn)算符:,8.指針運(yùn)算符:*、&9.求字節(jié)數(shù)運(yùn)算符:sizeof10.強(qiáng)制類型轉(zhuǎn)換運(yùn)算符:(類型)11.分量運(yùn)算符:·
、12.下標(biāo)運(yùn)算符:[、]13.其它運(yùn)算符:如函數(shù)調(diào)用2.8.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式1、基本的算術(shù)運(yùn)算符
+:加法或正值運(yùn)算符,如:2+3、+5-:減法或負(fù)值運(yùn)算符,如:8-3、-6*:乘法運(yùn)算符,如:3*5/:除法運(yùn)算符,兩個(gè)可以是整或?qū)嵭蛿?shù)據(jù)。
%:求余運(yùn)算符兩個(gè)必是整型數(shù)據(jù)。例T3-7-4.c整型數(shù)據(jù)除法運(yùn)算main(){inta,b,c;a=5;b=3;c=a/b;printf(“c=%d\n”,c);}運(yùn)算結(jié)果:c=1例T3-7-5.c實(shí)型數(shù)據(jù)除法運(yùn)算main(){floata,b,c;a=5;b=3;c=a/b;printf(“%f\n”,c);}運(yùn)算結(jié)果:1.666667說明:(1)整數(shù)除法中一個(gè)數(shù)為負(fù)時(shí),結(jié)果取整后向0靠攏,
如:-5/3=-15/(-3)=-18/(-3)=-2-8/3=-2(2)取余運(yùn)算符兩則必須是整型數(shù)據(jù),余數(shù)與被除數(shù)同號(hào)如:-29%4=-7余-129%(-4)=-7余1-52%7=-7余-352%(-7)=-7余32、算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性算術(shù)表達(dá)式:
用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(常量、變量、函數(shù))連接起來的,符合C語(yǔ)言語(yǔ)法規(guī)則的式子。
如:a*b/c-1.5+’a’
在C語(yǔ)言中,運(yùn)算符共有15個(gè)優(yōu)先級(jí),其中算術(shù)運(yùn)算符的優(yōu)先級(jí)是:
*、/、%(3級(jí))+、-(4級(jí))
算術(shù)運(yùn)算符的結(jié)合方向:從左向右如:a-b+c:算符優(yōu)先級(jí)相同,結(jié)合性:從左向右
a-b*c:算符*的優(yōu)先級(jí)高于-
若運(yùn)算符兩側(cè)的運(yùn)算對(duì)象類型不同時(shí),低類型向高類型轉(zhuǎn)換3、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符一般形式:(類型名)(表達(dá)式)如(double)a將a轉(zhuǎn)換為double型
(int)(x+y)將x+y的值轉(zhuǎn)換為整型
(float)(5%3)將5%3的值轉(zhuǎn)換成單精度實(shí)型說明:
1.(int)(x+y)與(int)x+y意義不同
2.類型轉(zhuǎn)換后得到一個(gè)中間值,而原來變量的類型沒有發(fā)生變化。例T3-8.cmain(){floatx,i;x=3.6;i=(int)(x);printf(“x=%f,i=%f\n”,x,i);}
運(yùn)算結(jié)果:x=3.600000,i=3.000000例T3-8-1.cmain(){floata,b,c,d;inte,f;a=5;b=3;c=a/b;d=(float)(5%3);e=(int)(a/3);f=(int)(b+3.8);printf(“c=%f,d=%f,e=%d,f=%d\n”,c,d,e,f);}運(yùn)算結(jié)果:c=1.666667,d=2.000000,e=1,f=6
思考:程序運(yùn)行期間,a,b的值發(fā)生變化沒有?答案:a,b之值沒有發(fā)生變化。4、自增、自減運(yùn)算符
++:增1運(yùn)算符,使變量值增1。
--:減1運(yùn)算符,使變量值減1。如:++i,--i:在使用變量i之前,先使變量i加(減)1。
i++,i--:在使用變量i之后,使變量i值加(減)1。
例T3-8-2.cmain(){inti,j;i=3;j=++i;printf(“i=%d,j=%d\n”,i,j);}
運(yùn)算結(jié)果:i=4,j=4例T3-8-3.cmain(){inti,j;i=3;j=i++;printf(“i=%d,j=%d\n”,i,j);}
運(yùn)算結(jié)果:i=4,j=3說明:
1.++,--運(yùn)算符只能用于變量,而不能用于常量和表達(dá)式。
如a++,b--是正確的,而5++,(x+y)--卻是錯(cuò)誤的。
2.++,--運(yùn)算符的結(jié)合方向是從右向左。例T3-8-4.cmain(){inti;i=3;printf(“i1=%d\n”,-i++);printf(“i2=%d\n”,i);}運(yùn)算結(jié)果:i1=-3i2=4例T3-8-5.cmain(){inti;i=3;printf(“i1=%d\n”,-++i);
printf(“i2=%d\n”,i);}運(yùn)算結(jié)果:i1=-4i2=45、有關(guān)表達(dá)式使用中的問題說明(1)C中的運(yùn)算符和表達(dá)式:
表達(dá)式中的子表達(dá)式的求值順序各編譯系統(tǒng)是有差別的。如對(duì)表達(dá)式:a=f1()+f2()
一般情況下是先調(diào)用f1(),再調(diào)用f2(),先后次序無(wú)關(guān)緊要,但有些情況,結(jié)果卻不同,編程時(shí)要注意所用的編譯系統(tǒng)。
我們主要是以TurboC加以討論。若inti;i=3;
又如表達(dá)式:(i++)+(i++)+(i++);有的系統(tǒng)的求值順序是先求第一個(gè),再求第二個(gè),最后求第三個(gè)子表達(dá)式,其結(jié)果是:
3+4+5=12,最后i的值為6
而在TurboC中卻有所不同:
其結(jié)果是:9,i自加三次以后為6。
例T3-8-6.cmain(){inti=3,j=3,k,q;k=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);printf(“i=%d,j=%d,k=%d,q=%d\n”,i,j,k,q);}
運(yùn)算結(jié)果:i=6,j=6,k=9,q=18
上述情況有時(shí)往往造成混淆,解決的方法:把各中間結(jié)果先計(jì)算送各中間變量,然后相加。例T3-8-7.cmain(){inti,j,x,y;
i=3;j=30;x=(i++)+(i++)+(++i)+(++i);y=(j--)+(j--)+(--j)+(--j);printf(“i=%d,j=%d,x=%d,y=%d\n”,i,j,x,y);}
運(yùn)算結(jié)果:i=7,j=26,x=20,y=112原因:X=3+3+7+7=20Y=30+30+26+26=112(2)在C語(yǔ)言中運(yùn)算符的確定
在由多個(gè)字符組成的表達(dá)式中,應(yīng)盡可能多地從左向右將若干個(gè)字符組成一個(gè)運(yùn)算符。如:i+++j其結(jié)合性是:(i++)+j
而不是:i+(++j)。(3)printf函數(shù)輸出實(shí)參的順序如:inti=3;printf(“%d,%d\n”,i,i++);
有的系統(tǒng)按從左到右的順序求值,輸出結(jié)果是:3,3
而TurboC是按從右到左順序求值,輸出結(jié)果是:4,3結(jié)論:
不寫別人甚至自己都看不懂的程序,也不寫那些不知道系統(tǒng)會(huì)怎樣運(yùn)行的程序3.9賦值運(yùn)算符和賦值表達(dá)式1、賦值運(yùn)算符“=”是賦值號(hào),也是賦值運(yùn)算符
功能:將賦值號(hào)右邊表達(dá)式的值賦給賦值號(hào)左邊的變量,賦值號(hào)同時(shí)含有計(jì)算的功能。如:a=3;b=x*y;
注意:
a,b變量中原來不管存放什么值,執(zhí)行賦值語(yǔ)句后,新值將取代舊值。2、類型轉(zhuǎn)換變量類型的不同,所接收的數(shù)據(jù)也是不同的,當(dāng)賦值運(yùn)算符兩側(cè)的數(shù)據(jù)類型不一致時(shí),在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。(1)實(shí)型數(shù)據(jù)賦給整型變量時(shí),舍去實(shí)型數(shù)據(jù)的小數(shù)部分。如:inti;i=3.56;結(jié)果i的值為3
(2)整型數(shù)據(jù)賦給實(shí)型變量時(shí),數(shù)值不值,但以浮點(diǎn)形式存放于內(nèi)存。如:
floata=23;先將23轉(zhuǎn)換成23.000000,然后送a中。
doubleb=23;先將23轉(zhuǎn)換為23.00000000000000,然后送b中。(3)double型數(shù)據(jù)賦給float變量
截取其前面的7位有效數(shù)字,存放到float單元,應(yīng)注意數(shù)值范圍不能溢出。如:floatf;doubled=123.45678e65;f=d;
由于數(shù)據(jù)溢出,f將得到錯(cuò)誤的值
float數(shù)據(jù)賦給double變量時(shí),數(shù)值不變,有效位擴(kuò)展到16位。(4)字符型數(shù)據(jù)賦給整型變量字符數(shù)據(jù)占一個(gè)字節(jié),整型數(shù)據(jù)占兩個(gè)字節(jié),字符數(shù)據(jù)存入整型變量的低8位,有兩種情況:①無(wú)符號(hào)字符型數(shù)據(jù)賦給整型變量時(shí):將其存放在整型變量的低8位中,而高位以0補(bǔ)齊T3-8-8.cmain(){inti;unsignedcharc;c=‘\376’;i=c;printf(“i=%d,c=%d\n”,i,c);}結(jié)果:i=254c=25411111110c=‘\376’i000000001111110②帶符號(hào)的字符型數(shù)據(jù)賦給整型變量時(shí)
若最高位為1(負(fù)數(shù)),則整型變量的高8位補(bǔ)1,若最高位為0(正數(shù))則整型變量高8位補(bǔ)0。例T3-8-9.cmain(){inti;charc;c=‘\376’;i=c;printf(“i=%d,c=%d\n”,i,c);}
運(yùn)行結(jié)果:i=-2,c=-211111110c=‘\376’i111111111111110(5)int,short,long型數(shù)據(jù)賦給char變量,則將其低8位賦給char型變量例T3-8-10.cmain(){inti=289;charc=‘a(chǎn)’;c=i;printf(“i=%d,c=%d\d”,i,c);}運(yùn)算結(jié)果:i=289,c=330000000100100001i=28900100001c=33(6)long型數(shù)據(jù)賦給int型變量,將long型數(shù)據(jù)的低16位賦給int型變量例T3-8-11.cmain(){inta;longb=65544;a=b;printf(“a=%d,b=%ld\n”,a,b);}運(yùn)算結(jié)果:a=8,b=65544a=8符號(hào)位b=655440000000000001000
00000000000000010000000000001000(7).將unsignedint型數(shù)據(jù)賦給long型變量時(shí)
①將unsignedint型數(shù)據(jù)送到longint型變量的低16位,longint的變量高16位補(bǔ)0
例T3-8-12main(){unsigneda=65535;longb;b=a;printf(“a=%u,b=%ld\n”,a,b);}11111111111111111111111111111111ab數(shù)值位0000000000000000符號(hào)位輸出:a=65535,b=65535
②若無(wú)符號(hào)數(shù)據(jù)賦給相同長(zhǎng)度的帶符號(hào)的變量時(shí),則原樣賦給。
Unsignedintint
unsignedshortshortint
unsignedlonglongint
要注意數(shù)據(jù)的有效位占據(jù)符號(hào)位例T3-8-13.cmain(){unsignedinta=65535;intb;b=a;printf(“a=%u,b=%d\n”,a,b);}運(yùn)算結(jié)果:a=65535,b=-11111111111111111符號(hào)位1111111111111111ab數(shù)值位(8)將帶符號(hào)的數(shù)賦給長(zhǎng)度相同的無(wú)符號(hào)變量過程:原樣賦給例T3-9.cmain(){unsignedinta;intb=-1;a=b;printf(“a=%u,b=%d\n”,a,b);}
11111111111111111111111111111111
x2n-1>x≥0
[x]補(bǔ)=
2n+x0>x≥-2n-1ab符號(hào)位數(shù)值位運(yùn)算結(jié)果:a=65535,b=-13、復(fù)合的賦值運(yùn)算符在賦值號(hào)前加其它運(yùn)算符,可以構(gòu)成復(fù)合運(yùn)算符。如:a=a+ba+=bx=x*(y+8)x*=y+8x=x%3x%=3
為了便于記憶,將賦值號(hào)左邊移到賦值號(hào)右邊,賦值號(hào)左邊再補(bǔ)上變量名。如:a+=b
a+
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度路燈照明設(shè)施安全監(jiān)測(cè)合同4篇
- 2025版龍崗區(qū)稅務(wù)局飲用水安全管理及培訓(xùn)服務(wù)協(xié)議4篇
- 二零二五年度房地產(chǎn)融資居間服務(wù)合同范本12篇
- 養(yǎng)殖場(chǎng)2025年度肉質(zhì)檢測(cè)與品質(zhì)提升合同3篇
- 二零二五版人工智能技術(shù)研發(fā)項(xiàng)目合作定金協(xié)議4篇
- 二零二五年新能源汽車充電樁兼職電工服務(wù)協(xié)議2篇
- 2025年度智慧城市路燈廣告資源合作開發(fā)合同4篇
- 二零二四停薪留職協(xié)議范本:企業(yè)戰(zhàn)略實(shí)施與員工權(quán)益3篇
- 2025年度煤炭運(yùn)輸安全培訓(xùn)與評(píng)估合同4篇
- 二零二五版城市軌道交通車輛運(yùn)營(yíng)維護(hù)服務(wù)合同3篇
- MOOC 電工學(xué)(電氣工程學(xué)概論)-天津大學(xué) 中國(guó)大學(xué)慕課答案
- 2019級(jí)水電站動(dòng)力設(shè)備專業(yè)三年制人才培養(yǎng)方案
- 室內(nèi)裝飾裝修施工組織設(shè)計(jì)方案
- 洗浴中心活動(dòng)方案
- 送電線路工程施工流程及組織措施
- 肝素誘導(dǎo)的血小板減少癥培訓(xùn)課件
- 韓國(guó)文化特征課件
- 抖音認(rèn)證承諾函
- 清潔劑知識(shí)培訓(xùn)課件
- 新技術(shù)知識(shí)及軍事應(yīng)用教案
- 高等數(shù)學(xué)(第二版)
評(píng)論
0/150
提交評(píng)論