C語言程序設計第三章節_第1頁
C語言程序設計第三章節_第2頁
C語言程序設計第三章節_第3頁
C語言程序設計第三章節_第4頁
C語言程序設計第三章節_第5頁
已閱讀5頁,還剩77頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、 許老師許老師182527391813.1 C3.1 C的數據類型的數據類型3.2 3.2 常量與變量常量與變量3.3 3.3 整型數據整型數據3.4 3.4 浮點型數據運行浮點型數據運行3.5 3.5 字符型數據字符型數據 3. 3.變量賦初值變量賦初值 3.7 3.7 各類數值型數據間的混合運算各類數值型數據間的混合運算 3.8 3.8 算術運算符和算術表達式算術運算符和算術表達式 3.9 3.9 賦值運算符和賦值表達式賦值運算符和賦值表達式 3.10 3.10 逗號運算符和逗號表達式逗號運算符和逗號表達式 C語言提供了以下一些數據類型。 3.2.1 常量和符號常量常量和符號常量 在程序運

2、行過程中,其值不能被改變的量稱為常量 常量區分為不同的類型:整型 100,125,-100,0實型 3.14 , 0.125,-3.789字符型 a, b,2字符串 a, ab,1232 程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現的PRICE都代表30,可以和常量一樣進行運算用一個標識符代表一個常量的,稱為符號常量,即以標識符形式出現的常量。符號常量的值在其作用域(在本例中為主函數)內不能改變,也不能再被賦值。 如再用賦值語句給PRICE賦值是錯誤的。 PRICE=40; /* 錯誤,不能給符號常量賦值。 運行結果:運行結果: total=300total=3

3、003.2.2變量變量 變量代表內存中具有特定屬性的一個存儲單元,它用來存放數據,這就是變量的值,在程序運行期間,這些值是可以改變的。 變量名實際上是一個以一個名字對應代表一個地址,在對程序編譯連接時由編譯系統給每一個變量名分配對應的內存地址。從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據。圖 變量命名的規定:語言規定標識符只能由字母、數字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。 例:例:sum,_total, month, Student_name, lotus_1_2_,BASIC, li_ling M.D.John, ¥123,3D64,ab 編

4、譯系統將大寫字母和小寫字母認為是兩個不同的字符。 建議變量名的長度最好不要超過8個字符。 在選擇變量名和其它標識符時,應注意做到“見名知意”,即選有含意的英文單詞 (或其縮寫)作標識符。 要求對所有用到的變量作強制定義,也就是“先定義,后使用” 。3.3.1整型常量的表示方法整型常量的表示方法 整型常量即整常數。在語言中,整常數可用以下三種形式表示:(1)十進制整數。 如:如:123, -456.4。(2)八進制整數。以0頭的數是八進制數。 如:如:0123表示八進制數123,等于十進制數83,-011表示八進制數-11,即十進制數-9。(3)十六進制整數。以0 x開頭的數是16進制數。 如:

5、如:0 x123,代表16進制數123,等于十進制數 291。 -0 x12等于十進制數18。 3.3.2 整型變量整型變量 (1)(1)整型數據在內存中的存放形式整型數據在內存中的存放形式 數據在內存中是以二進制形式存放的。 如如: : int i; /* 定義為整型變量 */ i=10; /* 給i賦以整數10 */ 十進制數10的二進制形式為1010,Turbo C 2.0和Turbo C+ 3.0為一個整型變量在內存中分配2個字節的存儲單元(不同的編譯系統為整型數據分配的字節數是不相同的,VC+ 6.0則分配4個字節)。 數值是以補碼(complement) 表示的。 正數的原碼、反碼

6、、補碼都相同,都等于它們的機器碼;負數的反碼等于除符號位以外的各位取反,補碼等于反碼的末位加1;15的原碼、反碼、補碼都是0000111115的原碼是10001111,反碼是11110000,補碼是11110001(2)(2)整型變量的分類:整型變量的分類:共六種共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int (signed)short (int )(signed) long (int)unsigned intunsigned short (int)unsigned long (int) 注意:注意:括號表示其中的內容是可選的. 整數類

