第2章 c語言的基本數(shù)據(jù)類型與表達式_第1頁
已閱讀1頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 2 章 C語言的基本數(shù)據(jù)類型與表達式,2.1 C語言的基本數(shù)據(jù)類型 2.2 常量與變量 2.3 運算符與表達式 2.4 數(shù)據(jù)類型轉(zhuǎn)換,教學目的和基本要求:,要求學生清楚數(shù)據(jù)類型與變量、常量的關(guān)系,掌握各種常量的性質(zhì)和定義,掌握表達式中各種運算符的功能和特點,明白產(chǎn)生副作用的原因,了解數(shù)據(jù)類型的相互轉(zhuǎn)換規(guī)則。,教學重點

2、:,數(shù)據(jù)類型、常量定義,運算符與表達式。,存取數(shù)據(jù)必須先確定數(shù)據(jù)的編碼方式、存儲格式和所占的存儲長度, C語言中把這三者結(jié)合起來,給出幾種固定的形式,這些形式就是最基本的數(shù)據(jù)類型。,2.1 C語言的基本數(shù)據(jù)類型,為什么要設(shè)置數(shù)據(jù)類型?,在計算機中使用一定長度的存儲單元(通常是字節(jié)的倍數(shù))來存儲數(shù)據(jù)。,存儲的編碼方式有:原碼、反碼、補碼、ASCII碼。。。 存儲的存儲格式有:定點型、浮點型。。。,其中,用于存儲數(shù)據(jù)的存儲單元的

3、長度決定了數(shù)據(jù)取值范圍的大小。,一、數(shù)據(jù)類型概述,本章中將對基本類型中的前三類進行介紹和學習。,變量:指以標識符為名字,其值可以改變的量。,在學習各種數(shù)據(jù)類型之前,我們先簡單了解一下常量和變量的概念。后面的章節(jié)中將會詳細介紹。,常量:指在程序運行中,其數(shù)值不能被改變的量。,變量 代表計算機內(nèi)存中的某一存儲空間,變量的類型決定了該存儲空間的長度和其中存放數(shù)據(jù)的編碼方式及存儲格式。 變量的類型也決定了該存儲空間中存放數(shù)據(jù)的數(shù)據(jù)形式和

4、取值范圍。,* 八進制的數(shù)碼范圍為0~7; 018 ? * 十六進制的數(shù)碼除了數(shù)字0~9外, 還使用英文字母a~ f (或A~ F)表示10~15。 如:0x1e √,,注意!,二、整型(采用定點整數(shù)的存儲格式,只能表示純整數(shù)),1、整型常量:,(1) 十進制形式:與數(shù)學上的整數(shù)表示相同;

5、 例如: 12, -100, 0 (2) 八進制形式:在數(shù)碼前加數(shù)字0; 例如: 012=1*81+2*80=10(十進制) (3) 十六進制形式:在數(shù)碼前加0X(數(shù)字0和字母X)。 例如: 0x12=1*161+2*160=18(十進制),如Turbo C中,有 short(2字節(jié))≤int(2字節(jié)) ≤long(4字節(jié)) 關(guān)鍵字 所占位數(shù)

6、 取值范圍 short 16 -32768~32767 unsigned short 16 0~65535 int 16 -32768~32767 unsigned 16 0~65535

7、 long 32 -2147483648~2147483647 unsigned long 32 0~4294967295,2、整型變量的分類:,根據(jù)數(shù)據(jù)所占的存儲長度的不同分為:int、short、long; 同樣存儲長度的數(shù)據(jù)又分unsigned、signed; 故可組合出六種類型。,3、整型變量的值域:,由機器中數(shù)據(jù)的存儲長度決定,思

8、考:int a=20000,b=20000,c; c=a+b; c的值為多少?如果c定義為long型是否能解決問題?,2、實型變量的分類及值域: 關(guān)鍵字 字節(jié)數(shù) 取值范圍 精度(位) float 4 3.4×10-38 ~ 3.4×1038 7 doub

