數據類型、運算符與表達式_第1頁
數據類型、運算符與表達式_第2頁
數據類型、運算符與表達式_第3頁
數據類型、運算符與表達式_第4頁
數據類型、運算符與表達式_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 第第2章章 數據類型、運算符與表達式數據類型、運算符與表達式 2.1 C語言的數據類型語言的數據類型2.2 常量和變量常量和變量2.3 整型數據整型數據2.4 實型數據實型數據2.5 字符型數據字符型數據2.6 算術運算與算術表達式算術運算與算術表達式2.7 賦值運算與賦值表達式賦值運算與賦值表達式2.8 C語言特有的運算和運算符語言特有的運算和運算符 2.1 C的數據類型的數據類型 整型整型 單精度型單精度型 基本類型基本類型 實型(浮點型)實型(浮點型) 字符型字符型 雙精度型雙精度型 數組類型數組類型數據類型數據類型 構造類型構造類型 結構體類型結構體類型 共用體類型共用體類型 指針類

2、型指針類型 空類型空類型C語言中數據有常量與變量之分,它們分別屬于以上這些類型語言中數據有常量與變量之分,它們分別屬于以上這些類型。本章將介紹基本類型中的整型、實型和字符型三種數據。本章將介紹基本類型中的整型、實型和字符型三種數據。 數據是數據是C程序處理的對象,所有的數據都具有類型,不同程序處理的對象,所有的數據都具有類型,不同的數據類型在計算機存儲方式不同的數據類型在計算機存儲方式不同。 具體分類如下具體分類如下:2.2 常量和變量常量和變量2.2.1 2.2.1 常量常量 1.1.常量的概念:常量的概念:在程序運行過程中,其值不能被改變在程序運行過程中,其值不能被改變的量稱為常量。常量是

3、存儲在存儲器中的值,常量是有類型的量稱為常量。常量是存儲在存儲器中的值,常量是有類型的,不同類型的常量在存儲器單元里都是二進制但占用存儲的,不同類型的常量在存儲器單元里都是二進制但占用存儲單元長度不同。單元長度不同。 可通過可通過書寫形式書寫形式( (表示形式)表示形式)來判別來判別2.2.常量的分類常量的分類 (1 1)整型常量)整型常量: : 1,2,-10.1,2,-10.(2 2)實型常量)實型常量: : 1.23, 1.21.23, 1.2e+4.e+4.(3 3)字符常量)字符常量: : A, b.A, b.(4 4)字符串常量:)字符串常量:“aaaa”,”cdaaaa”,”cd

4、”(5 5)符號常量)符號常量: C: C語言用一個語言用一個標識符標識符代表一個代表一個常量,這就是符號常量,必須先用常量,這就是符號常量,必須先用# #definedefine進行進行宏定義。宏定義。其定義形式如下:其定義形式如下: #define 標識符標識符 常量常量 例如:例如: #define PI 3.1415927 #define W Windows 98宏定義的功能是:宏定義的功能是:在編譯預處理時,將程序中宏定義命令在編譯預處理時,將程序中宏定義命令之后出現(xiàn)的所有之后出現(xiàn)的所有符號常量符號常量用宏定義命令中對應的常量一用宏定義命令中對應的常量一一替代一替代。 例例2-1:已

5、知圓半徑:已知圓半徑r,求圓周長,求圓周長c和圓面積和圓面積s的值。的值。#define PI 3.1416main() float r,c,s;scanf(%d,&r); c=2*PI*r; /* 編譯時用編譯時用3.1416替換替換PI */ s=PI*r*r; /* 編譯時用編譯時用3.1416替換替換PI */printf(c=%6.2f,s=%6.2fn,c,s);說明說明:1)宏定義是命令不是語句,所以不是給)宏定義是命令不是語句,所以不是給PI賦值,命賦值,命令結束沒有分號。令結束沒有分號。2)宏名一般用大寫字母,變量名用小寫字母。)宏名一般用大寫字母,變量名用小寫字母。

6、3)#define命令出現(xiàn)在函數的外面,宏只能在它出現(xiàn)之后命令出現(xiàn)在函數的外面,宏只能在它出現(xiàn)之后起作用。起作用。4)在進行宏定義時,可以引用一定義的宏)在進行宏定義時,可以引用一定義的宏#define N 5#define M N*NMain()printf(“%d”,M);2.2.2 2.2.2 變量變量1.1.變量的概念:變量的概念:在程序在程序運行過程中,其值可以被改運行過程中,其值可以被改變的量稱為變量。它用變的量稱為變量。它用標識標識符(變量名)符(變量名)來表示的。在來表示的。在內存中占據一定的存儲單元。內存中占據一定的存儲單元。2.2.變量的兩個要素變量的兩個要素(1 1)變量

