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

下載本文檔

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

文檔簡介

1、 程序在第一列輸出a值5之后就是“n”,故回車換行;接著又是“t”,于是跳到下一制表位置(設(shè)制表位置間隔為8),再輸出b值6;空二格再輸出c值7后又是n,因此再回車換行;再空二格之后又輸出a值5;再空三格又輸出b的值6;再次后t跳到下一制表位置(與上一行的6對齊),但下一轉(zhuǎn)義字符“b”又使退回一格,故緊挨著6再輸出c值7。請看下面的例子:【例2-6】main()printf(LJLjabLJctderftgn”);printf(“htibbjjjk”);本例中的一個printf函數(shù)先在第一行左端開始輸出“eabjC”,然后遇到“t”,它的作用是跳格,跳到下一制表位置,從第九列開始,故在第911

2、列上輸出“de”。下面遇到“r”,它代表“回車”(不換行),返回到本行最左端(第1列),輸出字符“f”,然后“t”再使當(dāng)前輸出位置移到第9列,輸出“g”。下面是“n”,作用是“回車換行”。第二個ptintf函數(shù)先在第1列輸出字符“h”,后面的“t”使當(dāng)前輸出位置跳到第9列,輸出字母“i”,然后輸出位置應(yīng)移到下一列(第10列)準(zhǔn)備輸出下一個字符。下面到兩個“b”,“b”的作用是“退一格”,因此bb”的作用是使當(dāng)前輸出位置退回到第8列,接著輸出字符jLJLJLJko程序運行時在打印機上得到以下結(jié)果:hjikLJLJLJLJLJLJJLJLJ注意在顯示屏上最后看道的結(jié)果與上述打印結(jié)果不同,是:gde

3、LJLJLJLJLJLJLJLJLJLJLJLJjI_II_I這是由于“r”使當(dāng)前輸出位置回到本行開頭,自此輸出的字符(包括空格和跳格所經(jīng)過的位置)將取代原來屏幕上該位置上顯示的字符。所以原有的LJLjabLjcLjLjLj被新的字符fLJLJLJLJLJLJLJg代替,其后的“de”未被新字符取代。回車換行后先輸出hLJLJLJLJLJLJLJi,退兩格后再輸出“Jljjk”后面第一個“j”將原有的字符“i”取而代之。因此屏幕上看不到“i”。實際上,屏幕上完全按程序要求輸出了全部的字符,只是因為在輸出前面的字符后很快又輸出后面的字符,在人們還未看清楚之前,新的已取代了舊的,所以誤以為未輸出應(yīng)

4、輸出的字符。而在打印機輸出時,不象顯示屏那樣會“抹掉”原字符,留下了不可磨滅的痕跡,它能真正反映輸出的過程和結(jié)果。2.4.2字符變量字符型變量用來存放字符常量,即單個字符。每個字符變量被分配一個字節(jié)的內(nèi)存空間,因此只能存放一個字符。不要以為一個字符變量中可以存放一個字符串。字符變量的類型說明符是char。字符變量類型說明的格式和書寫規(guī)則都與整型變量相同。例如:chara,b;/*定義字符變量a和b*/a=x,b=y;/*給字符變量a和b分別賦值x和y*/將一個字符常量存放到一個變量中,實際上并不是把該字符本身放到變量內(nèi)存單元中去,而是將該字符相應(yīng)的ASCII代碼放到存儲單元中。例如字符x的十進

5、制ASCII碼是120,字符y的十進制ASCII碼是121。對字符變量a,b賦予x和y值:a=x;b=y;實際上是在a,b兩個單元內(nèi)存放120和121的二進制代碼:a01111000(ASCII120)b01111001(ASCII121)既然在內(nèi)存中,字符數(shù)據(jù)以ASCII存儲,它的存儲形式與整數(shù)的存儲形式相類似,所以也可以把它們看成是整型量。C語言允許對整型變量賦以字符值,也允許對字符變量賦以整型值。在輸出時,允許把字符數(shù)據(jù)按整型形式輸出,也允許把整型數(shù)據(jù)按字符形式輸出。以字符形式輸出時,需要先將存儲單元中的ASCII碼轉(zhuǎn)換成相應(yīng)字符,然后輸出。以整數(shù)形式輸出時,直接將ASCII碼當(dāng)作整數(shù)輸

6、出。也可以對字符數(shù)據(jù)進行算術(shù)運算,此時相當(dāng)于對它們的ASCII碼進行算術(shù)運算。整型數(shù)據(jù)為二字節(jié)量,字符數(shù)據(jù)為單字節(jié)量,當(dāng)整型數(shù)據(jù)按字符型量處理時,只有低八位字節(jié)參與處理?!纠?-7】main()chara,b;a=120;b=121;printf(%c,%cn%d,%dn,a,b,a,b);程序運行結(jié)果為:x,y120,121在本程序中,說明a,b為字符型變量,但在賦值語句中賦以整型值。從結(jié)果看,a,b值的輸出形式取決于printf函數(shù)格式串中的格式符,當(dāng)格式符為c時,對應(yīng)輸出的變量值為字符,當(dāng)格式符為d時,對應(yīng)輸出的變量值為整數(shù)?!纠?-8】main()chara,b;a=x;b=y;a=a