9、le 8 1.7×10-308 ~ 1.7×10308 15,注意,,三、實型,1、常量:(1) 十進制小數(shù)形式:由數(shù)字和小數(shù)點組成; 例如: 3.4, 4., .3。(2) 指數(shù)形式:“十進制小數(shù)”+“ e(或E)”+“十進制數(shù)整數(shù)”。 例如: 12.5e-6 表示12.5×10-6 。,? 小數(shù)點不能單獨出現(xiàn); 0.√

10、 .0 √ . ? ? e或E的兩邊必須有數(shù),且其后面必須為整數(shù); 如: 6E0.2 ? e5 ?,字符形式 功能 \n 換行 \t 橫向跳格 \b 退格

11、 \r 回車 \\ 反斜杠字符 \’ 單引號字符 \ddd 8進制數(shù)表示的ASCII碼對應(yīng)的字符 \xhh 16進制數(shù)表示的ASCII碼對應(yīng)的字符,四、字符類

12、型,1、常量: (1) 用單引號括起來的一個字符;如:‘A’、 ‘1’、’?’等。 (2) 用單引號括起來的由反斜杠(\)引導的轉(zhuǎn)義字符。,4、字符串常量: 是用一對雙引號括起來的字符序列。 注意:每個字符串的后面都有一個‘\0’結(jié)束符。 如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。,注意,‘\’‘ √ ‘\\‘ √ ‘’‘ ? ‘\‘ ? ‘a(chǎn)’與“a”的區(qū)別。

13、,,例如:字符A的ASCII碼為: 65D(十進制)=41H(十六進制)=101Q(八進制) ∴字符A可以表示為‘A’、’\x41’、’\101’。,2、字符型變量的分類: char 和 unsigned char;,3、值域(字符型可參與數(shù)學運算,也可看成一種一字節(jié)的整型變量) 每個字符型數(shù)據(jù)在內(nèi)存中占一個字節(jié);包括ASCII字符表中的所有字符(可顯示字符和非顯示字符)。,一、常量與符號常量

14、? 常量是指在程序運行中,其數(shù)值不能被改變的量。 ? 常量又可分為直接常量和符號常量。,2.2 常量與變量,120 、 -100、 0; 0120、 072; 0xFFFF、 0x1e、0X28AF,0XED4 ; 120L, 200L ; 長整型常量 3.14、 -3.1、 5.12E-6 ; &#

15、39;a' 、'#'、'\n'、'\101' ; 099、12f、 0xg 、48EA ; 019.5 、1e-08; 實型常量只能用十進制形式表示 2.1E10.2、E-6、6.4E+4.8、E9 ; "changsha" 、"+++\\?ab" ;

16、 ' \' 、'\p' 、'''、'ab' ;,1、直接常量:是在程序中直接引用的數(shù)據(jù)。,請判斷這些常量正確與否:,定義形式: #define 標識符 常量數(shù)據(jù) 例如: #define PI 3.14159 在程序預(yù)處理時,凡是出現(xiàn)標識符PI的地方都將用數(shù)據(jù)3.14159來替換。 如: 2*

17、2.3*PI 就等價于 2*2.3*3.14159。,? 變量是指以標識符為名字,其值可以改變的量。 ? 變量代表計算機內(nèi)存中的某一存儲空間,該存儲空間 中存放的數(shù)據(jù)就是變量的值。 ? 在同一程序塊中,變量不能被重復定義。 ? 使用變量時必須“先定義,后使用”。,2、符號常量 是用標識符來表示一個數(shù)據(jù);在程序不能給它賦值。,二、 變量,2、變量初始化 在定義變量的同時給變量一個初始值。,注

18、意,int a=5, b=3; √ int a=b=c=3; ? int a,b,c; a=b=c=3; √,,例如:int a,b,c ; float x,y; char c1,c2; 或 int c1,c2; 定義變量就是在內(nèi)存中劃出一塊相應(yīng)類型的存儲空間存放該變量的值。,main( ){ int x,y,z,w; /*定義x

19、,y,z,w為整型變量*/ unsigned int k; /*定義k為無符號整型變量*/ x=10;y=-20;k=30; z=x+k;w=y+k; printf(“x+k=%d,y+k=%d\n”,z,w);},例2-1:,程序運行結(jié)果為: x+k=40,y+k=10,變量根據(jù)作用域的不同可分為局部變量和全局變量,根據(jù)存儲方式的不同可分為靜態(tài)存儲變量和動態(tài)存儲變量,這些我們將在第六章中詳細介紹。,

