Try   HackMD
tags: 大一程設 東華大學 東華大學資管系 基本程式概念 資管經驗分享

七大基礎資料型態、什麼是變數、變數的功用是什麼?

前言

不經一番寒徹骨,焉得梅花撲鼻香。 不經一番程式歷練,焉得 Ouput 美好滋味。 orange

程式能夠幫我們做到的事情非常多,不然就不會有甚麼遊戲,大家現在常看到的網頁,又甚至是很多協助人類的科技資訊研究,但是在碰到這些有趣的東西之前,該會的工具要先學起來,總不能 LV 1 的時候想要打 LV 100 的王吧!

寫程式是固定費時、燒腦,卻也是讓你成長到跟社會接軌的一件事情。 你的努力一定不會白費。 orange

話不多說,趕緊從頭學起吧!助教會用最熱忱的心教的!!

七大基礎資料型態

在寫程式的過程中,我們時常需要設計邏輯,而邏輯又需要很多其他的工具來輔助我們,其中基本中的基本工具就是變數變數能夠幫我們處理運算、條件判斷、字串處理這三件事,再搭配其他額外的工具來讓變數的能力最大化,我們現在來談談在 C++ 裡有的變數型態吧!

變數型態 中文名稱 所占記憶體空間(位元組 bytes)(以 Win10 64位元為例) 值域範圍
short 整數 2bytes -32,768 至 32,767
int 整數 4bytes -2,147,483,648 至 2,147,483,647
long 整數 4bytes -2,147,483,648 至 2,147,483,647
float 浮點數 4bytes
1038
~
1038
double 浮點數 8bytes
10308
~
10308
bool 布林值 1bytes false 或 true
char 字元 1bytes -128 到127(預設值)

粗體字的要熟記,因為很常用!

參考資料看這邊