7、名。每個變)變量名。每個變量都必須有一個名字量都必須有一個名字變變量名,變量命名遵循標識符量名,變量命名遵循標識符命名規(guī)則。命名規(guī)則。(2 2)變量值。在程序)變量值。在程序運行過程中,變量值存儲在運行過程中,變量值存儲在內存中。在程序中,通過變內存中。在程序中,通過變量名來引用變量的值。量名來引用變量的值。3.變量的定義方法:變量的定義方法: 類型符類型符 標識符標識符注意注意:見名知意:見名知意 先定義后使用先定義后使用符號常量名大寫,變量名小寫符號常量名大寫,變量名小寫2.3 整型數據整型數據整型數據整型數據就是數據類型為整數型的常量和變量就是數據類型為整數型的常量和變量. .常用的整數

8、類型有:整型、長整型、無符號整型和無符號常用的整數類型有:整型、長整型、無符號整型和無符號長整型等四種基本類型。不同類型的差別就在于采用不同位數長整型等四種基本類型。不同類型的差別就在于采用不同位數的二進制編碼方式,所以就要占用不同的存儲空間的二進制編碼方式,所以就要占用不同的存儲空間. .整數類型整數類型 存儲字節(jié)存儲字節(jié) 最小數值范圍最小數值范圍int 整型整型 2字節(jié)字節(jié) -3276832767long int長整型長整型 4字節(jié)字節(jié) -21474836482147483647unsigned int無符號整型無符號整型 2字節(jié)字節(jié) 065535unsigned long int無符號長

9、整型無符號長整型 4字節(jié)字節(jié) 0429496729 2.3.1 整型常量整型常量.三種表示形式三種表示形式整型常量即整常數,在語言中可用三種形式表示:整型常量即整常數,在語言中可用三種形式表示: (1)十進制。)十進制。 例如例如10、36。(2)八進制:)八進制:由(由(0-7)數字組成(以數字開頭)。)數字組成(以數字開頭)。 例如:例如:012,057。(3)十六進制:由十六進制:由09和和a-f(A-F)組成組成.(以數字以數字0 x或或0X開頭開頭)例如例如:0 x3A 表示十六進制數表示十六進制數3A,等于十進制數,等于十進制數58。 -0 x2e 表示十六進制數表示十六進制數-2

10、f,等于十進制數,等于十進制數-46。2.3.2 整型變量整型變量 1、整型數據在內存中的存放形式、整型數據在內存中的存放形式 數據在內存中以二進制的補碼表示數據在內存中以二進制的補碼表示:(2字節(jié))字節(jié)) + 10 -10 +156 -15600000000000010100000000010011100111111111111011011111111011001001.分類分類 根據占用內存字節(jié)數的不同,整型變量又根據占用內存字節(jié)數的不同,整型變量又分為分為3類:類:(1)基本整型(類型關鍵字)基本整型(類型關鍵字為為int)2。(2)短整型(類型關鍵字為)短整型(類型關鍵字為short

11、int)2。(3)長整型(類型關鍵字為)長整型(類型關鍵字為long int)4。為了充分利用變量表示范圍又將變量分為:為了充分利用變量表示范圍又將變量分為: 有符號數(有符號數( signed )可省略可省略 無符號數無符號數(unsigned ) 。 P21 表表2.2和表和表2.1C語言標準沒有規(guī)定整型變量在計算機內存中所占的字節(jié)數,它語言標準沒有規(guī)定整型變量在計算機內存中所占的字節(jié)數,它與具體的機器和操作系統(tǒng)有關與具體的機器和操作系統(tǒng)有關: IBM PC 所占位數所占位數 數的范圍數的范圍 int 16 /2 -32768+32767 short 16/2 -32768+32767 l

12、ong 32/4 - 2147483648 +2147483647 unsigned int 16/2 065535 unsigned short 16 /2 065535 unsigned long 32/4 04294967295見書上:見書上:p212.變量的定義變量的定義變量是以標識符的形式來表示其類型。變量是以標識符的形式來表示其類型。 其定義形式如下:其定義形式如下:類型符類型符 變量名變量名 (標識符)標識符);int a, b, c; /* 說明說明a,b,c為整型變?yōu)檎妥?/long e,f; /* 說明說明e,f 為長整型變量為長整型變量 */unsigned short

