CPP[0]
基礎語法
INDEX
Introduction
Setups
Hello World
Variables & Arrays
Conditionals
Loops
Introduction
1. 關於競賽程式
2. C++
3. Online Judge
Introduction
競賽程式(Competitive Programming)是一種以程式設計為核心的競賽活動,參賽者需要在有限的時間內解決一系列具挑戰性的算法和數學問題。
需要具備:
算法設計能力
問題解決技巧
編程能力
競賽程式中的每一道題目基本上都是一個需要通過某種演算法來解決的問題。這些題目通常涉及大量的數據處理、優化、搜索、排序等,需要運用合適的演算法來達到最佳解決方案。
Introduction
C++ 屬於編譯型語言,是最常被選用於競賽程式的編程語言
有許多優點如:
靈活的語法
豐富的標準庫(STL)
高效性
編譯型語言(Compiled Languages)
這類語言需要通過編譯器將源代碼轉換為機器碼或中間碼,生成可執行的二進制檔案,然後由電腦直接執行
- 例子:C、C++、Rust、Go、Swift
定義:這類語言不需要事先編譯成機器碼,而是由直譯器逐行解釋和執行源代碼。程式在執行時即時被解釋並執行
- 例子:Python、JavaScript、Ruby、PHP、Perl
直譯式語言(Interpreted Languages)

