C語言課件第二章數(shù)據(jù)類型_第1頁
C語言課件第二章數(shù)據(jù)類型_第2頁
C語言課件第二章數(shù)據(jù)類型_第3頁
C語言課件第二章數(shù)據(jù)類型_第4頁
C語言課件第二章數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)類型決定:數(shù)據(jù)類型決定:1. 數(shù)據(jù)占內(nèi)存字節(jié)數(shù)數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2. 數(shù)據(jù)取值范圍數(shù)據(jù)取值范圍3. 其上可進行的操作其上可進行的操作2.2.1 常量和符號常量常量和符號常量在程序運行過程中在程序運行過程中, ,其值不能被改變的量稱為常量其值不能被改變的量稱為常量常量區(qū)分為不同的類型:常量區(qū)分為不同的類型:整型整型 100100,125125,-100-100,0 0實型實型 3.14 3.14 , 0.1250.125,-3.789-3.789字符型字符型 a, ba, b,22字符串字符串 “a”, “a”, “a ab b”,”1232”1232” 程序中用#define命令行定義PI代

2、表常量3.14,此后凡在本文件中出現(xiàn)的PI都代表3.14,可以和常量一樣進行運算用一個標(biāo)識符代表一個常量的,稱為符號常量,即以標(biāo)識符形式出現(xiàn)的常量。符號常量的值在其作用域(在本例中為主函數(shù))內(nèi)不能改變,也不能再被賦值。 如再用賦值語句給PI賦值是錯誤的。Pi=4;/* 錯誤,不能給符號常量賦值*/3.2.23.2.2變量變量 變量代表內(nèi)存中具有特定屬性的一個存儲變量代表內(nèi)存中具有特定屬性的一個存儲單元,它用來存放數(shù)據(jù),這就是變量的值,在單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運行期間,這些值是可以改變的。程序運行期間,這些值是可以改變的。 變量名實際上是一個以一個名字對應(yīng)代表變量名實際上是

3、一個以一個名字對應(yīng)代表一個地址,在對程序編譯連接時由編譯系統(tǒng)給一個地址,在對程序編譯連接時由編譯系統(tǒng)給每一個變量名分配對應(yīng)的內(nèi)存地址。從變量中每一個變量名分配對應(yīng)的內(nèi)存地址。從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。址,從該存儲單元中讀取數(shù)據(jù)。 變量命名的規(guī)定:變量命名的規(guī)定: 語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。 例:例:sum,_total, month, Student_name lotus_1_2_,BASIC, li_ling M.D.John, ¥123,3D6

4、4,ab 編譯系統(tǒng)將編譯系統(tǒng)將大寫字母和小寫字母認為大寫字母和小寫字母認為是兩個是兩個不同的字符。不同的字符。 建議變量名的長度最好不要超過建議變量名的長度最好不要超過8 8個字符。個字符。在選擇變量名和其它標(biāo)識符時,應(yīng)注意做到在選擇變量名和其它標(biāo)識符時,應(yīng)注意做到“見名知意見名知意”,即選有含意的英文單詞即選有含意的英文單詞 (或其縮寫)作標(biāo)識符。(或其縮寫)作標(biāo)識符。要求對所有用到的變量作強制定義,也就是要求對所有用到的變量作強制定義,也就是“先定義,后使用先定義,后使用” 。注意注意2.3.1整型常量的表示方法整型常量的表示方法 整型常量即整常數(shù)。在語言中,整常數(shù)可用以下三種形式表示:(

5、1)十進制整數(shù)。 如:如:123, -456.4。(2)八進制整數(shù)。以0頭的數(shù)是八進制數(shù)。 如:如:0123表示八進制數(shù)123,等于十進制數(shù)83,-011表示八進制數(shù)-11,即十進制數(shù)-9。(3)(3)十六進制整數(shù)。以十六進制整數(shù)。以0 x0 x開頭的數(shù)是開頭的數(shù)是1616進制數(shù)。進制數(shù)。 如:如:0 x1230 x123,代表,代表1616進制數(shù)進制數(shù)123,123,等于十進制數(shù)等于十進制數(shù)291 291 .zzzz .zzzz-0 x12-0 x12等于十等于十進制數(shù)進制數(shù)1010 2.3.2 整型變量整型變量 (1)整型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)據(jù)在內(nèi)存中是以二進制形式存放的。 如: i