13、 g,h; /* 說明說明g,h 為無符號短整型為無符號短整型*/signed int x,y; * 說明說明x,y,z為帶符號整型變量,其作為帶符號整型變量,其作用同用同int x,y */ 例如:不同種類整形數據的運算 #include main() int a,b,c,d; unsigned u; a=12;b=-24 u=10;c=a+u d=b+u; printf(“a+u=%d,b+u=%dn”,c,d) 例例 :編寫求兩數和的:編寫求兩數和的C C程序并上機運行。程序如下:程序并上機運行。程序如下: main() /main() /* * 求兩數和主函數求兩數和主函數 * */

14、/ intint a,b; / a,b; /* * 說明說明a a、b b為整型變量為整型變量 * */ /a=32767; /a=32767; /* * 為變量為變量a a賦最大值賦最大值 * */ /b=1; /b=1; /* *為變量為變量b b賦值賦值 * */ /c=a+b; /c=a+b; /* * 計算計算a+ba+b并將結果賦值給變量并將結果賦值給變量c c * */ /printfprintf(“c=%dn”,c); /(“c=%dn”,c); /* * 輸出變量輸出變量c c的值的值 * */ / 變量變量a 32767 a 32767 變量變量b 1b 1 變量變量c c

15、 -32768 -32768000000000000000101111111111111111000000000000000 如果把上述程序作以下修改:如果把上述程序作以下修改: /* SUM.C源程序源程序 */main() long a,b,c; /* 說明說明a、b、c為長整型變量為長整型變量 */a=32767;b=3; c=a+b; printf(c=%ldn,c); /* 按長整型格式輸出變量按長整型格式輸出變量c的值的值 */2.5 實型數據實型數據2.5.1 實型常量實型常量 .表示形式表示形式實型常量即實數,在語言中又稱浮點數,其值有兩實型常量即實數,在語言中又稱浮點數,其值

16、有兩種表達形式:種表達形式: (1)十進制形式)十進制形式: 例如例如0.345, .345, 345.0, 345., 0.0, 0., .0(2)指數形式)指數形式:E(e)。例如例如 3.45e3, 3.45E3 表示表示3.45*103。 1.23e-1,12.3e+4.注意:注意:e前后必須有數字,前后必須有數字,e后必須為整型數。后必須為整型數。.3e3 3.e3 3e3 (合法)(合法) 3e e3 e0.3(不合法)(不合法)2、類型:缺省為、類型:缺省為double型型;后綴為后綴為F和和f,為為float型,后綴為型,后綴為L和和l,為,為long double型型 2.5

17、.2 實型變量實型變量 語言的實型變量,分為兩種:語言的實型變量,分為兩種: (1)單精度型)單精度型float:占字節(jié),占字節(jié),7位有效數字。位有效數字。 (2)雙精度)雙精度型型 double:占個字節(jié)、提供占個字節(jié)、提供1516位有效數字。位有效數字。 (3)long double: 占占10字節(jié),字節(jié),15-16位有效數位有效數字。字。例如:例如:float a,b; /* 說明變量說明變量 a,b 為單精度型實數為單精度型實數 */double c,d; /* 說明變量說明變量 c,d 為雙精度型實數為雙精度型實數 */long double e,f /* 說明變量說明變量 e,f

18、為長雙精度型實數為長雙精度型實數 */ 從下面選出與從下面選出與 043 相等的項相等的項, 然后送入其然后送入其 1.15 0 x23 3.5E+1 17+18 第二組第二組 3.5E1 0X23 45 0 x17+0 xC 第三組第三組 0 x37 35 0 x46-043 65 首先首先, 若整數值范圍是若整數值范圍是 -32768 至至 32767。在執(zhí)。在執(zhí)行下面的表達式之后行下面的表達式之后, i 的結果是什么。的結果是什么。 表達式表達式 結果結果 int i=32766; i=i+1; i= i=i+2; i=在計算機中在計算機中, 整數值的范圍是從整數值的范圍是從 -3276

