C++
Some facts...
Bjarne Stroustrup

Features
- Influenced by C
- Compile, then execute
- Really fast
- Low-level
Tools
IDE
- Dev-C++
- Code::Blocks (Recommend)
Text Editors
- Sublime Text
- Atom
- Notepad (if you like)
INFOR!
-
Main function
-
#include ......
-
statement (end with ';')
-
indent (good for reading)
-
comment (good for reading)
Chapter 1
Variables, I/O, if/else, switch
Variables
Declaration (宣告)
(修飾詞) 資料型態 變數名稱
Data Type (資料型態)
-
Numbers : int, double......
-
bool
-
char
-
string
Assign vs Initialize
- int x;
x = 5; - int x = 5;
- int x(5);
Numbers

Calculate
- +, -, *, /, %
-
#include<cmath>
- pow(a, b)
- sqrt(a)
- ......
char
-
single character
-
EX: 'a', ' ', '\n'......
-
ASCII (0~127)
string
-
#include <string>
-
EX: "jizz", "ckap", " "
bool
-
1(True) / 0(False)
-
Compare (same as python)
-
Logic
- or (||)
- and (&&)
- not (!)
Type Conversion (轉型)
- type(variable) or (type)variable
- ex:
- int + int => int
- int + double => double
- double + double => double
I/O
-
#include <iostream>
-
cout << x1 << x2 ;
-
cin >> x;
-
cout << endl or cout << '\n'
cin, cout
if/else
-
if (condition) {
statement;
} -
if (condition) {
statement;
}
else{
......
}
switch
switch(a){
case 1: statement; break;
case 2: statement; break;
......
default: statement; break;
}
Online Judge
TIOJ
- 自己的 OJ 自己用
- hard
- 把應該說明的篇幅都拿到奇怪的故事設定
Zerojudge
- simple
- 有 Uva 的翻譯
- WA 會告訴你錯在哪裡
Uva
- 歷史悠久
- 題目豐富,說明詳細,全英文
- 常常故障
- 有 Python、Java
- 輸出格式很煩
Chapter 2
Loop & Array
Loop 迴圈
while
while(條件)
敘述句;
while(條件){
敘述1;
敘述2;
......
}
do...while...
do{
敘述句;
......
}while(條件);
- 記得 while 後面要加分號
- 和 while 的不同是 { } 中的敘述至少會被執行一次
for
for(初始化; 條件; 運算式){
敘述句;
......
}- 如果控制迴圈的變數是在 ( ) 中宣告的,那麼到迴圈外面就無法存取
break 敘述
for(int i = 0; i < 10; i++){
......
if(i == 5) break;
}- 聽說 switch 裡面見過
- 會跳出這一層迴圈
continue 敘述
for(int i = 0; i < 10; i++){
if(i == 5) continue;
cout << i << endl;
}- 在迴圈裡面會跑到條件那邊再判斷一次
- 在 for 迴圈裡會幫你更新值
goto 敘述
for(int i = 0; i < 10; i++){
if(i == 5) goto label;
cout << i << endl;
}
label:
return 0;- 可以直接去標籤所在的地方
- 其實每個地方都能用,不只迴圈
Exercises
- Zerojudge
- a024 最大公因數(輾轉相除法)
- a038
- a248
- a005
- a010
- TIOJ
- 1055
Array 陣列
- 想要很多變數,一個一個宣告好累
- 如果有類似表格的東西就好了
陣列的概念
- 宣告方法:資料型態 名稱[元素個數]
例如: - 使用方法: 陣列名稱[索引值]
例如: - 元素個數應該一開始就給定
- 陣列中的元素會占用連續的記憶體空間
- 索引值從 0 到 元素個數-1
- 如果索引值不在上面的範圍,會發生災難
| a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] |
|---|
int a[9]; char arr[30];n[3] = 7122;初始化
int a[9] = {7119, 7120, 7121, 7122, 7123, 7124};
\\a[0] = 7119, a[1] = 7120......a[7] = 0
int b[] = {0, 1, 2, 3, 4};
\\錯誤
a = {7, 1, 2, 3};
b = a;多維陣列
| a[0][0] | a[0][1] | a[0][2] | a[0][3] |
|---|---|---|---|
| a[1][0] | a[1][1] | a[1][2] | a[1][3] |
| a[2][0] | a[2][1] | a[2][2] | a[2][3] |
int a[3][4];
char arr[100][100][100];字串
- 字串其實是由字元組成的陣列
string s = "INFOR";
//s[0] = 'I', s[1] = 'N'......
char arr[6] = "INFOR";- string vs char array
string
char array
| I | N | F | O | R |
|---|
| I | N | F | O | R | \0 |
|---|
- 求字串長度
string : s.size() or s.length()
char array : strlen(arr) // #include <cstring>
不會包含最後的 '\0'
- 想要字串陣列
- string arr[]; //絕對沒有這種用法
- char 的二維陣列
- vector<string>
- string arr[]; //絕對沒有這種用法
- 想要讀整行,不想跳過空白
string : getline(cin, s)
char array : cin.getline(arr, 字串長度+1)
Exercises
- ZOJ(下同) a015
- a020
- a021
- a022
- a009
- a417
Chapter 3
Function
How?
return_type function_name(parameter_list){
statement 1;
statement 2;
......
return value;
}void function
原型宣告
Recursion
遞迴(英語:Recursion),在數學與電腦科學中,是指在函式的定義中使用函式自身的方法。
階乘
- n! = 1 * 2 * 3 ...... * n
- n! = (n-1)! * n
河內塔
有三根杆子A,B,C。A 杆上有 N 個 (N>1) 穿孔圓盤,盤的尺寸由下到上依次變小。要求按下列規則將所有圓盤移至 C 杆
每次只能移動一個圓盤,大盤不能放在小盤上面
問:如何移?最少要移動多少次?

想法:
把 n 個圓盤從 A 移動到 C,中間一定要把 n-1 片移到 B,把最大的圓盤從 A 移到 C,再把剩下的從 B 移到 C。
總共需要 2^n -1 步
TIOJ 1004
猶太人敢死隊問題
Exercises
TIOJ 1355 (純河內塔)
TIOJ 1356
TIOJ 1357 (四根柱子)
C++
By hfy880916
C++
INFOR 29th
- 369