6、nt i; /* 定義為整型變量 */ i=10; /* 給i賦以整數(shù)10 */ 十進制數(shù)10的二進制形式為1010,Turbo C 2.0和Turbo C+ 3.0為一個整型變量在內(nèi)存中分配2個字節(jié)的存儲單元(不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,VC+ 6.0則分配4個字節(jié))。數(shù)值是以補碼(complement) 表示的。 (2)(2)整型變量的分類:整型變量的分類:共共六六種種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int (signed)short (int )(signed) long (int)unsigned intu

7、nsigned short (int)unsigned long (int)括號表示其中的內(nèi)容是可選的括號表示其中的內(nèi)容是可選的注意注意整數(shù)類型的有關(guān)數(shù)據(jù):(3)3)整型變量的定義整型變量的定義: : 規(guī)定在程序中所有用到的變量都必須在規(guī)定在程序中所有用到的變量都必須在程序中定義,即程序中定義,即“強制類型定義強制類型定義”。 例如例如: : intint a,b a,b(指定變量、為整型)(指定變量、為整型) unsigned short c,d;unsigned short c,d;(指定變量、(指定變量、為無符號短整型)為無符號短整型) long e,f;long e,f;( (指定變量

8、、為長整型)指定變量、為長整型)可以看到不同種類的整型數(shù)據(jù)可以進行算術(shù)運算 運行結(jié)果運行結(jié)果: :, 2.3.3 整型常量的類型整型常量的類型 (1)一個整數(shù),如果其值在-32768+32767范圍內(nèi),認為它是short int型,它可以賦值給short int型變量。 (2) 一個整數(shù),如果其值超過了上述范圍,而在-2147483637+2147483647(-231 231-1)范圍內(nèi),則認為它是基本整型為長整型。可以將它賦值給一個int或long int型變量。 (3) 一個整常量后面加一個字母u或U,認為是unsigned int型,如12345u,在內(nèi)存中按unsigned int規(guī)

9、定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù))。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補碼53191,然后按無符號數(shù)存儲。(4) 在一個整常量后面加一個字母l或L,則認為是long int型常量。例如123l.432L.0L等。這往往用于函數(shù)調(diào)用中。如果函數(shù)的形參為long int型,則要求實參也為long int型。2.4.12.4.1浮點型常量的表示方法浮點型常量的表示方法兩種表兩種表示形式示形式小數(shù)小數(shù)指數(shù)指數(shù)0.1230.1233e-33e-3 字母字母e(e(或或E)E)之前必須有數(shù)字,且之前必須有數(shù)字,且e e后面的指后面的指數(shù)必須為整數(shù)數(shù)必須為整數(shù) X

10、X 注意注意規(guī)范化的指數(shù)形式:規(guī)范化的指數(shù)形式: 在字母e(或E)之前的小數(shù)部分中,小數(shù)點左邊應(yīng)有一位(且只能有一位)非零的數(shù)字. 例如例如: : 123.456可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e 其中的1.23456e31.23456e3稱為“規(guī)范化的指數(shù)形式”。2.4.2 2.4.2 浮點型變量浮點型變量(1)(1)浮點型數(shù)據(jù)在內(nèi)存中的存放形式浮點型數(shù)據(jù)在內(nèi)存中的存放形式 一個浮點型數(shù)據(jù)一般在內(nèi)存中占一個浮點型數(shù)據(jù)一般在內(nèi)存中占4 4個字個字節(jié)節(jié)(32(32位位) )。與整

11、型數(shù)據(jù)的存儲方式不同,浮。與整型數(shù)據(jù)的存儲方式不同,浮點型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一點型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個浮點型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分個浮點型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。類型類型 位數(shù)位數(shù) 數(shù)的范圍數(shù)的范圍 有效數(shù)有效數(shù)字字float float 32 32 1010-37 -37 101038 38 6 67 7 位位doubledouble型型 64 64 1010-307-3071010308308 15 151616位位long double 128 10long double

