C語言的數據類型_第1頁
C語言的數據類型_第2頁
C語言的數據類型_第3頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第二章 C語言的數據類型在第一課中,我們已經看到程序中使用的各種變量都應預先加以說明,即先說明,后使 用。對變量的說明可以包括三個方面:數據類型存儲類型作用域在本課中,我們只介紹數據類型說明。其它說明在以后各章中陸續介紹。所謂數據類型 是按被說明量的性質,表示形式,占據存儲空間的多少,構造特點來劃分的。在C語言中,數 據類型可分為:基本數據類型,構造數據類型,指針類型,空類型四大類。1基本數據類型基本數據類型最主要的特點是,其值不可以再分解為其它類型。也就是說,基本數據類型 是自我說明的。2. 構造數據類型構造數據類型是根據已定義的一個或多個數據類型用構造的方法來定義的。也就是說,一個構造類型

2、的 值可以分解成若干個“成員”或“元素”。每個“成員”都是一個基本數據類型或又是一個構 造類型。在C語言中,構造類型有以下幾種:數組類型-結構類型-聯合類型3指針類型指針是一種特殊的,同時又是具有重要作用的數據類型。其值用來表示某個量在內存儲器 中的地址。雖然指針變量的取值類似于整型量,但這是兩個類型完全不同的量,因此不能混為 一談。4空類型在調用函數值時,通常應向調用者返回一個函數值。這個返回的函數值是具有 一定的數據類型的,應在函數定義及函數說明中給以說明,例如在例題中給出的max函數定義中,函數頭為:int max(int a,int b);其中“ int ”類型說明符即表示該函數的返回

3、值為整型 量。又如在例題中,使用了庫函數sin,由于系統規定其函數返回值為雙精度浮點型,因此在賦值語句s=sin (x);中,s也必須是雙精度浮點型,以便與sin函數的返回值一致。所以在說明部分,把s說明為雙精度浮點型。但是,也有一類函數,調用后并不需要向調用者返回函數 值,這種函數可以定義為“空類型”。其類型說明符為void。在第五章函數中還要詳細介紹。在本章中,我們先介紹基本數據類型中的整型、浮點型和字符型。其余類型在以后各章中 陸續介紹。對于基本數據類型量,按其取值是否可改變又分為常量和變量兩種。在程序執行過程中, 其值不發生改變的量稱為常量,取值可變的量稱為變量。它們可與數據類型結合起

4、來分類。例 如,可分為整型常量、整型變量、浮點常量、浮點變量、字符常量、字符變量、枚舉常量、枚 舉變量。在程序中,常量是可以不經說明而直接引用的,而變量則必須先說明后使用。整型量 整型量包括整型常量、整型變量。整型常量就是整常數。在C語言中,使用的整常數有八進 制、十六進制和十進制三種。整型常量1八進制整常數八進制整常數必須以0開頭,即以0作為八進制數的前綴。數碼取值為07。八進制數通常是無符號數。以下各數是合法的八進制數:015(十進制為13) 0101(十進制為65) 0177777(十進制為65535)以下各數不是合法的八進制數:256(無前綴0) 03A2(包含了非八進制數碼)-012

5、7(出現了負號)2. 十六進制整常數十六進制整常數的前綴為0X或0x。其數碼取值為 09, AF或af。以下各數是合法的十六進制整常數:0X2A(十進制為 42)0XA0 (十進制為 160)0XFFFF 十進制為 65535)以下各數不是合法的十六進制整常數:5A優前綴0X)0X3H (含有非十六進制數碼)3. 十進制整常數十進制整常數沒有前綴。其數碼為09。以下各數是合法的十進制整常數:237 -568 65535 1627以下各數不是合法的十進制整常數:023 (不能有前導0)23D (含有非十進制數碼)在程序中是根據前綴來區分各種進制數的。因此在書寫常數時不要把前綴弄錯造成結果不 正確

