數(shù)據(jù)類型、運(yùn)算符號與表達(dá)式ppt課件_第1頁
數(shù)據(jù)類型、運(yùn)算符號與表達(dá)式ppt課件_第2頁
數(shù)據(jù)類型、運(yùn)算符號與表達(dá)式ppt課件_第3頁
數(shù)據(jù)類型、運(yùn)算符號與表達(dá)式ppt課件_第4頁
數(shù)據(jù)類型、運(yùn)算符號與表達(dá)式ppt課件_第5頁
已閱讀5頁,還剩111頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第3章章 數(shù)據(jù)類型、運(yùn)算符號與表達(dá)式數(shù)據(jù)類型、運(yùn)算符號與表達(dá)式重點(diǎn)n預(yù)備知識預(yù)備知識: :信息在計算機(jī)中的表示信息在計算機(jī)中的表示n數(shù)據(jù)類型和常量、變量數(shù)據(jù)類型和常量、變量n定義和使用語法)定義和使用語法)n在計算機(jī)中的存儲方式在計算機(jī)中的存儲方式C C的低級語言特性)的低級語言特性)n運(yùn)算符的種類、優(yōu)先級和結(jié)合性運(yùn)算符的種類、優(yōu)先級和結(jié)合性n表達(dá)式的類型和表達(dá)式值表達(dá)式的類型和表達(dá)式值信息在計算機(jī)系統(tǒng)中的表示信息在計算機(jī)系統(tǒng)中的表示n數(shù) 制怎樣表示一個數(shù))十進(jìn)制十進(jìn)制例:(201910 =(1103+9102+9101+910010二進(jìn)制 一般形式為: (N2 =(bn-1bn-2b 1b

2、02 = (bn-12n-1bn-22n-2b121b020)10例:(10111012 = (126+025+124+123+122+021+12010 =(64+0+16+8+4+0+110 =(9310數(shù)值越大,位數(shù)越多,讀寫不方便,容易出錯!八進(jìn)制 例:(1288=(182+281+88010 =(64+16+810 =(8810十六進(jìn)制 例:(5D16=(5161+1316010 =(80+1310 =(9310DIY二進(jìn)制與八進(jìn)制、十六進(jìn)制之間的轉(zhuǎn)換 (1010111001012 =(101,011,100,1012=(53458(65748 =(110,101,111,1002=

3、(1101011111002二進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換四位二進(jìn)制數(shù)對應(yīng)一位十六進(jìn)制數(shù)。(101110101102 =(0101 1101 01102 =(5D616十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制例:求21710 =()2 解: 2 217 余1 b0 2 108 余0 b1 2 54 余0 b2 2 27 余1 b3 2 13 余1 b4 2 6 余0 b5 2 3 余1 b6 2 1 余1 b7 0(21710 =(110110012例:求0.312510 =( )2 解: 0.3125 2 = 0.625 整數(shù)為0 b- 1 0.625 2 = 1.25 整數(shù)為1 b- 2 0.

4、25 2 = 0. 5 整數(shù)為0 b- 3 0. 5 2 = 1.0 整數(shù)為1 b- 4 說明:有時可能無法得到0的結(jié)果,這時應(yīng)根據(jù)轉(zhuǎn)換精度的要求適當(dāng)取一定位數(shù)。小數(shù)部分的轉(zhuǎn)換:乘2取整法。(0.312510 =(0.01012幾種計數(shù)進(jìn)制數(shù)的對照表十進(jìn)制二進(jìn)制八進(jìn)制十六進(jìn)制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F二進(jìn)制數(shù)的運(yùn)算 二進(jìn)制加法二進(jìn)制加法二進(jìn)制減法二進(jìn)制減法 例例2: 2:

5、 求求10101010B10101010B10101B10101B。 解解: : 被減數(shù)被減數(shù) 10101010 10101010 減數(shù)減數(shù) 10101 10101 借位借位 ) 00101010) 00101010 差差 10010101 10010101 則則10101010B10101010B10101B10101B10010101B10010101B。二進(jìn)制乘法二進(jìn)制乘法二進(jìn)制除法二進(jìn)制除法二進(jìn)制數(shù)的邏輯運(yùn)算 1.“與運(yùn)算(AND) “與運(yùn)算又稱邏輯乘,運(yùn)算符為或?!芭c運(yùn)算的規(guī)則如下: 000 01100 111 例5: 若二進(jìn)制數(shù)X10101111B,Y01011110B,求 XY。

6、 10101111 01011110 00001110 則XY00001110B。 2. “或運(yùn)算(OR) “或運(yùn)算又稱邏輯加,運(yùn)算符為或?!盎蜻\(yùn)算的規(guī)則如下: 000 01101 111 例6: 若二進(jìn)制數(shù)X10101111B,Y01011110B,求X Y。 10101111 01011110 11111111 則XY11111111B。 3.“非運(yùn)算(NOT) “非運(yùn)算又稱邏輯非,如變量A的“非運(yùn)算記作 。“非運(yùn)算的規(guī)則如下: 例7: 若二進(jìn)制數(shù)A10101111B,求 。 01010000B 由此可見,邏輯“非可使A中各位結(jié)果均發(fā)生反變化,即0變1,1變0。 A1001AA101011

7、1B 4.“異或運(yùn)算(XOR) “異或運(yùn)算的運(yùn)算符為或,其運(yùn)算規(guī)則如下: 0 00 0 11 01 1 10 例8: 若二進(jìn)制數(shù)X10101111B,Y01011110B,求 X Y。 10101111 01011110 11110001 則X Y11110001B。 數(shù)數(shù) 值怎樣用值怎樣用0和和1表示數(shù)的值)表示數(shù)的值)n余3碼帶符號數(shù)帶符號數(shù)例如:N11011, N2-1011在計算機(jī)中用8位二進(jìn)制數(shù)可分別表示為: D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0符號 數(shù)值部分原碼、補(bǔ)碼與反碼原碼、補(bǔ)碼與反碼n補(bǔ)碼補(bǔ)碼0 03 36 69 95

8、 54 42 21 17 78 810101111刻度盤壞了,只能順時針撥動指針刻度盤壞了,只能順時針撥動指針0 03 36 69 95 54 42 21 17 78 810101111能作減法,但結(jié)果不能為負(fù)數(shù)能作減法,但結(jié)果不能為負(fù)數(shù)怎樣讓加法器的計算結(jié)果可以有負(fù)數(shù)怎樣讓加法器的計算結(jié)果可以有負(fù)數(shù)0 03 36 69 96 65 54 43 32 21 15 54 42 21 17 78 8101011111 12 23 34 45 50 0問題問題0 01281282552551281281 10 0127127127127129129127127怎樣求補(bǔ)碼怎樣求補(bǔ)碼反碼反碼例子例子X2

9、反10110011BX2補(bǔ)X反110110100B補(bǔ)碼的運(yùn)算規(guī)則與溢出判別補(bǔ)碼的運(yùn)算規(guī)則與溢出判別,求補(bǔ)運(yùn)算,就可得到負(fù)數(shù)的原碼結(jié)果。例2: 用補(bǔ)碼求X+Y 其中 X37 Y51。解: 假設(shè)X補(bǔ)00100101, Y補(bǔ)00110011,可得 X+Y補(bǔ)X補(bǔ)+Y補(bǔ) 00100101+0011001101011000由于符號位為0是正數(shù),所以 X+Y原X+Y補(bǔ)01011000 那么 X+Y(01011000)288例3: 用補(bǔ)碼求X-Y X37 Y51 。解: 假設(shè)-Y補(bǔ)11001101,可得 X-Y補(bǔ)X補(bǔ)+-Y補(bǔ) 00100101+1100110111110010由于符號位為1是負(fù)數(shù),所以 X-Y

10、原X-Y補(bǔ)補(bǔ)10001110那么 X-Y-(00001110)2-14溢出的判別溢出的判別當(dāng)兩個正數(shù)補(bǔ)碼相加時 若數(shù)值部分之和大于2n-1,則數(shù)值部分必有進(jìn)位CP1;而符號位卻無進(jìn)位CS0。這時CSCP的狀態(tài)為“01”,發(fā)生正溢出。 當(dāng)兩個負(fù)數(shù)補(bǔ)碼相加時 若數(shù)值部分絕對值之和大于2n-1,則數(shù)值部分補(bǔ)碼之和必小于2n-1,CP0;而符號位肯定有進(jìn)位CS1,這時CSCP的狀態(tài)為“10”,發(fā)生負(fù)溢出。 當(dāng)不發(fā)生溢出時,CS和CP的狀態(tài)是相同的,即CSCP的狀態(tài)為“00或“11”。 例 7: 01011001 (+89) 10010010 (-110) 01101100 (+108) 1010010

11、0 (-92)+)011110000 (進(jìn)位) +)1 00000000 (進(jìn)位) 011000101 (-59) 1 00110110 (+54) CS0,CP1,正溢出 CS1,CP0,負(fù)溢出 例8: 00110010 (+50) 11101100 (-20) 01000110 (+70) 11100010 (-30)+) 000001100 (進(jìn)位) +)1 11000000 (進(jìn)位) 0 01111000(+120) 1 11001110(-50) CS0,CP0,無溢出 CS1,CP1,無溢出例9: 01010101 (+85) 10111100 (-68) 11011101 (-3

12、5) 00011101 (+29) +)1 10111010 (進(jìn)位) +)0 01111000 (進(jìn)位) 1 00110010(+50) 0 11011001(-39) CS1,CP1,無溢出 CS0,CP0,無溢出 小數(shù)的表示小數(shù)的表示n NM2E 數(shù)符數(shù)符, ,表示數(shù)的正、負(fù)表示數(shù)的正、負(fù)尾數(shù)尾數(shù)階碼階碼階符階符IEEE754標(biāo)準(zhǔn)標(biāo)準(zhǔn) 說明: 1) 約定小數(shù)點(diǎn)左邊隱含有一位1,實(shí)際上使尾數(shù)的有效位數(shù)為24位,即尾數(shù)為1.M 2) 偏移值 = 2 (尾數(shù)位數(shù) - 1) 1。必須從指數(shù)中減去偏移值,才能確定有符號指數(shù)的實(shí)際值。 123.456文字各種形狀)文字各種形狀)點(diǎn)陣描繪出了漢字字形,

13、漢字的點(diǎn)陣字形在計算機(jī)中稱為字模。如圖1-8表示漢字“中的1616點(diǎn)陣字模。圖形信息在數(shù)字系統(tǒng)中的表示圖形信息在數(shù)字系統(tǒng)中的表示 信息在計算機(jī)系統(tǒng)中的存儲信息在計算機(jī)系統(tǒng)中的存儲u內(nèi)存以字節(jié)為單元組成u每個字節(jié)有一個地址u一個字節(jié)一般由8個二進(jìn)制位組成u每個二進(jìn)制位的值是0或1012345678910.127012345670 1 1 1 1 1 1 1計算機(jī)內(nèi)存、字節(jié)、位和地址計算機(jī)內(nèi)存、字節(jié)、位和地址C語言中的數(shù)和量語言中的數(shù)和量nC的數(shù)據(jù)是以某種類型的形式出現(xiàn)的n程序中用到的所有數(shù)據(jù)都必須指定類型nC語言的數(shù)據(jù)有常量和變量之分n常量和變量都分別屬于某一數(shù)據(jù)類型n數(shù)據(jù)類型總表數(shù)據(jù)類型總表C

14、數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型void定義類型typedef字符類型char枚舉類型enum整 型實(shí)型單精度型float雙精度型double數(shù)組結(jié)構(gòu)體struct共用體union短整型短整型short長整型long整型intn基本數(shù)據(jù)類型基本數(shù)據(jù)類型類型符號關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型實(shí)型有無signed int16-3276832767signed short int16-3276832767signed long int32-2147483648214748364716unsigned int0655353204294967295unsigned long intunsig

15、ned short int16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127無unsigned char80255常量 (Constants)n常量常量n程序運(yùn)行過程中,其值不能被改變的量程序運(yùn)行過程中,其值不能被改變的量n例如:例如:1212、-6.7-6.7、aan直接常量直接常量n符號常量符號常量 (Symbolic Constants) (Symbolic Constants)n用一個標(biāo)識符代表的常量用一個標(biāo)識符代表的常量n相當(dāng)于把標(biāo)識符用一個常量簡單替換下來相當(dāng)于把標(biāo)識符用一個常量簡單替換下來n含義清楚

16、,一改全改含義清楚,一改全改n習(xí)慣上符號常量名用大寫字母習(xí)慣上符號常量名用大寫字母常量示例#define PRICE 30#define NUM 12void main() . . total = NUM * PRICE; total2 = 84 * PRICE2; printf(total=%d, total); . .不會被替換= total = 12 * 30;常量符號常量u概念:其值可以改變的量概念:其值可以改變的量u變量名與變量值變量名與變量值u變量定義的一般格式:變量定義的一般格式:u 數(shù)據(jù)類型數(shù)據(jù)類型 變量變量11,變量,變量2 2,變量,變量n;n;u變量初始化變量初始化 定義

17、時賦初值定義時賦初值 例: int a,b,c; float data;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標(biāo)識符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1;u變量的使用:先定義,后使用變量的使用:先定義,后使用例1 int student; stadent=19; 例2 float a,b,c; c=a%b; u變量定義位置:一般放在函數(shù)開頭變量定義位置:一般放在函數(shù)開頭main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“da

18、ta=%fn”,data);變量定義可執(zhí)行語句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);變量(語法)編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元.硬件地址main() int a=1, b=-5,c; c=a; printf(“%d”,a);0000H0001H2字節(jié)abc變量名符號地址).內(nèi)存隨機(jī)數(shù)000000010000000011111011111111110002H0003H10010001001101011111101111111111變量(實(shí)質(zhì))標(biāo)識符 (Identifie

19、r)n標(biāo)識符標(biāo)識符n變量名、符號常量名、函數(shù)名、類型名變量名、符號常量名、函數(shù)名、類型名n標(biāo)識符命名規(guī)范標(biāo)識符命名規(guī)范n由字母、數(shù)字、下劃線由字母、數(shù)字、下劃線(Underscore, _)(Underscore, _)組成組成n第一個字符必須為字母或下劃線第一個字符必須為字母或下劃線nC C語言標(biāo)識符是大小寫敏感的語言標(biāo)識符是大小寫敏感的n不能與不能與C C語言關(guān)鍵字語言關(guān)鍵字(Keywords)(Keywords)反復(fù)反復(fù)n標(biāo)識符的名稱一般應(yīng)具有一定的含義標(biāo)識符的名稱一般應(yīng)具有一定的含義n一般不要使用以下劃線開頭的標(biāo)識符一般不要使用以下劃線開頭的標(biāo)識符標(biāo)識符示例n正確的標(biāo)識符正確的標(biāo)識符n

20、studentstudent、num1num1、_SUM_SUM、_1_2_3_1_2_3nMyNameMyName、mynamemyname、my_namemy_namen錯誤的標(biāo)識符錯誤的標(biāo)識符nroom3-1room3-1n包含了其他字符減號)包含了其他字符減號)n2men2menn以數(shù)字開頭以數(shù)字開頭nlonglongn與關(guān)鍵字重復(fù)與關(guān)鍵字重復(fù)nMr.ZhuMr.Zhun包含了其他字符小數(shù)點(diǎn))包含了其他字符小數(shù)點(diǎn))例:判斷下列標(biāo)識符號合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _abov

21、e $123M.D.John3days#33char$123ab整型 (Integer)n整型變量整型變量n整型變量的類型整型變量的類型n整型變量的定義整型變量的定義n整型數(shù)據(jù)在內(nèi)存中的存放形式整型數(shù)據(jù)在內(nèi)存中的存放形式n整型數(shù)據(jù)的溢出整型數(shù)據(jù)的溢出n整型常量的表示方法整型常量的表示方法n整型常量的類型整型常量的類型整型變量的分類n按占用存儲空間的大小劃分表示的數(shù)的范圍)按占用存儲空間的大小劃分表示的數(shù)的范圍)n基本整型基本整型intintn短整型短整型short intshort intn長整型長整型long intlong intn按有無符號劃分按有無符號劃分n有符號有符號signedsi

22、gnedn無符號無符號unsignedunsignedn上述兩種分類方式組合,可得到上述兩種分類方式組合,可得到6 6種類型種類型整數(shù)的長度n整數(shù)的類型與長度整數(shù)的類型與長度nshort:占占2字節(jié)字節(jié)16bit)nlong: 占占4字節(jié)字節(jié)32bit)nint: 占占2或或4字節(jié)字節(jié)16或或32bit)n2Bytes = short int long = 4Bytesn若需要精確的長度,可選用若需要精確的長度,可選用short或或longn舉例舉例nBC3.1:int長度為長度為2Bytesngcc: int長度為長度為4Bytes整型數(shù)據(jù)的取值范圍類類 型型長度長度 (bit)取值范圍取值

23、范圍signed short int16-215 215-1unsigned short int160 216-1signed int16 or 32-215(31) 215(31)-1unsigned int16 or 320 216(32)-1signed long int32-231 231-1unsigned long int320 232-1整型變量的定義 (Definition)n定義形式定義形式nsigned short int a,i;signed short int a,i;nunsigned short int b=1,j;unsigned short int b=1,j;

24、nsigned intsigned intc;c;nunsigned intunsigned intd;d;nsigned long intsigned long int e;e;nunsigned long intunsigned long int f; f;整型變量的定義與使用舉例void main() int a; unsigned b; long c; a = -23; b = 45; c = a + b;程序舉例n設(shè)計一個程序,計算設(shè)計一個程序,計算1 1到到5 5的平方并將其顯的平方并將其顯示到屏幕上示到屏幕上計算1到5的平方并將其顯示到屏幕上main()main() int x1

25、=1, x2=2, x3=3, x4=4, x5=5; int x1=1, x2=2, x3=3, x4=4, x5=5; x1=x1 x1=x1* *x1; x1; x2=x2 x2=x2* *x2; x2; x3=x3 x3=x3* *x3;x3; x4=x4 x4=x4* *x4;x4; x5=x5 x5=x5* *x5;x5; printf(“%d,%d,%d,%d,%d”,x1,x2,x3,x4,x5); printf(“%d,%d,%d,%d,%d”,x1,x2,x3,x4,x5); 問題n設(shè)計一程序使用變量的方式計算下來和式:設(shè)計一程序使用變量的方式計算下來和式:n n S=12

26、+23 +32+43+52+63 S=12+23 +32+43+52+63整型數(shù)據(jù)在內(nèi)存中的存放方式n長度長度 short int long short int longn舉例,舉例,int i=50; /int i=50; /* *intint類型占類型占2 2字節(jié)字節(jié)* */ /n符號符號 signed unsigned signed unsigned0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0高地址字節(jié)高地址字節(jié)低地址字節(jié)低地址字節(jié)負(fù)整數(shù)舉例n舉例舉例nint i=-50; /int i=-50; /* *

27、intint類型占類型占2 2字節(jié)字節(jié)* */ /0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 050的原碼的原碼-50的補(bǔ)碼的補(bǔ)碼取反取反加一加一整型數(shù)據(jù)的溢出 (Overflow)n溢出溢出n數(shù)據(jù)超出了變量能夠存儲的范圍,造成數(shù)數(shù)據(jù)超出了變量能夠存儲的范圍,造成數(shù)據(jù)

28、丟失或數(shù)值改變等據(jù)丟失或數(shù)值改變等n舉例舉例void main() int a = 32767; a=a+1; /*32768?*/0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0+132767的補(bǔ)碼-32768的補(bǔ)碼有符號數(shù)與無符號數(shù)n有符號數(shù)有符號數(shù)n二進(jìn)制補(bǔ)碼表示,首位為符號位二進(jìn)制補(bǔ)碼表示,首位為符號位n指定指定signed或缺省情況,即為有符號數(shù)或缺省情況,即為有符號數(shù)n無符號數(shù)無符

29、號數(shù)n沒有符號位,只能表示非負(fù)數(shù)沒有符號位,只能表示非負(fù)數(shù)n無符號數(shù)類型必須指定為無符號數(shù)類型必須指定為unsignedvoid main() int i; unsigned j; i=-50; j=-50; i=i/2; j=j/2; 若把負(fù)數(shù)賦值給無符號數(shù),則把該負(fù)數(shù)的補(bǔ)若把負(fù)數(shù)賦值給無符號數(shù),則把該負(fù)數(shù)的補(bǔ)碼當(dāng)作無符號數(shù)進(jìn)行處理碼當(dāng)作無符號數(shù)進(jìn)行處理有符號數(shù)與無符號數(shù)舉例void main() int i; unsigned j; i=-50; j=-50; i=i/2; /*-25*/ j=j/2; /*32743*/1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0-50

30、的補(bǔ)碼的補(bǔ)碼i,j/ 21 1 1 1 1 1 1 1 1 1 1 0 0 1 1 10 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1i/2-25的補(bǔ)碼的補(bǔ)碼j/232743的原碼的原碼整型常量的表示方法n十進(jìn)制十進(jìn)制 (Decimal)n例如,例如,123、-456、0n八進(jìn)制八進(jìn)制 (Octal)n以以0開頭,不得含有開頭,不得含有8或或9n例如,例如,0123、-0456n錯例,錯例,0138、-0912n十六進(jìn)制十六進(jìn)制 (Hexadecimal)n以以0 x或或0X開頭,用開頭,用af或或AF表示表示1015n例如,例如,0 x123、-0X45、0 x3AB、-0 x

31、abc整型常量的類型n常量的類型后綴常量的類型后綴 (Suffix)nl、L表示常量是一個長整型表示常量是一個長整型nu、U表示常量是一個無符號整型數(shù)表示常量是一個無符號整型數(shù)n兩種后綴可以一起使用兩種后綴可以一起使用n舉例舉例n123l長整型常數(shù)長整型常數(shù)123n456U無符號整型常數(shù)無符號整型常數(shù)456n789ul 無符號長整型常數(shù)無符號長整型常數(shù)789n101Lu 無符號長整型常數(shù)無符號長整型常數(shù)101浮點(diǎn)型 (Floating Point)n浮點(diǎn)型常量的表示方法浮點(diǎn)型常量的表示方法n浮點(diǎn)型變量浮點(diǎn)型變量n浮點(diǎn)型變量的類型浮點(diǎn)型變量的類型n浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的

32、存放形式n浮點(diǎn)型數(shù)據(jù)的舍入誤差浮點(diǎn)型數(shù)據(jù)的舍入誤差n浮點(diǎn)型常數(shù)的類型浮點(diǎn)型常數(shù)的類型浮點(diǎn)型常量的表示方法n十進(jìn)制小數(shù)形式十進(jìn)制小數(shù)形式n由符號、數(shù)字和小數(shù)點(diǎn)由符號、數(shù)字和小數(shù)點(diǎn)(必需必需)組成組成n整數(shù)和小數(shù)部分都可省略,但不能同時省整數(shù)和小數(shù)部分都可省略,但不能同時省略略n舉例,舉例,12.3、-.123、123.、0.、.0n指數(shù)形式指數(shù)形式n由整數(shù)由整數(shù)(或小數(shù)或小數(shù))、e(或或E)、整數(shù)順序組成、整數(shù)順序組成ne或或E之前必須有數(shù)字,之后必須是整數(shù)之前必須有數(shù)字,之后必須是整數(shù)n舉例,舉例,123.4e-5表示表示123.410-5n錯例,錯例,e1、12e、1.2e3.4、.e5、e

33、規(guī)范化指數(shù)形式n規(guī)范化指數(shù)形式規(guī)范化指數(shù)形式n類似于類似于“科學(xué)計數(shù)法科學(xué)計數(shù)法”ne或或E之前的小數(shù)中,小數(shù)點(diǎn)前面有且僅之前的小數(shù)中,小數(shù)點(diǎn)前面有且僅有一個非零數(shù)字有一個非零數(shù)字n舉例,舉例,123.456n規(guī)范化形式,規(guī)范化形式,1.23456e2、1.23456E+002n非規(guī)范化形式,非規(guī)范化形式,123.456、12.3456e1、12345.6e-2、0.123456e3、12345600e-5浮點(diǎn)型變量的類型n分類分類n單精度單精度 floatn雙精度雙精度 doublen長雙精度長雙精度 long doublen長度和取值范圍長度和取值范圍類類 型型長度長度 (bit)有效數(shù)字

34、有效數(shù)字絕對值范圍絕對值范圍float326710-371038double64151610-30710308long double128181910-4931104932編程例題n設(shè)長方形的高為設(shè)長方形的高為 1.51.5,寬為,寬為 2.32.3,編程求,編程求該長方形的周長和面積。該長方形的周長和面積。 浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放方式n二進(jìn)制規(guī)范化指數(shù)形式二進(jìn)制規(guī)范化指數(shù)形式n小數(shù)部分長度與能表示的精度有關(guān)小數(shù)部分長度與能表示的精度有關(guān)n指數(shù)部分長度與能表示的數(shù)值范圍有關(guān)指數(shù)部分長度與能表示的數(shù)值范圍有關(guān)1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1

35、 1 1 0 0 0 0 1 1 0 0指數(shù)部分e小數(shù)部分f符號sesfv2). 1 () 1(123.456N (10) = 123.456, N (10) = 123.456, 換算成二進(jìn)制表示:換算成二進(jìn)制表示: N (2) = 1111011. 01110100101111001 N (2) = 1111011. 01110100101111001 = 1. 11101101110100101111001(.) = 1. 11101101110100101111001(.) * * 26 26 那么那么E 127 = 6; E = 127 + 6 = 133(10) = 1000010

36、1(2) E 127 = 6; E = 127 + 6 = 133(10) = 10000101(2) M = 111 0110 1110 1001 0111 1001 (M = 111 0110 1110 1001 0111 1001 (省略了最高數(shù)字位省略了最高數(shù)字位1, 1, 共共23bit) 23bit) 組合起來就是:組合起來就是: S E M S E M 0 10000101 111 0110 1110 1001 0111 1001 0 10000101 111 0110 1110 1001 0111 1001 4bit 4bit一間隔:一間隔: 0100 0010 1111 01

37、10 1110 1001 0111 1001 0100 0010 1111 0110 1110 1001 0111 1001 4 2 F 6 E 9 7 9 4 2 F 6 E 9 7 9 浮點(diǎn)型數(shù)據(jù)的舍入誤差n由于浮點(diǎn)型變量能夠表示的有效數(shù)字有限,由于浮點(diǎn)型變量能夠表示的有效數(shù)字有限,將有效位以外的數(shù)字舍去造成誤差將有效位以外的數(shù)字舍去造成誤差n舉例舉例float a=123456.789e5, b; /*a=12345678900*/b = a + 20; /*b=12345678920?*/printf(a=%fnb=%fn, a, b);運(yùn)行結(jié)果運(yùn)行結(jié)果 a=12345678848.0

38、00000 b=12345678848.000000浮點(diǎn)型常量的類型n類型后綴類型后綴nf、F表示常量是一個單精度型浮點(diǎn)數(shù)表示常量是一個單精度型浮點(diǎn)數(shù)nl、L表示常量是一個長雙精度型浮點(diǎn)數(shù)表示常量是一個長雙精度型浮點(diǎn)數(shù)n無任何后綴的浮點(diǎn)型常量視作雙精度型無任何后綴的浮點(diǎn)型常量視作雙精度型n對浮點(diǎn)型變量賦值對浮點(diǎn)型變量賦值n一個浮點(diǎn)型常量可以賦值給任何類型的浮一個浮點(diǎn)型常量可以賦值給任何類型的浮點(diǎn)型變量點(diǎn)型變量n根據(jù)變量類型截取常量的相應(yīng)有效數(shù)字根據(jù)變量類型截取常量的相應(yīng)有效數(shù)字n注意防止出現(xiàn)溢出注意防止出現(xiàn)溢出字符型 (Character)n字符型常量字符型常量n字符型變量字符型變量n字符型數(shù)

39、據(jù)在內(nèi)存中的存放形式字符型數(shù)據(jù)在內(nèi)存中的存放形式n字符型數(shù)據(jù)的使用方法字符型數(shù)據(jù)的使用方法n字符串常量字符串常量字符型常量n單引號括起來的一個字符單引號括起來的一個字符n普通字符普通字符n舉例,舉例,a、A、1、?n錯例,錯例,abc、我我n轉(zhuǎn)義字符轉(zhuǎn)義字符n以以開頭開頭+一個字母的特殊字符一個字母的特殊字符nddd 1到到3位位8進(jìn)制數(shù)進(jìn)制數(shù)ASCII碼代表的字符碼代表的字符nxhh 1到到2位位16進(jìn)制數(shù)進(jìn)制數(shù)ASCII碼代表的字碼代表的字符符n舉例,舉例,n、t、123、x3A轉(zhuǎn)義字符含義nvradddtbf“xhh轉(zhuǎn)義字符含義換行垂直制表回車響鈴單引號3位8進(jìn)制數(shù)代表的字符水平制表退格

40、換頁反斜線雙引號2位16進(jìn)制數(shù)代表的字符例例 轉(zhuǎn)義字符舉例轉(zhuǎn)義字符舉例(ch2_001.c,ch2_004.c) main() printf(101 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C);運(yùn)行結(jié)果:(屏幕顯示)A B CIsay:”How are you?”C ProgramTurbo C例例 main() printf(“Yb=n”); 運(yùn)行結(jié)果:屏幕顯示:=打印機(jī)輸出:轉(zhuǎn)義字符舉例轉(zhuǎn)義字符舉例字符型變量n字符型變量只能存放一個字符字符型變量只能存放一個字符n定義與使用定義與使用vo

41、id main() char c1, c2; /*定義字符型變量定義字符型變量c1和和c2*/ c1 = a; /*c1的值為的值為a*/ c2 = 2; /*c2的值為的值為2*/字符型數(shù)據(jù)在內(nèi)存中的存放形式n一個字符型數(shù)據(jù)占一個字節(jié)的空間一個字符型數(shù)據(jù)占一個字節(jié)的空間n字符型數(shù)據(jù)以其字符型數(shù)據(jù)以其ASCII碼形式存放碼形式存放n字符型數(shù)據(jù)的存放形式與只占一個字節(jié)長字符型數(shù)據(jù)的存放形式與只占一個字節(jié)長度的整型數(shù)據(jù)完全相同度的整型數(shù)據(jù)完全相同01100001c1=a(ASCII=97)00110010c1=2(ASCII=50)字符型數(shù)據(jù)的使用方法n可以把字符型數(shù)據(jù)視作一種長度為可以把字符型數(shù)

42、據(jù)視作一種長度為1字節(jié)字節(jié)的整型數(shù)據(jù)處理的整型數(shù)據(jù)處理n當(dāng)使用字符型數(shù)據(jù)時,與使用這個字符當(dāng)使用字符型數(shù)據(jù)時,與使用這個字符的的ASCII碼碼(一個一個8位整數(shù)位整數(shù))是完全一樣的是完全一樣的n字符型數(shù)據(jù)的用法與整型數(shù)據(jù)完全一樣,字符型數(shù)據(jù)的用法與整型數(shù)據(jù)完全一樣,包括運(yùn)算、賦值、輸入、輸出等包括運(yùn)算、賦值、輸入、輸出等n字符型數(shù)據(jù)使用過程中,同樣需要注意字符型數(shù)據(jù)使用過程中,同樣需要注意溢出、符號等問題溢出、符號等問題n是字符還是整數(shù),只有在輸出時才有意是字符還是整數(shù),只有在輸出時才有意義義字符型數(shù)據(jù)使用舉例void main() char c; int i, j; c = 97; /*c

43、= a*/ i = c + 2; /*i = 99*/ j = 2; /*j = 50*/ printf(%c, %dn, c, c); /*a, 97*/字符型變量的符號n字符型變量與整型變量一樣,也分為有符字符型變量與整型變量一樣,也分為有符號數(shù)與無符號數(shù)號數(shù)與無符號數(shù)n無符號字符無符號字符nunsigned char c;unsigned char c;n舉例,表示一個班級的人數(shù)舉例,表示一個班級的人數(shù) (256) (256)n賦值和使用中需要注意的問題,與整型變賦值和使用中需要注意的問題,與整型變量相同量相同void main() char c; int i, j; c=0;L: c+

44、; printf(%c, %dn, c, c); if (c255) goto L字符串(String)常量n表示形式表示形式n一對雙引號括起來的字符序列一對雙引號括起來的字符序列n引號內(nèi)可以包括引號內(nèi)可以包括0個、個、1個或多個字符個或多個字符n字符序列中的特殊字符用轉(zhuǎn)義字符表示字符序列中的特殊字符用轉(zhuǎn)義字符表示n舉例,舉例,abc、a、我我n舉例,舉例,12.4、$#*!、C:HOMEn字符常量和字符串常量是不同類型的數(shù)據(jù)字符常量和字符串常量是不同類型的數(shù)據(jù)n例如,例如,a與與a是不同的是不同的n不能把一個字符串賦值給一個字符型變量不能把一個字符串賦值給一個字符型變量字符串在內(nèi)存中的存放方

45、式n在內(nèi)存中每個字符按順序存放在內(nèi)存中每個字符按順序存放n字符串結(jié)尾有一個空字符字符串結(jié)尾有一個空字符(ASCII=0, 0)作為字符串結(jié)束標(biāo)志作為字符串結(jié)束標(biāo)志n字符串結(jié)束標(biāo)志字符串結(jié)束標(biāo)志0是不能顯示的,在是不能顯示的,在字符串常量中,也不用顯式寫出來字符串常量中,也不用顯式寫出來n舉例舉例nTESTnnaTEST084698384000a0009700各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算n整型、字符型、浮點(diǎn)型數(shù)據(jù)可混合運(yùn)算整型、字符型、浮點(diǎn)型數(shù)據(jù)可混合運(yùn)算n混合運(yùn)算時,不同類型的數(shù)據(jù)按照一定的混合運(yùn)算時,不同類型的數(shù)據(jù)按照一定的規(guī)則先轉(zhuǎn)換為同一類型,然后再運(yùn)算規(guī)則先轉(zhuǎn)換為同一類型,然后再運(yùn)算dou

46、blefloatlongunsignedintchar,short低高說明:必定轉(zhuǎn)換運(yùn)算對象類型不同時轉(zhuǎn)換 char ch; int i; float f; double d;intintdoubledoubledoubledoubledoubledouble10+a +i* f - d / l例2 int i; float f; double d; long l;例1例 main() float x; int i; x=1/2*3.6; printf(“x=%f,i=%d”,x,i); 結(jié)果:ch/i + f*d - (f+i)intintdoubledoubledoubledoubledo

47、ubledoubledoubleC運(yùn)算符算術(shù)運(yùn)算符:(+ - * / % + -)關(guān)系運(yùn)算符:( = !=)邏輯運(yùn)算符:(! & |)位運(yùn)算符 :( | &)賦值運(yùn)算符:(= 及其擴(kuò)展)條件運(yùn)算符:(?:)逗號運(yùn)算符:(,)指針運(yùn)算符:(* &)求字節(jié)數(shù) :(sizeof)強(qiáng)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:(. -)下標(biāo)運(yùn)算符:()其它 :(( ) -)運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式C表達(dá)式算術(shù)表達(dá)式關(guān)系表達(dá)式邏輯表達(dá)式 賦值表達(dá)式條件表達(dá)式逗號表達(dá)式 用運(yùn)算符號將運(yùn)算對象連接起來形成的式子稱為表達(dá)式用運(yùn)算符號將運(yùn)算對象連接起來形成的式子稱為表達(dá)式表達(dá)式運(yùn)算符功能要求運(yùn)算

48、量個數(shù)和類型運(yùn)算符優(yōu)先級別結(jié)合方向?qū)W習(xí)運(yùn)算符應(yīng)注意學(xué)習(xí)運(yùn)算符應(yīng)注意x=y0 xf0y=y%10 x=10+15*2x=10+15-2l基本算術(shù)運(yùn)算符: + - * / %l優(yōu)先級: - * / % + -l (2) (3) (4)l結(jié)合方向:從左向右l說明:l“-”可為單目運(yùn)算符時,從右向左的結(jié)合性l兩整數(shù)相除,結(jié)果為整數(shù)l%要求兩側(cè)均為整型數(shù)據(jù)例例 5/2 = -5/2.0 =例例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2算術(shù)運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符和表達(dá)式2-2.51-110()u作用:使變量值加1或減1u品種:u前置 +i, -i (先執(zhí)行i+1或i-1,再使用i值

49、)u后置 i+,i- (先使用i值,再執(zhí)行i+1或i-1)u由 -構(gòu)成的表達(dá)式的值例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4自增、自減運(yùn)算符自增、自減運(yùn)算符 + - - + - -說明:說明:1 1)+ - + - 不能用于常量和表達(dá)式不能用于常量和表達(dá)式, ,如如5+5+,(a+b)+(a+b)+2 2優(yōu)先級:優(yōu)先級:- + - - + - * * /

50、% + - / % + - (2) (3) (4) (2) (3) (4)3 3結(jié)合方向:結(jié)合方向: 自右向左自右向左例例 -i+ -i+ -(i+) -(i+) i=3; printf(“%d”,-i+); /-3 i=3; printf(“%d”,-i+); /-3 例例 j+k; j+k; 例例 -i+ -i+ i=3; printf(“%d”,-i+); i=3; printf(“%d”,-i+); 續(xù)續(xù): :自增、自減運(yùn)算符自增、自減運(yùn)算符+ -+ -(j+)+k;(j+)+k;一般形式:(類型名)(表達(dá)式) 例: (int)(x+y) (int)x+y (double)(3/2)

51、(int)3.6 說明:強(qiáng)制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變 例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 結(jié)果:x=3.600000,i=3較高類型向較低類型轉(zhuǎn)換時可能發(fā)生精度損失問題2.5.2 2.5.2 顯式轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換)顯式轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換)l簡單賦值運(yùn)算符l符號: =l格式: 變量標(biāo)識符=表達(dá)式l作用:將一個數(shù)據(jù)常量或表達(dá)式賦給一個變量l表達(dá)式的值:變量的值n復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符n品種:品種:+= -= += -= * *= /= %= = /= %= = = = &= =

52、|= &= = |=n含義:含義:a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例例 a=3; a=3; d=func(); d=func(); c=d+2; c=d+2;賦值運(yùn)算符和表達(dá)式賦值運(yùn)算符和表達(dá)式u優(yōu)先級: 14u結(jié)合方向:自右向左u左側(cè)必須是變量,不能是常量或表達(dá)式賦值表達(dá)式的值與變量值相等賦值表達(dá)式的值與變量值相等,且可嵌套且可嵌套u(yù)賦值轉(zhuǎn)換規(guī)則賦值轉(zhuǎn)換規(guī)則: :使賦值號右邊表達(dá)式值自動轉(zhuǎn)使賦值號右邊表達(dá)式值自動轉(zhuǎn)換成其左邊變量的類型換成其左邊變量的類型例例 3=x-2 3=x-2* *y;y; a+b=3; a+b=3;例例 float f; fl

53、oat f; int i; int i; i=10; i=10; f=i; f=i;那么那么 f=10.0 f=10.0例例 int i; i=2.56; /結(jié)果結(jié)果i=2;例例: a=b=c=5: a=b=c=5 a=(b=5) a=(b=5) a=5+(c=6) a=5+(c=6) a=(b=4)+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) a=(b=10)/(c=2)/表達(dá)式值為表達(dá)式值為5 5,a,b,ca,b,c值為值為5 5/ b=5;a=5/ b=5;a=5/表達(dá)式值表達(dá)式值1111,c=6,a=11c=6,a=11/表達(dá)式值表達(dá)式值1010,a=10,

