第3章數(shù)據(jù)運(yùn)算 第2版 08屆.ppt_第1頁(yè)
第3章數(shù)據(jù)運(yùn)算 第2版 08屆.ppt_第2頁(yè)
第3章數(shù)據(jù)運(yùn)算 第2版 08屆.ppt_第3頁(yè)
第3章數(shù)據(jù)運(yùn)算 第2版 08屆.ppt_第4頁(yè)
第3章數(shù)據(jù)運(yùn)算 第2版 08屆.ppt_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章 數(shù)據(jù)運(yùn)算,3.1 算術(shù)運(yùn)算 3.2 賦值運(yùn)算 3.3 逗號(hào)運(yùn)算(順序運(yùn)算) 3.4 關(guān)系運(yùn)算和邏輯運(yùn)算 3.5 測(cè)試數(shù)據(jù)長(zhǎng)度運(yùn)算符 sizeof 3.6 位運(yùn)算 3.7 常用數(shù)學(xué)函數(shù),運(yùn)算規(guī)則,運(yùn)算符的結(jié)合方向 即同級(jí)運(yùn)算符相鄰時(shí)的運(yùn)算次序,運(yùn)算符的優(yōu)先級(jí) 即不同級(jí)運(yùn)算符相鄰時(shí)的運(yùn)算次序,重點(diǎn)掌握:,3.1 算術(shù)運(yùn)算 p270 附錄1 運(yùn)算符集,運(yùn)算符必須連接兩(一)個(gè)運(yùn)算,稱為二(一) 元運(yùn)算,一. 算術(shù)運(yùn)算符的運(yùn)算規(guī)則說明,兩個(gè)整數(shù)相除,結(jié)果為整數(shù)(截尾取整) 兩個(gè)浮點(diǎn)數(shù)相除,結(jié)果為浮點(diǎn)數(shù),1. % 取余運(yùn)算(求模運(yùn)算),a%b 是指兩數(shù)的絕對(duì)值做整除得到的余數(shù),符號(hào)與a 相同,2

2、,2,-2,-2,2. / 除法運(yùn)算,2,2.5 5.0為浮點(diǎn)數(shù),參加 % 運(yùn)算的兩個(gè)運(yùn)算數(shù)必須是整數(shù),3. + 加1 (自增運(yùn)算) 和 - -減 1(自減運(yùn)算),功能:將變量的值 加1 或 減 1,前綴運(yùn)算與后綴運(yùn)算的異同, 如果單獨(dú)對(duì)一個(gè)變量施加前綴或后綴運(yùn)算,運(yùn)算結(jié)果相同, 如果對(duì)變量施加了前綴或后綴運(yùn)算,同時(shí)參與其它運(yùn)算,則 前綴運(yùn)算:先自增(減)后取值(后參加運(yùn)算) 后綴運(yùn)算:先取值 (先參加運(yùn)算) 后自增(減),例3.1 P38 L3-1.c,zz1.c,zz2.c,例:3.2 p39 L3-2.c,二. 算術(shù)表達(dá)式,1. 定義 書寫規(guī)則 p38,用算術(shù)運(yùn)算符連接數(shù)值型運(yùn)算量而得到

3、的式子。,例: -4.5*5/3+2.4,(a+)*b%c,2. 算術(shù)表達(dá)式的數(shù)據(jù)類型,即算術(shù)表達(dá)式的運(yùn)算結(jié)果的類型。,例: 3+7%4-5/3 結(jié)果為 int 型 1.0/2.0*2.3 結(jié)果為 double 型 3+2.5*3 結(jié)果為 ? 型 (參加運(yùn)算數(shù)據(jù)類型不同) a+5 結(jié)果為 ? 型 (參加運(yùn)算數(shù)據(jù)類型不同),3. 自動(dòng)類型轉(zhuǎn)換規(guī)則 (關(guān)于算術(shù)表達(dá)式的數(shù)據(jù)類型的說明),兩個(gè)同類型的數(shù)據(jù)參加運(yùn)算,結(jié)果也是同類型;,兩個(gè)不同類型的數(shù)據(jù)參加運(yùn)算, C系統(tǒng)自動(dòng)將它們轉(zhuǎn)換為較高級(jí)別進(jìn)行處理,結(jié)果也為較高級(jí)別。 即把長(zhǎng)度較短的類型轉(zhuǎn)換為長(zhǎng)度較長(zhǎng)的類型,以保證不丟失精度。,類型級(jí)別為:,轉(zhuǎn)換規(guī)則