7、型的有關數據:(3)(3)整型變量的定義整型變量的定義: : 規定在程序中所有用到的變量都必須在程序中定義,即“強制類型定義”。 例如例如: : int a,bint a,b(指定變量、為整型) unsigned short c,d;unsigned short c,d;(指定變量、為無符號短整型) long e,f;long e,f;(指定變量、為長整型) 可以看到不同種類的整型數據可以進行算術運算 運行結果:運行結果: , 數值是以補碼表示的。一個整型變量只能容納-3276832767范圍內的數,無法表示大于32767或小于-32768的數。遇此情況就發生“溢出”。運行結果:運行結果: 3

8、2767,-3276832767,-327683.3.3 整型常量的類型整型常量的類型 (1)一個整數,如果其值在-32768+32767范圍內,認為它是int型,它可以賦值給int型和long int型變量。 (2) 一個整數,如果其值超過了上述范圍,而在-2147483637+2147483647范圍內,則認為它是為長整型。可以將它賦值給一個long int型變量。 (3) 如果所用的C版本(如Turbo C)分配給short int與int型數據在內存中占據的長度相同,則它的表數范圍與int型相同。因此一個int型的常量同時也是一個short int型常量,可以賦給int型或short

9、int型變量。(4) 一個整常量后面加一個字母u或U,認為是unsigned int型,如12345u,在內存中按unsigned int規定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數據)。如果寫成-12345u,則先將-12345轉換成其補碼53191,然后按無符號數存儲。(5) 在一個整常量后面加一個字母l或L,則認為是long int型常量。例如123l.432L.0L等。這往往用于函數調用中。如果函數的形參為long int型,則要求實參也為long int型。3.4.13.4.1浮點型常量的表示方法浮點型常量的表示方法兩種表兩種表示形式示形式小數小數指數指數0.1230.

10、1233 3e-3e-3注意注意: :字母e(或E)之前必須有數字,且e后面的指數必須為整數 規范化的指數形式:規范化的指數形式: 在字母e(或E)之前的小數部分中,小數點左邊應有一位(且只能有一位)非零的數字. 例如例如: : 123.456可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e 其中的1.23456e31.23456e3稱為“規范化的指數形式”。3.4.2 浮點型變量浮點型變量(1)(1)浮點型數據在內存中的存放形式浮點型數據在內存中的存放形式 一個浮點型數據一般在內存中占4個

11、字節(32位)。與整型數據的存儲方式不同,浮點型數據是按照指數形式存儲的。系統把一個浮點型數據分成小數部分和指數部分,分別存放。指數部分采用規范化的指數形式。圖(2) (2) 浮點型變量的分類浮點型變量的分類 浮點型變量分為單精度(float型)、雙精度(double型)和長雙精度型(long double)三類形式。一個浮點型變量只能保證的有效數字是7位有效數字,后面的數字是無意義的,并不準確地表示該數。應當避免將一個很大的數和一個很小的數直接相加或相減,否則就會“丟失”小的數運行結果:運行結果: 123456.789e5123456.789e53.4.3 浮點型常量的類型浮點型常量的類型

12、C編譯系統將浮點型常量作為雙精度來處理。 例如例如:f = 2.45678 * 4523.65 系統先把2.45678和4523.65作為雙精度數,然后進行相乘的運算,得到的乘也是一個雙精度數。最后取其前7位賦給浮點型變量f。如是在數的后面加字母f或F(如1.65f, 654.87F),這樣編譯系統就會把它們按單精度(32位)處理。3.5.1 字符常量字符常量(1)用單引號包含的一個字符是字符型常量(2)只能包含一個字符a a, ,A A, , 1 1abcabc、“a a” 有些以有些以“ ”開頭的特殊字符稱為轉義字符開頭的特殊字符稱為轉義字符n 換行t 橫向跳格r 回車 反斜杠ddd dd

13、d表示1到3位八進制數字xhh hh表示1到2位十六進制數字 打印機上的顯示結果:打印機上的顯示結果: fab c gde h jik 顯示屏上的運行結果:顯示屏上的運行結果: f gde j k3.5.2字符變量字符變量 字符型變量用來存放字符常量,注意只能放一個字符。 字符變量的定義形式如下:char c1,c2; 在本函數中可以用下面語句對c1,c2賦值: c1a;c2 b ; 一個字符變量在內存中占一個字節。 3.5.3字符數據在內存中的存儲形式及其使用方法字符數據在內存中的存儲形式及其使用方法 將一個字符常量放到一個字符變量中,實際上并不是把該字符本身放到內存單元中去,而是將該字符的