19、8 至至 32767。在計算機的內存中在計算機的內存中, 一個整型數占據兩個字節(jié)。最大值是一個整型數占據兩個字節(jié)。最大值是0111111111111111, 表示表示 32767。最小值。最小值 -32768 用用 1000000000000000 表示。表示。0111111111111110 表示表示 32766。0111111111111111 + 0000000000000001 = 1000000000000000。所以所以, 32766+1=32767, 而而 32766+2=-32768。2.6 字符型數據字符型數據2.6.1 字符常量字符常量1.字符常量字符常量 用一對用一對單引

20、號單引號括起來的一個字符,稱為字符常量。括起來的一個字符,稱為字符常量。它存儲在存儲器里占用一個字節(jié)(它存儲在存儲器里占用一個字節(jié)(8位)。位)。例如,例如,A、*、$等。等。也可用字符的也可用字符的ASCII表示:表示:如:如:85表示表示U,八進制,八進制0101 表示表示A,八進制八進制0102表示表示B,十六進制,十六進制0 x5d表示表示,等等。,等等。2.轉義字符:轉義字符:特殊字符常量,以反斜杠特殊字符常量,以反斜杠“ ”開頭。開頭。 注意:注意:如果反斜杠或單引號本身作為字符常量,必須使如果反斜杠或單引號本身作為字符常量,必須使用轉義字符:用轉義字符:、。 見表見表P26.表表

21、2.3轉義字符序列及其功能轉義字符序列及其功能轉義字符轉義字符 功功 能能n 換行換行 t 水平跳格水平跳格b 退格退格 r 回車回車f 走紙換頁走紙換頁 a 報警報警 輸出單引號字符輸出單引號字符 “ 輸出雙引號字符輸出雙引號字符 ddd 至位八進制數表示的字符至位八進制數表示的字符 xdd 至位十六進制數表示的字符至位十六進制數表示的字符 輸出輸出輸輸出出字字符符控制輸出格式控制輸出格式2.6.2 字符串常量字符串常量1. 字符串常量字符串常量是用是用一對雙引號一對雙引號括起來字符序列。括起來字符序列。 字符串長度:字符串長度:字符串中字符的個數。長度為字符串中字符的個數。長度為0的字符串

22、稱為的字符串稱為空空串串,表示為,表示為“”“” (一對緊連的雙引號)。(一對緊連的雙引號)。例如,例如,“How do you do.0”、“Good morning.0” 長度分別為長度分別為15和和16(空格也是一個字符)(空格也是一個字符)2.字符串的結束標志為字符串的結束標志為0,每個字符串常量結尾都有一個字,每個字符串常量結尾都有一個字符符0(一般情況下是由系統(tǒng)自動加上)。一般情況下是由系統(tǒng)自動加上)。如如 :“china” 在內存中為在內存中為 a為一個字符為一個字符 a “a”為兩個字符為兩個字符 “a”chin a0aa0綜上所述,字符常量綜上所述,字符常量A與字符串常量與字

23、符串常量A是兩回是兩回事:事:(1)定界符不同:定界符不同:字符常量使用字符常量使用單引號單引號,而字,而字符串常量使用符串常量使用雙引號雙引號;(2)長度不同:長度不同:字符常量的長度固定為字符常量的長度固定為1,而字,而字符串常量的長度,可以是符串常量的長度,可以是0,也可以是某個整,也可以是某個整數;數;(3)存儲要求不同:存儲要求不同:字符常量存儲的是字符的字符常量存儲的是字符的ASCII碼值,而字符串常量,除了要存儲有效碼值,而字符串常量,除了要存儲有效的字符外,還要存儲一個結束標志的字符外,還要存儲一個結束標志0。 如果如果反斜杠反斜杠和和雙引號雙引號作為字符串中的有效字符,則必須