6、。4.整型常數的后綴在16位字長的機器上,基本整型的長度也為16位,因此表示的數的范圍也是有限定的。十進制無符號整常數的范圍為065535,有符號數為-32768+32767。八進制無符號數的表示范圍為00177777。十六進制無符號數的表示范圍為0X00XFFFF或0x00xFFFF如果使用的數超過了上述范圍,就必須用長整型數來表示。長整型數是用后綴“L”或“ I”來表示的。例如:十進制長整常數158L (十進制為158) 358000L (十進制為-358000)八進制長整常數012L (十進制為10) 077L (十進制為63) 0200000L (十進制為65536)十六進制長整常數

7、0X15L 十進制為21) 0XA5L (十進制為165) 0X10000L (十進制為65536)長整數158L和基本整常數158在數值上并無區別。但對158L,因為是長整型量,C編譯系統將為它分配 4個字節存儲空間。而對 158,因為是基本整型,只分配 2個字節的存儲空 間。因此在運算和輸出格式上要予以注意,避免出錯。無符號數也可用后綴表示,整型常數的 無符號數的后綴為“ U”或“ u”。例如:358u,0x38Au,235Lu均為無符號數。前綴,后綴可 同時使用以表示各種類型的數。女口0XA5Lu表示十六進制無符號長整數A5,其十進制為165。整型變量整型變量可分為以下幾類:1基本型 類

8、型說明符為int,在內存中占2個字節,其取值為基本整常數。2. 短整量類型說明符為short int或short'C110F1。所占字節和取值范圍均與基本型相同。3. 長整型類型說明符為long int或long,在內存中占4個字節,其取值為長整常數。4. 無符號型類型說明符為unsigned。無符號型又可與上述三種類型匹配而構成:(1)無符號基本型無符號短整型類型說明符為 unsigned int或 unsigned。 類型說明符為un sig ned short無符號長整型類型說明符為un sig ned long各種無符號類型量所占的內存空間字節數與相應的有符號類型量相同。但由于

9、省去了符號位,故不能表示負數。下表列出了 Turbo C中各類整型量所分配的內存字節數及數的表示范圍。類型說明符intshort intsig ned int un sig ned int數的范圍-3276832767 -3276832767 -3276832767 065535long int -21474836482147483647un sig ned long04294967295整型變量的說明變量說明的一般形式為:類型說明符分配字節數 變量名標識符,變量名標識符,例如:int a,b,c; (a,b,c 為整型變量)long x,y; (x,y為長整型變量)unsigned p,q;

10、 (p,q為無符號整型變量)在書寫變量說明時,應注意以下幾點:1. 允許在一個類型說明符后,說明多個相同類型的變量。各變量名之間用逗號間隔。類型說明 符與變量名之間至少用一個空格間隔。2. 最后一個變量名之后必須以“;”號結尾。3. 變量說明必須放在變量使用之前。一般放在函數體的開頭部分。Practice 1i nt a,b;short int c;short d=100;a=d-20;b=a+d;c=a+b+d;d=d-a+c-b;'Vtablea, 2,0b, 2,0c, 2,0d, 2,100of Vtable'Vupdate1,0;2,03,04,1001,802,18

11、03,3604,200of Vupdate of Practice Practice / 2int a=5; int b=9; long int c; long d;c=a+b_7;d=a*b*c; c=d*d*d;a=c-d;'Vtablea, 2,5b, 2,9c, 4,0d, 4,0of Vtable 'Vupdate1,52,93,04,03,74,3153,312558751, -5112of Vupdate of Practice Practice / 3int a=6,b=19; un sig ned int c;int d; c=a-b+7; d=b*c; a=

12、b+c+d; b=-a;'Vtablea, 2,6b, 2,19c, 2,0d, 2,0of Vtable 'Vupdate 1,6;2,193,04,03,655304, -1141, -1012,101of Vupdate of Practice void mai n() long x,y;int a,b,c,d;x=5;y=6;a=7;b=8;c=x+a; d=y+b; prin tf("c=x+a=%d,d=y+b=%dn",c,d);將main說明為返回void,即不返回任何類型的值x,y被定義為long型a,b,c,d被定義為int型5->

