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

下載本文檔

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

文檔簡介

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

2、,2,-2,-2,2. / 除法運(yùn)算,2,2.5 5.0為浮點數(shù),參加 % 運(yùn)算的兩個運(yùn)算數(shù)必須是整數(shù),3. + 加1 (自增運(yùn)算) 和 - -減 1(自減運(yùn)算),功能:將變量的值 加1 或 減 1,前綴運(yùn)算與后綴運(yùn)算的異同, 如果單獨(dú)對一個變量施加前綴或后綴運(yùn)算,運(yùn)算結(jié)果相同, 如果對變量施加了前綴或后綴運(yùn)算,同時參與其它運(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. 自動類型轉(zhuǎn)換規(guī)則 (關(guān)于算術(shù)表達(dá)式的數(shù)據(jù)類型的說明),兩個同類型的數(shù)據(jù)參加運(yùn)算,結(jié)果也是同類型;,兩個不同類型的數(shù)據(jù)參加運(yùn)算, C系統(tǒng)自動將它們轉(zhuǎn)換為較高級別進(jìn)行處理,結(jié)果也為較高級別。 即把長度較短的類型轉(zhuǎn)換為長度較長的類型,以保證不丟失精度。,類型級別為:,轉(zhuǎn)換規(guī)則

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

5、號位視為數(shù)值位 unsigned int long int 將unsigned的最高位位,視為符號位 int float 將int 用浮點表示 float double 將float的尾數(shù)和階碼分別 作為 double的尾數(shù)和階碼 符號擴(kuò)展:負(fù)數(shù)的高位全補(bǔ)1,正數(shù)的高位全補(bǔ)0 轉(zhuǎn)換規(guī)則:低位保持,高位補(bǔ)0或符號擴(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() /* 計算過程:*/ char ch=a; /* 計算(j+k) 值 18 long int */ int i=5; /* 計算(f*d) 值 18.0 double */ unsigned int j=6; /* 計算(f+i) 值 8.0 float */ long int k=12; /* 計算ch/i 值 19 int */ float f=3.0; /* 計算i*k 值 60 long int */ double d=6.0; /* 計算(j+k)*(f*d) 值 324.0 double*/ printf(%fn,ch/i+i*k-(j+k)*

7、(f*d)/(f+i); /* 計算(j+k)*(f*d)/(f+i) 值 40.5 double */ /* 計算ch/i+i*k 值 79 long int */ /* 計算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)鍵字必須用括號括??;, 對一個表達(dá)式進(jìn)行強(qiáng)制類型轉(zhuǎn)換時,表達(dá)式必須寫在 括號內(nèi);, 如果要將低精度轉(zhuǎn)換為高精度時,仍按表3.1的規(guī)則; 如果要將高精度轉(zhuǎn)換為底精度時,按 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 將最高位視為符號位 int unsigned char 截去int高24位,低8位按無符號處理 Short int (16位) char 截去int的高8位,低8位按有符號處理 int char 截去int的高24位,低8位按有符號處理 unsigned int int 將最高位視為符號位 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)算時,將賦值號右邊的運(yùn)算視為一個整體,賦值表達(dá)式,賦值號的左側(cè)必須是變量;,1. 賦值表達(dá)式的一般格式,變量 = 表達(dá)式,2. 關(guān)于賦值表達(dá)式的說明,賦值號左側(cè)變量的類型是整個賦值表達(dá)式的類型、左側(cè)變量的值是整個賦值表達(dá)式的值;,左側(cè)變量的類型與右側(cè)表達(dá)式的類型不一致時,先計算右側(cè)表達(dá)式的值,然后自動轉(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位按有符號處理 */ /* 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的符號位視為數(shù)值 位 */ printf(a=%d b=%u c=%dn,a,b,c); /* int 與unsigned int 處理 需要4個字節(jié) */ /* char 與int 型按有符號二進(jìn)制 補(bǔ)碼形式存儲*/ /* -1的補(bǔ)碼 11111111 11111111 11111111 11111111 */ /* a中存儲-1的補(bǔ)碼 11111111 11111111 11111111 11111111 */ /* b

12、中存儲 11111111 11111111 11111111 11111111 無符號數(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 逗號運(yùn)算(順序運(yùn)算) p44,一、逗號運(yùn)算符,逗號運(yùn)算符 ,,結(jié)合方向: 自左至右,優(yōu)先級: 最低,二、逗號表達(dá)式,一般格式,表達(dá)式1 , 表達(dá)式

13、2 , , 表達(dá)式n,逗號表達(dá)式的值,從左到右逐個計算各表達(dá)式的值,最后表達(dá)式 n 的值作為整個逗號表達(dá)式的值,逗號運(yùn)算符的作用是連接多個數(shù)據(jù)項,而將他們作為一個整 體來處理。例在變量說明與輸出函數(shù)中,逗號作為分隔符,將若干 數(shù)據(jù)項分開,其目的是將他們作為一個整體。逗號也可將若干個 獨(dú)立的表達(dá)式隔開,同樣將他們作為一個整體處理。,例如 p44 a=3*5,a*4,a+5 中 (a的初始值為5) a=3*5 為第一個表達(dá)式 ,表達(dá)式的值為15 ,即a的值為15; a*4為第二個表達(dá)式, 值為60, a的值不變,仍為15; a+5為第三個表達(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 為第一個表達(dá)式 ,值為15; a*4為第二個表達(dá)式,值為20; a+5為第三個表達(dá)式,值為10。 最后 a=(3*5,a*4,a+5)表達(dá)式的值為10,即a的值為10 。 (dhys2.c) (dhys3.c),三、逗號表達(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)算時自右向左,先計算+c, c的值6 ,然后計算c+8 值14, 再計算c=c+(c+) ,c的值12 。 先執(zhí)行printf,輸出時自左向右 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) 是逗號表達(dá)式。先計算c+=c+ c的值10后自增 c=11 再計算c+8值19,最后計算+c,c的值 12 即是整個逗號表達(dá)式值 12 */ c=5; printf(%dn,c+=c+,c+8,+c); /* 運(yùn)

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

17、用邏輯運(yùn)算符連接兩個關(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; /* 先計算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 為假,對于邏輯”與”,只要有一個運(yùn)算量為0,整個邏輯表達(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的各個二進(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); ,對無符號數(shù),左移n位相當(dāng)于該數(shù)乘2n。 對補(bǔ)碼表示的有符號數(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等.壓縮文件請下載最新的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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論