值域範圍跟位元組的概念是計算機概論的基本知識,這邊如果有看不懂沒關係,要和計概一起學,學計概如果有問題可以再洽 Orange

  • 1 bytes = 8 bits

    這邊請左轉計算機概論,我先不負責XD 我是會,但先不跟程式設計混在一起 有需要請洽 Orange

  • 值域範圍
    • 值域範圍會因為不同的系統而有不同,我們這邊都先記 Win10 64 位元的系統
  • 整數
    • int
      • 一般的整數型態,值域範圍在
        231
        ~ +
        2311
      • 我們最常使用的整數資料型態
    • short
      • 短整數,也是整數的一種,所占記憶體大小只有 2 bytes,值域是 -32768 ~ 32767
      • 所以可以想像如果今天有一個整數是 50000,那就不能用 short 來存,要用更大的像 int 或 long
      • 一般來說較少用 short,基本上都用 int 居多
    • long
      • 也是整數型態,但能表達更精準更大的精度
      • 值域與 int 相同,但跟 int 不同的地方是,如果今天有數字超過
        231
        ~ +
        2311
        那可以用 long long 來宣告
      • 你可能會問那能不能也 int int,不行,這是規定,no why!

      我們馬上就會講宣告是什麼,莫驚莫荒。

  • 浮點數
    • float 與 double 最大的差異在於表達的精度
      前者是 IEEE 754 32倍精度,後者是 IEEE 754 64倍精度

    這邊你們看不懂沒關係,請左轉計算機概論,有問題一樣洽 Orange
    只要記得 float 跟 double 能夠拿來做小數運算就對了!

    • float
      • 存小數的一種資料型態
      • 能存的範圍比 double 還小,不過一般我們不用寫到那麼大的數
    • double
      • 存小數的一種資料型態
      • 但還是可以養成使用 double 的習慣
  • 布林值 bool
    • 用來做條件判斷常用的資料型態
    • 值只有兩種,分別是 true/false,前者為真後者為偽
    • 你也可以用 1 跟 0 來表達 true/false,在程式語言裡 1 為真 0 為偽
    ​​​​ int main(){ ​​​​ bool a; ​​​​ a = true; // a = 1; ​​​​ cout << a; // 會印出 1 ​​​​ return 0; ​​​​ }
    ​​​​ int main(){ ​​​​ bool a; ​​​​ a = 1; ​​​​ cout << a; ​​​​ ​​​​ return 0; ​​​​ }
    這兩種表達方式的結果一模一樣,這邊的 1 不是整數,會被識別成布林值
  • 字元
    • 用來存一個字的資料型態
    • 未來會在介紹處理字元更方便的類別 -> string
      • 類別也在未來的時候教,不用擔心
    • char 型態的變數用來儲存字元,而字元必須要被單引號('')給包住,這是語法規定,沒有為甚麼
    ​​​​int main(){ ​​​​ char a; ​​​​ a = 'h'; ​​​​ cout << a; //印出 h ​​​​ ​​​​ return 0; ​​​​}

甚麼是變數? 如何宣告變數? 如何初始化變數?

剛剛上面講完了資料型態,那就可以來講講甚麼是變數了,變數藉由給定資料型態來讓其副有意義,下面舉例。

int main(){ int a; //宣告整數型態變數取名為 a float b;//宣告浮點數型態變數取名為 b double c;//宣告浮點數型態變數取名為 c bool d;//宣告布林型態變數取名為 d char e;//宣告字元型態變數取名為 e short f;//宣告整數型態變數取名為 f long g;//宣告整數型態變數取名為 g return 0; }

所以我們可以得出一個通則

variable_type variable_name; 變數型態 變數名稱

而變數名稱都是由自己定義的,變數型態是 C++ 這個語言規定好的,無法改變,而通常在為一個變數命名的時候,要養成取「有意義」的名字的習慣,這邊舉個例。

假設今天有一道題目想麻煩你算出自己的 BMI,在為變數命名的時候,我會這樣做。

int main(){ double height, weight; double my_bmi; cin >> height >> weight; my_bmi = weight/(height*height); cout << my_bmi; return 0; }

這樣閱讀者在閱讀的時候能夠馬上理解你在做的事,而且不會混淆,同樣的事情我們如果用很糟糕的命名方式,那會非常頭痛,這邊舉個錯誤示範!

int main(){ double a, b; double c; cin >> a >> b; c = a/(b*b); cout << c; return 0; }

忽然間好像甚麼都不會了,a、b、c 分別是什麼呀? 然而這個只有寫這段程式的那個人知道,所以一定要養成取有意義的名字的習慣!

然後最後要加上一個分號,在 C++ 裡面,一個陳述句最後都要加上分號,但不是說每一行都要分號哦,這邊舉個例,雖然有些內容沒看過,不過後面就會學到了。

int main(){ int a = 10, b = 20; if(a < b){ cout << "a 比 b 小"; } else { cout << "a 比 b 大"; } return 0; }

這邊看的出來,第三行第六行沒有加分號,其他還有很多大括號包住程式範圍,所以並不是每一行都要加分號哦,而是一個陳述句才要加,像是變數的宣告、內容的輸入或印出(cout / cin)。

而條件判斷語句 if-else 後面會教不用擔心。

接著我們來說說初始化

不失一般性,變數能被宣告既然要被拿來用,我們當然要給他值摟,值可以在後續運算的時候儲存,也可以在變數宣告的時候立即給他值,而這個動作就稱為初始化,我們直接看看例子。

int main(){ float my_height = 1.73; float my_weight = 60; int my_grade; // int my_grade = 0 my_grade = 3; }

應該不難理解,第二行跟第三行是在宣告變數的同時順便初始化,而第四行跟第五行則是我先宣告一個變數,但沒有值,之後我再初始化他的值。但一般會在變數宣告的時候就立即初始化,如果我們暫時用不到他,我們也會把他設為 0,預防一些錯誤,而這也是初始化的好處

結論

透過上面的例子我們知道了怎麼宣告變數,而在學程式的人中,有許多潛規則,有很多用語我們都會不自覺地使用出來,這邊要講的其中之二就是宣告、初始化

我們時常會說宣告一個變數,宣告一個整數變數,這邊的宣告在英文會常用 declare,未來有機會常看英文教學的時候就會知道。

we declare an integer variable called height,
and declare another one called weight.

而初始化我們則常用 initialize / initial,前者是動詞後者是形容詞,所以在外國教學會很常聽到如下的句子。

1.Now we initialize an integer variable called height and give it 200.

2.Now we give an initial value for this integer variable.

上面兩種都是很常聽到的句子,所以可以知道在這廣大的世界中其實有很多事情都有共通的語言,你聽到的時候其實不是不懂,而是你沒有見過,所以多吸收新知吧少年少女! orange

所以如果助教今天在台上一直講宣告宣告宣告初始化初始化,就是指這個意思!

變數有甚麼功用?

程式設計師會把遇到的問題透過他的邏輯來呈現,而在我們的邏輯中需要什麼型態的資料,我們就會把它宣告出來使用。

所以變數的用意會根據問題被程式設計師賦予意義,所以上面說的取名字就非常重要,以上面的 BMI 為例,double 變數是被我賦予意義的,一個用來存身高,一個存體重,最後保存我們的 bmi 值。