13、x6_>y7- >a8- >bx+a->c y+b->d 顯示程序運行結果of long x,y;int a,b,c,d;c=x+a; d=y+b;從程序中可以看到:x, y是長整型變量,a, b是基本整型變量。它們之間允許進行運算, 運算結果為長整型。但c, d被定義為基本整型,因此最后結果為基本整型。本例說明,不同類型的量可以參與運算并相互賦值。其中的類型轉換是由編譯系統自動完成的。有關類型轉換 的規則將在以后介紹。實型量實型常量實型也稱為浮點型。實型常量也稱為實數或者浮點數。在C語言中,實數只采用十進制。它有 二種形式:十進制數形式指數形式1十進制數形式由數

14、碼0 9和小數點組成。例如:0.0, .25 , 5.789 , 0.13, 5.0, 300., -267.8230等均為合法的實數。2. 指數形式 由十進制數,加階碼標志“e”或“ E”以及階碼(只能為整數,可以帶符號)組成。其一般形式為a E n (a為十進制數,n為十進制整數)其值為 a*10,n女口:2.1E5 (等于2.1*10,5),3.7E-2 (等于 3.7*10,)-2*)0.5E7 (等于 0.5*10,7),-2.8E-2 (等于-2.8*10,)-2*)以下不是合法的實數345 (無小數點)E7 (階碼標志E之前無數字)-5 (無階碼標志)53.-E3 (負號位置不對

15、)2.7E (無階碼)標準C允許浮點數使用后綴。后綴為“f”或“ F'即表示該數為浮點數。如356f和356.是等價的。例2.2說明了這種情況:void mai n()prin tf("%fn%fn",356.,356f);void指明main不返回任何值利用printf顯示結果 結束實型變量實型變量分為兩類:單精度型和雙精度型,其類型說明符為float單精度說明符,double雙精度說明符。在 Turbo C中單精度型占4個字 節(32位)內存空間,其數值范圍為 3.4E-383.4E+38,只能提供七位有效數字。雙精度型占 8個字節(64位)內存空間,其數值范圍

16、為1.7E-3081.7E+308,可提供16位有效數字。實型變量說明的格式和書寫規則與整型相同。例如:float x,y; (x,y為單精度實型量)double a,b,c; (a,b,c為雙精度實型量)實型常數不分單、雙精度,都按雙精度double型處理。void mai n()float a;double b;a=33333.33333;b=33333.33333333333333;prin tf("%fn%fn",a,b);此程序說明float > double的不同a ba<-33333.33333b<-33333.33333333333;顯示程

17、序結果此程序說明float > double的不同float a;double b;a=33333.33333;b=33333.33333333333333;從本例可以看出,由于 a是單精度浮點型,有效位數只有七位。而 整數已占五位,故小數二位后之后均為無效數字。b是雙精度型,有效位為十六位。但TurboC規定小數后最多保留六位,其余部分四舍五入。Practice /floatint a=32;float b;double d;b=12345678;d=b*100;d=d+a;d=d+58.123456;'Vtablea, 2,32b, 4,0.0d,8,0.0of Vtable

18、'Vupdate1,322,03,02,12345678.000003,12345678003,12345678323,1234567890.123456of Vupdateof PracticePractice 1i nt a=543;float b;b=123.123962+a;b=b-100;a=b;'Vtablea, 2,543b, 4,0.0 of Vtable'Vupdate1,5432,0.01,23of Vupdate of Practice字符型量字符型量包括字符常量和字符變量。字符常量字符常量是用單引號括起來的一個字符。例如a','b