Introduction
Online Judge(線上判題系統),用於評測和判定程式設計問題的解答是否正確。
主要包括以下幾個功能:
結果判定:根據程式的輸出與預期結果進行比較,判定解答是否正確。
提交接口:參賽者或使用者通過該接口提交程式碼解答。
題目庫:包含各類程式設計題目,覆蓋不同難度和類型。
一個讓你練習程式設計與演算法的地方
會在後端有個伺服器執行你上傳的程式
對於特定的題目會有特定的輸入與輸出
如果你的程式輸入後的輸出與標準一樣
就會得到AC的結果la欸我字數都一樣欸
- by 一四學術 世宗
Introduction
提交到 Online Judge 之後,評分結果會有以下可能:
Result | Meaning | Why |
---|---|---|
AC | Accepted | 你對了 |
WA | Wrong Answer | 你錯了 |
MLE | Memory limit exceed | 你花太多記憶體 |
TLE | Time limit exceed | 執行時間太長 |
RE | Runtime error | 你可能戳出去了 |
Introduction
常見的 OJ 如下:
Codeforces:全球最大的 OJ,常常有比賽,可以助眠
TIOJ:建中資訊校隊所維護,題目難度偏高
ISCOJ:本社自己的 Online Judge,題目有點參差不齊,個人不常用
CSES:題目敘述簡單,每一題都很值得寫-
NEOJ:台大資訊之芽社的 OJ,如果之後要參加可以先刷題
Introduction
Setups
1. 編輯器
2. 編譯器
3. 基本設定
Setups
IDE
Editor
VS Code / Vim
DevC++ / Code::Blocks
文字編輯器
速度快
需額外安裝編譯器
推薦
不推
內附編譯器
速度慢
整合式開發環境
編輯器
簡單來說就是把你寫的東西翻譯成電腦看的懂的東西
(把你可能看不懂的東西轉換成你絕對看不懂的東西)
可以去查:Windows(或 MacOS) VS Code C++
裡面的安裝就有包含編譯器安裝了
有以下功能:
轉換程式碼:將高級語言轉換為計算機可執行的低級語言
優化:編譯過程中同時對代碼進行優化,提升執行效率
報錯:呃 不多說,但你不會想看到他報錯的
編譯器
Setups
Hello World
1. C++ 基本架構
2. 標題檔
3. 換行
Hello World
#include <iostream> // 引入函式庫
using namespace std; // 使用命名空間
int main() { // 主函式
cout << "Hello World\n"; // 輸出 Hello World(換行)
}
注意事項:
前四行是必要的,請把它背下來
主函式的大括號要把所有東西包起來
記得後面要加分號(大括號和標題檔除外)
基本架構
函式庫
簡單來說就是把所需要用到的工具引入,讓你可以更方便的使用它
常見函式庫:
<iostream> 輸入輸出
<vector> 動態陣列
<algorithm> 常用算法
...... 還有一大堆,懶得打怎麼辦?
只需要引入:<bits/stdc++.h>
裡面就包含所有函式庫了
Hello World
換行
換行
速度快
競程用
推薦
不推
專案用
速度慢
換行並刷新緩衝區
Hello World
'\n'
endl
Variables & Arrays
1. 變數&陣列
2. 資料型態
3. 運算子
Variables & Arrays
變數
顧名思義,數值會改變的數(不是未知數)
怎麼使用
#include <iostream>
using namespace std;
int main() {
int a; // 宣告一個名稱為 a 的整數(int)變數
}
(這個程式執行了不會有任何事發生)
資料型態
儲存的資料的型態
名稱 | 型態(Type) | 大小 |
---|---|---|
int | 整數 | |
long long | 整數 | |
bool | 布林值 | 真假值 (true / false) |
char | 字元 | 一個字元 |
string | 字串 | 多個字元 |
float | 浮點數 | 小數點 |
Variables & Arrays
賦值
將變數賦予一個值
#include <iostream>
using namespace std;
int main() {
// 宣告一個名稱爲 a 的整數(int)
// 並且將值設為 10
int a = 10;
// 名稱為 s 的字串(string)
// 並且將值設為 "cat"(字串用雙引號)
string s = "cat";
// 字元 c,值為 'w'(字元用單引號)
char c = 'w';
}
Variables & Arrays
名稱不能跟系統預設的一些保留字重複
輸入輸出
從用戶那邊取得值 / 將值顯示出來
#include <iostream>
using namespace std;
int main() {
// 用逗號將兩個相同資料型態的變數隔開
int a, b;
// 從使用者讀入兩個數字
cin >> a >> b;
// 將兩個數字相加的結果輸出並換行
cout << a + b << '\n';
}
注意箭頭方向是丟進變數還是丟出去
Variables & Arrays
運算子
加減乘除等計算
#include <iostream>
using namespace std;
int main() {
// 逗號左右可以分別賦值
int a = 5, b = 3;
cout << a + b << '\n'; // 加
cout << a - b << '\n'; // 減
cout << a * b << '\n'; // 乘
cout << a / b << '\n'; // 除
cout << a % b << '\n'; // 模(取餘數)
}
可以自己試其他的值
Variables & Arrays
改值
改變變數的值
#include <iostream>
using namespace std;
int main() {
int a = 3, b = 3;
a = 3 + 10;
cout << a << '\n'; // 13
b = b + 10;
cout << b << '\n'; // 13
int c = 0;
c += 3;
cout << c << '\n'; // 3
c++; // 這是 += 1 的簡寫
cout << c << '\n'; // 4
}
Variables & Arrays
同理可知 -- 是減一
陣列
一大堆數字,每一個都是獨立的資料
#include <iostream>
using namespace std;
int main() {
int a[2]; // 有三個整數的陣列
// 有三個整數分別為 0, 3 和 1 的陣列
int b[3] = {0, 3, 1};
cout << b[0] << '\n'; // 輸出 b 陣列第一個數字
cout << b[2] << '\n'; // 輸出 b 陣列第三個數字
}
Variables & Arrays
注意他是從零開始編號的(0-based)
很重要,別搞混
Conditionals
1. if else
2. 運算子
3. switch case
Conditionals
if
#include <iostream>
using namespace std;
int main() {
int a = 5, b = 3;
if (a > b) {
cout << "a is greater than b" << '\n';
}
if (a != b) {
cout << "they are not equal" << '\n';
}
}
如果條件為真,執行大括號內的東西
Conditionals
關係 / 邏輯運算子
回傳 true / false 的判斷式
==:等於
!=:不等於(驚嘆號會將真假值翻轉)
&&:且
||:或
(計算順序按照括號由小到大)
Conditionals
else
若 if 不成立,執行 else
#include <iostream>
using namespace std;
int main() {
int a;
cin >> a;
if (a % 2 == 1) {
cout << "a is odd";
} else {
cout << "a is even";
}
}
Conditionals
else if
否則,如果...
#include <iostream>
using namespace std;
int main() {
int grade;
cin >> grade;
if (grade >= 90) {
cout << 'A';
} else if (grade >= 80) {
cout << 'B';
} else if (grade >= 70) {
cout << 'C';
} else if (grade >= 60) {
cout << 'D';
} else {
cout << 'E';
}
}
Conditionals
switch case
另外一個判斷工具
#include <iostream>
using namespace std;
int main() {
char grade;
cin >> grade;
switch (grade) {
case 'A': // if (grade == 'A')
cout << "Excellent";
break;
case 'B': // else if (grade == 'B')
cout << "Nice";
break;
case 'C': // else if (grade == 'C')
cout << "Come on";
break;
default: // else
cout << "Failure";
break;
}
}
Loops
1. while 迴圈
2. for 迴圈
3. break / continue
Loops
while
當條件成立,一直執行
#include <iostream>
using namespace std;
int main() {
int i = 0;
while (i < 10) { // 當 i < 10 時
cout << i << '\n'; // 輸出 i
i++; // 把 i 加上 1
}
}
上面程式碼會輸出 0 ~ 9
Loops
for
(初始設定; 條件; 每次結束更新)
#include <iostream>
using namespace std;
int main() {
// reminder: 陣列是 0-based
int a[5] = {4, 8, 7, 6, 3};
// 設一個初始值 i 為 0
// 當 i < 5 時執行大括號內程式
// 每次執行完將 i 加上 1
for (int i = 0; i < 5; i++) {
cout << a[i] << ' ';
}
}
輸出 : 4 8 7 6 3
另外一種 for
遍歷陣列內所有內容
#include <iostream>
using namespace std;
int main() {
int a[5] = {4, 8, 7, 6, 3};
// 會自己偵測 a 的大小
for (int i : a) {
// i 在每次迴圈的值分別為 4, 8, 7, 6, 3
cout << i << ' ';
}
}
Loops
跟剛剛的執行結果一樣
continue
跳過本次迴圈
#include <iostream>
using namespace std;
int main() {
int a[5] = {4, 8, 7, 6, 3};
for (int i : a) {
// 只有一行時可以不用加大括號
if (i == 7) continue; // 跳過 7
cout << i << ' ';
}
}
Loops
輸出:4, 8, 6, 3
break
終止迴圈
#include <iostream>
using namespace std;
int main() {
int a[5] = {4, 8, 7, 6, 3};
for (int i : a) {
// 只有一行時可以不用加大括號
if (i == 6) break; // 跳過 7
cout << i << ' ';
}
}
Loops
輸出:4, 8, 7
沒了
世宗對不起
C++ 基礎語法
By keaucucal
C++ 基礎語法
- 532