7、-32;/*把小寫字母換成大寫字母*/b=b-32;/*把小寫字母換成大寫字母*/b=b-32;/*以字符型和整型輸出*/printf(%c,%cn%d,%dn,a,b,a,b);/*以字符型和整型輸出*/程序運行結(jié)果為:X,Y88,89本例中,a,b被說明為字符變量并賦予字符值,C語言允許字符變量參與數(shù)值運算,即用字符的ASCII碼參與運算。由于大小寫字母的ASCII碼相差32,即每個小寫字母比它相應(yīng)的大寫字母的ASCII碼大32,如a=A+32,b=B+32。因此,程序運算后把小寫字母換成大寫字母。然后分別以字符型和整型輸出。字符串常量前面已經(jīng)提到,字符常量是由一對單引號括起來的單個字符。

8、C語言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是由一對雙引號括起的字符序列。例如:CHINA,Cprogram:,$12.5等都是合法的字符串常量??梢暂敵鲆粋€字符串,如:printf(“Helloworld!”);初學(xué)者容易將字符常量與字符串常量混淆。a是字符常量,“a”是字符串常量,二者不同。假設(shè)c被指定為字符變量:charc;c=a;是正確的,而c=“a”是錯誤的。c=“Hell?!币彩清e誤的。不能把一個字符串賦給一個字符變量。那么,a和“a”究竟有什么區(qū)別呢?C語言規(guī)定:在每一個字符串的結(jié)尾加一個字符串結(jié)束標(biāo)記,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C語言規(guī)定以字符0作為字符

9、串結(jié)束標(biāo)記。0是一個ASCII碼為0的字符,也就是“空操作字符”,即它不引起任何控制動作,也不是一個可顯示的字符。如果有一個字符串“WORLD”,實際上在內(nèi)存中是WORLD0它的長度不是5個字符,而是6個字符,最后一個字符為0。但在輸出時不輸出0。例如在printf(“WORLD”)中,輸出時一個一個字符輸出,直到遇到最后的0字符,就知道字符串結(jié)束,停止輸出。注意,在寫字符串時不必加0,否則畫蛇添足。0是系統(tǒng)自動加上的?!癮”實際包含兩個字符,a和0,因此,把它賦給一個字符變量c:c=“a”;顯然是不行的。在C語言中,沒有專門的字符串變量,字符串如果需要存放在變量中,需要用字符數(shù)組來存放,這將

10、在第七章中介紹。一般來說,字符串常量和字符常量之間有如下的主要區(qū)別:字符常量由單引號括起來,字符串常量由雙引號括起來。字符常量只能是單個字符,字符串常量則可以含一個或多個字符??梢园岩粋€字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量。在C語言中沒有相應(yīng)的字符串變量。字符常量占一個字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字符數(shù)加1。增加的一個字節(jié)中存放字符0(ASCII碼為0)。這是字符串結(jié)束的標(biāo)志。各類數(shù)值型數(shù)據(jù)之間的混合運算整型、單精度型、雙精度型數(shù)據(jù)可以混合運算。前已述及,字符型數(shù)據(jù)可以和整型數(shù)據(jù)通用,因此,整型、實型(包括單、雙精度)、字符型數(shù)據(jù)間可以混合運

11、算。例如:10+a+1.5-12.34*b是合法的。在進行運算時,不同類型的數(shù)據(jù)要轉(zhuǎn)換成同一類型,然后進行運算。轉(zhuǎn)換的方法有兩種,一種是自動轉(zhuǎn)換,一種是強制轉(zhuǎn)換。自動轉(zhuǎn)換自動轉(zhuǎn)換發(fā)生在不同類型的數(shù)據(jù)混合運算時,由編譯系統(tǒng)自動完成。自動轉(zhuǎn)換遵循以下規(guī)則:(1)若參與運算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進行運算。(2)轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉(zhuǎn)成long型后再進行運算。(3)所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉(zhuǎn)換成double型,再作運算。(4)char型和short型參與運算時,

12、必須先轉(zhuǎn)換成int型。(5)在賦值運算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊長時,將丟失一部分數(shù)據(jù),這樣會降低精度,丟失的部分按四舍五入向前舍入。圖2-1表示了類型自動轉(zhuǎn)換的規(guī)則。圖中橫向向左的箭頭表示必定發(fā)生的轉(zhuǎn)換,如字符型數(shù)據(jù)必先轉(zhuǎn)成整型,單精度數(shù)據(jù)高doublefloatA水long水unsigned低intchar,short先轉(zhuǎn)成雙精度數(shù)據(jù),等等。圖2-1類型轉(zhuǎn)換方向圖中縱向的箭頭表示當(dāng)運算對象為不同的類型時轉(zhuǎn)換的方向。例如整型與雙精度型數(shù)據(jù)進行運算,先將整型數(shù)據(jù)轉(zhuǎn)換成雙精度型數(shù)據(jù),然后在兩個同類型數(shù)據(jù)(雙精度)間進行