12、 128 10-4931-493110104932 4932 18181919位位(2) (2) 浮點型變量的分類浮點型變量的分類 浮點型變量分為單精度(float型)、雙精度(double型)和長雙精度型(long double)三類形式。一個浮點型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個很大的數(shù)和一個很小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù)運行結(jié)果:運行結(jié)果: 123456.789e5123456.789e52.4.3 浮點型常量的類型浮點型常量的類型 C C編譯系統(tǒng)將浮點型常量作為雙精度來處理編譯系統(tǒng)將浮點型常量作為雙精度來處理

13、 例如例如:f = 2.45678 f = 2.45678 * * 4523.65 4523.65 系統(tǒng)先把系統(tǒng)先把2.456782.45678和和4523.654523.65作為雙精度數(shù),然作為雙精度數(shù),然后進行相乘的運算,得到的乘也是一個雙精度數(shù)。后進行相乘的運算,得到的乘也是一個雙精度數(shù)。最后取其前最后取其前7 7位賦給浮點型變量位賦給浮點型變量f f。2.5.1 字符常量字符常量(1)(1)用單引號包含的一個字符是字符型常量用單引號包含的一個字符是字符型常量(2)(2)只能包含一個字符只能包含一個字符a,A, 1a,A, 1abcabc、“a”a”注意注意 有些以有些以“”開頭的特殊字

14、符稱為轉(zhuǎn)義字符開頭的特殊字符稱為轉(zhuǎn)義字符n n 換行換行t t 橫橫向跳格向跳格r r 回回車車 反反斜杠斜杠dddddd dddddd表示表示1 1到到3 3位八進制數(shù)字位八進制數(shù)字xhhxhh hhhh表示表示1 1到到2 2位十六進制數(shù)字位十六進制數(shù)字如 101 -A 012 -n 376 - x61 -a 60 -0 483 -()例:A-101-x41-65如 A65, a97, 048 , n10如 a A ? n 101例例 轉(zhuǎn)義字符舉例轉(zhuǎn)義字符舉例(ch2_001.c,ch2_004.c) main() printf(101 x42 Cn); printf(I say:How

15、are you?n); printf(C Programn); printf(Turbo C);運行結(jié)果:運行結(jié)果:(屏幕顯示屏幕顯示)A B CIsay:”How are you?”C ProgramTurbo C例例 main() printf(“Yb=n”); 運行結(jié)果:運行結(jié)果:屏幕顯示:屏幕顯示:=打印機輸出:打印機輸出:2.5.2字符變量字符變量字符型變量用來存放字符常量,注意只能放一字符型變量用來存放字符常量,注意只能放一個字符。個字符。字符變量的定義形式如下:字符變量的定義形式如下:char c1,c2;char c1,c2;在本函數(shù)中可以用下面語句對在本函數(shù)中可以用下面語句對

16、c1,c2c1,c2賦值:賦值: c1c1aa;c2c2 b b ;一個字符變量在內(nèi)存中占一個字節(jié)。一個字符變量在內(nèi)存中占一個字節(jié)。 2.5.3字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法將一個字符常量放到一個字符變量中,實際上并不將一個字符常量放到一個字符變量中,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的的相應(yīng)的ASCIIASCII代碼放到存儲單元中。代碼放到存儲單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。一個字符數(shù)據(jù)之間可以通用。一個字符數(shù)據(jù)既可以以字符形式輸出,也

17、可既可以以字符形式輸出,也可以以整數(shù)形式輸出。以以整數(shù)形式輸出。注意注意在第和第4行中,將整數(shù)和分別賦給c1和c2,它的作用相當(dāng)于以下兩個賦值語句:c1;c2;因為a和b的ASCII碼為和運行結(jié)果:運行結(jié)果: 97 9897 98程序的作用是將兩個小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從代碼表中可以看到每一個小寫字母比它相應(yīng)的大寫字母的碼大。語言允許字符數(shù)據(jù)與整數(shù)直接進行算術(shù)運算。 運行結(jié)果:運行結(jié)果: 2.5.4字符串常量字符串常量字符串常量字符串常量是一對是一對雙撇號雙撇號括起來的字符序列括起來的字符序列. .合法的字符串常量合法的字符串常量: :“How do you do.”, “CHI