19、','=','+',?都是合法字符常量。在C語言中,字符常量有以下特點:1. 字符常量只能用單引號括起來,不能用雙引號或其它括號。2字符常量只能是單個字符,不能是字符串。3. 字符可以是字符集中任意字符。但數字被定義為字符型之后就不能參與數值運算。如'5'和5是不同的。'5'是字符常量,不能參與運算。轉義字符轉義字符是一種特殊的字符常量。轉義字符以反斜?quot;"開頭,后跟一個或幾個字符。轉義字符具有特定的含義,不同于字符原有的意義,故稱“轉義”字符。例如,在前面各例題 printf函數的格式串中用到的“ n”

20、就是一個轉義字符,其意義是“回車換行”。轉義字符主 要用來表示那些用一般字符不便于表示的控制代碼。常用的轉義字符及其含義轉義字符轉義字符的意義n回車換行t橫向跳到下一制表位置v豎向跳格b退格r回車f走紙換頁'adddxhh反斜線符""單引號符鳴鈴13位八進制數所代表的字符12位十六進制數所代表的字符廣義地講,C語言字符集中的任何一個字符均可用轉義字符來表示。表22中的ddd和xhh正是為此而提出的。ddd和hh分別為八進制和十六進制的ASCI代碼。如101表示字?quot;A" , 102表示字母"B", 134表示反斜線,XOA表示換

21、行等。轉義字符的使用 void mai n()int a,b,c;a=5; b=6; c=7;printf("%dnt%d %dn %d %dtb%dn",a,b,c,a,b,c);此程序練習轉義字符的使用a、b、c 為整數 5->a,6->b,7->c調用printf顯示程序運行結果printf("%dnt%d %dn %d %dtb%dn",a,b,c,a,b,c);程序在第一列輸出a值5之后就是“ n”,故回車換行;接著又是“t ”,于是跳到下一制表位置(設制表位置間隔為8),再輸出b值6;空二格再輸出c值7后又是"n&

22、quot;,因此再回車換行;再空二格之后又輸出a值5;再空三格又輸出 b的值6;再次后"t"跳到下一制表位置(與上一行的6對齊),但下一轉義字符“b ”又使退回一格,故緊挨著6再輸出c值7。字符變量字符變量的取值是字符常量,即單個字符。字符變量的類型說明符是char。字符變量類型說明的格式和書寫規則都與整型變量相同。例如:char a,b;每個字符變量被分配一個字節的內存空間,因此只能存放一個字符。字符值是以 ASCII碼的形式存放在變量的內存單元之中的。如x的十進制ASCII碼是120, y的十進制 ASCII碼是121。對字符變量a,b賦予'x'和

23、9;y'值:a='x'b='y: 實際上是在a,b兩個單元內存放120和121的二進制代碼:a 0 1 1 1 1 0 0 0b 0 1 1 1 1 0 0 1所以也可以把它們看成是整型量。C語言允許對整型變量賦以字符值,也允許對字符變量賦以整型值。在輸出時,允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。整型量為二字節量,字符量為單字節量,當整型量按字符型量處理時,只有低八位字節參與處理。mai n() char a,b;a=120; b=121;prin tf("%c,%cn%d,%dn",a,b,a,b);a b a <-

24、 120b <- 121顯示程序結果 char a,b;a=120;b=121;本程序中說明a, b為字符型,但在賦值語句中賦以整型值。從結果看,a, b值的輸出形式取決于printf函數格式串中的格式符,當格式符為"c"時,對應輸出的變量值為字符,當格式符為"d"時,對應輸出的變量值為整數。void mai n()char a,b;a='x:b='y'a=a-32;b=b-32;prin tf("%c,%cn%d,%dn",a,b,a,b);a,b被說明為字符變量并賦予字符值把小寫字母換成大寫字母以整型

