變數、資料型態

2012/10/26 謝碧景(c)編製更新

學習目標

  • 瞭解變數命名規則、變數宣告與運用。

  • 資料型態的種類、意義與運用。

  • 學會變數搭配運算式的程式設計與應用。

一、記憶體基本概念

    • 電腦僅能用0和1兩個數字的二進位表示,一個0或1稱為1bit(位元),而1bit可儲存一個0或1兩種不同的資料,例如二進位11002是4bits,110011002是8bits。2bits可儲存2x2=22=4種資料(00,01,10,11),故n個bits可儲存2n種不同的資料。

    • 記憶體是以byte(位元組)為儲存單位,而 1byte=8bits (即1位元組=8位元),1MB=210bytes=1024bytes,1GB=210MB (此B為bytes)。

    • 程式執行時電腦會將資料載入記憶體中,而每一個記憶體儲存單位會有不同的位址(address),故每一個byte都有一個不同的位址,而3bits可提供23=8種不同的數值,即8bytes記憶體各有不同的位址,如下圖。這3bits值是由3條位址線(address bus)而定,CPU透過位址線決定記憶體位址,故電腦系統若有n條位址線,就有2nbytes記憶體位址(即空間)。

位址

內容

二、變數

(一)命名規則:

    • 當建立一個變數時,程式會配置一塊記憶體讓該變數存放資料。

    • 變數名稱由英文字母、數字、或 _ (底線符號)構成,不能數字開頭,例如 my_name(建議最好不要以中文命名);變數名稱不能包含特殊字元,例如 ~、\、@、?、%、&、#、^等,且變數名稱的英文字母大小寫不同;所有的變數、函數、指位器(pointer),皆須宣告後才能使用。程式執行時,變數值是存放在「記憶體」中。

(二)變數宣告:

資料型態 變數1,變數2;

資料型態 變數=初始值;

例 int a; //宣告變數 a為整數變數

  int a,b=10; //宣告變數 a及b為整數變數,且變數 b初始值為10

  char a='s'; //宣告變數a為字元變數,且初始值為 s字元

三、資料型態

(一)數值型態

1.資料型態:

(1)基本資料型態:int (整數integer)、float (單精度浮點數)、double (雙精度浮點數)、char (字元character,參閱 ASCII符號表)

(2)延伸資料型態:short (短整數)、long (長整數)、signed (具符號)、unsigned (無符號)

(3)結構類型:陣列、字串、結構

(4)指標資料型態

(5)列舉資料型態

2.基本資料型態佔用記憶體大小:

*註:

(1) nE±c 為科學記號表示法:n為1~10,c為10的指數值,例 1.23E8 表示1.23x108

(2) sizeof 運算子可以取得各種資料型態、變數及運算式在記憶體配置的位元組(byte)大小。

(3) 引入#include <iomanip> 函式庫,可運用 cout<<fixed<<setprecision(3)<<變數值; 較精確輸出結果。

例如:

int a=sizeof(char); // a=1 取得資料型態記憶大小

int b=sizeof(double); // b=8 取得資料型態記憶大小

cout<<fixed<<setprecision(3)<<3.14159; // 輸出 3.142

例:

a=sizeof(10); //10為整數佔 4bytes,故 a=4

b=sizeof(2.0); //2.0為浮點數佔 8bytes,故 b=8

3.延伸資料型態

撰寫程式時,為增加變數的精確度及降低佔用記憶體空間大小,可以延伸資料型態表示,僅需在基本資料型態的前面加上short、long、signed、unsigned即可。例如 long int a; 可省略int為 long a; 而延伸資料型態之佔用記憶體大小如下:

4.整數除了常用之十進位外,亦可使用八進位、十六進位。

(1)八進位整數:使用數字0後面加上八進位數字(0~7)表示,例如 0123 表示八進位的123

(2)十六進位整數:使用0x或0X(數字0) 後面加上十六進位數字(0~9,A~F)表示,例如 0x123 表示十六進位的123

◆範例1:數值型態 (檔名:var-ex1.cpp)

*註:以【 OnlineGDB 編撰指令LanguageC++】編撰範例。

(二)字元型態(char)

  1. 字元型態在記憶體中儲存的是字元的ASCII數值,字元型態若包含多個字元,則變數值為最後一個字元。【參閱 ASCII符號表

  2. 一個 char 字元變數 就是儲存 ASCII 裡的一個整數編號(0 ~ 127),分成兩種:

(1)可顯示:編號32~126 一個整數編號會對應一個半型字。

(2)不可顯示:編號0~31、127 一個整數編號會對應一個控制字元。

  1. 宣告格式 char 變數名稱=初始值; char c=’a’;

  2. 字元資料必須以一對單引號括起來,只有一個字元

範例2:字元型態 (檔名:var-ex2.cpp)

*註:

(1)整數轉成字元方式 (char)整數 例如:cout<<(char)65; 輸出 A

(2)字元轉成整數方式 (int)字元 例如:cout<<(int)'a'; 輸出 97

(三)字串型態(string)

1.由字元組成的一串文字,C++標準函式庫提供了string類別,可用 char[ ] 或 string 儲存字串。

2.字串值需以一對雙引號括起來,例如 "abc"。

3.如果字串值中要包含雙引號,前面必須加上跳脫字元『\』,參閱【\ 跳脫字元】。

4.參閱:字元陣列字串函數

◆ 範例3:字串型態 (檔名:var-ex3.cpp)

  • 練習:請寫一個程式,可以讀入指定的字串,並且輸出指定的字串。【摘自:a001: 哈囉。ZeroJudge

(四)布林型態(bool)

1.布林型態只有兩個值:true(真)或 false(假),通常是在條件運算中使用,當布林變數轉換為數值變數時,true被轉換為1false被轉換為0

2.非0 的數值,其布林值是true,故下列敘述是相同的。

if (運算式)

例:if(a%2)

if (運算式!=0)

例:if(a%2!=0)

◆範例4:布林型態 (檔名:var-ex4.cpp)

(五)型態強制轉換

在運算式中加上指定的型態,可將型態強制轉換,語法如下:

(型態) 變數; 例如:(float) a; 或 (float)10/4; //結果為2.5

注意:整數=整數/整數;

   浮點數=整數/浮點數;

   浮點數=浮點數/整數;

   浮點數=浮點數/浮點數;

例如:1/2 輸出 0

   1/2.0 輸出 0.5

   1.0/2 輸出 0.5

   1.0/2.0 輸出 0.5

◆範例5:將型態強制轉換 (檔名:var-ex5.cpp)

※注意:運算式中若含有不同的型態,編譯器會自動以值域較大的型態為轉換依據,以避免資料遺失。

四、常數

常數在建立時就指定其初始值,此值不能在程式中加以改變,例如『圓周率』;建立常數的方法有兩種:

『#define』『const』

§實作練習

一、成績單顯示,執行結果如下圖示,成績資料請以定位點排列整齊。

【提示:利用 cout 輸出功能結合『\t』定位及『\n』換行跳脫字元 。請參閱→字串型態

執行結果