4、 見p40 表3.1 (注意:符號(hào)擴(kuò)展) p39 例3.3 (L3-3.c),3.5 測(cè)試數(shù)據(jù)長(zhǎng)度運(yùn)算符 sizeof,一般格式,例3.13 P49 L3-13.c,sizeof(exp),功能:計(jì)算出exp所占字節(jié)數(shù)。,表3.1 低精度類型轉(zhuǎn)換高精度類型 見p40,低精度類型 高精度類型 轉(zhuǎn)換說明 Char unsigned char 將char的符號(hào)位視為數(shù)值位 Char int (32位) 將char的8位作為int的低8位, 高24位符號(hào)擴(kuò)展 unsigned char int 將char的8位作為int的低8位,高24位補(bǔ)0 int unsigned int (32位) 將int的符

5、號(hào)位視為數(shù)值位 unsigned int long int 將unsigned的最高位位,視為符號(hào)位 int float 將int 用浮點(diǎn)表示 float double 將float的尾數(shù)和階碼分別 作為 double的尾數(shù)和階碼 符號(hào)擴(kuò)展:負(fù)數(shù)的高位全補(bǔ)1,正數(shù)的高位全補(bǔ)0 轉(zhuǎn)換規(guī)則:低位保持,高位補(bǔ)0或符號(hào)擴(kuò)展,/* L3-3.c */ main() char ch=a; int i=5; unsigned int j=6; long int k=12; float f=3.0; double d=6.0; printf(%fn,ch/i+i*k-(j+k)*(f*d)/(f+i); ,/

6、* L3-3.c */ main() /* 計(jì)算過程:*/ char ch=a; /* 計(jì)算(j+k) 值 18 long int */ int i=5; /* 計(jì)算(f*d) 值 18.0 double */ unsigned int j=6; /* 計(jì)算(f+i) 值 8.0 float */ long int k=12; /* 計(jì)算ch/i 值 19 int */ float f=3.0; /* 計(jì)算i*k 值 60 long int */ double d=6.0; /* 計(jì)算(j+k)*(f*d) 值 324.0 double*/ printf(%fn,ch/i+i*k-(j+k)*

7、(f*d)/(f+i); /* 計(jì)算(j+k)*(f*d)/(f+i) 值 40.5 double */ /* 計(jì)算ch/i+i*k 值 79 long int */ /* 計(jì)算ch/i+i*k-(j+k)*(f*d)/(f+i) 值 38.5 double */,4. 強(qiáng)制類型轉(zhuǎn)換,一般格式,(類型關(guān)鍵字) (表達(dá)式),功能:將表達(dá)式的值強(qiáng)制轉(zhuǎn)換為指定的類型。,使用說明, 類型關(guān)鍵字必須用括號(hào)括??;, 對(duì)一個(gè)表達(dá)式進(jìn)行強(qiáng)制類型轉(zhuǎn)換時(shí),表達(dá)式必須寫在 括號(hào)內(nèi);, 如果要將低精度轉(zhuǎn)換為高精度時(shí),仍按表3.1的規(guī)則; 如果要將高精度轉(zhuǎn)換為底精度時(shí),按 p41 表3.2的規(guī)則 。,例:(int)6.

8、7 (float)(3/2) (int)(3.0/2.0),結(jié)果為: 6 1.5 1,例3.4 (P41 L3-4.c),表3.2 高精度類型向低精度類型轉(zhuǎn)換規(guī)則 見p41,高精度類型 低精度類型 轉(zhuǎn)換說明 unsigned char char 將最高位視為符號(hào)位 int unsigned char 截去int高24位,低8位按無符號(hào)處理 Short int (16位) char 截去int的高8位,低8位按有符號(hào)處理 int char 截去int的高24位,低8位按有符號(hào)處理 unsigned int int 將最高位視為符號(hào)位 float int 截去float的小數(shù)部分 double f

9、loat 將double 的多余小數(shù)部分四舍五入 轉(zhuǎn)換規(guī)則:截高位,3.2 賦值運(yùn)算,例: a+=3;相當(dāng)于 a=a+3; a-=3;相當(dāng)于 a=a-3; b*=5;相當(dāng)于 b=b*5; b/=3;相當(dāng)于 b=b/3; a%=3*4; 相當(dāng)于 a=a%(3*4); 注意:復(fù)合賦值運(yùn)算時(shí),將賦值號(hào)右邊的運(yùn)算視為一個(gè)整體,賦值表達(dá)式,賦值號(hào)的左側(cè)必須是變量;,1. 賦值表達(dá)式的一般格式,變量 = 表達(dá)式,2. 關(guān)于賦值表達(dá)式的說明,賦值號(hào)左側(cè)變量的類型是整個(gè)賦值表達(dá)式的類型、左側(cè)變量的值是整個(gè)賦值表達(dá)式的值;,左側(cè)變量的類型與右側(cè)表達(dá)式的類型不一致時(shí),先計(jì)算右側(cè)表達(dá)式的值,然后自動(dòng)轉(zhuǎn)換為左側(cè)變量的

10、類型。轉(zhuǎn)換規(guī)則如下: 低精度類型高精度類型 見P40 表3.1 高精度類型低精度類型 見P41 表3.2 (gxdzh.c),P43 例 3.5 (L3-5.c) 例 3.6 (L3-6.c) 例 3.7 (L3-7.c ),高精度類型低精度類型 gxdzh.c main() int i=321; char ch; ch=i; printf(i=%d ch=%dn,i,ch); /* int char 截去int的高24位,低8位按有符號(hào)處理 */ /* i=00000000 00000000 00000001 01000001 321 */ /* ch=01000001 65 */ 輸出 i

11、=321 ch=65,/* L3-6.c */ main() int a=-1; unsigned int b; b=a; /* int unsigned int 將int的符號(hào)位視為數(shù)值 位 */ printf(a=%d b=%u c=%dn,a,b,c); /* int 與unsigned int 處理 需要4個(gè)字節(jié) */ /* char 與int 型按有符號(hào)二進(jìn)制 補(bǔ)碼形式存儲(chǔ)*/ /* -1的補(bǔ)碼 11111111 11111111 11111111 11111111 */ /* a中存儲(chǔ)-1的補(bǔ)碼 11111111 11111111 11111111 11111111 */ /* b

12、中存儲(chǔ) 11111111 11111111 11111111 11111111 無符號(hào)數(shù)=4294967295 */,/* L3-7.c */ main() int a=12; a+=a-=a*a; printf(%d n,a); /* 賦值運(yùn)算自右至左 */ /* a-=a*a 相當(dāng)于 a=(a-a*a) a=(12-12*12) a=-132 */ /* a+=a 相當(dāng)于 a=(a+a) a=(-132+(-132) a=-264 */,3.3 逗號(hào)運(yùn)算(順序運(yùn)算) p44,一、逗號(hào)運(yùn)算符,逗號(hào)運(yùn)算符 ,,結(jié)合方向: 自左至右,優(yōu)先級(jí): 最低,二、逗號(hào)表達(dá)式,一般格式,表達(dá)式1 , 表達(dá)式

13、2 , , 表達(dá)式n,逗號(hào)表達(dá)式的值,從左到右逐個(gè)計(jì)算各表達(dá)式的值,最后表達(dá)式 n 的值作為整個(gè)逗號(hào)表達(dá)式的值,逗號(hào)運(yùn)算符的作用是連接多個(gè)數(shù)據(jù)項(xiàng),而將他們作為一個(gè)整 體來處理。例在變量說明與輸出函數(shù)中,逗號(hào)作為分隔符,將若干 數(shù)據(jù)項(xiàng)分開,其目的是將他們作為一個(gè)整體。逗號(hào)也可將若干個(gè) 獨(dú)立的表達(dá)式隔開,同樣將他們作為一個(gè)整體處理。,例如 p44 a=3*5,a*4,a+5 中 (a的初始值為5) a=3*5 為第一個(gè)表達(dá)式 ,表達(dá)式的值為15 ,即a的值為15; a*4為第二個(gè)表達(dá)式, 值為60, a的值不變,仍為15; a+5為第三個(gè)表達(dá)式, 值為20, a的值不變,仍為15; 最后 a=3*

14、5,a*4,a+5表達(dá)式的值為20 ,a的值為15 。 (dhys1.c) 如果將a=3*5,a*4,a+5改寫為 a=(3*5,a*4,a+5) (a的初始值為5) 3*5 為第一個(gè)表達(dá)式 ,值為15; a*4為第二個(gè)表達(dá)式,值為20; a+5為第三個(gè)表達(dá)式,值為10。 最后 a=(3*5,a*4,a+5)表達(dá)式的值為10,即a的值為10 。 (dhys2.c) (dhys3.c),三、逗號(hào)表達(dá)式 的應(yīng)用 P45 自學(xué),* 例 L3-8-1.c L3-8-2.c,例:3.8 p44 L3-8.c,/* L3-8.c */ main() int c=5; printf(%d,%d,%dn,c+

15、=c+,c+8,+c); /* 運(yùn)算時(shí)自右向左,先計(jì)算+c, c的值6 ,然后計(jì)算c+8 值14, 再計(jì)算c=c+(c+) ,c的值12 。 先執(zhí)行printf,輸出時(shí)自左向右 2 14 6 輸出后c自增 c=13 */ printf(“c= %dn”,c); /* 輸出 c=13 */ c=5; printf(%dn,(c+=c+,c+8,+c); /*(c+=c+,c+8,+c) 是逗號(hào)表達(dá)式。先計(jì)算c+=c+ c的值10后自增 c=11 再計(jì)算c+8值19,最后計(jì)算+c,c的值 12 即是整個(gè)逗號(hào)表達(dá)式值 12 */ c=5; printf(%dn,c+=c+,c+8,+c); /* 運(yùn)

16、算時(shí)同樣自右向左 但只有一個(gè)格式轉(zhuǎn)換說明符%d, 因此只輸出c+=c+的值 值12 */ printf(*n); c=5; printf(5. %d,%d,%dn,c+=c+,c+8,c+); /* 運(yùn)算時(shí)自右向左,先計(jì)算c+ c值5, 然后計(jì)算c+8 值13, 再計(jì)算c=c+(c+) c值10 。輸出時(shí)自左向右 10 13 5 */ printf(6. %dn,c); /* 輸出后c自增2次 c=12 */ ,3.4 關(guān)系運(yùn)算和邏輯運(yùn)算,一.關(guān)系表達(dá)式、邏輯表達(dá)式,1.關(guān)系表達(dá)式,用關(guān)系運(yùn)算符連接兩個(gè)算術(shù)表達(dá)式或賦值表達(dá)式,則構(gòu)成關(guān)系表達(dá)式。,例: 3+6=7 a+b=10,2.邏輯表達(dá)式,

17、用邏輯運(yùn)算符連接兩個(gè)關(guān)系表達(dá)式,構(gòu)成邏輯表達(dá)式。,例: x=0 y=z=x+; /* y=z=8 x=9 */ printf(“%d n ,(xy)=(z=x-1); /* (98)=(z=9-1=8) 1=8 值為假 0 輸出0 */ x=y=z; /* 先計(jì)算y=z 值為1,然后賦值 x=1 */ printf(“x=%d n ”,x); /* 輸出 x=1 */ printf(%dn,x+=+y-z-); /* x+取值為1 ,+y 值為9 z-取值為8 +y-z-即9-8 值為1, 1=1 值為1 輸出 1 */ ,/* 例3.10 P48 關(guān)系運(yùn)算和邏輯運(yùn)算 L3-10.c */ #

18、 define EOF 1 main() int a=3,b=4,c=5; printf(%dn,3*(a+b)c /* 表達(dá)式 3*(a+b)c (m=ab) /* ab值為0 即m=0 為假,對(duì)于邏輯”與”,只要有一個(gè)運(yùn)算量為0,整個(gè)邏輯表達(dá)式的值即為0,(m=ab) c=a ,2.按位 或 運(yùn)算 | 運(yùn)算規(guī)則同 |,3.按位 異或運(yùn)算 規(guī)則 全真全假值為假,一真一假值為真,4.按位取 反 運(yùn)算 運(yùn)算規(guī)則同 !,運(yùn)行結(jié)果: c=64, d=121 e=57, f=-66,/*按位邏輯運(yùn)算 p51.c */ main() int a=65, b=120, c,d,e,f; c=a /* 65

19、 =00000000 00000000 00000000 01000001 */ /* 120=00000000 00000000 00000000 01111000 */ /* char c=A,d,e; b=a2; d=c1;e=c2; printf(b=%d c=%d n”,b,c ); printf(d=%d e=%dn,d,e,); ,設(shè)a、n均為整型數(shù)據(jù),則 an 表示 將a的各個(gè)二進(jìn)制位順序左移n位,右端空出的位補(bǔ)0,移出左端的位舍棄。,/* 左移位運(yùn)算 p51-1.c */ main() int a=64, b; /* a=00000000 00000000 00000000

20、01000000*/ char c=A,d,e; /* c=A =65 =01000001 */ b=a2; /* b=00000000 00000000 00000001 00000000 =256*/ d=c1; /* d=10000010 =-126 */ e=c2; /* e=00000100 = 4 */ printf(b=%d c=%d d=%d e=%dn,b,c,d,e); ,對(duì)無符號(hào)數(shù),左移n位相當(dāng)于該數(shù)乘2n。 對(duì)補(bǔ)碼表示的有符號(hào)數(shù)也可能相當(dāng)于 該數(shù)乘2n ,也可能不是。,運(yùn)行結(jié)果: b=256 (64*22) c=65 d=-126 e=4,2.右移位運(yùn)算 (c 采用算術(shù)

21、右移),例: main() (p52.c) int a=64, b=-88, c,d; c=a2; d=b3; printf(c=%d n d=%dn,c,d); ,運(yùn)行結(jié)果: c=16 d=-11,采用算術(shù)右移n位,相當(dāng)于該數(shù)除以2n。 邏輯右移:不管是正數(shù)還是負(fù)數(shù)左端空出的位一律補(bǔ)0 。,/* 右移位運(yùn)算 p52.c */ main() int a=64, b=-88, c,d; c=a2; d=b3; printf(c=%d nd=%dn,c,d); /* a =00000000 00000000 00000000 01000000 =64 */ /* b =11111111 11111

22、111 11111111 10101000 =-88 */ /* c =00000000 00000000 00000000 00010000 =16 */ /* d =11111111 11111111 11111111 11110101 =-11 */,三. 位操作運(yùn)算符組成的復(fù)合賦值運(yùn)算符, /* a=10=00000000 00001010 */ c1=a,c2=b; /* b=11=00000000 00001011 */ a ,/* 例 3.15 將任意整數(shù)x的后6位全部置0,其余各位不變 如 x=95=00000000 00000000 00000000 01011111 變化后 00000000 00000000 00000000 01000000 main() L3-15.c p53 */ int x; scanf(%d, /* 輸出 x2=64 x=100 */ /* x=95=00000000 00000000 00000000 01011111 */ /* 077=00000000 00000000 00000000 00111111 077=11111111 11111111

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論