24、使用作為字符串中的有效字符,則必須使用轉義字符轉義字符。如:(如:(1)C:msdosv6.22 C:msdosv6.22 (2)I say:Goodbye! I say:Goodbye! ”2.6.3字符變量字符變量字符變量字符變量用來存放字符,且只能存放一個字符。字符變量的類型關鍵字用來存放字符,且只能存放一個字符。字符變量的類型關鍵字為為char,一般占用,一般占用1字節(jié)內存單元字節(jié)內存單元 。 有符號和無符號字符變量。有符號和無符號字符變量。 有符號字符型數據取值的范圍為有符號字符型數據取值的范圍為-128-127 無符號字符型數據取值的范圍為無符號字符型數據取值的范圍為0-256字符

25、變量的定義:字符變量的定義: , char c1,c2; unsigned char c3,c4;字符變量賦值:字符變量賦值: 2、字符數據與整型數據可以相互賦值;字符型數據,、字符數據與整型數據可以相互賦值;字符型數據,既可以字符形式輸出,也可以整數形式輸出。既可以字符形式輸出,也可以整數形式輸出。例如:例如: main() int i; char c; i=a; c=97; printf(“ %c,%dn”,c,c ); printf(“ %c, %dn”,i,i); 等同于等同于i=97;c=aunsight char c;3.允許對字符數據進行算術運算,此時就是對它們的允許對字符數據進

26、行算術運算,此時就是對它們的ASCII碼值進行算術運算。碼值進行算術運算。 例例:字符數據的算術運算。字符數據的算術運算。 main() char ch1,ch2; ch1=a; ch2=B; /*字母的大小寫轉換字母的大小寫轉換* / printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32); 例例: 大小寫字符之間的轉換大小寫字符之間的轉換 main() char ch1,ch2; ch1=a; ch2=B; ch1=ch1-32; ch2=ch2+32; printf(“%c,%c”,ch1,ch2);2.6.4 變量初始化變量初始化2.7 算術運算與算術表達式算術運

27、算與算術表達式 一、在語言中,除控制語句和輸入輸出函一、在語言中,除控制語句和輸入輸出函數外,其它所有基本操作都作為運算符處理。數外,其它所有基本操作都作為運算符處理。 C語言的運算符:語言的運算符:1.五種基本算術運算符五種基本算術運算符兩個兩個整數整數相除其值為整數,如:相除其值為整數,如:5/3值為值為1。除數和被除數有一個為負數,結果除數和被除數有一個為負數,結果“向零取整向零取整”。如:。如:-5/3值為值為-1 除數和被除數有一個為實數,結果為除數和被除數有一個為實數,結果為double型,如:型,如:5.0/2值為值為2.5 單目運算:單目運算:+,-正負號正負號雙目運算:雙目運

28、算:+,-,*,/,% 加減乘除加減乘除 2.表達式和算術表達式表達式和算術表達式(1)表達式的概念)表達式的概念 用運算符和括號將運算對象(常量、變量和函數用運算符和括號將運算對象(常量、變量和函數等)連接起來的、符合語言語法規(guī)則的式子,等)連接起來的、符合語言語法規(guī)則的式子,稱為稱為表達式。表達式。單個常量、變量或函數,可以看作是表達式的一種單個常量、變量或函數,可以看作是表達式的一種特例特例,稱為簡單表達式,稱為簡單表達式, 。(2)算術表達式的概念)算術表達式的概念表達式中的運算符都是算術運算符。表達式中的運算符都是算術運算符。例如例如,3.14*r*r,x+sqrt(0.25*y)/

29、(abs(a+b)-3.6)等,等,都是算術表達式。都是算術表達式。3.運算符的優(yōu)先級與結合性運算符的優(yōu)先級與結合性(1)語言規(guī)定了運算符的優(yōu)先級和結合性。)語言規(guī)定了運算符的優(yōu)先級和結合性。 優(yōu)先級優(yōu)先級:先:先%,*,/后后+,- 結合性:結合性:指當一個操作數兩側的運算符具有相同指當一個操作數兩側的運算符具有相同的優(yōu)先級時,該操作數是先與左邊的運算符結合,還的優(yōu)先級時,該操作數是先與左邊的運算符結合,還是先與右邊的運算符結合。是先與右邊的運算符結合。自左至右的結合方向,稱為自左至右的結合方向,稱為左結合性左結合性。反之,稱為。反之,稱為右結合性。右結合性。 例如,算術運算符的結合方向是例

30、如,算術運算符的結合方向是“自左至右自左至右”,即:在執(zhí)行,即:在執(zhí)行“a b + c”時,變量時,變量a先與減號結合,執(zhí)行先與減號結合,執(zhí)行“a - b”;然后再執(zhí)行加;然后再執(zhí)行加c的運算。的運算。 4.數據類型轉換數據類型轉換(1) 在語言中,整型、實型和字符型數在語言中,整型、實型和字符型數據間可以混合運算據間可以混合運算(因為字符數據與整型數據可(因為字符數據與整型數據可以通用)。以通用)。如果一個運算符兩側的操作數的數據類型不如果一個運算符兩側的操作數的數據類型不同,則系統(tǒng)按同,則系統(tǒng)按“先轉換、后運算先轉換、后運算”的原則,首先的原則,首先將數據自動轉換成同一類型,然后在同一類型

31、數將數據自動轉換成同一類型,然后在同一類型數據間進行運算。轉換規(guī)則如據間進行運算。轉換規(guī)則如P28所示。所示。double float long 高高 unsigned int (char,short) 低低1)橫向向左的箭頭,表示必須的轉換。)橫向向左的箭頭,表示必須的轉換。char和和short 型必須轉型必須轉換成換成 int 型,型,float型必須轉換成型必須轉換成double型。型。 2)縱向向上的箭頭,表示不同類型的轉換方向。)縱向向上的箭頭,表示不同類型的轉換方向。 例如,例如,int型與型與double型數據進行混合運算,則先將型數據進行混合運算,則先將int型數據轉型數據轉

32、換成換成double型,然后在兩個同類型的數據間進行運算,結果為型,然后在兩個同類型的數據間進行運算,結果為double型。型。 注意:箭頭方向只表示數據類型由低向高轉換,不要理解為注意:箭頭方向只表示數據類型由低向高轉換,不要理解為int型先轉換成型先轉換成unsigned型,再轉換成型,再轉換成long型,最后轉換成型,最后轉換成double型。型。int i; float f; double d; long e;10 + a + i * f d / e(2)數據類型強制轉換數據類型強制轉換:除自動轉換外,語言也允許強制轉除自動轉換外,語言也允許強制轉換,將一個表達式轉換所需類型。換,將一

33、個表達式轉換所需類型。 格式為格式為: (類型名類型名) (表達式表達式)當被轉換的表達式是一個簡單表達式時,外面的一對圓括號可以缺省。當被轉換的表達式是一個簡單表達式時,外面的一對圓括號可以缺省。例如,例如,(double)a(等價于(等價于(double)(a)/*將變量將變量a的值轉換成的值轉換成double型型*/(int)(x + y) 與與int(x)+y不同不同 /*將將x+y的結果轉換成的結果轉換成int型型*/(float)5/2(等價于(等價于(float)(5)/2)/*將將5轉換成實型,再除以轉換成實型,再除以2(=2.5)*/(float)(5/2) /*將將5整除整

34、除2的結果(的結果(2)轉換成實型)轉換成實型 (2.0)*/ 例如例如: #include “stdio.h” main() float x; int i; x=3.6; i=(int)x printf(“x=%f”,i=%d”,x,i); 輸出結果輸出結果:x=3.600000, i=3注意:注意:x的類型沒有變化的類型沒有變化2.8 C語言特有的運算和運算符語言特有的運算和運算符2.8.1 2.8.1 自增(自增(+), ,自減自減(- - -)運算)運算 1.1.作用:作用:自增運算使單個變自增運算使單個變量的值增,自減運算使單量的值增,自減運算使單個變量的值減。個變量的值減。 2.2

35、.用法與運算規(guī)則用法與運算規(guī)則(1)(1)前置運算前置運算+i+i,-i;-i;在使用在使用i i之前,先使之前,先使i i的值加的值加1 1或減或減1 1。(2)(2)后置運算后置運算i+, i-;i+, i-;在使用在使用i i之后,使之后,使i i的值加的值加1 1或或減減1 1。 輸出結果:輸出結果:1 0 1 1 案例案例2.4 自增、自減運算符的用法與運算規(guī)則示自增、自減運算符的用法與運算規(guī)則示例。例。 main( ) int x=6, y; printf(x=%dn,x); /*輸出輸出x的初值的初值*/ y = +x; /*前置運算前置運算*/ printf(“ x=%d,y=

36、%dn,x,y); y = x - -; /*后置運算后置運算*/ printf(“x=%d,y=%dn,x,y); 程序運行結果:程序運行結果:x=6x=7,y=7x=6,y=7 思考題:思考題:如果將案例如果將案例“y=+x;”語句語句中的前置運算改為后置(中的前置運算改為后置(y=x+;),),“y=x-;”語句中的后置運算改為前置語句中的后置運算改為前置(y=-x;),程序運行結果會如何?),程序運行結果會如何?程序運行結果:程序運行結果:x=6x=7,y=6x=6,y=6 3.說明說明(1)自增、自減運算,常用于循環(huán)語句中,使循環(huán))自增、自減運算,常用于循環(huán)語句中,使循環(huán)控制變量加(

37、或減),以及指針變量中,使指針指向下控制變量加(或減),以及指針變量中,使指針指向下(或上)一個地址。(或上)一個地址。(2)自增、自減運算符,不能用于常量和表達式自增、自減運算符,不能用于常量和表達式,只只能用于變量。能用于變量。例如,例如,5+、-(a+b)等都是非法的。等都是非法的。(3)+和和-優(yōu)先級別高于算術運算符。結合方向是優(yōu)先級別高于算術運算符。結合方向是“自右向左自右向左”。 如:如:-i+相當于相當于-(i+)2.9 賦值運算與賦值表達式賦值運算與賦值表達式 1.賦值運算賦值運算 賦值運算符賦值運算符“=” 用法:用法: 變量變量 = 賦值表達式賦值表達式它的作用是將一個表達