18、NA”How do you do.”, “CHINA”, “a” a” , “ “$123.45”$123.45”可以輸出一個字符串,如可以輸出一個字符串,如printf(“Howprintf(“How do you do.”) do you do.”); 是字符常量,是字符常量, ” ”是字符串常量,二者不同。是字符串常量,二者不同。 如如:假設(shè)被指定為字符變量:假設(shè)被指定為字符變量 :char c;char c;c=a;c=a; ”a”a”;c c”CHINA”;CHINA”; 結(jié)論結(jié)論:不能把一個字符串常量賦給一個字符變量。規(guī)定:在每一個字符串常量的結(jié)尾加一個規(guī)定:在每一個字符串常量的結(jié)

19、尾加一個 “ “字符字符串結(jié)束標(biāo)志串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。規(guī)定以字符規(guī)定以字符作為字符串結(jié)束標(biāo)志。作為字符串結(jié)束標(biāo)志。 如如:如果有一個字符串常量如果有一個字符串常量” ” ,實,實際上在內(nèi)存中是:際上在內(nèi)存中是: 它占內(nèi)存單元不是個字符,而是個字符,它占內(nèi)存單元不是個字符,而是個字符,最后一個字符為最后一個字符為。但在輸出時不輸出。但在輸出時不輸出。(1)語言允許在定義變量的同時使變量初始化如如: : int a=3; / 指定為整型變量,初值為 float f=3.56; / 指定為浮點型變量,初值為.56 char c= a; /

20、指定為字符變量,初值為a (2)可以使被定義的變量的一部分賦初值。 如如: : int a,b,c=5; 表示指定、為整型變量,但只對初始化,c的初值為(3)如果對幾個變量賦以同一個初值, 應(yīng)寫成:int a=3,b=3,c=3; 表示、的初值都是。 不能寫成 int a=b=c=3; 注意:注意:初始化不是在編譯階段完成的而是在程序運行時執(zhí)行本函數(shù)時賦初值的,相當(dāng)于有一個賦值語句。 整型(包括int,short,long)、浮點型(包括float,double)可以混合運算。在進行運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進行運算.不同類型數(shù)據(jù)間的轉(zhuǎn)換隱式轉(zhuǎn)換運算轉(zhuǎn)換-不同類型數(shù)據(jù)混合運

21、算時賦值轉(zhuǎn)換-把一個值賦給與其類型不同的變量時輸出轉(zhuǎn)換-輸出時轉(zhuǎn)換成指定的輸出格式函數(shù)調(diào)用轉(zhuǎn)換-實參與形參類型不一致時轉(zhuǎn)換運算轉(zhuǎn)換規(guī)則:不同類型數(shù)據(jù)運算時先自動轉(zhuǎn)換成同一類型doublefloatlongunsignedintchar,short低高說明:必定的轉(zhuǎn)換運算對象類型不同時轉(zhuǎn)換例 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例 i

