梁科輝,范 華
(山東廣播電視大學(xué),山東 濟(jì)南 250014)
?
C語(yǔ)言中數(shù)據(jù)類型轉(zhuǎn)換及其應(yīng)用探究
梁科輝,范 華
(山東廣播電視大學(xué),山東 濟(jì)南 250014)
C語(yǔ)言作為高校計(jì)算機(jī)相關(guān)專業(yè)的基礎(chǔ)專業(yè)課,學(xué)好用好C語(yǔ)言至關(guān)重要。數(shù)據(jù)類型轉(zhuǎn)換是C語(yǔ)言中的一個(gè)學(xué)習(xí)重點(diǎn),也是一個(gè)學(xué)習(xí)難點(diǎn)。為了方便學(xué)習(xí)者能夠深入理解并熟練使用,對(duì)三種基本數(shù)據(jù)類型轉(zhuǎn)換(算術(shù)類型轉(zhuǎn)換、賦值類型轉(zhuǎn)換、強(qiáng)制類型轉(zhuǎn)換)從轉(zhuǎn)換條件、轉(zhuǎn)換規(guī)則、轉(zhuǎn)換過(guò)程和應(yīng)用分析進(jìn)行了闡述和歸納,同時(shí)對(duì)三種類型轉(zhuǎn)換進(jìn)行總結(jié)對(duì)比,并通過(guò)典型程序舉例剖析了在編程中的實(shí)際應(yīng)用。
C語(yǔ)言;數(shù)據(jù)類型;類型轉(zhuǎn)換;算術(shù)類型轉(zhuǎn)換;賦值類型轉(zhuǎn)換;強(qiáng)制類型轉(zhuǎn)換
C語(yǔ)言是目前高校計(jì)算機(jī)專業(yè)課程中廣泛應(yīng)用于教學(xué)的計(jì)算機(jī)高級(jí)語(yǔ)言,一直以來(lái)被作為計(jì)算機(jī)專業(yè)的基礎(chǔ)專業(yè)課程,在一些非計(jì)算機(jī)專業(yè)的教學(xué)中也是一門重要的基礎(chǔ)學(xué)科。C語(yǔ)言作為計(jì)算機(jī)專業(yè)的基礎(chǔ)語(yǔ)言,具有優(yōu)點(diǎn)多、應(yīng)用廣、通用性強(qiáng)、可移植性強(qiáng)、效率高等特點(diǎn),其最大特點(diǎn)就是同時(shí)具備高級(jí)語(yǔ)言和低級(jí)語(yǔ)言優(yōu)良性能,這決定了它具有廣闊的應(yīng)用領(lǐng)域和持久的生命力[1]。C語(yǔ)言課程的學(xué)習(xí)是為了培養(yǎng)學(xué)生計(jì)算機(jī)編程的基本能力,同時(shí)為更多計(jì)算機(jī)技能的學(xué)習(xí)打下良好基礎(chǔ)。C語(yǔ)言在計(jì)算機(jī)專業(yè)課程中能夠起到良好的銜接作用,盡早學(xué)習(xí)C語(yǔ)言有利于為日后學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》、《C++》和《Java》等專業(yè)課程打下良好的編程基礎(chǔ)。
學(xué)習(xí)C語(yǔ)言可以使計(jì)算機(jī)專業(yè)的每一個(gè)學(xué)生了解程序設(shè)計(jì)的基本理論、掌握程序設(shè)計(jì)的相關(guān)問(wèn)題和技能。C語(yǔ)言中的許多內(nèi)容機(jī)制將程序設(shè)計(jì)得以融入到高級(jí)語(yǔ)言當(dāng)中,而且C語(yǔ)言可使計(jì)算機(jī)專業(yè)初學(xué)者更容易掌握程序設(shè)計(jì)的思維和方法[2]。
C語(yǔ)言中數(shù)據(jù)類型紛雜多樣,使用起來(lái)靈活多變,尤其在不同的應(yīng)用場(chǎng)合,這些數(shù)據(jù)類型之間常常會(huì)進(jìn)行相互轉(zhuǎn)換;初學(xué)者往往體會(huì)不到其中的細(xì)微差別,使用起來(lái)常常感覺(jué)非常困難。本文針對(duì)上述問(wèn)題,就C語(yǔ)言中的算術(shù)類型轉(zhuǎn)換、賦值類型轉(zhuǎn)換、強(qiáng)制類型轉(zhuǎn)換這三種常見(jiàn)的基本數(shù)據(jù)類型轉(zhuǎn)換進(jìn)行深入的探討和歸納,同時(shí)對(duì)三種類型轉(zhuǎn)換進(jìn)行總結(jié)對(duì)比,并通過(guò)典型程序舉例分析了在編程中的實(shí)際應(yīng)用。
(一)數(shù)據(jù)類型
在C語(yǔ)言中,通常將具有共同特征的數(shù)據(jù)歸之于一類,稱為某種數(shù)據(jù)類型,例如1.2、3.6等帶有小數(shù)點(diǎn)的數(shù)據(jù)稱之為實(shí)型數(shù)據(jù),而12、36等自然數(shù)則稱之為整型數(shù)據(jù)。
(二)C語(yǔ)言強(qiáng)類型特征
C語(yǔ)言是一種“強(qiáng)類型”的語(yǔ)言,即在C語(yǔ)言中所有的數(shù)據(jù)都應(yīng)該歸到某種特定的數(shù)據(jù)類型,也就是說(shuō)在C程序中的任何常量和變量都應(yīng)該有其特定的數(shù)據(jù)類型,并且在程序編譯過(guò)程中要對(duì)每個(gè)常量和變量的數(shù)據(jù)類型進(jìn)行檢查,不符者會(huì)報(bào)錯(cuò)。
(三)數(shù)據(jù)類型轉(zhuǎn)換
由于C語(yǔ)言具有上述“強(qiáng)類型”特性,在程序中可以自動(dòng)或人為控制不同數(shù)據(jù)類型之間的轉(zhuǎn)換,以滿足運(yùn)算符兩側(cè)運(yùn)算數(shù)的類型相匹配[3]。但是,數(shù)據(jù)類型轉(zhuǎn)換并非可以隨意進(jìn)行,歸納起來(lái),在C語(yǔ)言中數(shù)據(jù)類型轉(zhuǎn)換主要分為如下三種基本類型[4]。
(一)算術(shù)類型轉(zhuǎn)換
1.轉(zhuǎn)換條件:在C語(yǔ)言中,雙目運(yùn)算符兩邊的運(yùn)算數(shù)的類型必須一致才能進(jìn)行運(yùn)算。如果雙目運(yùn)算符兩邊運(yùn)算數(shù)的類型不一致,則在運(yùn)算過(guò)程中必須進(jìn)行相應(yīng)的類型之間的轉(zhuǎn)換。例如,表達(dá)式:1.2+5,算術(shù)運(yùn)算符“+”其左側(cè)為實(shí)型數(shù)據(jù)1.2,另右側(cè)為整型數(shù)據(jù)5,這時(shí),系統(tǒng)將自動(dòng)先把右側(cè)的整型轉(zhuǎn)換為實(shí)型再進(jìn)行算術(shù)加運(yùn)算。當(dāng)前這種在算術(shù)運(yùn)算過(guò)程中所發(fā)生的數(shù)據(jù)類型之間的轉(zhuǎn)換稱之為算術(shù)類型轉(zhuǎn)換。
2.轉(zhuǎn)換規(guī)則和過(guò)程
在算術(shù)類型轉(zhuǎn)換過(guò)程中,按照“從低向高”或“由短到長(zhǎng)”的總原則進(jìn)行。如圖所示,向左的箭頭表示必定的轉(zhuǎn)換,即運(yùn)算中凡是有float型數(shù)據(jù)參與的運(yùn)算,必先把float型轉(zhuǎn)換成double型;運(yùn)算中凡是有char/short型數(shù)據(jù)參與的運(yùn)算,必先把char/short型轉(zhuǎn)換成int型[5];向上的箭頭表示數(shù)據(jù)級(jí)別“由低級(jí)向高級(jí)”轉(zhuǎn)換,但并非逐級(jí)轉(zhuǎn)換。比如int型數(shù)據(jù)和long型數(shù)據(jù)進(jìn)行運(yùn)算,直接把int型轉(zhuǎn)換為long型。
3.應(yīng)用分析
上述總原則之“從低向高”主要是從數(shù)據(jù)的精度角度,將低精度數(shù)據(jù)轉(zhuǎn)換為高精度數(shù)據(jù),比如,將float型數(shù)據(jù)轉(zhuǎn)換為double型數(shù)據(jù);而總原則之“由短到長(zhǎng)”主要是從每類型數(shù)據(jù)在內(nèi)存中開(kāi)辟空間的大小,比如,在標(biāo)準(zhǔn)C語(yǔ)言中,char型數(shù)據(jù)開(kāi)辟一個(gè)字節(jié)單元,int型數(shù)據(jù)開(kāi)辟兩個(gè)字節(jié)單元,為此,在運(yùn)算中當(dāng)char型數(shù)據(jù)和int型數(shù)據(jù)相遇,總是將char型數(shù)據(jù)轉(zhuǎn)換為int型數(shù)據(jù)。
(二)賦值類型轉(zhuǎn)換
1.轉(zhuǎn)換條件:在賦值運(yùn)算中,賦值運(yùn)算符兩側(cè)的數(shù)據(jù)類型不一致時(shí),所進(jìn)行的數(shù)據(jù)類型之間的轉(zhuǎn)換稱之為賦值類型轉(zhuǎn)換。
2.轉(zhuǎn)換規(guī)則和過(guò)程:在賦值運(yùn)算中,如果賦值運(yùn)算符兩側(cè)的數(shù)據(jù)類型不一致時(shí),在進(jìn)行賦值運(yùn)算前,系統(tǒng)將自動(dòng)先把賦值號(hào)右側(cè)表達(dá)式求得的值,按賦值號(hào)左側(cè)變量的類型進(jìn)行轉(zhuǎn)換后再賦給左邊的變量。
例如,int x;x=1.2+3.6;其運(yùn)算過(guò)程為先進(jìn)行右側(cè)的算術(shù)加運(yùn)算得結(jié)果4.8,然后根據(jù)左側(cè)變量x的類型為整型,最后把實(shí)型數(shù)據(jù)4.8取其整數(shù)部分4賦給x變量。
3.應(yīng)用分析
在賦值類型轉(zhuǎn)換中,同樣也要遵循上述“從低向高”或“由短到長(zhǎng)”總原則,也稱為“賦值兼容性”原則,否則,即使賦值過(guò)程不提示編譯錯(cuò)誤,但最終卻得不到所期望的結(jié)果。比如,如果將double型數(shù)據(jù)賦值給float型變量,則就不能保證數(shù)據(jù)的精度。
另外,在函數(shù)調(diào)用中,實(shí)參與形參之間的數(shù)據(jù)傳遞同樣也屬于賦值類型轉(zhuǎn)換,即“形參=實(shí)參”,賦值號(hào)右側(cè)為實(shí)參,而賦值號(hào)左側(cè)為形參。調(diào)用函數(shù)時(shí),通過(guò)將實(shí)參“賦值予”對(duì)應(yīng)形參,實(shí)現(xiàn)參數(shù)值的傳遞,其中,也要滿足“賦值兼容性”原則。
(三)強(qiáng)制類型轉(zhuǎn)換
1.轉(zhuǎn)換條件:根據(jù)編程中應(yīng)用需要,人為設(shè)定所需轉(zhuǎn)換類型實(shí)現(xiàn)數(shù)據(jù)類型之間的轉(zhuǎn)換,稱之為強(qiáng)制類型轉(zhuǎn)換。
2.基本形式:(類型名)表達(dá)式,其中(類型名)稱為強(qiáng)制類型轉(zhuǎn)換運(yùn)算符,其后的表達(dá)式如果不是簡(jiǎn)單變量或常量也需要將其放在括號(hào)中,方可對(duì)整個(gè)表達(dá)式的值進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
3.轉(zhuǎn)換規(guī)則和過(guò)程:利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符,將其后表達(dá)式的值轉(zhuǎn)換為(類型名)所指定的類型,這種類型轉(zhuǎn)換是根據(jù)人為要求而進(jìn)行的。
例如,表達(dá)式(int)3.14把3.14轉(zhuǎn)換為整數(shù)3;表達(dá)式(double)(10%3)把10%3所得結(jié)果整數(shù)1轉(zhuǎn)換成雙精度實(shí)數(shù)1.0。
4.應(yīng)用分析
強(qiáng)制類型轉(zhuǎn)換在實(shí)際應(yīng)用中非常靈活,尤其在一些特殊的應(yīng)用中,例如,在指針類型轉(zhuǎn)換中使用、在函數(shù)調(diào)用中使用等。學(xué)好用好強(qiáng)制類型轉(zhuǎn)換將給編程中解決一些實(shí)際問(wèn)題帶來(lái)極大的方便。
(一)典型程序舉例[6]
程序功能:從鍵盤輸入一個(gè)float類型的數(shù)據(jù),通過(guò)多種運(yùn)算處理所得結(jié)果要求保留該數(shù)小數(shù)點(diǎn)后三位小數(shù),并對(duì)第四位小數(shù)進(jìn)行四舍五入處理,然后輸出結(jié)果,以便驗(yàn)證。
程序代碼如下:
main( )
{ ①float a;
②printf(“Enter a:”);
③scanf(“%f”,&a);
④printf(“處理前a=%f/n”,a);
⑤a=a*1000;
⑥a=a+0.5;
⑦a=(int)a;
⑧a=a/1000;
⑨printf(“處理后a=%f/n”,a);
}
(二)程序運(yùn)行結(jié)果
輸入3.141592運(yùn)行結(jié)果
輸入6.153287運(yùn)行結(jié)果
(三)轉(zhuǎn)換應(yīng)用分析
在上述程序第⑦a=(int)a行中,由于a定義為float變量,當(dāng)從鍵盤輸入3.141592值時(shí),通過(guò)處理賦值號(hào)右側(cè)a當(dāng)前值為3142.092,按照表達(dá)式(int)a對(duì)變量a進(jìn)行強(qiáng)制類型轉(zhuǎn)換,取其整數(shù)部分得到3142,這時(shí)在進(jìn)行賦值運(yùn)算時(shí),可以看到賦值號(hào)左側(cè)變量a為float類型,為此,要進(jìn)行賦值類型轉(zhuǎn)換,即將整數(shù)3142按照賦值號(hào)左側(cè)a的類型轉(zhuǎn)換為3142.0,然后再賦值給變量a。
接下來(lái)執(zhí)行上述程序第⑧a=a/1000行內(nèi)容,首先在賦值號(hào)右側(cè)的算術(shù)表達(dá)式a/1000中,由于a為float類型,而算術(shù)運(yùn)算除“/”右側(cè)運(yùn)算數(shù)1000則為整型數(shù)據(jù),按照上述算術(shù)類型轉(zhuǎn)換規(guī)則,需將整型數(shù)據(jù)1000轉(zhuǎn)換為實(shí)型數(shù)據(jù)1000.0,然后進(jìn)行算術(shù)除運(yùn)算得到結(jié)果為3.142,最后將其賦值給賦值號(hào)左側(cè)變量a。
本文從C語(yǔ)言在計(jì)算機(jī)相關(guān)專業(yè)課程的重要性和學(xué)好C語(yǔ)言的必要性引入,通過(guò)數(shù)據(jù)類型和類型轉(zhuǎn)換等基本概念,主要分析了C語(yǔ)言中三種數(shù)據(jù)類型轉(zhuǎn)換的轉(zhuǎn)換條件、轉(zhuǎn)換規(guī)則和過(guò)程以及相關(guān)應(yīng)用。最后通過(guò)典型程序舉例分析了三種數(shù)據(jù)類型轉(zhuǎn)換在編程中的實(shí)際應(yīng)用??偨Y(jié)了三種數(shù)據(jù)類型轉(zhuǎn)換的結(jié)論。
在此,還需要特別注意以下兩個(gè)方面的內(nèi)容:
(一)在上述三種數(shù)據(jù)類型轉(zhuǎn)換中,算術(shù)類型轉(zhuǎn)換和賦值類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)完成轉(zhuǎn)換的,只需把握其轉(zhuǎn)換規(guī)則即可,也稱為隱式類型轉(zhuǎn)換;而強(qiáng)制類型轉(zhuǎn)換是根據(jù)實(shí)際需要人為控制進(jìn)行的,三種數(shù)據(jù)類型轉(zhuǎn)換的簡(jiǎn)單對(duì)比表如下所示。
三種類型轉(zhuǎn)換對(duì)比表
(二)由C語(yǔ)言的“強(qiáng)類型”性,在程序編譯過(guò)程中,要進(jìn)行類型檢查,為此,在實(shí)際編程中要注意數(shù)據(jù)類型間的自動(dòng)轉(zhuǎn)換和人為控制。
[1]范華,秦茂玲,張俊.透視C程序設(shè)計(jì)語(yǔ)言[J].計(jì)算機(jī)技術(shù)與發(fā)展,2008.
[2]譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2005.
[3]范華.三級(jí)C編程應(yīng)試模板及應(yīng)用[J].軟件,2012,(33):77-79.
[4]范華.C語(yǔ)言中數(shù)據(jù)類型轉(zhuǎn)換[OL].http://weike.enetedu.com/play.asp?vodid=142861&e=1.
[5]徐新華.C語(yǔ)言程序設(shè)計(jì)教程[M].北京:中國(guó)水利水電出版杜,2001.
[6]范華.C語(yǔ)言程序設(shè)計(jì)簡(jiǎn)明教程[M].北京:清華大學(xué)出版社,2015.
2016-08-21
梁科輝,男,山東廣播電視大學(xué)高級(jí)工程師。
范華(1979-),男,工程師,碩士研究生,主要研究方向?yàn)檐浖こ?、程序設(shè)計(jì)語(yǔ)言與算法、網(wǎng)絡(luò)工程、教學(xué)法研究。
TP311.1
A
1008—3340(2016)04—0087—03