20、在數(shù)學里當多個運算符一起組成一個表達式時,我們規(guī)定了優(yōu)先級(先乘除后加減)和結(jié)合規(guī)則(從左至右)。 同樣,在C語言中,我們也規(guī)定了每個運算符的結(jié)合規(guī)則及運算符之間的優(yōu)先級。,2.3 運算符與表達式,運算符:就是表示某種運算功能的符號。 按操作功能運算符大致可分為:算術(shù)運算符、關(guān)系運算符、邏輯運算符、賦值運算符、條件運算符、逗號運算符以及按位運算符等

21、。,表達式:是由操作數(shù)和運算符組成的序列。 如:1+2*3-4 、 3>5-7 、a=b%2 等都是C語言中的表達式。,,下面分類介紹各種運算符:,%(取余)(注意:取余運算的操作數(shù)只能是整數(shù),且結(jié) 果的符號與前一操作數(shù)的符號相同),一、 算術(shù)運算符和算術(shù)表達式,1、 運算符 +(加):3+4、 +3 -(減):3-5、 -5 *(乘):3*5 /(除):5/2、5.0/

22、2 (注意,此二種形式,結(jié)果不同),5%3的值為2; -5%3的值為-2;5%(-3)的值為2; -5%(-3)的值為-2;12.3%3 ×若a%b 的結(jié)果為0,則有a能被b整除,,2、算術(shù)表達式 ? 用算術(shù)運算符和括符將操作數(shù)連接起來的式子。 ? 優(yōu)先級:() *、/、% +、- ? 結(jié)合性:從左至右; ? 表達式的值: 數(shù)值型(i

23、nt、long、unsigned、float、double);,,,例如: 已知: float a=2.0; int b=6,c=3; 求解: a*b/c-1.5+’a’+fabs(-5)=?,,,,,,,float a=2.0; int b =6,c =3; a*b/c -1.5 +’a’ +fabs(-5),,,,,,,,12.0/3,5,4.0 - 1.5,2.5 + 97(int),99.5 +

24、 5,104.5(double),思考 int a=1,b=2; 表達式a/b+3的結(jié)果是多少? int a=10000,b=30000; 表達式a+b的結(jié)果是多少? 如何修改?,,等價于:j=i;i++; 所以i的值為4,j的值為3,等價于:i++;j=i; 所以i的值為4,j的值為4,(1) i=3; j=i++; (2)

25、i=3; j=++i;,3、自增與自減運算符 (++ 、--),? ++i,--i:使用之前使i的值增1(或減1);,? i++,i--:使用之后使i的值增1(或減1);,分析下面幾種情況中i與j的值:,,當++、 --不與其他運算符混合使用時,++i與i++都等價于 i=i+1, --i與i--都等價于 i=i-1,如:i = 2; j = -i++; 求執(zhí)行完這兩句后i與j的值分別是多少,特殊的:

26、設(shè)i=3,j=4,k=i+++j, k= i= j=,? 結(jié)合性:自右至左。,分析:“++”與”-“是同優(yōu)先級,且都高于“=” 按結(jié)合規(guī)則,等價于:j=-(i++); 結(jié)果:i的值為3,j的值為-2。,再看幾個例子:如:設(shè)i=3,k=(i++)+(i++)+(i++) k= i=,9,6,如:設(shè)a=3,b=(a++)+(a++) b= a=