54、b=4,c=6a=10,b=4,c=6/表達(dá)式值表達(dá)式值5 5,a=5,b=10,c=2a=5,b=10,c=2簡單賦值說明簡單賦值說明1 1):): 結(jié)合方向:自右向左結(jié)合方向:自右向左 優(yōu)先級優(yōu)先級: 12: 12 左側(cè)必須是變量,不能是常量或表達(dá)式左側(cè)必須是變量,不能是常量或表達(dá)式賦值表達(dá)式的值與變量值相等賦值表達(dá)式的值與變量值相等,且可嵌套且可嵌套賦值轉(zhuǎn)換規(guī)則賦值轉(zhuǎn)換規(guī)則: :使賦值號右邊表達(dá)式值自動轉(zhuǎn)換使賦值號右邊表達(dá)式值自動轉(zhuǎn)換成其左邊變量的類型成其左邊變量的類型例例: a=5; : a=5; a+=a-=a a+=a-=a* *a a例例: int a=2; : int a=2;

55、 a%=4-1; a%=4-1; a+=a a+=a* *=a-=a=a-=a* *=3; =3; /a=-40 /a=-40 等價于等價于a=a+(a=a-(aa=a+(a=a-(a* *a)a)/a=0 /a=0 等價于等價于a=a+(a=aa=a+(a=a* *(a=a-(a=a(a=a-(a=a* *3)3)復(fù)合賦值說明復(fù)合賦值說明: :l形式:表達(dá)式1,表達(dá)式2,表達(dá)式nl結(jié)合性:從左向右l優(yōu)先級: 15l逗號表達(dá)式的值:等于表達(dá)式n的值l用處:常用于循環(huán)for語句中例例 a=3*5,a*4 a=3*5,a*4,a+5例例 x=(a=3,6*3) x=a=3,6*a例例 a=1;b=

56、2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); /a=15,表達(dá)式值表達(dá)式值60/a=15,表達(dá)式值表達(dá)式值20/賦值表達(dá)式,表達(dá)式值賦值表達(dá)式,表達(dá)式值18,x=18/逗號表達(dá)式逗號表達(dá)式,表達(dá)式值表達(dá)式值18,x=3/1,2,3/3,2,3逗號運(yùn)算符和表達(dá)式逗號運(yùn)算符和表達(dá)式例例:/*ch2_6.c*/#include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x);運(yùn)行結(jié)果:運(yùn)行結(jié)果:x=3n以下選項中可作為以下選項中可作為C C語言合

57、法常量的是語言合法常量的是_。n A A)-80. -80. B B) -080 -080 nC C)-8e1.0 -8e1.0 D D) -80.0e -80.0en下列哪些是下列哪些是c c語言提供的合法的數(shù)據(jù)關(guān)鍵字語言提供的合法的數(shù)據(jù)關(guān)鍵字n A. Float B. signed C. integer D. Char A. Float B. signed C. integer D. Char n下面標(biāo)識符中,合法的用戶標(biāo)識符為下面標(biāo)識符中,合法的用戶標(biāo)識符為nA A變量變量a B. fast+1 c. printf D. 2ab a B. fast+1 c. printf D. 2ab

58、n下列屬于整形常量的是下列屬于整形常量的是nA A0X12A B0X12A B12x C12x C-12. D-12. D1E21E2n下述四項中,合法的下述四項中,合法的c c語言整型常量是語言整型常量是nA. -087 B. 5L C. (long)123456 D. 1.23e+2A. -087 B. 5L C. (long)123456 D. 1.23e+2n以下不正確的實(shí)型常量是()以下不正確的實(shí)型常量是()nA. 2. B.123E-2 C.-.543 D.2.1E3.5A. 2. B.123E-2 C.-.543 D.2.1E3.5n下述常量中,哪些是不合法的常量下述常量中,哪些是不合法的常量nA A12 B12 B“ ” C“ ” C D D“483”“483”n以下不

溫馨提示

  • 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

提交評論