---
GA: G-RZYLL0RZGV
---
###### tags: `大一程設` `東華大學` `東華大學資管系` `基本程式概念` `資管經驗分享`
七大基礎資料型態、什麼是變數、變數的功用是什麼?
===
[toc]
## 前言
> 不經一番寒徹骨,焉得梅花撲鼻香。
不經一番程式歷練,焉得 Ouput 美好滋味。
[name=orange]
程式能夠幫我們做到的事情非常多,不然就不會有甚麼遊戲,大家現在常看到的網頁,又甚至是很多協助人類的科技資訊研究,但是在碰到這些有趣的東西之前,該會的工具要先學起來,總不能 LV 1 的時候想要打 LV 100 的王吧!
> 寫程式是固定費時、燒腦,卻也是讓你成長到跟社會接軌的一件事情。
> 你的努力一定不會白費。
> [name=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 | $10^{-38}$ ~ $10^{38}$ |
| **double** | 浮點數 | 8bytes | $10^{-308}$ ~ $10^{308}$ |
| **bool** | 布林值 | 1bytes | false 或 true |
| **char** | 字元 | 1bytes | -128 到127(預設值) |
**粗體字的要熟記,因為很常用!**
[參考資料看這邊](https://docs.microsoft.com/zh-tw/cpp/cpp/data-type-ranges?view=msvc-160)
<span style="color:red; font-size:20px"><strong>
值域範圍跟位元組的概念是計算機概論的基本知識,這邊如果有看不懂沒關係,要和計概一起學,學計概如果有問題可以再洽 Orange</strong>
</span>
* 1 bytes = 8 bits
>這邊請左轉**計算機概論**,我先不負責XD
>我是會,但先不跟程式設計混在一起
>有需要請洽 Orange
* 值域範圍
* 值域範圍會因為不同的系統而有不同,我們這邊都先記 Win10 64 位元的系統
* 整數
* int
* 一般的整數型態,值域範圍在 $-2^{31}$ ~ + $2^{31}-1$
* 我們最常使用的整數資料型態
* short
* 短整數,也是整數的一種,所占記憶體大小只有 2 bytes,值域是 -32768 ~ 32767
* 所以可以想像如果今天有一個整數是 50000,那就不能用 short 來存,要用更大的像 int 或 long
* 一般來說較少用 short,基本上都用 int 居多
* long
* 也是整數型態,但能表達更精準更大的精度
* 值域與 int 相同,但跟 int 不同的地方是,**如果今天有數字超過 $-2^{31}$ ~ + $2^{31}-1$ 那可以用 long long 來宣告**
* 你可能會問那能不能也 int int,不行,這是規定,no why!
<br>
>我們馬上就會講宣告是什麼,莫驚莫荒。
* 浮點數
* float 與 double 最大的差異在於表達的精度 <br> 前者是 IEEE 754 32倍精度,後者是 IEEE 754 64倍精度
>這邊你們看不懂沒關係,請左轉計算機概論,有問題一樣洽 Orange
>**只要記得 float 跟 double 能夠拿來做小數運算就對了!**
* float
* 存小數的一種資料型態
* 能存的範圍比 double 還小,不過一般我們不用寫到那麼大的數
* double
* 存小數的一種資料型態
* 但還是可以養成使用 double 的習慣
* 布林值 bool
* 用來做條件判斷常用的資料型態
* 值只有兩種,分別是 true/false,前者為真後者為偽
* 你也可以用 1 跟 0 來表達 true/false,在程式語言裡 1 為真 0 為偽
``` cpp=
int main(){
bool a;
a = true; // a = 1;
cout << a; // 會印出 1
return 0;
}
```
``` cpp=
int main(){
bool a;
a = 1;
cout << a;
return 0;
}
```
這兩種表達方式的結果一模一樣,這邊的 1 不是整數,會被識別成布林值
* 字元
* 用來存一個字的資料型態
* **未來會在介紹處理字元更方便的類別 -> string**
* **類別也在未來的時候教,不用擔心**
* char 型態的變數用來儲存字元,而字元必須要被單引號('')給包住,這是語法規定,沒有為甚麼
``` cpp=
int main(){
char a;
a = 'h';
cout << a; //印出 h
return 0;
}
```
## 甚麼是變數? 如何宣告變數? 如何初始化變數?
剛剛上面講完了資料型態,那就可以來講講甚麼是變數了,**變數藉由給定資料型態來讓其副有意義**,下面舉例。
``` cpp=
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,在為變數命名的時候,我會這樣做。
``` cpp=
int main(){
double height, weight;
double my_bmi;
cin >> height >> weight;
my_bmi = weight/(height*height);
cout << my_bmi;
return 0;
}
```
這樣閱讀者在閱讀的時候能夠馬上理解你在做的事,而且不會混淆,**同樣的事情我們如果用很糟糕的命名方式,那會非常頭痛,這邊舉個錯誤示範!**
``` cpp=
int main(){
double a, b;
double c;
cin >> a >> b;
c = a/(b*b);
cout << c;
return 0;
}
```
忽然間好像甚麼都不會了,a、b、c 分別是什麼呀? 然而這個只有寫這段程式的那個人知道,**所以一定要養成取有意義的名字的習慣!**
**然後最後要加上一個分號**,在 C++ 裡面,**一個陳述句最後都要加上分號,但不是說每一行都要分號哦**,這邊舉個例,雖然有些內容沒看過,不過後面就會學到了。
``` cpp=
int main(){
int a = 10, b = 20;
if(a < b){
cout << "a 比 b 小";
}
else {
cout << "a 比 b 大";
}
return 0;
}
```
這邊看的出來,第三行第六行沒有加分號,其他還有很多大括號包住程式範圍,所以並不是每一行都要加分號哦,而是一個陳述句才要加,像是變數的宣告、內容的輸入或印出(cout / cin)。
**而條件判斷語句 if-else 後面會教不用擔心。**
### 接著我們來說說初始化
不失一般性,變數能被宣告既然要被拿來用,我們當然要給他值摟,值可以在後續運算的時候儲存,也可以在變數宣告的時候立即給他值,而這個動作就稱為初始化,我們直接看看例子。
```cpp=
int main(){
float my_height = 1.73;
float my_weight = 60;
int my_grade; // int my_grade = 0
my_grade = 3;
}
```
應該不難理解,第二行跟第三行是在宣告變數的同時順便初始化,而第四行跟第五行則是我先宣告一個變數,但沒有值,之後我再初始化他的值。但一般會在變數宣告的時候就立即初始化,**如果我們暫時用不到他,我們也會把他設為 0,預防一些錯誤,而這也是初始化的好處**。
### 結論
透過上面的例子我們知道了怎麼宣告變數,而在學程式的人中,有許多潛規則,有很多用語我們都會不自覺地使用出來,這邊要講的其中之二就是<span style="color:red">宣告、初始化</span>
我們時常會說宣告一個變數,宣告一個整數變數,這邊的宣告在英文會常用 declare,未來有機會常看英文教學的時候就會知道。
> we <span style="color:red">declare</span> an integer variable called height,<br> and declare another one called weight.
而初始化我們則常用 initialize / initial,前者是動詞後者是形容詞,所以在外國教學會很常聽到如下的句子。
> 1.Now we <span style="color:red">initialize</span> an integer variable called height and give it 200.
>
> 2.Now we give an <span style="color:red">initial value</span> for this integer variable.
> 上面兩種都是很常聽到的句子,所以可以知道在這廣大的世界中其實有很多事情都有共通的語言,你聽到的時候其實不是不懂,而是你沒有見過,所以多吸收新知吧少年少女!
> [name=orange]
**所以如果助教今天在台上一直講宣告宣告宣告初始化初始化,就是指這個意思!**
## 變數有甚麼功用?
程式設計師會把遇到的問題透過他的邏輯來呈現,而在我們的邏輯中需要什麼型態的資料,我們就會把它<span style="color:red">宣告</span>出來使用。
所以變數的用意會根據問題被程式設計師賦予意義,所以上面說的取名字就非常重要,以上面的 BMI 為例,double 變數是被我賦予意義的,一個用來存身高,一個存體重,最後保存我們的 bmi 值。