c語言的基本數(shù)據(jù)類型及其表示_第1頁
c語言的基本數(shù)據(jù)類型及其表示_第2頁
c語言的基本數(shù)據(jù)類型及其表示_第3頁
c語言的基本數(shù)據(jù)類型及其表示_第4頁
c語言的基本數(shù)據(jù)類型及其表示_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

少年易學(xué)老難成,一寸光陰不可輕少年易學(xué)老難成,一寸光陰不可輕-百度文庫#}討論1:在TurboC2.0開發(fā)環(huán)境下運(yùn)行此程序時(shí),編譯過程中提示有一個(gè)錯誤,信息窗口顯示如圖3-2所示的錯誤信息,說明源程序第五行有錯,錯誤原因是主程序中的變量C沒有定義。編輯窗口源程序反相顯示出第五行,見圖3-3所示。分析錯誤原因可知,程序第五行并沒有錯,而是在使用變量c之前沒有定義其類型,修改程序第二行為:inta,b,c;重新編譯即可通過??梢姡珻程序中的所有變量都必須先定義后使用。CompilingC:\TC\SUM.C:ErrorC:\TC5:Undefinedsymbolinfunctionnain圖SUM.匚源程序編譯出錯信息,討論2:由SUM.C源程序可見,該程序的運(yùn)行結(jié)果應(yīng)該是:c=32770,可實(shí)際運(yùn)行結(jié)果如下:c=-32766FileEJHRUnC(Line5Col5main()tinta,b;a=327i7;h=3;printf("c=^d\nll,G);圖mmsum.c源程序編輯窗口平顯然這個(gè)結(jié)果是錯誤的,但系統(tǒng)沒有提示出錯。為什么會出現(xiàn)這種情況呢?圖3-4是該程序運(yùn)行后變量a、b、c中的存儲情況。由圖中可見,a和b的值都沒有超出整型數(shù)的表示范圍,而a加b后應(yīng)得到32770,這個(gè)數(shù)已經(jīng)超出了整型數(shù)的表示范圍,稱為溢出。但這種溢出在內(nèi)存變量c中的表現(xiàn)形式正好是數(shù)值-32766的補(bǔ)碼形式,當(dāng)輸出變量c的內(nèi)容時(shí)自然就輸出了-32766,造成結(jié)果錯誤。這就是數(shù)據(jù)溢出導(dǎo)致的結(jié)果。對于這種問題,系統(tǒng)往往不給出錯誤提示,而是要靠正確使用類型說明來保證其正確性。所以要求對數(shù)據(jù)類型的使用要仔細(xì),對運(yùn)算結(jié)果的數(shù)量級要有基本估計(jì)。變量*jI51444444^1川13JhlI嵬花了j變量匕」[口|皿口|口|口|可同川01爪1雙口3j變量cj|"口|"口|"口|口|""口I01口1口I111國-嵬循6的補(bǔ)碼J閣14兩數(shù)相加變量存儲示意圖」如果把上述程序作以下修改:/*SUM.C源程序*/main(){longa,b,c;/*說明a、b、c為長整型變量*/a=32767;b=3;c=a+b;printf("c=%ld\n",c);/*按長整型格式輸出變量c的值*/}即把變量a、b、c定義為長整型,就可以得到正確的運(yùn)行結(jié)果。請讀者思考:如果只把c定義為長整型,a和b還保持整型,結(jié)果會怎樣?討論3:在C程序中,要注意常量與變量的類型匹配問題,例如上述程序中變量c的結(jié)果是正整數(shù)32770,與之匹配的有l(wèi)ongint型,還有unsignedint、unsignedshortint和unsignedlongint等所有無符號整型,因?yàn)?2770是正數(shù),又沒有超出所有無符號整型數(shù)的表示范圍。而int或shortint型是不能與之匹配的,否則會產(chǎn)生溢出。3.2.3實(shí)型數(shù)據(jù)及其表示.實(shí)數(shù)類型C語言提供了三種用于表示實(shí)數(shù)的類型:單精度型、雙精度型和長雙精度型。表3-3列出了實(shí)型數(shù)據(jù)的長度和表示范圍。表中的有效位是指數(shù)據(jù)在計(jì)算機(jī)中存儲和輸出時(shí)能夠精確表示的數(shù)字位數(shù)。表3-3實(shí)數(shù)基本類型表實(shí)數(shù)類型存儲字節(jié)數(shù)最小數(shù)值范圍有效位單精度型4字節(jié)10-38?10386?7雙精度型8字節(jié)10-308?1030815?16長雙精度型16字節(jié)10-4931?10493218?19在計(jì)算機(jī)中,實(shí)數(shù)是以浮點(diǎn)數(shù)形式存儲的,所以通常將單精度實(shí)數(shù)稱為浮點(diǎn)數(shù)。由計(jì)算機(jī)基礎(chǔ)知道,浮點(diǎn)數(shù)在計(jì)算機(jī)中是按指數(shù)形式存儲的,即把一個(gè)實(shí)型數(shù)據(jù)分成小數(shù)和指數(shù)兩部分。例如十進(jìn)制實(shí)型數(shù)據(jù)0.12345610-2在計(jì)算機(jī)中的存放形式可用圖3-5示意。實(shí)際上計(jì)算機(jī)中存放的是二進(jìn)制數(shù),這里僅用十進(jìn)制數(shù)說明其存放形式。數(shù)符- 小數(shù)? 指數(shù)符號招數(shù)?十0.123456-2-1小數(shù)部分p 指數(shù)部分圖15懶飄在計(jì)算機(jī)中的存放形式?其中,小數(shù)部分一般都采用規(guī)格化的數(shù)據(jù)形式,即:小數(shù)點(diǎn)放在第一個(gè)有效數(shù)字前面,使小數(shù)部分存放小于1的純小數(shù)。例如0.12345610-2還可表示為123.45610-5、1.2345610-3、0.000123456101等,但這些都不是規(guī)格化的數(shù)。表示小數(shù)部分的位數(shù)愈多,數(shù)的有效位就愈多,數(shù)的精確度就愈高。表示指數(shù)部分的位數(shù)愈多,數(shù)的表示范圍就愈大。究竟用多少位來表示小數(shù)部分,多少位表示指數(shù)部分,C標(biāo)準(zhǔn)對此并無具體規(guī)定,由各C編譯系統(tǒng)自定。對于單精度實(shí)數(shù),一般的C編譯系統(tǒng)用4個(gè)字節(jié)中的前24位表示小數(shù)部分,其中最高位為整個(gè)數(shù)的符號位,用后8位表示指數(shù)部分,其中最高位為指數(shù)的符號位(見圖3-5)。這樣,單精度實(shí)數(shù)的精度就取決于小數(shù)部分的23位二進(jìn)制數(shù)位所能表達(dá)的數(shù)值位數(shù),將其轉(zhuǎn)換為十進(jìn)制,最多可表示7位十進(jìn)制數(shù)字,所以單精度實(shí)數(shù)的有效位是7位。由實(shí)型數(shù)據(jù)的存儲形式可見,由于機(jī)器存儲位數(shù)的限制,浮點(diǎn)數(shù)都是近似值,而且多個(gè)浮點(diǎn)數(shù)運(yùn)算后誤差累積很快,所以引進(jìn)了雙精度型和長雙精度型,用于擴(kuò)大存儲位數(shù),目的是增加實(shí)數(shù)的長度,減少累積誤差,改善計(jì)算精度。2.實(shí)型常量實(shí)型常量亦被稱為實(shí)型數(shù)或浮點(diǎn)數(shù)。在C語言中,實(shí)型常量一般都作為雙精度來處理,并且只用十進(jìn)制數(shù)表示。實(shí)型常量有兩種書寫格式:小數(shù)形式和指數(shù)形式。(1)小數(shù)形式:它由符號、整數(shù)部分、小數(shù)點(diǎn)及小數(shù)部分組成。例如以下都是合法的小數(shù)形式實(shí)型常量:12.34,0.123,.123,123.,-12.0,-0.0345,0.0,0.注意其中任何位置上的小數(shù)點(diǎn)都是不可缺少的。例如123.不能寫成123,因?yàn)?23是整型常量,而123.是實(shí)型常量。(2)指數(shù)形式:由十進(jìn)制小數(shù)形式加上指數(shù)部分組成,其形式如下:十進(jìn)制小數(shù)e指數(shù)或:十進(jìn)制小數(shù)E指數(shù)格式中的e或E前面的數(shù)字表示尾數(shù),e或E表示底數(shù)10,而e或E后面的指數(shù)必須是整數(shù),表示10的冪次。例如25.34e3表示25.34x103=25340。以下都是合法的指數(shù)形式實(shí)型常量:2.5e3,-12.5e-5,0.123E-5,-267.89E-6,0.61256e3注意指數(shù)必須是不超過數(shù)據(jù)表示范圍的正負(fù)整數(shù),并且在e或E前必須有數(shù)字。例如:e3,3.0e,E-9,10e3.5,.e8,e都是不合法的指數(shù)形式。對于上述兩種書寫形式,系統(tǒng)均默認(rèn)為是雙精度實(shí)型常量,可表示15?16位有效數(shù)字,數(shù)的表示范圍可達(dá)到10-308?10308。如果要表示單精度實(shí)型常量和長雙精度實(shí)型常量,只要在上述書寫形式后分別加上后綴f(F)或(L)即可。例如:2.3f,-0.123F,2e-3f,-1.5e4F為合法的單精度實(shí)型常量,注意只有7位有效數(shù)字。1256.34L,-0.123L,2e3L,為合法的長雙精度實(shí)型常量,有18?19位有效數(shù)字。對于超過有效數(shù)字位的數(shù)位,系統(tǒng)存儲時(shí)自動舍去。3.實(shí)型變量在C語言中,實(shí)型變量分為單精度、雙精度和長雙精度等三種類型。ANSIC標(biāo)準(zhǔn)允許的定義三種實(shí)型變量的關(guān)鍵字如下:float單精度型double^雙精度型longdouble^長雙精度型實(shí)型變量的定義,只需在說明語句中指明實(shí)型數(shù)據(jù)類型和相應(yīng)的變量名即可。例如:floata,b;/*說明變量a,b為單精度型實(shí)數(shù)*/doublec,d;/*說明變量c,d為雙精度型實(shí)數(shù)*/longdoublee,f/*說明變量e,f為長雙精度型實(shí)數(shù)*/4.實(shí)型數(shù)據(jù)應(yīng)用中的誤差問題例3-2:輸出實(shí)型數(shù)據(jù)a,b/*L3_2.C源程序*/main(){floata;/*說明變量a為單精度型*/doubleb;/*說明變量b為雙精度型*/a=12345.6789;/*為a賦值*/b=0.1234567891234567899e15;/*為b賦值*/printf("a=%f,b=%f\n",a,b);/*輸出變量a、b的值*/}程序?yàn)閱尉茸兞縜和雙精度變量b分別賦值,并不經(jīng)過任何運(yùn)算就直接輸出變量a,b的值。理想結(jié)果應(yīng)該是照原樣輸出,即:a=12345.6789,b=0.1234567891234567899e15但運(yùn)行該程序,實(shí)際輸出結(jié)果是:a=12345.678711,b=123456789123456.797000由于實(shí)型數(shù)據(jù)的有效位是有限的,程序中變量a為單

溫馨提示

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

評論

0/150

提交評論