38、式的值賦給一個變量。它的作用是將一個表達式的值賦給一個變量。(常常量,變量是表達式的特例量,變量是表達式的特例)。 例如,例如,x = 5 y = (float)5 / 2 如果賦值運算符兩邊的數據類型不相同,系如果賦值運算符兩邊的數據類型不相同,系統(tǒng)將自動進行類型轉換,即把賦值號右邊的類型統(tǒng)將自動進行類型轉換,即把賦值號右邊的類型換成左邊的類型。換成左邊的類型。具體規(guī)定如下:具體規(guī)定如下:1.實型賦予整型,舍去小數部分。實型賦予整型,舍去小數部分。 2.整型賦予實型,數值不變,但將以浮整型賦予實型,數值不變,但將以浮點形式存放,點形式存放, 即增加小數部分即增加小數部分(小數部分小數部分的值

39、為的值為0)。3.字符型賦予整型,由于字符型為一個字符型賦予整型,由于字符型為一個字節(jié),字節(jié), 而整型為二個字節(jié),故將字符的而整型為二個字節(jié),故將字符的ASCII碼值放到整型量的低八位中,高碼值放到整型量的低八位中,高八位為八位為0。所得整型值為字符的。所得整型值為字符的ASCII 。4.整型賦予字符型,只把低八位賦予字整型賦予字符型,只把低八位賦予字符量。符量。 5.double賦予賦予float型,取前型,取前7位有效數字。位有效數字。5 23.000000例如:例如:main()int i;float f;i=5.34f=23printf(“%d%fn”,i,f)2.9.2關系運算符與關

