3.6 變量賦初值
語言程序中可有多種方法爲變量提供初值。本小節先介紹在作變量定義的同時給變量賦以
初值的方法。這種方法稱爲初始化。變量初始化不是在編譯階段完成的,而是在程序運行
時執行本函數時賦予初值的。
在變量定義中賦初值的一般形式爲:類型說明符變量1= 值1,變量2= 值2,……;
例如: int a=3;
int b,c=5;
float x=3.2,y=3f,z=0.75;
char ch1='K',ch2='P';
應注意,在定義中不允許連續賦值,如a=b=c=5是不合法的。
3.7 各類數值型數據之間的混合運算
變量的數據類型是可以轉換的。轉換的方法有兩種,一種是自動轉換,一種是強制轉換。
自動轉換遵循以下規則:
1) 、若參與運算量的類型不同,則先轉換成同一類型,然後進行運算。
2)、轉換按數據長度增加的方向進行,以保證精度不降低。如int型和long型運算時,
先把int量轉成long型後再進行運算。
3) 、所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,
也要先轉換成double型,再作運算。
4) 、char型和short型參與運算時,必須先轉換成int型。
5) 、在賦值運算中,賦值號兩邊量的數據類型不同時,賦值號右邊量的類型將轉換爲
左邊量的類型。如果右邊量的數據類型長度比左邊長時,將丟失一部分數據,這
樣會降低精度,丟失的部分按四捨五入向前舍入。
下圖表示了類型自動轉換的規則:
<span style="font-size:18px;">#include<stdio.h>
/* 數據類型的自動轉換 */
int main(void)
{
float PI = 3.14159;
int s,r = 5;
s = r * r * PI;
printf("%d\n",s);
}
</span>
本例中,計算S的時候需要將r和PI都轉換爲double型,但是由於s是整型,所以輸出的
時候捨棄小數部分,直接輸出整數78,不是四捨五入。
強制類型轉換
其一般形式爲: (類型說明符) (表達式)
例如: (float) a 把a轉換爲實型 (int)(x+y) 把x+y的結果轉換爲整型
在使用強制轉換時應注意以下問題:
1) 、類型說明符和表達式都必須加括號(單個變量可以不加括號),如把(int)(x+y)寫成
(int)x+y則成了把x轉換成int型之後再與y相加了。
2) 、無論是強制轉換或是自動轉換,都只是爲了本次運算的需要而對變量的數據長度
進行的臨時性轉換,而不改變數據說明時對該變量定義的類型。
下面我們舉個例子來說明一下強制轉換數據類型
<span style="font-size:18px;">#include<stdio.h>
/* 強制類型轉換 */
int main(void)
{
float f = 5.75;
printf("(int)f = %d,f = %f\n",(int)f,f);
}</span>
輸出結果爲:(int) f = 5,f = 5.750000
本例表明,f雖強制轉爲int型,但只在運算中起作用,是臨時的,而f本身的類型並
不改變。因此,(int)f的值爲5(刪去了小數)而f的值仍爲5.75。