1-3 變數與資料型態


阿瑟 發表



由於約瑟大大正在大學努力中, 小弟就在此接下C++教學的棒繼續寫下去. 這章將會以變數的使用作為重點, 這是基礎C++很重要的一環喔!

*注意: C++所有語法大小寫有差.

今天我們要討論的主題是變數, 他在程式運算時是十分重要的, 如果您有接觸過Javascript, Vbscript等描述語言或是Visual Basic這類的程式語言, 您應該對這種變數宣告方法不陌生:
var computer

dim computer
var是在Javascript中宣告變數的關鍵字, 而dim則是在Visual Basic中宣告變數使用的關鍵字.
關鍵字後面的, 就是變數名稱 (identifier), 讓您可以使用這種名稱來使用這個變數所指定的記憶體位置.

在許多語言中變數並沒有什麼資料型態 (data type)之分, 只要您宣告了變數, 該變數可以儲存字串, 字元, 數字和浮點數. 但是在C++中 (C++系的語言也是), 變數是有類別之分, 如果嘗試將一個不同資料型態的數值指定給一個變數, 就可能會產生編譯器錯誤 (Compiler Error, 指在程式編譯時發生的錯誤) 或是 資料流失.

C++中的資料型態有很多, short, long, int, char, float, double, byte, bool等, 避免混淆, 小弟今天只會針對int, char, double與bool幾種.

以下是四個變數的資料:
資料型態 說明
int 即Integer, 整數之意. 只能存取整數. 如: 1, 3, 1000, 5000 這些都是可以使用的整數值.
double 其實和float差不多, 即浮點數(小數). 如: 3.14, 1.1, 999.99 這些都是可以使用的浮點數值.
char Character, 即字元. 只能儲存單字元, 如: a, B, C, D (注意大小寫有差), 只能存一個喔!
現在各家的編譯器都沒有統一的字串變數, 因此要儲存超過一個字元 (如: "Computer") 您可能要另外找函式庫.
bool Boolean (布林), 只能儲存"真"或是"偽", 其實也就是1與0, 是與否.


C++的宣告方法與其他語言並沒有多大的差異:
double computer
這就是一個叫computer的浮點變數

試試看下面這段程式碼:
#include <iostream.h>
#include <stdlib.h>


void main()
{
   int computer = 1024;
   double RAM = 64.64;
   char Jump = 'a';
   bool Humvee = True;
}


上面這段程式宣告了以下變數:
一個叫做computer的整數, 其初始數值為1024.
一個叫做RAM的浮點數, 其初始數值為64.64.
一個叫做Jump的字元, 其初始數值為'a'. (沒錯, 字元必須用單引號包起來)
一個叫做Humvee的布林值, 其初始數值為"真".
初始(initialize) 就是指定一個數值給變數, 沒有初始的變數則會得到一個隨機的數值.

將程式再改一下, 加上輸出:
#include <iostream.h>
#include <stdlib.h>


void main()
{
   int computer = 1024;
   double RAM = 64.64;
   char Jump = 'a';
   bool Humvee = True;
   cout << computer << endl;
   cout << RAM << endl;
   cout << Jump << endl;
   cout << Humvee << endl;
}


編譯之後您應該會看到以下輸出:
1024
64.64
a
1


布林的"真"是用1代表, "偽"則是用0代表, 應該沒有什麼問題吧?

接下來我們要討論一下不同的資料種類傳遞的問題, 如今天有一浮點數要傳遞給整數變數, 會發生什麼事情呢?
這段程式碼:
   double number = 3.6;
   int another_number = number;

another_number整數在程式執行完畢以後的數值是3, 因為任何小數點後的數字都會自動被刪除, 不會四捨五入.
如果將char轉成int, 那int變數的數值將會是char字元的ASCII數值.

ASCII的全名是 美國資訊交流標準碼 (merican Standard Code for Information Interchange), ASCII字元表如下:
32 33!34"35#36$37%
38&39'40(41)42*43+
44,45-46.47/480491
502513524535546557
56857958:59;60<61=
62>63?64@65A66B67C
68D69E70F71G72H73I
74J75K76L77M78N79O
80P81Q82R83S84T85U
86V87W88X89Y90Z91[
92\93]94^95_96`97a
98b99c100d101e102f103g
104h105i106j107k108l109m
110n111o112p113q114r115s
116t117u118v119w120x121y
122z123{124|125}126~

這也是為什麼小弟強調char的字元大寫與小寫有差, 如果您將char轉成int的時候, 出來的ASCII數值就不一樣了. 反過來, 您也可以用數字的方式指定一個數值給char變數, 如:
char character = 97;
character所得到的數值就是小寫的'a'

部分變數轉換與運算關係:
int轉double, double會完全繼承int所含的整數
double轉int, 所有小數點後的位數都會被移除
char轉int, int會得到char的ASCII數字值
int轉char, char會得到ASCII對應的字元
double除以int, 出來的答案的資料型態的是double, 3.3/1 = 3.3
int除以double, 出來的答案的資料型態的是double, 10/3.0 = 3.3333333333333
int除以int, 出來的答案的資料型態的是int, 10/3 = 3 (不是3.3333333)


基本的變數到這邊要告一段落了, 如果您有任何問題的話歡迎在討論區提出.
希望這篇教學對您有所助益.

最後更新日期: 5/10/2003 6:17:10 PM