25、和字符型輸出本例中,a, b被說明為字符變量并賦予字符值,C語言允許字符變量參與數值運算,即用字 符的ASCII碼參與運算。由于大小寫字母的ASCII碼相差32,因此運算后把小寫字母換成大寫字母。然后分別以整型和字符型輸出。Practice /chari nt a=49;char b;char d;b=a+10;d=a+b;'Vtablea, 2,49b, 1,隨機d,1,隨機of Vtable'Vupdate1,492, 隨機3, 隨機Q 1.1厶J 53, 'l'of Vupdateof PracticePractice /char c1,c2;c1=

26、9;a'c2='b'c仁 c1-32;c2=c2-32;'Vtablec1,1,隨機c2,1,隨機of Vtable'Vupdate1,隨機;2,隨機1,'a'2,'b'1,'A'2,'B' of Vupdate of Practice字符串常量字符串常量是由一對雙引號括起的字符序列。例如:"CHINA" , "C program: , "$12.5"等都是合法的字符串常量。字符串常量和字符常量是不同的量。它們之間主要有以下區別:1字符常量由

27、單引號括起來,字符串常量由雙引號括起來。2字符常量只能是單個字符,字符串常量則可以含一個或多個字符。3可以把一個字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量。在C 語言中沒有相應的字符串變量。這是與BASIC語言不同的。但是可以用一個字符數組來存放一個字符串常量。在數組一章內予 以介紹。4字符常量占一個字節的內存空間。字符串常量占的內存字節數等于字符串中字節數加1。增加的一個字節中存放字符 "0"(ASCII碼為0)。這是字符串結束的標志。例如,字符串"Cprogram"在內存中所占的字節為:C program'。字符常量&#

28、39;a'和字符串常量"a"雖然都只有一個字符,但在內存中的情況是不同的。'a'在內存中占一個字節,可表示為:a"a"在內存中占二個字節,可表示為:a0符號常量符號常量在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。符號常量在使用之前必須 先定義,其一般形式為:#define標識符常量其中#define也是一條預處理命令(預處理命令都?quot;#"開頭),稱為宏定義命令(在第九章預處理程序中將進一步介紹),其功能是把該標識符定義為其后的常量值。一經定義,以后在 程序中所有出現該標識符的地方均代之以該常量值。

29、習慣上符號常量的標識符用大寫字母,變 量標識符用小寫字母,以示區別。#define PI 3.14159void mai n() float s,r;r=5;s=PI*r*r;prin tf("s=%fn",s);由宏定義命令定義PI為3.14159 s,r定義為實數5->r PI*r*r->s顯示程序結果 float s,r; r=5; s=PI*r*r;本程序在主函數之前由宏定義命令定義PI為3.14159,在程序中即以該值代替PI。s=PI*r*r等效于s=3.14159*r*r。應該注意的是,符號常量不是變量,它所代表的值在整個作用域內不能再改變。也就是

30、說,在程序中,不能再用賦值 語句對它重新賦值。變量的初值和類型轉換變量賦初值在程序中常常需要對變量賦初值,以便使用變量。語言程序中可有多種方法,在定義時賦以初 值的方法,這種方法稱為初始化。在變量說明中賦初值的一般形式為:類型說明符 變量 仁 值1,變量2=值2,; 例如:int a=b=c=5;float x=3.2,y=3f,z=0.75;char ch1= 'K',ch2=' P'應注意,在說明中不允許連續賦值,如a=b=c=5是不合法的。void mai n()int a=3,b,c=5;b=a+c;prin tf("a=%d,b=%d,c=%dn",a,b,c); a<3,b<-0,c<5b<-a+c顯示程序運行結果 變量類型的轉換一種是自動轉換,一種是強制轉換。變量的數據類型是可以轉換的。轉換的方法有兩種,自動轉換自動轉換發生在不同數據類型的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規 則:1若參與運算量的類型不同,則先轉換成同一類型,然后進行運算。2轉換按數據長度增加的方向進行,以保證精度不降低。 量轉成long型后再進行運算。3所

溫馨提示

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

評論

0/150

提交評論