- 全國計算機等級考試教程:二級C語言程序設(shè)計
- 全國計算機等級考試教材編寫組
- 1940字
- 2019-11-22 18:55:13
2.6 不同數(shù)據(jù)類型之間的轉(zhuǎn)換
學(xué)習(xí)提示
【理解】數(shù)據(jù)的自動轉(zhuǎn)換和強制轉(zhuǎn)換
如果一個運算符兩邊的運算數(shù)類型不同,那么,要先將其轉(zhuǎn)換為相同的類型,即較低類型轉(zhuǎn)換為較高類型,然后再參加運算,此過程由編譯系統(tǒng)自動完成。這種轉(zhuǎn)換又可以分為兩種不同的情況。
① 當運算符兩邊是不同精度同一種數(shù)據(jù)類型時,編譯器進行同一類型間的轉(zhuǎn)換。
例如
floata;
floatb;
doublec;
c=a+b ;
說明
這時進行的就是浮點型之間的轉(zhuǎn)換。雖然它們類型相同,但仍要先轉(zhuǎn)成double型,再進行運算,結(jié)果也為double型(注意:在VC6.0中,所有的float類型數(shù)據(jù)在運算中都自動轉(zhuǎn)換成double型數(shù)據(jù))。所以對于浮點型數(shù)據(jù)的轉(zhuǎn)換方向可以描述為:
float->double
這表示float類型向double類型的轉(zhuǎn)換。同樣也可以將整型數(shù)據(jù)之間的轉(zhuǎn)換方向描述為:
int->long
即如果一個long型數(shù)據(jù)與一個 int型數(shù)據(jù)一起運算,需要先將int型數(shù)據(jù)轉(zhuǎn)換為long型數(shù)據(jù),然后兩者再進行運算,結(jié)果為long型數(shù)據(jù)。
② 參與運算的運算數(shù)類型不同,則先將它們轉(zhuǎn)換成同一種類型,然后進行運算。轉(zhuǎn)換方向可以描述為:
int->double(float)
即當整型數(shù)據(jù)與浮點型數(shù)據(jù)進行運算時,往往是整型數(shù)據(jù)向浮點型數(shù)據(jù)轉(zhuǎn)換。
在賦值運算中,賦值號兩邊運算數(shù)的數(shù)據(jù)類型不同時,賦值號右邊運算數(shù)的類型將轉(zhuǎn)換為左邊運算數(shù)的類型。
【例2-5】根據(jù)圓的半徑求圓的面積。
程序代碼
#include<stdio.h>
void main( )
{ float pi=3.14;/*定義一個浮點型變量并初始化*/
int s,r=5;/*定義兩個整型變量,分別表示圓的半徑和面積*/
s=r*r*pi;/*求圓的面積*/
printf("s=%d\n",s);
/*輸出圓的面積*/
}
分析一下本程序的輸出結(jié)果的類型。
●pi為浮點型數(shù)據(jù),s、r為整型數(shù)據(jù)。
●在執(zhí)行 s=r*r*pi;語句時,r和 pi都轉(zhuǎn)換成實型進行計算,結(jié)果仍為實型。
●由于s為整型,因此賦值結(jié)果仍為整型,會舍去小數(shù)部分。
所有這些轉(zhuǎn)換都是由系統(tǒng)自動進行的,使用時只需從中了解結(jié)果的類型即可。
另一方面,C語言也提供了強制類型轉(zhuǎn)換的機制,其一般形式為:
(類型說明符)(表達式 )
說明
這種類型轉(zhuǎn)換的效果是把表達式的類型強制轉(zhuǎn)換為要求的類型,而不管類型的高低。其中,“類型說明符”指明了要求轉(zhuǎn)換的目標類型;“表達式”指明了要強制轉(zhuǎn)換的表達式。
需轉(zhuǎn)換的表達式如果不是單個的變量,則要用括號將其括起來,如(int)(x+y)與(int)x+y是不同的,后者相當于(int)(x)+y,也就是說,只將 x轉(zhuǎn)換成整型,然后與y相加。無論是強制轉(zhuǎn)換或是自動轉(zhuǎn)換,都不會改變數(shù)據(jù)說明時對該變量定義的類型。
例如
(double)a
(int)(x+y)
前者是將a轉(zhuǎn)換成double型,而不管a先前是什么類型的數(shù)據(jù)。后者的效果是將x+y的結(jié)果轉(zhuǎn)換為 int型,不論 x和 y是何種類型的數(shù)據(jù)。
請注意
①字符型數(shù)據(jù)向整型數(shù)據(jù)轉(zhuǎn)換時,實質(zhì)上是將字符型數(shù)據(jù)轉(zhuǎn)換成與該字符對應(yīng)的十進制ASCII碼值。
②在進行賦值運算時,實質(zhì)上是將運算符右邊的數(shù)據(jù)類型強制轉(zhuǎn)換成運算符左邊的數(shù)據(jù)類型。
【例2-6】強制類型轉(zhuǎn)換。
程序代碼
#include<stdio.h>
void main( )
{float f=1.2345;/*定義一個浮點型變量f,并初始化為1.2345*/
int a;/*定義一個整型變量*/
a=(int)f;
/*將浮點型變量強制轉(zhuǎn)化為整型值*/
printf("a=%d,f=%f\n",a,f);
/*輸出整型變量a和浮點型變量f的值*/
}
本程序的輸出結(jié)果是:
a=1,f=1.234500
分析程序可知:
① 本例中首先將 f強制轉(zhuǎn)換成 int類型,然后賦值給變量a,所以a的值是1;
② f雖然強制轉(zhuǎn)為int型,但只在運算中起作用,而f本身的類型并不改變,f的值仍為1.2345。
真題演練
【例1】有以下程序:
#include<stdio.h>
#include<math.h>
main( )
{ inta=1,b=4,c=2;
doublex=10.5,y=4.0,z;
z=(a+b)/c+sqrt(y)*1.2/c+x;printf("%f\n",z);
}
程序運行后的輸出結(jié)果是( )
A)13.700000
B)14.000000
C)15.400000
D)14.900000
【解析】如果一個運算符兩邊的運算數(shù)類型不同,要先將其轉(zhuǎn)換為相同的類型,即較低類型轉(zhuǎn)換為較高類型,然后再參加運算。程序執(zhí)行過程為:a+b=5,5/2=2(int類型),sqrt(y)=2.0(double類型),2.0*1.2/2=1.2(double類型),z=2.0(由int類型自動轉(zhuǎn)換成double類型)+1.2+10.5=13.7。因此A選項正確。
【答案】A
【例2】若有以下程序段:
doublex=5.16894;
printf("% f\n",(int)(x*1000+0.5)/(double)1000);
則程序段的輸出結(jié)果是( )
A)5.170000 B)5.175000
C)5.169000 D)5.168000
【解析】%f的輸出格式是以帶小數(shù)點的數(shù)學(xué)形式輸出浮點數(shù)。首先計算x*1000,結(jié)果為5168.94,然后該結(jié)果加0.5,結(jié)果為5169.44,然后進行強制類型轉(zhuǎn)換,轉(zhuǎn)換成整型為5169,再除以雙精度數(shù)據(jù)1000,結(jié)果也為雙精度數(shù)據(jù)5.169,輸出時按照%f的格式輸出,所以輸出結(jié)果為5.169000。
【答案】C
【例3】若在程序中變量均已定義成int類型,且已賦大于1的值,則下列選項中能正確表示代數(shù)式的表達式是( )
A)1.0/a/b/c
B)1/(a*b*c)
C)1.0/a*b*c
D)1/a/b/(double)c
【解析】由于a、b、c均大于1,所以表達式1/abc小于1,需要用浮點類型表示。若要計算表達式值,需要使其自動轉(zhuǎn)化成浮點類型,所以 A選項正確。B選項由于變量與常量均為整型,不會自動轉(zhuǎn)換為浮點類型,所以B選項錯誤。C選項表示表達式bc/a,故錯誤。D選項,由于算數(shù)運算法結(jié)合性自左向右,先計算1/a,結(jié)果為0,之后的計算無論是否轉(zhuǎn)換數(shù)據(jù)類型結(jié)果均為0,所以D選項錯誤。
【答案】A
- 全國計算機等級考試真題匯編與專用題庫:二級C語言
- 全國計算機等級考試歷年真題與機考題庫:二級MS Office高級應(yīng)用
- 全國職稱計算機考試標準教材與專用題庫:Word 2003中文字處理
- 全國職稱計算機考試標準教材與專用題庫:Excel 2007中文電子表格
- 全國計算機等級考試真題匯編與專用題庫:二級Access
- 全國計算機等級考試歷年真題與機考題庫:二級MS Office高級應(yīng)用
- 2020年3月全國計算機等級考試《四級軟件工程》復(fù)習(xí)全書【核心講義+歷年真題詳解】
- 2020年3月全國計算機等級考試《四級數(shù)據(jù)庫原理》復(fù)習(xí)全書【核心講義+歷年真題詳解】
- 大學(xué)計算機應(yīng)用基礎(chǔ)教程實驗指導(dǎo)
- 2024年全國計算機等級考試模擬考場二級C語言
- 5天通過職稱計算機考試(考點視頻串講+全真模擬):Word 2003中文字處理(第2版) (全國專業(yè)技術(shù)人員計算機應(yīng)用能力考試指導(dǎo)叢書)
- 全國計算機等級考試上機專用題庫與筆試模擬考場:二級Visual Basic
- 全國計算機等級考試教程:一級計算機基礎(chǔ)及WPS Office應(yīng)用
- 2024年全國計算機等級考試上機考試題庫二級Python
- 2014年全國計算機等級考試3年真題精解與過關(guān)全真訓(xùn)練題:二級Access數(shù)據(jù)庫程序設(shè)計