27、,6,5,設(shè)a=3,b=(++a)+(a++) b= a=,8,5,設(shè)a=3,b=(a++)+(++a) b= a=,8,5,設(shè)a=3,b=(++a)+(++a) b= a=,10,5,7,4,4,1、6種關(guān)系運算符:= > == != 2、關(guān)系表達式:用關(guān)系運算符將表達式連接起來的式子 ? 優(yōu)先級: (= >

28、)>( == != ) ? 結(jié)合性:自左至右; ? 表達式的值: 若為真,則結(jié)果為1; 若為假,則結(jié)果為0。,3>5 值為: 32 值為: 設(shè)x=-2; -3<x<-1 值為: 設(shè)x=1; 2<x<4 值為:,例如,二、關(guān)系運算符和關(guān)系表達式,求如下關(guān)系表達式的值:,0,0,0,1,算術(shù)運算符優(yōu)先級高于關(guān)系運算符

29、3+(4<3)*4 值為: 3+4<3*4 值為,3,1,,注意,不能用數(shù)學里習慣的關(guān)系運算符連用表示區(qū)間關(guān)系!,2、邏輯表達式:用邏輯運算符將表達式連接起來的式子 ? 優(yōu)先級: ! > &&> || ? 結(jié)合性:自左至右; ? 表達式的值: 若為真,則結(jié)果為1; 若為假,則結(jié)果為0。,三、邏輯運算符和邏輯表達式,1、3種

30、邏輯運算符: && || !,參與邏輯運算的操作數(shù)叫邏輯量。,邏輯量可以是整型、實型、字符型和指針類型,其中,0,0.0,‘\0’,NULL代表假,其余邏輯量代表真。,int a=5; float b=3.5; !a ( ) !(a 0) ( ) (a 0) ( ),例如

31、,0,1,1,0,0,0,1,1,0,0,0,1,,,,,,,,例如表達式運算如下:,混合優(yōu)先級: ! 高 算術(shù)運算符 關(guān)系運算符 &&和|| 賦值運算符 低,4 - 0,1 && 2,8 < 4,1,0,1,5 > 3 && 2 ||

32、 8 < 4 - !5,例如: (1)a = 0; b = 1; c = a++ && ( b = 3 ); 執(zhí)行后: a為 ,b為 ,c為 。,邏輯或優(yōu)化和邏輯與優(yōu)化:,在邏輯表達式的求解中,并不是所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時,才執(zhí)行該運算符。,1,1,0,(2)a = 1; b =

33、 1; c=0; d = --a ¦¦ b-- ¦¦ (c = b+3 ); 執(zhí)行后: a為 ,b為 ,c為 ,d為 。,0,0,0,1,例如: (1) n是小于m的偶數(shù): (2)year是閏年: (能被4整除但不能被100整除,或能被400整除),邏輯表達式一般用于控制語句中的條件:,n < m &&

34、n % 2 == 0,year % 4 == 0 && year % 100 != 0 || year % 400 == 0,例如:(1) x=(y=12)/4 (2) x=y=12/4 (3) x=(y=12/4) (4)(x=y)=12/4,四、賦值運算符和賦值表達式,1、賦值運算符 = (執(zhí)行功能:把=右邊的表達式的值,存入=左邊的變量對應(yīng)的存儲空間

35、,即給此變量賦值) 3=2+1 a=a+2,?,√,2、賦值表達式:用賦值運算符將變量和表達式連接起來的式子 ? 形式: = ? 求值規(guī)則: 將“=”右邊表達式的值賦給左邊的變量。 ? 優(yōu)先級: !>算術(shù)>關(guān)系>&& > ||>賦值 ? 結(jié)合性:自右至左; ? 表達式的值:被賦值變量的值。,y值為12,x值為3,表達式的

36、值為3,y值為3,x值為3,表達式的值為3,y值為3,x值為3,表達式的值為3,?,練習:設(shè)a=12,計算表達式a+=a-=a*12和a+=a-=a*=12的值,3、復合賦值運算符 *=、/=、 %=、 +=、 -=, >=, &=、 Λ=、 ¦= 復合運算符是一個運算符,但功能上,是兩個運算符功能的組合。,例如: a+=b 相當于 a=a+b a*=b 相當于 a=a*b,注