22、nt i; float f; double d; long l;3.8.1 3.8.1 運算符簡介運算符簡介 的運算符有以下幾類:的運算符有以下幾類:(1)算術(shù)運算符 (+ - * / %)(2)關(guān)系運算符 (?。?3)邏輯運算符 (!|)(4)位運算符 ( |)(5)賦值運算符 (及其擴展賦值運算符)(6)條件運算符 (?:)(7)逗號運算符 (,)(8)指針運算符 (*和)(9)求字節(jié)數(shù)運算符()(10)強制類型轉(zhuǎn)換運算符( (類型) )(11)分量運算符(-)(12)下標(biāo)運算符()(13)其他 (如函數(shù)調(diào)用運算符()3.8.2 算術(shù)運算符和算術(shù)表達式算術(shù)運算符和算術(shù)表達式 (1)(1)基

23、本的算術(shù)運算符基本的算術(shù)運算符: : (加法運算符,或正值運算符。如(加法運算符,或正值運算符。如: :、)、) (減法運算符,或負值運算符。如(減法運算符,或負值運算符。如: :、)、)* * (乘法運算符。如(乘法運算符。如: :* *) (除法運算符。如(除法運算符。如: :) (模運算符,或稱求余運算符(模運算符,或稱求余運算符,兩側(cè)均應(yīng)為整,兩側(cè)均應(yīng)為整型數(shù)據(jù)型數(shù)據(jù),如,如: :的值為的值為; ;5%35%3的值為的值為2 2;- -5%35%3的值為的值為-2-2; 5%(-3)5%(-3)的值為的值為2 2;-5%(-3)-5%(-3)的值為的值為-2-2;12.3%3 12.3

24、%3 若若a a能被能被b b整除,則有:整除,則有:a%b=0 a%b=0 )。)。(2) (2) 算術(shù)表達式和運算符的優(yōu)先級與結(jié)合性算術(shù)表達式和運算符的優(yōu)先級與結(jié)合性基本的算術(shù)運算符基本的算術(shù)運算符: : 用算術(shù)運算符和括號將運算對象用算術(shù)運算符和括號將運算對象( (也稱操作數(shù))也稱操作數(shù))連接起來的、符合語法規(guī)則的式子,稱為連接起來的、符合語法規(guī)則的式子,稱為算術(shù)表達式。運算對象包括常量、變量、算術(shù)表達式。運算對象包括常量、變量、函數(shù)等。函數(shù)等。 例如例如: : * */ /- -.5.5aa是一個合法的表達是一個合法的表達式式語言規(guī)定了運算符的優(yōu)先級和結(jié)合性。語言規(guī)定了運算符的優(yōu)先級和

25、結(jié)合性。 在表達式求值時,先按運算符的優(yōu)先級別高低在表達式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。次序執(zhí)行,例如先乘除后加減。 規(guī)定了各種運算符的結(jié)合方向規(guī)定了各種運算符的結(jié)合方向( (結(jié)合性結(jié)合性) ) 算術(shù)運算符的結(jié)合方向為算術(shù)運算符的結(jié)合方向為“自左至右自左至右”,即先,即先左后右左后右 。 double float long unsigned int char,short float a=2.0;float a=2.0; int b =6,c =3; int b =6,c =3; a a* *b/c -1.5 +a b/c -1.5 +a +fabs(-5)+fab

26、s(-5)12.012.0/3/354.0 4.0 - 1.5- 1.52.52.5 + 97(int)+ 97(int)99.599.5 + 5+ 5104.5(double)104.5(double)(3)(3)強制類型轉(zhuǎn)換運算符強制類型轉(zhuǎn)換運算符 可以利用強制類型轉(zhuǎn)換運算符將一個表達式可以利用強制類型轉(zhuǎn)換運算符將一個表達式轉(zhuǎn)換成所需類型。轉(zhuǎn)換成所需類型。 一般形式一般形式: :(類型名)(表達式)(類型名)(表達式)例如:例如:(double)(double) 將轉(zhuǎn)換成將轉(zhuǎn)換成doubledouble類型類型(int)(x+y(int)(x+y) ) 將將x+yx+y的值轉(zhuǎn)換成整型的值轉(zhuǎn)

27、換成整型(float)(float)(5%35%3) 將將5%35%3的值轉(zhuǎn)換成的值轉(zhuǎn)換成floatfloat型型有兩種類型轉(zhuǎn)換,一種是在運算時不必用戶指定,系統(tǒng)自動進行的類型轉(zhuǎn)換,如3+6.5。第二種是強制類型轉(zhuǎn)換。當(dāng)自動類型轉(zhuǎn)換不能實現(xiàn)目的時,可以用強制類型轉(zhuǎn)換。運行結(jié)果:運行結(jié)果: x3.600000, i=3(4)(4) 自增、自減運算符自增、自減運算符 +i,-i+i,-i:使用之前使:使用之前使i i的值增的值增1 1(或減(或減1 1);); i+,i- i+,i-:使用之后使:使用之后使i i的值增的值增1 1(或減(或減1 1););等價于等價于 i=i+1;i=i+1;j=

28、i;i+; j=i;i+; 所以所以i i的值為的值為4 4,j j的值為的值為3 3。i+;j=i; i+;j=i; 所以所以i i的值為的值為4 4,j j的值為的值為4 4。例如:例如:(1) i+;(1) i+; +i; +i;(2) i=3;(2) i=3; j=i+; j=i+; (3) i=3;(3) i=3; j=+i; j=+i; 結(jié)合性:自右至左。結(jié)合性:自右至左。 如:如: i = 2;i = 2; j = -i+; j = -i+; 等價于等價于:j=-(i+);j=-(i+); 即:即: j=-i;i+; j=-i;i+; “+”與與”- -“是同優(yōu)先級是同優(yōu)先級 所

29、以所以i i的值為的值為3 3,j j的值為的值為-2-2。 注意注意 “ “+”+”或或“-”-”自增與自減運算符的使自增與自減運算符的使用。用。 如:設(shè)如:設(shè)i=3i=3,k=(i+)+(i+)+(i+)k=(i+)+(i+)+(i+),k=k=? 如:設(shè)如:設(shè)i=3i=3,j=4j=4,k=i+jk=i+j,k=k=?注意注意: (1)(1)自增運算符(),自減運算符(),自增運算符(),自減運算符(),只能用于變量,而不能用于常量或表達式,只能用于變量,而不能用于常量或表達式, (2)(2)和的結(jié)合方向是和的結(jié)合方向是“自右至左自右至左”。 自增(減)運算符常用于循環(huán)語句中使循環(huán)變量自

30、增(減)運算符常用于循環(huán)語句中使循環(huán)變量自動加。也用于指針變量,使指針指向下一個地址自動加。也用于指針變量,使指針指向下一個地址 (5) (5) 有關(guān)表達式使用中的問題說明有關(guān)表達式使用中的問題說明 ANSI CANSI C并沒有具體規(guī)定表達式中的子表達式的求并沒有具體規(guī)定表達式中的子表達式的求值順序,允許各編譯系統(tǒng)自己安排。值順序,允許各編譯系統(tǒng)自己安排。 例如例如:對表達式:對表達式 a = f1( )+f2( )a = f1( )+f2( ) 并不是所有的編譯系統(tǒng)都先調(diào)用并不是所有的編譯系統(tǒng)都先調(diào)用f1( )f1( ), 然后然后調(diào)用調(diào)用f2( )f2( )。在有的情況下結(jié)果可能不同。有

31、時會出。在有的情況下結(jié)果可能不同。有時會出現(xiàn)一些令人容易搞混的問題,因此務(wù)必要小心謹(jǐn)慎現(xiàn)一些令人容易搞混的問題,因此務(wù)必要小心謹(jǐn)慎。 語言中有的運算符為一個字符,有的運算符由語言中有的運算符為一個字符,有的運算符由兩個字符組成兩個字符組成 ,為避免誤解,最好采取大家都能理,為避免誤解,最好采取大家都能理解的寫法。解的寫法。 例如例如:不要寫成不要寫成i+ji+j的形式,而應(yīng)寫成的形式,而應(yīng)寫成 (i+)+j(i+)+j的形式的形式 在調(diào)用函數(shù)時,實參數(shù)的求值順序,標(biāo)準(zhǔn)并無在調(diào)用函數(shù)時,實參數(shù)的求值順序,標(biāo)準(zhǔn)并無統(tǒng)一規(guī)定。統(tǒng)一規(guī)定。 例如:的初值為,如果有下面的函數(shù)調(diào)用:例如:的初值為,如果有下

32、面的函數(shù)調(diào)用: printfprintf(,i+)i+) 在有在有的系統(tǒng)中,從左至右求值,輸出的系統(tǒng)中,從左至右求值,輸出“,”。在多。在多數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自右而左,數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自右而左,函數(shù)輸出的是函數(shù)輸出的是“,”。以上這種寫法。以上這種寫法不宜提倡,不宜提倡, 最好改寫成最好改寫成 j = i+;j = i+; printf(%d printf(%d, %d%d, j j,i)i)不要寫出別人看不懂的也不知道系統(tǒng)會怎樣執(zhí)行程序(1)(1)賦值運算符賦值運算符 賦值符號賦值符號“”就是賦值運算符,它的作用是就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如

33、將一個數(shù)據(jù)賦給一個變量。如“”的作用的作用是執(zhí)行一次賦值操作(或稱賦值運算)。把常是執(zhí)行一次賦值操作(或稱賦值運算)。把常量賦給變量。也可以將一個表達式的值賦量賦給變量。也可以將一個表達式的值賦給一個變量給一個變量. . (2) (2)類型轉(zhuǎn)換類型轉(zhuǎn)換 如果賦值運算符兩側(cè)的類型不一致,但都如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進行類型是數(shù)值型或字符型時,在賦值時要進行類型轉(zhuǎn)換。轉(zhuǎn)換。將浮點型數(shù)據(jù)將浮點型數(shù)據(jù)(包括單、雙精度)(包括單、雙精度)賦給整賦給整型變量時,舍棄浮點數(shù)的小數(shù)部分。型變量時,舍棄浮點數(shù)的小數(shù)部分。如如: :ntnt i; i;執(zhí)行執(zhí)行“i=3.5

34、6”i=3.56”的結(jié)果是使的結(jié)果是使的值為,以整數(shù)形式存儲在整型變量中的值為,以整數(shù)形式存儲在整型變量中. . 將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點數(shù)形式存儲到變量中但以浮點數(shù)形式存儲到變量中 如如: : 將賦給將賦給floatfloat變量變量f,f,即執(zhí)行即執(zhí)行f f23,23,先將先將2323轉(zhuǎn)換成轉(zhuǎn)換成23.00000,23.00000,再存儲在中。再存儲在中。 將將2323賦給賦給doubledouble型變量型變量d,d,即執(zhí)行即執(zhí)行d=23,d=23,則將則將補足有效位數(shù)字為補足有效位數(shù)字為23.0000000000000

35、0,23.00000000000000,然后然后以雙精度浮點數(shù)形式存儲到變量以雙精度浮點數(shù)形式存儲到變量d d中。中。 將一個將一個doubledouble型數(shù)據(jù)賦給型數(shù)據(jù)賦給floatfloat變量時,截取其變量時,截取其前前面面7 7位有效數(shù)字,存放到位有效數(shù)字,存放到floatfloat變量的存儲單元(變量的存儲單元(4 4個個字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。 如如: :float f;double d=123.456789e100; f=d;float f;double d=123.456789e100; f=d; 就出現(xiàn)溢出的錯誤。如果將一個就

36、出現(xiàn)溢出的錯誤。如果將一個floatfloat型數(shù)型數(shù)據(jù)賦給據(jù)賦給doubledouble變量時,數(shù)值不變,有效位數(shù)擴變量時,數(shù)值不變,有效位數(shù)擴展到展到1616位,在內(nèi)存中以位,在內(nèi)存中以8 8個字節(jié)存儲個字節(jié)存儲字符型數(shù)據(jù)賦給整型變量時,由于字符只占字符型數(shù)據(jù)賦給整型變量時,由于字符只占1 1個字個字節(jié),而整型變量為個字節(jié),因此將字符數(shù)據(jù)(節(jié),而整型變量為個字節(jié),因此將字符數(shù)據(jù)(個二進位)放到整型變量存儲單元的低位中個二進位)放到整型變量存儲單元的低位中第一種情況第一種情況: :如果所用系統(tǒng)將字符處理為無符號的字如果所用系統(tǒng)將字符處理為無符號的字符類型,或程序已將字符變量定義為符類型,或程

37、序已將字符變量定義為 型,則將字符的位放到整型變量低型,則將字符的位放到整型變量低位,高位補零位,高位補零例如:例如:將字符將字符賦給型變量賦給型變量第二種情況第二種情況: : 如果所用系統(tǒng)(如如果所用系統(tǒng)(如Turbo C+Turbo C+)將字符處理為帶符號)將字符處理為帶符號的(即的(即signed charsigned char),若字符最高位為,則整型),若字符最高位為,則整型變量高位補;若字符最高位為,則高位全補變量高位補;若字符最高位為,則高位全補。這稱為。這稱為“符號擴展符號擴展”,這樣做的目的是使數(shù)值保,這樣做的目的是使數(shù)值保持持不變,如變量(字符不變,如變量(字符)以整數(shù)形

38、式輸)以整數(shù)形式輸出出為,的值也是。為,的值也是。將一個將一個intint、shortshort、longlong型數(shù)據(jù)賦給一個型數(shù)據(jù)賦給一個charchar型型變量時,只將其低變量時,只將其低8 8位原封不動地送到位原封不動地送到charchar型變量型變量(即截斷)。(即截斷)。例如:例如:intint i=289;char c=a;c=i; i=289;char c=a;c=i;c c的值為的值為3333, 如果用如果用“%c”%c”輸出輸出c c,將得到字符,將得到字符“!” !” (其(其ASCIIASCII碼為碼為3333)。)。 將帶符號的整型數(shù)據(jù)(將帶符號的整型數(shù)據(jù)(intin

39、t型)賦給型)賦給longlong型變量時,型變量時,要進行符號擴展,將整型數(shù)的要進行符號擴展,將整型數(shù)的1616位送到位送到longlong型低型低1616位中位中: :如果如果intint型數(shù)據(jù)為正值(符號位為),則型數(shù)據(jù)為正值(符號位為),則longlong型變型變量的高量的高1616位補;位補;如果如果intint型變量為負值(符號位為),則型變量為負值(符號位為),則longlong型變型變量的高量的高1616位補,以保持?jǐn)?shù)值不改變。位補,以保持?jǐn)?shù)值不改變。 反之,若將一個反之,若將一個longlong型數(shù)據(jù)賦給一個型數(shù)據(jù)賦給一個intint型變量,型變量,只將只將longlong型