14、相應的ASCII代碼放到存儲單元中。圖這樣使字符型數據和整型數據之間可以通用。一個字符數據既可以以字符形式輸出,也可以以整數形式輸出。在第和第4行中,將整數和分別賦給c1和c2,它的作用相當于以下兩個賦值語句: c1;c2;因為a和b的ASCII碼為和 運行結果:運行結果: 97 9897 98程序的作用是將兩個小寫字母a和b轉換成大寫字母A和B。從代碼表中可以看到每一個小寫字母比它相應的大寫字母的碼大。語言允許字符數據與整數直接進行算術運算。 運行結果:運行結果: 有些系統(如Turbo C)將字符變量定義為signed char型。其存儲單元中的最高位作為符號位,它的取值范圍是-12812

15、7。如果在字符變量中存放一個ASCII碼為0127間的字符,由于字節中最高位為0,因此用%d輸出字符變量時,輸出的是一個正整數。如果在字符變量中存放一個ASCII碼為128255間的字符,由于在字節中最高位為1,用%d格式符輸出時,就會得到一個負整數。 3.5.4字符串常量字符串常量 字符串常量是一對雙撇號括起來的字符序列. 合法的字符串常量:“How do you do.”, “CHINA”, “a” , “$123.45” 可以輸出一個字符串,如printf(“How do you do.”); 是字符常量,”是字符串常量,二者不同。 如:如:假設被指定為字符變量 :char c c=a;

16、 ”a”;c”CHINA”; 結論:結論:不能把一個字符串常量賦給一個字符變量。 規定:在每一個字符串常量的結尾加一個 “字符串結束標志”,以便系統據此判斷字符串是否結束。規定以字符作為字符串結束標志。 如:如:如果有一個字符串常量” ,實際上在內存中是:CHINA0 它占內存單元不是個字符,而是個字符,最后一個字符為。但在輸出時不輸出。字符串常量(1)語言允許在定義變量的同時使變量初始化如如: : int a=3; / 指定為整型變量,初值為 float f=3.56; / 指定為浮點型變量,初值為.56 char c= a; / 指定為字符變量,初值為a (2)可以使被定義的變量的一部分賦

17、初值。 如如: : int a,b,c=5; 表示指定、為整型變量,但只對初始化,c的初值為(3)如果對幾個變量賦以同一個初值, 應寫成:int a=3,b=3,c=3; 表示、的初值都是。 不能寫成 int a=b=c3; 注意:注意:初始化不是在編譯階段完成的而是在程序運行時執行本函數時賦初值的,相當于有一個賦值語句。 整型(包括int,short,long)、浮點型(包括float,double)可以混合運算。在進行運算時,不同類型的數據要先轉換成同一類型,然后進行運算.圖上述的類型轉換是由系統自動進行的3.8.1 運算符簡介運算符簡介 的運算符有以下幾類:的運算符有以下幾類:(1)算術

