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 : 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