37、意:a*=b+c 相當于 a=a*(b+c) 而不是 a=a*b+c,? 優(yōu)先級: 與 = 是同一優(yōu)先級。 ? 結(jié)合性:自右至左; ? 表達式的值:被賦值變量的值。,,-264,,0,? 求值規(guī)則: 先求解表達式1的值 若為真(非0),求解表達式2,并把表達式2的值 作為整個條件表達式的值 若為假(0),求解表達式3,并把表達式3的值作

38、 為整個條件表達式的值,四、其它運算符,1、條件運算符 ?和: ,它們與三個操作數(shù)組組成三元運算。 ? 形式為: ? :,? 優(yōu)先級: 邏輯>條件>賦值,? 結(jié)合性:自右至左;,2、逗號運算符: , ? 形式: 表達式1,表達式2,…,表達式n ? 求值規(guī)則: 從左至右依次計算各表達式的值; ? 優(yōu)先級: 最低; ? 結(jié)合性:自左至右; ? 表達式的值:最后一個表達式的值。,又如:

39、y = x>10 ? x/10 : x>0 ? x: -x 當x的值為整型的15時,表達式的結(jié)果為: 當x的值為整型的5時,表達式的結(jié)果為:,1,5,例如: int max,a=5,b=3; max=a>b?a:b 求max的值,max的值為5,例如: a b y 表達式 y=a=4,b=5,a+b;

40、 y=(a=4,b=5,a+b); y=(a=4,b=5),a+b; y=a=(4,b=5),a+b;,4,5,4,9,4,5,9,9,4,5,9,5,5,5,5,10,? 形式有兩種: sizeof 變量名 sizeof (類型名) ? 結(jié)果為整型數(shù)。,int a; float x; printf(“%d,%d

41、”,sizeof a,sizeof x); printf(“%d,%d”,sizeof(int),sizeof(float)); 以上兩個printf語句結(jié)果均為 。,例如,3、求字節(jié)運算符: sizeof ? 作用:求得變量或某種數(shù)據(jù)類型所需的字節(jié)數(shù)。,2,4,◆ C語言允許整型、實型、字符型數(shù)據(jù)進行混合運算。 ◆ 有3種轉(zhuǎn)換方式:自動轉(zhuǎn)換、賦值轉(zhuǎn)換和強制轉(zhuǎn)換。

42、一、類型自動轉(zhuǎn)換,2.4 數(shù)據(jù)類型轉(zhuǎn)換,,特點:由數(shù)值存儲位數(shù)少的向多的轉(zhuǎn)換;整型向?qū)嵭娃D(zhuǎn)換!操作數(shù)為相同類型的不轉(zhuǎn)換,仍取原類型,特別注意此時可能帶來的錯誤!,int x=2;float y=1.6;char c=‘A’; 則: c + 1/x * y = =,例如,,char c=68.5;printf(“%c”,c);,65(int)

43、+ 0(int) * 1.6(float),65(float),二、 賦值轉(zhuǎn)換 ◆在賦值時將賦值符右邊值的類型轉(zhuǎn)換成與其左邊變量類型一致的類型。,◆有下列幾種情況: (1) 實型 整型(字符型):去掉小數(shù)部分;,(2) 整型(字符型) 實型: 補足有效位;,float f=23; 23.00000 f (7位)double f=‘A’; 65.00000

44、00000000 f(15位),,,,(3)對char、int、short、long、unsigned型數(shù)據(jù): 賦值符右邊數(shù)據(jù)(a位) 賦值符左邊的變量(b位) 若 a=b a>b,a<b,,,,原樣照賦;,截斷高a-b位,送低b 位;,有符號數(shù)據(jù) 有符號變量:符號擴展;,其他情況:高b-a位全補0。,符號擴展: 符號位為0,剩余的高位補0;

45、 符號位為1,剩余的高位補1。,例如: int a=2,b=5; float x=4.4; 則有: 表達式 結(jié)果 b/a (float)b/a (float)(b/a) (int)x%a+x (int)x%(a+x),三、強制類型轉(zhuǎ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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論