18、運算符 (+ - * / %)(2)關系運算符 (!)(3)邏輯運算符 (!|)(4)位運算符 ( |)(5)賦值運算符 (及其擴展賦值運算符)(6)條件運算符 (?:)(7)逗號運算符 (,)(8)指針運算符 (*和)(9)求字節數運算符()(10)強制類型轉換運算符( (類型) )(11)分量運算符(-)(12)下標運算符()(13)其他 (如函數調用運算符()3.8.2 算術運算符和算術表達式算術運算符和算術表達式 (1)(1)基本的算術運算符基本的算術運算符: : (加法運算符,或正值運算符。如:、) (減法運算符,或負值運算符。如:、)* * (乘法運算符。如:*) (除法運算符。如

19、:) (模運算符,或稱求余運算符,兩側均應為整型數據,如:的值為)。(2) (2) 算術表達式和運算符的優先級與結合性基算術表達式和運算符的優先級與結合性基本的算術運算符本的算術運算符: : 用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合語法規則的式子,稱為算術表達式。運算對象包括常量、變量、函數等。 例如例如: : *.5a 是一個合法的表達式 語言規定了運算符的優先級和結合性。 在表達式求值時,先按運算符的優先級別高低次序執行,例如先乘除后加減。 規定了各種運算符的結合方向(結合性) 算術運算符的結合方向為“自左至右”,即先左后右 。(3)(3)強制類型轉換運算符強制類型轉換運

20、算符 可以利用強制類型轉換運算符將一個表達式轉換成所需類型。 一般形式:(類型名)(表達式)例如:例如:(double) 將轉換成double類型(int)(x+y) 將x+y的值轉換成整型(float)(5%3) 將5%3的值轉換成float型有兩種類型轉換,一種是在運算時不必用戶指定,系統自動進行的類型轉換,如3+6.5。第二種是強制類型轉換。當自動類型轉換不能實現目的時,可以用強制類型轉換。 運行結果:運行結果: x3.600000, i=3(4)(4) 自增、自減運算符自增、自減運算符 作用是使變量的值增或減如如: ,(在使用之前,先使的值加 (減),(在使用之后,使的值加( 減) i

21、+i+與與+i+i的區別:的區別: 是先執行后,再使用的值; 是先使用的值后,再執行。例如:例如: ; i的值先變成4, 再賦給,j的值均為 ; 先將 i的值3賦給,的值為,然后變為注意:注意: (1)自增運算符(),自減運算符(),只能用于變量,而不能用于常量或表達式, (2)和的結合方向是“自右至左”。 自增(減)運算符常用于循環語句中使循環變量自動加。也用于指針變量,使指針指向下一個地址 (5) (5) 有關表達式使用中的問題說明有關表達式使用中的問題說明 ANSI C并沒有具體規定表達式中的子表達式的求值順序,允許各編譯系統自己安排。 例如:對表達式 a = f1( )+f2( ) 并

22、不是所有的編譯系統都先調用f1( ), 然后調用f2( )。在有的情況下結果可能不同。有時會出現一些令人容易搞混的問題,因此務必要小心謹慎。 語言中有的運算符為一個字符,有的運算符由兩個字符組成 ,為避免誤解,最好采取大家都能理解的寫法。 例如:不要寫成i+j的形式,而應寫成 (i+)+j的形式 在調用函數時,實參數的求值順序,標準并無統一規定。例如:例如:的初值為,如果有下面的函數調用: printf(,i+) 在有的系統中,從左至右求值,輸出“,”。在多數系統中對函數參數的求值順序是自右而左,函數輸出的是“,”。以上這種寫法不宜提倡, 最好改寫成 j = i+;j = i+; printf

23、(%d printf(%d, %d%d, j j,i)i)不要寫出別人看不懂的也不知道系統會怎樣執行程序(1)(1)賦值運算符賦值運算符 賦值符號“”就是賦值運算符,它的作用是將一個數據賦給一個變量。如“”的作用是執行一次賦值操作(或稱賦值運算)。把常量賦給變量。也可以將一個表達式的值賦給一個變量. (2) (2)類型轉換類型轉換 如果賦值運算符兩側的類型不一致,但都是數值型或字符型時,在賦值時要進行類型轉換。將浮點型數據(包括單、雙精度)賦給整型變量時,舍棄浮點數的小數部分。如如: :為整型變量,執行“i=3.56”的結果是使的值為,以整數形式存儲在整型變量中. 將整型數據賦給單、雙精度變量

24、時,數值不變,但以浮點數形式存儲到變量中 如如: : 將賦給float變量,即執行,先將轉換成,再存儲在中。 將賦給型變量,即執行,則將補足有效位數字為,然后以雙精度浮點數形式存儲到變量中。 將一個double型數據賦給float變量時,截取其前面7位有效數字,存放到float變量的存儲單元(4個字節)中。但應注意數值范圍不能溢出。 如如: :float f;double d=123.456789e100; f=d; 就出現溢出的錯誤。 如果將一個float型數據賦給double變量時,數值不變,有效位數擴展到16位,在內存中以8個字節存儲字符型數據賦給整型變量時,由于字符只占1個字節,而整型

25、變量為個字節,因此將字符數據(個二進位)放到整型變量存儲單元的低位中。第一種情況: 如果所用系統將字符處理為無符號的字符類型,或程序已將字符變量定義為 型,則將字符的位放到整型變量低位,高位補零例如:例如:將字符賦給型變量圖第二種情況: 如果所用系統(如Turbo C+)將字符處理為帶符號的(即signed char),若字符最高位為,則整型變量高位補;若字符最高位為,則高位全補。這稱為“符號擴展”,這樣做的目的是使數值保持不變,如變量(字符)以整數形式輸出為,的值也是。圖將一個int、short、long型數據賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。例如

26、:例如:int i=289;char c=a;c=i; 賦值情況 :圖c的值為33, 如果用“%c”輸出c,將得到字符“!” (其ASCII碼為33)。 將帶符號的整型數據(int型)賦給long型變量時,要進行符號擴展,將整型數的16位送到long型低16位中:如果int型數據為正值(符號位為),則long型變量的高16位補;如果int型變量為負值(符號位為),則long型變量的高16位補,以保持數值不改變。 反之,若將一個long型數據賦給一個int型變量,只將long型數據中低16位原封不動地送到整型變量(即截斷)。 例如:例如:int a; long b;a=b 賦值情況如圖 :圖如果

27、(八進制數),則賦值后值為。見圖3.14 圖3.14將unsigned int型數據賦給long int型變量時,不存在符號擴展問題,只需將高位補即可。將一個unsigned類型數據賦給一個占字節數相同的非unsigned型整型變量(例如:unsigned int -int,unsigned long-long,unsigned short-short),將unsigned型變量的內容原樣送到非unsigned型變量中,但如果數據范圍超過相應整型的范圍,則會出現數據錯誤。例如:例如:unsigned int 65535; int b;; 圖將整個送到中,由于是int,第位是符號位,因此b成了負

28、數。根據補碼知識可知,的值為-1,可以用printf(%d,);來驗證。 將非unsigned型數據賦給長度相同的unsigned型變量,也是原樣照賦(連原有的符號位也作為數值一起傳送)。 “%u”是輸出無符號數時所用的格式符。如果為正值,且在32767之間,則賦值后數值不變。賦值情況見圖 圖運行結果:運行結果: (3) (3) 復合的賦值運算符復合的賦值運算符 在賦值符“”之前加上其他運算符,可以構成復合的運算符。例如例如: 等價于 * 等價于 *() 等價于 以“”為例來說明,它相當于使進行一次自加()的操作。即先使加,再賦給。為便于記憶,可以這樣理解:為便于記憶,可以這樣理解: a +=

29、 b (其中a為變量,b為表達式) a += b(將有下劃線的“a+”移到“=”右側) |_ a = a + b (在“=”左側補上變量名a) 注意注意: :如果是包含若干項的表達式,則相當于它有如果是包含若干項的表達式,則相當于它有 括號。括號。如:如: x %= y+3 x %= (y+3) |_ x = x %(y+3)(不要錯寫成x=x%y+3) 凡是二元(二目)運算符,都可以與賦值符一起組合成復合賦值符。 語言規定可以使用種復合賦值運算符:語言規定可以使用種復合賦值運算符:,* *,| | (4) (4) 賦值表達式賦值表達式 由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦

30、值表達式”。一般形式為一般形式為: 例如例如: “5”是一個賦值表達式 對賦值表達式求解的過程是:對賦值表達式求解的過程是: 求賦值運算符右側的“表達式”的值; 賦給賦值運算符左側的變量。例如例如: 賦值表達式“=3*5”的值為15,執行表達式后,變量a的值也是15。 注意注意: 一個表達式應該有一個值一個表達式應該有一個值 左值左值 (lvalue)(lvalue) : 賦值運算符左側的標識符變量可以作為左值;而表達式就不能作為左值(如a+b);常變量也不能作為左值, 右值右值 (lvalue)(lvalue) :出現在賦值運算符右側的表達式 左值也可以出現在賦值運算符右側,因而左值 都可以作為右值。 賦值表達式中的“表達式”,又可以是一個賦值表達式.例如例如: : a=(b=5) 分析分析: :括弧內的“b=5”是一個賦值表達式,它的值等于5。執行表達式“a=(b=5)”相當于執行“b=5”和“ab”兩個賦值表達式。 賦值運算符按照“自右而左”的結合順序,因此,“(b5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等價.請分析下面的賦值表達式(a=3*5)=4*3分析分析: :先執行括弧內的運算,將15賦給a,然后執行4*3的運算,得12,再把12賦給a。最后a的值為12

溫馨提示

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

評論

0/150

提交評論