40、系表達式關系運算符與關系表達式 關系運算實際上是比較運算,運算結果只有兩個值,關系運算實際上是比較運算,運算結果只有兩個值,真真(1)或假或假(0). 關系運算符包括:關系運算符包括: , = , , b+c ab a=bc “=“ 作用是把作用是把=右邊的值賦給左邊的變量,其值為變量右邊的值賦給左邊的變量,其值為變量的值。的值。 “=”是比較左右兩邊表達式的值是否相等,相等時為是比較左右兩邊表達式的值是否相等,相等時為1,否則為,否則為02.9.4 邏輯運算邏輯運算 邏輯運算符邏輯運算符 & 邏輯與邏輯與 自左向右自左向右 a&b,38&a=b| 邏輯或邏輯或 自左向

41、右自左向右 a|b,3b) & (xy) 的值為。的值為。 ab & xy 的值為。的值為。 (y|b) & (y|a) 的值為。的值為。 y|b & y|a 的值為。的值為。注意:注意:兩式結果雖然一樣,但兩式的含義不同。兩式結果雖然一樣,但兩式的含義不同。式式中由于括號的優(yōu)先級高于中由于括號的優(yōu)先級高于“&”,因此,先計算,因此,先計算“y|b”和和“y|a”后,再將兩個結果進行后,再將兩個結果進行“&”運算。而運算。而式由于式由于“&”的優(yōu)先級高于的優(yōu)先級高于“|”,故要先計算,故要先計算“b&y”,其結果為,其結果為,再計

42、算,再計算“y|0”,其值也為,最后計算,其值也為,最后計算“0|a”,結果為,結果為。 2.9.2 逗號運算(,)及其表達式逗號運算(,)及其表達式語言提供一種用逗號運算符語言提供一種用逗號運算符“,”連接起來的式子,稱為連接起來的式子,稱為逗號表達式。逗號運算符又稱順序求值運算符。逗號表達式。逗號運算符又稱順序求值運算符。()2.9.5 條件運算符與條件表達式條件運算符與條件表達式 條件運算:其形式為:條件運算:其形式為:表達式表達式1 ? 表達式表達式2 : 表達式表達式3 含義:含義:先求表達式先求表達式1的值,若為非的值,若為非0,則再求表達式,則再求表達式2的值,并把此值作的值,并

