C語(yǔ)言數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第1頁(yè)
C語(yǔ)言數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第2頁(yè)
C語(yǔ)言數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第3頁(yè)
C語(yǔ)言數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第4頁(yè)
C語(yǔ)言數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論