序
前一篇快速地瀏覽了幾種常見的功能忙芒,不過(guò)對(duì)于真正理解其中的概念來(lái)說(shuō)凰棉,一篇文章是遠(yuǎn)遠(yuǎn)不夠的膀哲。因此,接下來(lái)的幾篇就詳細(xì)討論一下這些出現(xiàn)的概念被碗。
因?yàn)橹黝}是快速入門某宪,所以著眼點(diǎn)還是在于實(shí)用性。這些介紹不會(huì)覆蓋所有的知識(shí)點(diǎn)锐朴,而是著力于使你有一個(gè)解決問(wèn)題的思路兴喂,細(xì)節(jié)在需要的時(shí)候查查資料就好了。只要思路清晰了焚志,編程就不再困難衣迷。那么,就讓正文開始吧酱酬!
變量以及它們的類型
變量這個(gè)概念壶谒,如果用比喻的方式來(lái)說(shuō)明就會(huì)很好理解。
一個(gè)變量膳沽,就相當(dāng)于一個(gè)盒子汗菜,里面存放了數(shù)字。對(duì)于這個(gè)盒子挑社,我們可以把數(shù)字取出來(lái)查看陨界,也可以把舊數(shù)字丟掉,換成新的數(shù)字痛阻。因?yàn)楹凶永锏臄?shù)字可以修改菌瘪,所以它就是一個(gè)變化的量,簡(jiǎn)稱變量阱当。
為了存放不同類型的數(shù)字俏扩,我們需要不同類型的盒子。在C語(yǔ)言中斗这,最常用到的有以下幾種類型:
- 整數(shù) int
- 單精度浮點(diǎn)數(shù) float
- 雙精度浮點(diǎn)數(shù) double
- 字符 char
- 布爾類型 bool
這些基本的變量动猬,以及它們的組合,滿足了我們平時(shí)見到的絕大部分程序的需求表箭。從快速入門的角度來(lái)說(shuō),熟悉這些就滿足了最低限度的要求钮莲。
首先免钻,聲明變量!
聲明變量相當(dāng)于創(chuàng)建出了一個(gè)盒子崔拥,給盒子取個(gè)名字极舔,這是使用變量的第一步。像這樣:
int number; //聲明一個(gè)變量叫number
int x,y,z; //同時(shí)聲明多個(gè)變量
這樣就是一個(gè)int類型的變量链瓦。也可以在聲明時(shí)一起賦值拆魏,這叫做初始化(initialization)盯桦,就是一開始就把一個(gè)數(shù)字放進(jìn)盒子里。
int number = 0;
int x=1, y, z=3; //x為1渤刃,y未初始化拥峦,z為3
初始化是很推薦的,因?yàn)槿绻兞繘](méi)有初始化卖子,它的值可能是任意的略号。如果沒(méi)有為它賦值,而是直接讀取了這個(gè)任意的初始值洋闽,程序會(huì)出現(xiàn)無(wú)法預(yù)料的運(yùn)行結(jié)果玄柠。人難免會(huì)疏忽,所以為了避免自己的大意诫舅,初始化是一種保險(xiǎn)的辦法羽利。
float dog = 1.0f; //f 表明這個(gè)數(shù)字是float類型的,可以不加
double cat = 1.0; //沒(méi)有f結(jié)尾的小數(shù)刊懈,編譯器認(rèn)為是double
char fish = 'A'; //字符的初始化就是用單引號(hào)加一個(gè)字符
bool isPig = false; //布爾類型只有true 或 false兩種值
字符是一種特殊的變量铐伴,雖然我們操作的時(shí)候用單引號(hào)和字符,但本質(zhì)上它以數(shù)字的形式存儲(chǔ)在計(jì)算機(jī)中俏讹。另外当宴,你可能會(huì)吐槽,這單個(gè)字符有什么用啊泽疆,至少也要能存單詞吧户矢!嗯,你的直覺(jué)非常敏銳殉疼!這涉及到了字符串梯浪,另一個(gè)很重要的概念。
布爾類型是另一種特殊的變量瓢娜,只有true或false兩個(gè)值挂洛,也就是“是”和“否”兩種情況。這在控制流中很有用眠砾。
字符和布爾類型我會(huì)在后續(xù)的文章中詳細(xì)介紹的虏劲,總之先來(lái)看這些簡(jiǎn)單的數(shù)值變量吧!
開始計(jì)算褒颈!
有了盒子柒巫,我們可以對(duì)它做很多奇奇怪怪的事情。首先還是聲明:
int a, b = 0; // a未初始化谷丸,b初始化為0
之后為a賦值:
a = 1; //令a為1
a = a + 1; //讓a增加1
a ++; //讓a增加1的另一種寫法
a = b; //把b的值賦給a
a = 1.0; //???
這樣就能把想要的數(shù)字塞進(jìn)盒子里堡掏,把舊的數(shù)字替換掉了。
語(yǔ)句的功能我在注釋中寫明了刨疼,不難理解泉唁。我相信你可以仿照這些語(yǔ)句鹅龄,把數(shù)值修改為自己想要的結(jié)果。在最后一句中亭畜,我把double類型的值賦給了int類型的變量扮休,你猜它會(huì)是什么結(jié)果呢?我先賣個(gè)關(guān)子贱案,在本文的后半部分肛炮,你會(huì)找到答案。
輸出看看宝踪!
依然是出于實(shí)用性的考慮侨糟,我們要把數(shù)值打印出來(lái),不然我們既沒(méi)辦法獲得計(jì)算結(jié)果瘩燥,也沒(méi)辦法檢查計(jì)算得對(duì)不對(duì)秕重,不是嗎?為了打印數(shù)字厉膀,我們用到printf函數(shù)溶耘。
這里插一句,printf指的是print format服鹅。print是打印凳兵,format 是格式化字符串的意思。這個(gè)函數(shù)接收字符串作為參數(shù)企软,把它打印在屏幕上庐扫。如果按照一定的格式來(lái)書寫這個(gè)字符串,我們就可以打印變量的值仗哨。
int a = 0;
printf("An integer: %d\n", a);
輸出結(jié)果:
An integer: 0
這里形庭,printf接收了兩個(gè)參數(shù),第一個(gè)是格式化的字符串厌漂,第二個(gè)是變量a萨醒。為了輸出整數(shù)類型,我們?cè)谧址行枰湃霐?shù)值的位置放入"%d"苇倡,這叫做格式控制符富纸。有了格式控制符,printf會(huì)在參數(shù)表中按順序搜索雏节,發(fā)現(xiàn)了變量a胜嗓,就把它的值打印在控制符對(duì)應(yīng)的位置了」痴В“\n”表示換行符,它后面的文字會(huì)出現(xiàn)在下一行怔锌。
適用于不同類型的輸出控制符是不一樣的:
- 整數(shù) %d
- 單精度浮點(diǎn)數(shù) %f
- 雙精度浮點(diǎn)數(shù) %lf
- 字符 %c
printf("Four types: %d %f %lf %c",5, 1.5f, 2.0, 'A');
這里直接把數(shù)值傳遞給了printf寥粹,這也是可以的变过。在這一句中,一共出現(xiàn)了4個(gè)控制符涝涤,printf會(huì)搜索4個(gè)變量媚狰,把它們的值打印在對(duì)應(yīng)的位置。
類型轉(zhuǎn)換
既然都是數(shù)字阔拳,那么它們當(dāng)然可以互相轉(zhuǎn)換崭孤,只是在轉(zhuǎn)換的過(guò)程中會(huì)發(fā)生信息的丟失。比如從浮點(diǎn)數(shù)3.14轉(zhuǎn)換到整數(shù)糊肠,結(jié)果是3辨宠,小數(shù)部分會(huì)丟失。
所以基本上货裹,信息量double > float > int嗤形,轉(zhuǎn)換時(shí)盡量不要把信息量大的類型轉(zhuǎn)換到小的。
類型轉(zhuǎn)換的方法:
(1) 編譯器自動(dòng)轉(zhuǎn)換:
int a = 5;
float b = 3.5f;
float c = a * b; //a被臨時(shí)轉(zhuǎn)換為float弧圆,與b的類型相匹配
在這里赋兵,編譯器會(huì)把a(bǔ)臨時(shí)變成float類型,然后計(jì)算出結(jié)果搔预。這樣的臨時(shí)轉(zhuǎn)換不會(huì)改變a自己的值和類型霹期。
int a = 0;
float b = 3.5f;
a = b;
這時(shí),為了把b的值賦給a拯田,編譯器把float類型轉(zhuǎn)換成了int历造。當(dāng)然小數(shù)部分丟掉了,結(jié)果是3勿锅。反過(guò)來(lái)帕膜,如果是把int賦值給float,則不會(huì)發(fā)生信息的丟失溢十。
(2) 手動(dòng)轉(zhuǎn)換:
手動(dòng)轉(zhuǎn)換的意義在于避免整數(shù)相除可能會(huì)造成的尷尬后果:
int a = 5;
int b = 10;
float c = a/b;
你猜結(jié)果是多少垮刹?0.0f。因?yàn)閕nt類型之間發(fā)生的除法結(jié)果仍然是int類型张弛,所以5/10取整之后變成了0荒典。0被賦值給了float類型的c,就成了0.0f吞鸭。為了糾正這種情況寺董,要把代碼改成下面這樣:
int a = 5;
int b = 10;
float c = (float)a/b;
這里加了一個(gè)括號(hào),就把a(bǔ)手動(dòng)轉(zhuǎn)換為了float刻剥。為了與float類型的a計(jì)算遮咖,b會(huì)被自動(dòng)轉(zhuǎn)換為float,因此最后得到0.5f造虏。這樣的手動(dòng)轉(zhuǎn)換也是臨時(shí)的御吞,a本身不會(huì)受到影響麦箍。
寫到這里,你一定知道了前面的問(wèn)題的答案了陶珠。靶选?哪個(gè)問(wèn)題揍诽?這個(gè)呀诀蓉,這個(gè):
int a;
a = 2.0;
a的值是多少,現(xiàn)在看來(lái)答案是很顯然的了暑脆,快寫個(gè)小程序驗(yàn)證一下吧渠啤!
小練習(xí)
雖然這篇文章其實(shí)沒(méi)寫多少內(nèi)容,但是考慮到寫太長(zhǎng)了很難讀饵筑,先寫到這里好了埃篓。如果之后覺(jué)得不妥,還會(huì)調(diào)整篇幅根资,那么留下幾個(gè)小練習(xí):
- 嘗試使用幾種類型變量架专,并且做些轉(zhuǎn)換
- 輸出幾種類型的變量的值
就到這里,我們下一篇再見啦~