# 基本內建型態 C\++是一種強型別語言,**不像python和javascript是弱型別語言**(聽懂了嗎,學C\++最棒了),因此C\++所有的變數都必有型別(type),且<font color="#EB6E41">所有變數使用前都需要經過宣告</font>。 :::warning 基本內建型別是不需要任何標頭檔和命名空間就可以使用的指令。 ::: ## 整數型態 | 整數型態 | 數值範圍 | 表示為2的次方 |位元組| |:------------------------|:------------------------ |:---------------------------------------------------------- |:---------------------- | | short | $-32678$ ~ $32767$ | $-2^{15}$ ~ $2^{15}-1$ |2| | unsigned short | $0$ ~ $65535$ | $0$ ~ $2^{16}-1$ |2| | int | $-2,147,483,648$ ~ $2,147,483,647$ | $-2^{31}$ ~ $2^{31}-1$ |4| | unsigned int | $0$ ~ $4,294,967,295$ | $0$ ~ $2^{32}-1$ |4| | long long | $-9,223,372,036,854,775,808$ ~ $9,223,372,036,854,775,807$ | $-2^{63}$ ~ $2^{63}-1$ |8| | unsigned long long | $0$ ~ $18,446,744,073,709,551,615$ | $0$ ~ $2^{64}-1$ |8| 其中 `int`、`long long`、`unsigned long long` 較常使用。 ## 浮點數型態 | 浮點數型態 | 數值範圍 |位元組| | ---------- | ---------------------------------- |-| | double | $-1.7\times10^{308}$ ~ $1.7\times10^{308}$ |8| | float | $-3.4\times10^{38}$ ~ $3.4\times10^{38}$ |4| :::warning 因為小數點精度問題,盡量不要用float。 當數字≥999999.5(約$10^7$)時,使用`double`將會捨棄後方幾位的數並轉成用 $e$ ($10$的次方)表示。(ex.$100000000$➙$1\times10^8$➙顯示$1e+008$、$50000000123$➙$5\times10^{10}$➙顯示$5e+010$) ::: ## 字元型態 | 字元型態 | 宣告功能 | 數值範圍 |位元組| | -------- | -------- |:------------------------- |-| | char | 宣告字元 | $-128$ ~ $127$ |1| ## 邏輯型態 | 邏輯型態 | 宣告功能 | 數值範圍 |位元組| | -------- | -------- | ------------------- |-| | bool | 邏輯變數 | $true(1)$ 、 $false(0)$ |1| # 變數宣告 在使用變數之前,要先告訴電腦我們要用變數,電腦會準備記憶體中間儲存該變數,若沒有宣告它的資料型態或搞錯資料型態,都有可能會出現無法編譯的情況。 ## 宣告語法 ```cpp= #include<iostream> using namespace std; int main(){ //正確 int a, b ; //多個變數時中間以逗點隔開。 int A ; //大寫和小寫字母視為不同變數。 int b ; //已使用過的變數不得重複宣告。 int c = 20 ; //宣告同時賦值。 //錯誤 int n ; //全形,跑不了,必須是半形。 int return //變數名稱不能是保留字。 //比較 int 1n //變數名稱數字不可在前。 int n1 //但可以在後。 int chrislai is god //變數名稱中不能有空格。 int chrislai_is_god //但可以用底線。 return 0; } ``` :::warning 雖然某些編譯器上會自動將沒有設置初始值的變數設為0,但是在judge系統上不一定會自動設初始值為0,導致在編譯器上執行結果正常,但是judge端會出現錯誤。 以記錄總和為例。 ```cpp= int sum = 0; //sum值設為0 for(int i = 0; i < 13; i++){ sum += i; } ``` ::: ## 全域變數 指宣告在`int main()`之上的變數,在程式<font color="#EB6E41">**編譯**</font>時就被宣告好(宣告在`main()`裡面的稱為區域變數,在<font color="#EB6E41">**執行**</font>時才會宣告),其他使用都和區域變數一樣。 全域變數有幾個特性,例如不須被初始化就會自己初始化好(整數型態初始化成`0`、小數型態初始化成`0.0`、字元型態初始化成`'\0'`(空字元)、邏輯型態初始化成`false`)。 # 例題 ###### 有什麼題目沒提到或有新增的煩請留言告知。 [a313: 喔耶 水題](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a313) ( <font color="#EB6E41"> 這題被歸在這是因為它符合本課教學(不然都沒有例題),但現階段你們不能 **<font color="#00FF00">AC</font>** ,真的別寫,我不想被罵,他要優化再優化。</font> ) ###### 都看到這了難道不按個愛心支持一下嗎?