# 程式語言的分類
- “翻譯” 的兩種方式:
編譯型語言:
一次將編寫的整个程式 "翻譯" 成機器語言的指令,保存成文件,以後執行不再 “翻譯”,只要執行翻譯過的文件即可。
如:Fortran、C、C++、Pascal 等。解釋型語言:
解釋一句執行一句,直到執行完所有命令,或遇到錯誤。
如:Basic、ASP、PHP、Python、Java 等。
- 編譯型語言編程步驟:
graph LR | |
subgraph 第一步 | |
編輯 | |
源文件.cpp | |
end | |
編輯-->編譯 | |
subgraph 第二步 | |
編譯 | |
目標文件.obj | |
end | |
編譯-->連接 | |
subgraph 第三步 | |
連接 | |
可執行文件.exe | |
end |
# 基本結構
# 第一段程式碼
#include <iostream> // 為了要使用 cout 而引入的標頭檔 | |
using namespace std; // 為了更方便使用 cout 的註明 | |
int main() //main () 函數的開始 | |
{ | |
cout << "初次嘗試C++" <<endl; // 真正的程式從這樣一行開始 | |
cout << "要好好加油喔!" <<endl; // 接下來執行到這一行 | |
return 0; //main () 函數的結束 | |
} |
# C++ 基本要素
# 標識符
- 標識符: 程式中變數、類型、函式和標號的名稱。
a,b,name,int, char,main,void 等 - 關鍵字: 系統已有的標識符
常見關鍵字:- using, namespace, void, return
- int, float, double, char, bool, signed, unsigned, long, short ,const , true, false, sizeof
- if, else, for, do, while, switch, case, continue, break
- class, struct, private, public, this, new, delete
- 自訂義標識符: 自己給變數、函數等起的名字
命名規則:- 由字母、數字和下劃線组成
- 第 1 個符號不能是數字
- 區分大小寫(大小寫敏感)
int a,b,c; | |
int A,B,C; | |
double a1,b2,c3; | |
double table_width, table_height; | |
char _name[40], _address[100]; | |
int 1a,2b,3c; //× 不合法的標識符 |
# 運算子、表達式
- 運算子: 表示運算符號
- 算術運算子
+
、-
、*
、/
、%
- 關係運算子
>
、<
、>=
、<=
- 算術運算子
- 表達式: 表示運算的式子
- 可以是一個變數,一個常數
a
、b
、5
- 也可以是用運算子將變數、常數連接起來
3+5
、a+b
、a>b
- 還可以用運算子將表達式連結起來
(a+b)*(a-b)
- 可以是一個變數,一個常數
# 語句
- 每一段的程式碼都需要用分號
;
。(很重要) - 它代表一個表達完整的命令。
int a,b,c;// 這是一個說明语句,說明用 a,b 表示整數 | |
a+b // 這是一個表達式,雖然能表達加法運算,但沒有說明運算結果也如何處理 (CE) | |
c=a+b; // 語句,計算 a 和 b 的和,將结果存入 c 中 | |
a+b; // 在 C++ 中也是語句,但這個語句沒什麼作用 | |
a; // 也是語句,但也沒什麼作用 | |
;;; // 這是 3 個 | |
c=a+b // 雖然有等號,但没有分号,也不是语句 |
- 等號也是運算子,等號連接起来的式子是表達式,如 c=a+b
- 只有加上分號,才是語句 c=a+b;
- 等號的左邊必須是變數
5=3
(a+b)=c+d
×a+(b=c+d)
a+(b=c)+d
√
# 輸入 、 輸出
在 C++ 中,使用 cin
和 cout
以在終端機獲取和輸出資料。<<
和 >>
代表資料流動方向。
{ | |
int n; // 宣告變數 n | |
cout<< "請輸入數字:"; | |
cin >> n; | |
cout <<"你輸入的數字為: " << n << endl; | |
} |
endl
是 iostream
中的一個物件,功能是換行。
# 函式 function
能完成一定功能的有名的程式序列,是組成 C++ 程序的基本單位。
- main 函数
C++ 的運行就從這裡開始
int main() | |
{ | |
int a,b; | |
cin>>a>>b; cout<<a+b<<endl; return 0; | |
} |
系统函式
sin(x)
,cos(x)
,exp(x)
,sqrt(x)
自定函式
# 工程師的好習慣
# 註解
不管在哪個語言裡註解都相當的重要。
可以用來告訴其他工程師你的想法或區分方式。//
為單行註解, /* */
為多行註解。
// 我是單行註解 | |
/* | |
我是多行註解 | |
可以跨越很多行喔 | |
*/ |
# 縮排
雖然,縮排在 C 語言裡不會影響到電腦的判讀。
但是,好的工程師就應該要有好的縮排習慣。(超重要)
亂縮排的話,小心我突然出現在你背後喔
縮排方式:按 tab鍵
將區塊內的程式碼排好。
// 未縮排 (可讀性低) | |
int main(){ | |
int n = 5; | |
if(n<5){ | |
n+=18; | |
} | |
cout<<n<<endl; | |
} | |
// 縮排 | |
int main(){ | |
int n; | |
if(n < 5){ | |
n+=18; | |
} | |
cout<<n<<endl; | |
} |
# 縮排風格
工程師放置大括號的位置也會有些區別,
是因為他們使用的是不同的縮排風格喔!
主流的風格有兩種,分別是: Allman style
和 K&R style
的變形
//Allman | |
int main() | |
{ | |
int x = 5,y = 7; | |
if(x < y) | |
{ | |
cout<<"x < y"<<endl; | |
} | |
else | |
{ | |
cout<<"x > y or x = y"<<endl; | |
} | |
} | |
//K&R 變形 ->OBS | |
int main(){ | |
int x = 5,y = 7; | |
if(x < y){ | |
cout<<"x < y"<<endl; | |
}else{ | |
cout<<"x > y or x = y"<<endl; | |
} | |
} |
其實還有很多種不同風格,可以到維基百科看看喔~
# 命名守則
在使用變數之前,我們必須為其設定一個名字。
設定一個名字,除了要跟隨著名命名基本原則外,
取的名稱應該與功能有關 (雖不強制,但很重要,關係到可讀性)。
// 錯誤示範 | |
int a,b,c,d,e,f; | |
float g; | |
string h; | |
// 正確示範 | |
int n; // 數量 | |
int x , y; // 變數 | |
int sum,total; // 總數 | |
float area; // 面積 | |
string name; // 名字 | |
// 當然還有很多例子 |
# 常見編譯錯誤
編譯錯誤,常常發生我們的疏失,竟可能將這種錯誤降到最低。
初學時,最容易出現三種編譯錯誤:
# 忘記加分號
#include<iostream> | |
using namespace std; | |
int main(){ | |
int x = 1 , y = 93 | |
cout<< x + y<<endl | |
} |
expected ‘ ; ’ before ‘ ... ’ token
解決方案:在錯誤出現處的行末尾加上 ;
# 括號沒括好
#include<iostream> | |
using namespace std; | |
int main(){ | |
int x = 8 , y = 13; | |
if(x < y){ | |
cout<< x + y <<endl; | |
else | |
cout<< x - y <<endl; | |
} | |
} |
expected ‘ } ’ before ‘ ... ’ token```
解決方案:檢查自己縮排的狀況,並找出遺漏的 } 並補上
# 忘記宣告
#include<iostream> | |
using namespace std; | |
int main(){ | |
if(x < y){ | |
cout<< x + y <<endl; | |
}else{ | |
cout<< x - y <<endl; | |
} | |
} |
“ 變數/常量/函式 ” was not declared in this scope
解決方案:
1. 檢查變數是否在使用前被宣告,若無則就宣告它 。
2. 確認使用的預設函式其標頭檔是否已被宣告,若無則宣告它。