43、把此值作為整個條件表達式的值;若為為整個條件表達式的值;若為0,再求表達式,再求表達式3的值,并把此值作為整個的值,并把此值作為整個條件表達式的值。條件表達式的值。 優(yōu)先級優(yōu)先級高于高于賦值運算和逗號運算符,但賦值運算和逗號運算符,但低于低于所有關系運算、所有關系運算、邏輯運算和算術運算。邏輯運算和算術運算。 其結合性是其結合性是自右向左自右向左結合結合 當多個條件表達式嵌套使用時,每個后續(xù)的當多個條件表達式嵌套使用時,每個后續(xù)的“:”總與總與前面最近的、沒有配對的前面最近的、沒有配對的“?”相聯(lián)系。相聯(lián)系。 如如 a0 ? a/b:ab)?a:b a=35?6:4=7?1:0 2.9.5 逗

44、號運算(,)及其表達式逗號運算(,)及其表達式語言提供一種用逗號運算符語言提供一種用逗號運算符“,”連接起來的式子,連接起來的式子,稱為逗號表達式。逗號運算符又稱順序求值運算符稱為逗號表達式。逗號運算符又稱順序求值運算符1.一般形式一般形式 表達式表達式, 表達式表達式, , 表達式表達式n2.求解過程求解過程 自左至右,依次計算各表達式的值,自左至右,依次計算各表達式的值,“表達式表達式n” 的值即為整個逗號表達式的值。的值即為整個逗號表達式的值。例如例如, “a = 3 * 5, a * 4”的值的值=60: 先求解先求解a = 3 * 5,得,得a=15;再求;再求a * 4 = 60,

45、所以逗號表達式的值所以逗號表達式的值=60。 “(a = 3 * 5, a * 4), a + 5”的值的值=20:先求解先求解a = 3 * 5,得,得a=15;再求;再求a * 4=60;最后求;最后求解解a + 5=20,所以逗號表達式的值,所以逗號表達式的值=20。 如:x=(a=3,6*3) 結果x=18 x=a=3,6*a x=3注意:注意:并不是任何地方出現(xiàn)的逗號,都是逗號并不是任何地方出現(xiàn)的逗號,都是逗號運算符。很多情況下,逗號僅用作分隔符。運算符。很多情況下,逗號僅用作分隔符。 2.9.6 位運算符位運算符 語言提供了語言提供了6種基本位運算功能:種基本位運算功能: 運算符運

46、算符 含義含義 運算對象個數運算對象個數 結合方向結合方向 優(yōu)先優(yōu)先級級 按位求反按位求反 單目運算符單目運算符 自右向左自右向左 1 按位右移按位右移 雙目運算符雙目運算符 自左向右自左向右 2& 按位與按位與 雙目運算符雙目運算符 自左向右自左向右 3 | 按位或按位或 雙目運算符雙目運算符 自左向右自左向右 4 按位異或按位異或 雙目運算符雙目運算符 自左向右自左向右 5 說明:說明: 位運算的優(yōu)先級是:位運算的優(yōu)先級是:&|。 位運算的運算對象只能是整型位運算的運算對象只能是整型(int)或字符型或字符型(char)的數據。的數據。 位運算是對運算量的每一個二進制位分別

47、進位運算是對運算量的每一個二進制位分別進行操作。行操作。 已知已知 a: 1010,1001,0101,0111 b: 0110,0000,1111,10111.按位與運算按位與運算 (&)按位與是對兩個運算量相應的位進行邏按位與是對兩個運算量相應的位進行邏輯與,輯與,&的運算規(guī)則與邏輯與的運算規(guī)則與邏輯與&相相同。同。按位與表達式:按位與表達式:c=a&b a: 1010,1001,0101,0111 & b: 0110,0000,1111,1011 c: 0010,0000,0101,0011 2.按位或運算(按位或運算(|)按位或是對兩個運算量相應的位進行邏輯或操作,其按位或是對兩個運算量相應的位進行邏輯或操作,其運算規(guī)則與邏輯或運算規(guī)則與邏輯或|相同。相同。按位或表達式按位或表達式:c=a|b a: 1010,1001,0101,0111| b: 0110,0000,1111,1011 c: 1110,1001,1111,11113.按位異或運算(按位

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論