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