C語言-基本數(shù)據(jù)類型、常量和變量.ppt
《C語言-基本數(shù)據(jù)類型、常量和變量.ppt》由會員分享,可在線閱讀,更多相關(guān)《C語言-基本數(shù)據(jù)類型、常量和變量.ppt(41頁珍藏版)》請在裝配圖網(wǎng)上搜索。
數(shù)據(jù)類型是程序設(shè)計語言的重要概念,是高級語言區(qū)別于低級語言的顯著特征。不同的數(shù)據(jù)類型在計算機內(nèi)部的存儲方式不同,允許的運算不同,適用的領(lǐng)域也不同。,第2章基本數(shù)據(jù)類型、常量和變量,C語言允許使用的數(shù)據(jù)類型有以下三類:(1)基本類型不可再分的最基本的數(shù)據(jù)類型,包括整型、浮點型,雙精度型、字符型及無值類型等?;绢愋屯ǔ4韱蝹€數(shù)據(jù)。(2)構(gòu)造類型由已知的基本類型通過一定的構(gòu)造方法構(gòu)造出來的類型,包括數(shù)組、結(jié)構(gòu)體、聯(lián)合體、枚舉類型等。構(gòu)造類型通常代表一批數(shù)據(jù)。(3)指針類型指針可以直接指向內(nèi)存地址,訪問效率高,用于構(gòu)造各種形式的動態(tài)或遞歸數(shù)據(jù)結(jié)構(gòu),如鏈表、樹等。,,1.基本數(shù)據(jù)類型及其關(guān)鍵字,2.1基本數(shù)據(jù)類型,表2-1基本數(shù)據(jù)類型及對應(yīng)關(guān)鍵字表,不同類型的數(shù)據(jù)在計算機中的存儲方式是不同的,即它們的存儲結(jié)構(gòu)和所占的存儲空間字節(jié)數(shù)并不一樣,這與宿主計算機的硬件特性有關(guān)。C語言為了提高程序的可移植性,沒有對數(shù)據(jù)類型的長度和存儲方式進行規(guī)定,而由不同類型的計算機上使用的不同的C編譯系統(tǒng)自行確定。VC++6.0規(guī)定:①char型長度為1字節(jié),按有符號二進制補碼形式存儲。②int型長度為4字節(jié),按定點有符號二進制補碼形式存儲。③float型長度為4字節(jié),以浮點形式存儲,階碼占8位(增碼表示),尾數(shù)占24位(歸一化補碼表示),6位有效數(shù)字精度,分辨率約為1.110-38。④double型長度為8字節(jié),存儲方式與float基本相同,階碼占11位,尾數(shù)占53位,15位有效數(shù)字精度,分辨率約為2.210-308。,2.基本數(shù)據(jù)類型的存儲方式和取值范圍,(1)short和long可以提供不同的數(shù)據(jù)長度以滿足實際使用的需要。C規(guī)定:長度shortint≤int≤longintVC++6.016bit32bit32bitC規(guī)定:長度float≤double≤longdoubleVC++6.032bit64bit64bit(2)signed和unsigned規(guī)定了對數(shù)值符號的處理,只限于char型和int型。charsignedcharunsignedcharshortsignedshortunsignedshortintsignedintunsignedintlongsignedlongunsignedlong,3.類型修飾符,VC++6.0數(shù)據(jù)類型和取值范圍,2.2常量及其類型,常量是指在程序運行過程中,其值保持不變的量。常量分為char、int、double和字符串型。其類型是由書寫形式?jīng)Q定的。,1.整型常數(shù),在計算機中,整數(shù)是準確表示的。C語言可以識別十進制、八進制和十六進制的整數(shù)。(1)十進制整數(shù)十進制整數(shù)由正負號(+或-)后跟數(shù)字串組成,正號可以省略不寫,且開頭的數(shù)字不能為0。如1234,-23,+187,32767,5600,0在整數(shù)后面加上后綴u或U則構(gòu)成無符號整數(shù),如123u,5678U,70000u等。在整數(shù)后面加上后綴l或L則構(gòu)成長整數(shù),如-124783648l,1234567890L在整數(shù)后面加上后綴ul或UL則構(gòu)成無符號長整數(shù),如3456ul,1234567890ul,(2)八進制整數(shù)以數(shù)字0打頭,后跟0~7組成的數(shù)字串。例如:0123表示八進制常數(shù)123,相當(dāng)于十進制數(shù)83。八進制整數(shù)可以加上后綴u(U),l(L)或ul(UL)分別構(gòu)成八進制的無符號數(shù)、長整數(shù)或無符號長整數(shù)。例如:012345u、02765543102l、0345675026ul等。(3)十六進制整數(shù)以數(shù)字0和小寫字母x(或大寫字母X)打頭,后跟0~9及A~F(或a~f)組成的數(shù)字字母串。其中,A~F(或a~f)分別表示十進制的10~15。例如:0 x2f是一個十六進制,相當(dāng)于十進制的47。若在十六進制數(shù)后面加上后綴u(U)、l(L)或ul(UL),則分別構(gòu)成十六進制的無符號數(shù)、長整數(shù)或無符號長整數(shù)。如:0 x89ad476bu,0 x9043fecd2l,0 x98bfd5ca7ul,2.實數(shù),C語言中,實數(shù)是近似表示的,且只能用十進制表示。(1)定點格式,即由正負號、整數(shù)部分、十進制小數(shù)點和小數(shù)部分組成。整數(shù)部分和小數(shù)部分都是由0~9組成的數(shù)字串。例如,123.45,-256.701,.543,-25.,0.,.0,0.0等。(小數(shù)點必不可少)(2)指數(shù)格式,即在定點表示的基礎(chǔ)上,后面再加上一個e或E后跟一個1~3位整數(shù)組成。如-1.234E18,2.74e-02,2.71828e0,.86e-3,1e-2等。書寫指數(shù)格式的浮點數(shù)時,字母e或E前面必須有數(shù)字,可以沒有小數(shù)點,如.2e3,2.3e,2e3是正確的,而.e3,e-3等是錯誤的。同時,e或E后面必須是正負整數(shù),不能帶小數(shù)點,如1.2e3.1、0.3e-0.5等是錯誤的。在計算機中,無論是定點表示還是浮點表示的實型常數(shù)都視為double型的。如果有必要,可以用后綴f(F)來表示float型實數(shù),如2.6736F、12.56e-13f等。,3.字符常量,字符常量是用單引號括住的單個字符。(1)單引號表示法,用于可顯示字符,直接用單引號(撇號)將該字符括住,即表示字符常數(shù)。如A,a,5,$,?,+等。(2)轉(zhuǎn)義字符表示法,用于不可顯示字符,主要是那些控制字符如換行符、回車符、換頁符等,還有一些在C語言中有特殊含義和用途的字符如單引號、雙引號、反斜杠,只能用轉(zhuǎn)義序列表示。例如,‘\n’、‘\012’、‘\xa’均表示換行符,因為換行符的ASCII代碼八進制值12,十六進制值是a。,表2.3常用的轉(zhuǎn)義字符,【例】字符常量的表示方法#includevoidmain(){printf("%d\n",B);//十進制printf("%c\n",B);//字符printf("%c\n",66);printf("%c\n",B+32);printf("%d,%c,%d,%c\n",\n,\0,\0,\x41);},4.字符串常量,字符串常量是用雙引號括起來的0個或多個字符的序列。例如"Iamastudent.""x"""http://空字符串"0107328136""Isaid,\"goodmorning!\""http://含轉(zhuǎn)義字符(1)字符串常量的存儲方式字符串常量存儲時,按字符串中字符從左到右的順序依次占用連續(xù)的存儲單元,每個字符占1個字節(jié),存放其對應(yīng)的ASCII碼。C編譯系統(tǒng)還會自動在每個字符串常量的未尾追加一個零字符NULL(\0)作為字符串的結(jié)束標識。因此,一個含有n個字符的字符串常量要占用n+1個字節(jié)的存儲空間。,例如,字符串常量"Iamastudent"含有14個字符(包括3個空格字符),它將占用15個字節(jié)的存儲單元。,(2)字符串常量和字符常量的區(qū)別①從表示方式上看,字符串常量是以雙引號定界,而字符常量則以單引號定界,如"A"是字符串常量,A則是字符常量。②每個字符常量只占1個字節(jié)的存儲單元,而字符串常量則要占用一批連續(xù)的存儲單元,其所占字節(jié)數(shù)為字符串長度加1。③字符型常量通??纱娣旁谧址妥兞恐校址A縿t必須存放在字符型數(shù)組中。④字符型常量可以與整數(shù)混合運算,而字符串常量則不可以。,2.3變量及其類型,變量是指那些在程序運行過程中其值可以改變的量。變量代表著存儲器中的一個存儲單元。在C語言中,變量具有如下三個屬性:①變量分為不同的數(shù)據(jù)類型,數(shù)據(jù)類型決定了該變量存儲的數(shù)據(jù)的含義。②變量分為不同的存儲類型,存儲類型決定了變量在計算機中的存儲位置及其壽命(生命期)。③變量在程序中的定義位置決定了該變量的作用域,即起作用的范圍。,1.變量的定義,C語言規(guī)定,變量必須先定義后使用,變量的數(shù)據(jù)類型與變量名本身無關(guān)。變量定義一是定義變量的數(shù)據(jù)類型,二是定義變量的名稱,三是說明變量的存儲類型,其一般格式為:[存儲類型]數(shù)據(jù)類型變量清單;charch1;staticinti,j,k;shortintsi;floatf1,f2;doublebalance,profit,loss;變量的數(shù)據(jù)類型可以是字符型、整型、浮點型、雙精度型等。,,2.變量定義的位置,變量定義的位置可以有三處:在函數(shù)體內(nèi)定義的變量稱為局部變量,在函數(shù)的形式參數(shù)表中定義的變量稱為形參,在函數(shù)外部定義的變量稱為全局變量。例如#includeintcolor;//全局變量intvalue(intx,floaty);//形式參數(shù){intlower,upper,step;//局部變量charc,line;//局部變量floatdata,time;//局部變量unsignedlongi,j,k;//局部變量……},變量在程序中的定義位置,決定了該變量的作用域。(1)塊級作用域塊是用函數(shù)體內(nèi)花括號括起來的一個程序段。在塊內(nèi)定義的變量具有塊級作用域,其作用域從變量定義處到塊的結(jié)束處(即塊的右花括號處)。(2)函數(shù)級作用域函數(shù)作用域是指在函數(shù)體開頭定義的變量,它們在其定義的函數(shù)內(nèi)有效,即在整個函數(shù)內(nèi)均可以引用。(3)文件級作用域在函數(shù)體外定義的變量具有文件級作用域。具有文件級作用域的變量可在整個文件中訪問,即從變量定義的位置開始到該源程序文件結(jié)束。(4)程序級作用域程序級的作用域最大,在組成整個程序的所有文件中均有效。當(dāng)用extern將全局變量說明為外部變量后,可以使其具有程序級作用域。,【例】#includeinta;//全局變量voidmain(){intb,c;//函數(shù)級局部變量a=1;b=2;c=3;a=a+1;b=b+1;c=c+b;//a=2b=3c=6{intc;//塊級局部變量c=b*3;//c=9a=a+c;//a=11printf("first:%d,%d,%d\n",a,b,c);//11,3,9}printf("second:%d,%d,%d\n",a,b,c);//11,3,6},*3.變量的存儲類型,變量的存儲類型指的是變量在計算機內(nèi)存中的存放位置。(1)局部變量的存儲類型影響其生命期auto型變量的生命期只限于它所在的程序段執(zhí)行期間;register型變量的生命期與auto相同,但存取速度快,個數(shù)有限;static型變量的生命期與整個程序執(zhí)行期相同。(2)全局變量的存儲類型影響其作用域static型變量的作用域僅限于它所在的程序文件;extern型變量的作用域可擴充到其他程序文件。在定義局部變量時,若省略存儲類型說明符,則視為auto型。,4.變量的初始化,在定義變量的同時賦予其初值稱為變量的初始化。如:inta=2,b=3;doublex,pi=3.1415926;charch1=a,ch2=b,ch3=ch1;注意:如果未用static或extern對變量進行存儲類型聲明,未經(jīng)初始化或賦值的變量,其值是不確定的,不能引用。,關(guān)于變量初始化的說明:(1)register和auto型變量的初始化是在程序執(zhí)行時完成的,若未進行初始化,其值是不確定的。(2)全局變量和static型變量的初始化是在編譯階段完成的,這種初始化在整個程序執(zhí)行期間只被執(zhí)行一次。這兩類變量若未執(zhí)行初始化,則編譯系統(tǒng)自動為其賦零值。(3)全局變量和static型變量只能用常數(shù)進行初始化,而register和auto型變量則既可以用常數(shù)進行初始化,也可以用先前已初始化的變量進行初始化。,2.4符號常量,符號常量是用標識符表示的常量。從外表看,它是標識符,像變量;但實質(zhì)上,它是常量,它的值不能通過賦值或輸入加以改變。1.使用符號常量的目的①用符號常數(shù)可以清晰地看出常量所代表的物理意義,增強程序的可讀性②當(dāng)程序中多次出現(xiàn)某一個常數(shù),就要多次書寫,這樣一要耗費時間,二是可能出現(xiàn)不一致。用符號常數(shù)就可以用較短的符號代替,從而有效地避免這兩個缺點。③當(dāng)程序中多次出現(xiàn)同一常數(shù)需要修改時,用符號常數(shù)只需修改定義,可以做到一改全改。,2.符號常量的定義,(1)宏定義宏定義是用指定的標識符(即宏名)來代替一串字符#define標識符字符串例如:#definePI3.14159265其中,#define是編譯系統(tǒng)的預(yù)處理命令;PI稱為宏名,為了與一般變量名相區(qū)別,通常用大寫英文字母表示;3.14159265作為一串字符,它沒有類型和值的含義。宏定義的功能:用標識符PI來代替“3.14159265"這串字符。當(dāng)宏名出現(xiàn)在程序中時,程序會用定義的一串字符代替宏名,然后根據(jù)上下文確定其類型和值。,定義符號常數(shù)有三種方法:宏定義、const修飾和枚舉。,①宏定義必須以#define開頭,行末不加分號,因為它不是C語句;②每個#define只能定義一個宏,且只占一個書寫行;③#define命令一般出現(xiàn)在函數(shù)外部,其有效范圍為從開始處到本源程序文件結(jié)束;④使用宏定義時可使用已定義過的宏,稱為宏定義的嵌套。例如#definePI3.14159265#defineA2*PI⑤編譯系統(tǒng)只對程序中出現(xiàn)的宏名用定義中的字符串作簡單替換,而不作語法檢查。例如定義#definePI3.14abc后,編譯系統(tǒng)也照樣將字符串“3.14abc”替換到程序中的PI處,并不管其含義是否正確⑥用宏定義還可定義更復(fù)雜的表達式或函數(shù)。,注意:,這是C語言新增加的定義符號常數(shù)的一種方法,其形式為const數(shù)據(jù)類型標識符=常數(shù);例如constintmax=300;定義了一個整型的符號常數(shù)max,其值等于300。用const修飾得到的標識符不僅有值的含義,而且有類型的含義。但在程序中卻不允許再對該名稱賦值,即不允許在程序中再出現(xiàn)諸如max=136;max=max+136;這樣的語句。const修飾只能定義常數(shù),不能定義函數(shù)或表達式。,(2)const修飾,【例】符號常數(shù)的定義方法。#include#definePI3.1415926535voidmain(){doublec,a,s,v;constfloatRADIUS=2.5;c=2*PI*RADIUS;a=PI*RADIUS*RADIUS;s=4*a;v=4*a*RADIUS/3;printf("Circuference=%f\n",c);printf("Area=%f\n",a);printf("SurfaceArea=%f\n",s);printf("Volume=%f\n",v);},printf()函數(shù)可以用于所有類型數(shù)據(jù)的格式化輸出。①不同類型的數(shù)據(jù)要采用不同的格式轉(zhuǎn)換說明符。,若格式控制符多于輸出項,則輸出不確定值;反之不輸出。,2.5不同類型數(shù)據(jù)的輸入輸出,2.5.1printf()函數(shù),②可以指定輸出寬度和有效數(shù)字位數(shù)(m.n)printf("%3d,%6d,%6.5d\n”,1250,1250,1250);輸出為1250,1250,01250printf("%10f,%10.2f,%.2f\n",123.456,123.456,123.456);輸出為123.456000,123.46,123.46③可以指定浮點實數(shù)輸出的寬度和小數(shù)位數(shù)(%m.ne)printf("%10e,%10.4e,%.3e\n",123.456,123.456,123.456);輸出為1.23456e+02,1.235e-02,1.23e+02,④可以指定字符串輸出的寬度和子串長度(%m.ns)printf("%3s,%10s,%10.5s,%.4s\n","abc","defghij","klmnopqrst","uvwxyz");輸出為abc,defjhij,klmno,uvwx⑤可以指定左對齊在缺省情況下,所有的輸出右對齊,在百分號后邊加一個減號,如%-m.nd、%-m.nf、%-m.ns等,可使輸出左對齊,右邊填充空格。printf("%-10.2f,%-5.2f\n",123.456,1.23456e2);輸出為123.46,123.46printf("%-10s,%-5s,%-10.5s,%-.8s\n","abc","defghij","klmnopqrst","uvwxyz");輸出為abc,defghij,klmno,uvwxyz,2.5.2scanf()函數(shù),scanf()函數(shù)可以用于所有類型數(shù)據(jù)的輸入。scanf()函數(shù)使用說明:①不同類型的數(shù)據(jù)要采用不同的格式轉(zhuǎn)換說明符;②只使用格式轉(zhuǎn)換說明符;③輸入項必須用地址表示;,scanf()函數(shù)可以用于所有類型數(shù)據(jù)的輸入,采用不同的格式轉(zhuǎn)換說明符將不同類型的數(shù)據(jù)從標準輸入設(shè)備讀入內(nèi)存。其調(diào)用的一般形式為scanf("格式控制字符串",輸入項目清單);其中,格式控制字符串通常只包含格式轉(zhuǎn)換說明符,而不使用轉(zhuǎn)義字符和普通字符。,④當(dāng)需要一次輸入多個數(shù)據(jù)時,各數(shù)據(jù)之間只能用空格、制表符或回車鍵分隔,其他符號都不能作為分隔符。⑤在格式控制字符串中通常只出現(xiàn)格式轉(zhuǎn)換說明符,如果出現(xiàn)格式轉(zhuǎn)換說明符以外的字符,這些字符應(yīng)該照原樣輸入,否則當(dāng)scanf()函數(shù)從輸入數(shù)據(jù)中找不到這樣的字符時,將自行終止輸入。scanf("%d%d",其中a和b都是int型變量,若從鍵盤輸入10,20↓就不能被正確接收。,(1)抑制賦值在百分號之后、轉(zhuǎn)換控制字符之前加進一個星號(*)時,scanf()函數(shù)將正常讀入對應(yīng)的數(shù)據(jù),但不賦值。例如,%*c將抑制一個輸入的字符;%*d將抑制一個輸入的整數(shù)等。例如scanf("%d%*c%d",若從鍵盤輸入10/20↓則函數(shù)把10賦給a,20賦給b,而“/”被忽略。即%*c的作用是跳過一個輸入字符。(2)限制接收的字符個數(shù)在百分號和控制字符之間插進一個整數(shù)可以限制從輸入數(shù)據(jù)中接收的字符個數(shù)。如果連續(xù)輸入的字符個數(shù)超過指定的長度,則多余的字符被截斷;反之,若連續(xù)輸入的字符個數(shù)尚未達到指定的長度而提前遇到分隔符,則只接收分隔符之前的字符。,使用scanf()的幾個特殊控制,2.5.3單字符輸出輸入函數(shù),單字符輸入輸出函數(shù)getchar()和putchar()函數(shù)定義在標題文件stdio.h中,當(dāng)需要進行單個字符的輸入和輸出時,它們比scanf()和printf()簡潔。,putchar(c);其中,c是一個字符型常量或變量,也可以是一個取值不大于255的整型常量或變量。該函數(shù)的功能是向標準輸出設(shè)備輸出一個字符。,1.putchar()函數(shù),【例】用putchar()函數(shù)輸出一個字符。#includevoidmain(){intc;chard;c=65;d=A;putchar(c);putchar(d);putchar(A);putchar(65);},調(diào)用getchar()函數(shù)的一般格式為:getchar();這是一個不帶參數(shù)的函數(shù),即圓括號中沒有參數(shù),但圓括號不能省略。getchar()函數(shù)的功能是從標準輸入設(shè)備接收一個字符。,2.單字符輸入函數(shù)getchar(),,【例】用getchar()函數(shù)輸入一個字符。#includevoidmain(){charc;c=getchar();printf("%c\n",c);printf("%d\n",c);}程序運行時,等待用戶從鍵盤輸入字符,假設(shè)用戶按了字母a及回車鍵,則屏幕顯示:a↓(鍵盤輸入)a(printf()函數(shù)按字符格式顯示c的值)97(printf()函數(shù)按整數(shù)格式顯示c的值),注意:getchar()還可以作為putchar()的參數(shù),例如putchar(getchar());其功能是顯示用戶從鍵盤輸入的字符。使用getchar()函數(shù)時,回車鍵也作為輸入字符的一部分。特別要注意在連續(xù)調(diào)用該函數(shù)時,回車鍵將會轉(zhuǎn)換成換行符被下一個getchar()接收。例如#includevoidmain(){charc,d;c=getchar();d=getchar();printf("%c\n",c);printf("%d\n",d);},程序運行時,用戶輸入字母a及回車鍵后,字母a被變量c接收,而回車鍵將轉(zhuǎn)換成換行符被變量d接收,屏幕顯示為:a↓a(printf()函數(shù)按字符格式顯示c的值)10(printf()函數(shù)按整數(shù)格式顯示d的值),2.5.4單字符輸入函數(shù),getche()和getch()用于輸入單個字符而不必按回車鍵。getche()函數(shù)將用戶輸入的字符在屏幕上回顯出來,getch()不回顯用戶輸入的字符。getche()和getch()定義在標題文件中。,【例】#includevoidmain(){charc;c=getche();printf("%c\n",c);printf("%d\n",d);}程序運行時,用戶只要按字母a,屏幕立即顯示:aa(第一個a是用戶輸入的,第二個a是getche()函數(shù)回顯的)a(printf()函數(shù)按字符格式顯示c的值)97(printf()函數(shù)按整數(shù)格式顯示c的值)getche()把輸入的字符回顯在屏幕上,而getch()則不回顯,這對輸入密碼和選擇菜單特別有用。,- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言 基本 數(shù)據(jù)類型 常量 變量
鏈接地址:http://m.jqnhouse.com/p-11494751.html