13、運算,結(jié)果為雙精度型。注意箭頭方向只表示數(shù)據(jù)類型級別的高低,由低向高轉(zhuǎn)換。不要理解為整型先轉(zhuǎn)成無符號型,再轉(zhuǎn)成長整形,再轉(zhuǎn)成雙精度型。如果一個整型數(shù)據(jù)與一個雙精度型數(shù)據(jù)運算,是直接將整型轉(zhuǎn)成雙精度型。同理,一個整型數(shù)據(jù)與一個長整型數(shù)據(jù)運算,先將整型轉(zhuǎn)成長整型。換言之,如果有一個數(shù)據(jù)是單精度型或雙精度型,則另一數(shù)據(jù)要先轉(zhuǎn)成雙精度型,結(jié)果為雙精度型。如果兩個數(shù)據(jù)中最高級別為長整型,則另一數(shù)據(jù)轉(zhuǎn)成長整型,結(jié)果為長整型。其它依此類推。假設(shè)i已指定為整型變量,f為單精度實型變量,d為雙精度實型變量,e為長整型變量,有下面式子:10+a+i*f-d/e運算次序為:進行10+a的運算,先將a轉(zhuǎn)換成整數(shù)97,

14、運算結(jié)果為107。進行i*f的運算,先將i和f都轉(zhuǎn)換成雙精度型,運算結(jié)果為雙精度型。整數(shù)107和i*f的積相加,先將整數(shù)107轉(zhuǎn)換成雙精度型(107.000000),運算結(jié)果為雙精度型。進行d/e的運算,先將e轉(zhuǎn)換成雙精度型,運算結(jié)果為雙精度型。將10+a+i*f的結(jié)果與d/e的商相減,結(jié)果為雙精度型。上述的類型轉(zhuǎn)換是由系統(tǒng)自動進行的。強制轉(zhuǎn)換強制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運算來實現(xiàn)的。其一般形式為:(類型說明符)(表達式)其功能是把表達式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型。例如:(float)a把a轉(zhuǎn)換為實型,(int)(x+y)把x+y的結(jié)果轉(zhuǎn)換為整型。在使用強制轉(zhuǎn)換時應(yīng)注意以下問題:

15、類型說明符和表達式都必須加括號(單個變量可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。無論是強制轉(zhuǎn)換或是自動轉(zhuǎn)換,都只是為了本次運算的需要而對變量的數(shù)據(jù)長度進行的臨時性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時對該變量定義的類型?!纠?-9】main()floatf=5.75;printf(int)f=%d,f=%fn,(int)f,f);運行結(jié)果:(int)f=5,f=5.75本例表明,f雖強制轉(zhuǎn)為int型,但只在運算中起作用,是臨時的,而f本身的類型并不改變。因此,(int)f的值為5(刪去了小數(shù)),而f的值仍為5.75。本章小結(jié)數(shù)據(jù)是程序加工的對象,

16、數(shù)據(jù)描述是通過數(shù)據(jù)類型來完成的,C語言不僅提供了基本類型、構(gòu)造類型、指針類型和空類型等多種數(shù)據(jù)類型,還提供了構(gòu)造更加復(fù)雜的用戶自定義數(shù)據(jù)結(jié)構(gòu)的機制。基本類型的數(shù)據(jù)又可分為常量和變量,它們可與數(shù)據(jù)類型結(jié)合起來分類,即為整型常量、整型變量、實型(浮點型)常量、實型(浮點型)變量、字符常量、字符串常量、字符變量、枚舉常量、枚舉變量。不同類型的數(shù)據(jù)在計算機中所占的存儲空間及數(shù)據(jù)組織方式不同,因此它們的取值范圍及精度也不相同。不同類型的數(shù)據(jù)在進行混合運算的時候,要轉(zhuǎn)成相同的類型參與運算,轉(zhuǎn)換的形式有自動轉(zhuǎn)換和強制轉(zhuǎn)換兩種。習(xí)題復(fù)習(xí)計算機基礎(chǔ)課程中關(guān)于各種數(shù)制相互轉(zhuǎn)換的知識。試比較常量與變量的關(guān)系?用轉(zhuǎn)義字符有什么好處?使用符號常量有何好處?使用時應(yīng)注意什么問題?對照變量類型與常量類型,哪些是相同的,那些是常量所獨有的?TOC o 1-5 h z下列選項中,可以作為C語言常量的是()A)13.8eB)1/2C)MD)”abc”下列選項中,不可以作為C語言常量的是()A).88B)35.6e3C)4e-2D)3/5下列選項中,正確的一組程序是()9.10.11.A)chara;B)charb;C)charc;D)chardA=M;b=55;c=”M”;d=”55”已知

溫馨提示

  • 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

提交評論