40、數(shù)據(jù)中低型數(shù)據(jù)中低1616位原封不動地送到整型變量位原封不動地送到整型變量(即截斷)。(即截斷)。 將unsigned int型數(shù)據(jù)賦給long int型變量時,不存在符號擴展問題,只需將高位補即可。將一個unsigned類型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsigned int -int,unsigned long-long,unsigned short-short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤?!?u”是輸出無符號數(shù)時所用的格式符。如果為正值,且在32767之間,則賦值

41、后數(shù)值不變。運行結(jié)果:運行結(jié)果: (3) 復(fù)合的賦值運算符 *=、/=、 %=、 +=、 -=, =, &=、 =、 = 注意:復(fù)合運算符是一個運算符,但功能上,是兩個運算符功能的組合。 例如: (1) a+=b 相當(dāng)于 a=a+b a*=b 相當(dāng)于 a=a*b a*=b+c 相當(dāng)于 a=a*(b+c) 而不是a=a*b+c (2) 設(shè)a=12,計算表達式a+=a-=a*12和a+=a-=a*=12 的值(4) (4) 賦值表達式賦值表達式 由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。一般形式為一般形式為: : 例如例如: : “5”是一個賦值表達式 對賦值表達

42、式求解的過程是:對賦值表達式求解的過程是: 求賦值運算符右側(cè)的“表達式”的值; 賦給賦值運算符左側(cè)的變量。例如例如: 賦值表達式“=3*5”的值為15,執(zhí)行表達式后變量a的值也是15。 注意注意: 一個表達式應(yīng)該有一個值一個表達式應(yīng)該有一個值 左值 (value) : 賦值運算符左側(cè)的標(biāo)識符變量可以作為左值變量可以作為左值; ;而表達式就不能作為左值而表達式就不能作為左值( (如如a+b);a+b);常變量也不能作為左值。常變量也不能作為左值。 右值右值 (value)(value) : :出現(xiàn)在賦值運算符右側(cè)的表達式出現(xiàn)在賦值運算符右側(cè)的表達式 左值也可以出現(xiàn)在賦值運算符右側(cè),因而左值左值也可以出現(xiàn)在賦值運算符右側(cè),因而左值 都可以作為右值。都可以作為右值。 賦值表達式中的賦值表達式中的“表達式表達式”,又可以是一個賦值,又可以是一個賦值表達式表達式. .例如例如: : a=(b=5)a=(b=5) 分析分析: :括弧內(nèi)的括弧內(nèi)的“b=5”b=5”是一個賦值表達式,是一個賦值表達式,它它的值等于的值等于5 5。執(zhí)行表達式。執(zhí)行表達式“a=(b=5)”a=(b=5)”相當(dāng)于執(zhí)相當(dāng)于執(zhí)行行“b=5”b=5”和和“a ab”b”兩個賦值表達式。兩個賦值表達式。 賦值運賦值運

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論