建北電資聯合暑訓 暑支暑資誰最電 C++
甚麼是C++
- 編譯形語言
- 快
- 競賽常用語言
Javascript
直譯式語言/動態語言
直接轉譯執行
次慢
網頁
Python
直譯式語言/動態語言
直接轉譯執行
最慢
AI
C++
編譯語言
預先編譯
最快
競賽程式
小複習
編輯程式碼?
文字編輯器
高度自定義
都要自己安裝
輕量化
IDE
整合是開發環境
安裝方便
吃效能
兩種工具
- IDE
- 電腦卡
- ≠Visual Studio Code
- 大專案
Visual Studio
- IDE
- 程式卡
- 純線上
- 免安裝
- 手機 平板 可用
replit
- 文字編輯器
- 滑鼠再見
- 快 更快
- 要自己安裝編譯器
- 不好學
Vim
- 文字編輯器
- 超多擴充工具
- 最多人使用
- 要自己安裝編譯器
Visual Studio Code
線上評測系統!
Online Judge
# PRESENTING CODE
What is OJ?
線上評測系統
一個讓你練習程式設計與演算法的地方
會在後端有個伺服器執行你上傳的程式
對於特定的題目會有特定的輸入與輸出
如果你的程式輸入後的輸出與標準一樣
就會得到AC的結果la欸我字數都一樣欸
# PRESENTING CODE
常見OJ
- zerojudge: 台灣最大,題目有點參差不齊,個人不常用
- TIOJ: 建中(資訊社or資讀)維護的,都是難題
- codeforce: 世界最大oj,常常有比賽,但都在台灣時間半夜
- Atcoder:第二大oj,在日本,比賽時間比較適合台灣人
- cses 很多演算法裸題可以練習
- neoj 資訊之芽的oj
基本上不存在所謂檢索功能
建北電資OJ
https://iscoj.fg.tp.edu.tw/
一一、一二學長前年把他復活的,題目還有點少,等待我們的努力QAQ
# PRESENTING CODE
OJ答案結果
AC(accepted) 你通過了
WA(wrong answer) 你錯了
MLE(memory limit exceed) 你花了太多記憶體
TLE(time limit exceed) 你花了太多時間
CE(compile error) 你的程式編譯失敗
RE(runtime error) 你戳到不能戳的記憶體
SYSTEM ERROR 你爛了 就這樣 去問出題者
Hello C++
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"Hello 暑訓!\n";
}
# 你第一次寫程式
Hello 暑訓!
顯然看不懂
執行結果
程式碼
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"Hello 暑訓!\n";
}
# 你第一次寫程式
Hello 暑訓!
引入函式庫
#include<標頭檔>
萬用標頭檔: bits/stdc++.h
使用命名空間
使用命名空間
標準函式庫
主要函式
程式起始處
運行完結束
輸出
cout<<"要輸出的東西";
\n 換行
記得加 ;
動手做看看
變數
- 資料暫存
- 不是
未知數 - 資料型態、變數名稱
變數
- 變數的類別
- 管理運算方式、記憶體分配
資料型態
常見資料型態
資料型態 | 用途 | 記憶體大小 |
---|---|---|
int | 整數-2³¹~2³¹-1(約2*10⁹~-2*10⁹) | 4 bytes |
long long | 更大的整數 -2⁶³~2⁶³-1(約9*10¹⁸~-9*10¹⁸) | 8 bytes |
float | 浮點數 (可以有小數點的數字) | 4 bytes |
double | 更精確浮點數 (可以有小數點的數字) | 8bytes |
char | 字元 | 1 byte |
string | 字串 | 可變 |
-
與變數意義相關
-
只能用大小寫字母、數字、
_
、$
-
數字不可作為變數名稱的開頭
-
大小寫意義不同
-
不可使用保留字
變數命名
保留字
- 給編譯器特殊判定用
- 不可作為變數名稱
- 講義上有清單
變數宣告
資料型態 變數名稱;
資料型態 變數名稱=初始值;
資料型態 變數名稱, 另一個變數名稱;
int a;
int b=7;
int c=5,d=3,e,f,g;
- 一串變數
- 一串站存資料的空間
陣列
0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|
陣列宣告
資料型態 變數名稱[陣列長度];
資料型態 變數名稱[]={初始值1,初始值2,初始值3};
資料型態 變數名稱[陣列長度], 另一個變數名稱[陣列長度];
int a[5];
int b[]={3,7,9,2};
int c[]={5};
陣列取值
#include<bits/stdc++.h>
using namespace std;
int main(){
int arr[]={1,5,8,3,4,5,7};
cout<<a[0]<<" "<<a[6]<<"\n";
}
從0開始
輸入
- cin>>已經宣告的變數;
- 空白 換行 代表結束
- 其他方法
輸入
getline(cin,sting_name);
cin.getline(w,20);
輸入
#include<bits/stdc++.h>
using namespace std;
int main(){
string str1,str2;
cin>>str1>>str2;
cout<<str1<<"\n";
cout<<str2<<"\n";
}
執行結果
程式碼
輸入
]輸出
運算子
# = 賦值運算子
= 賦值運算子
- 和數學意義不同
- a=3 讓 a 變為 3
#include<bits/stdc++.h>
using namespace std;
int main(){
int a=7,b=-807;
a=b;
cout<<a;
}
# PRESENTING CODE
小仕紳手
猜輸出結果
# + - * / % () 運算子
+ - * / % () 運算子
- 先乘除後加減
- % 算餘數
- 整數/整數 無條件捨去
- ()內最先算
動手做看看
#include<bits/stdc++.h>
using namespace std;
int main(){
int a=7,b=199,c=11;
cout<<a*(b+a)%c<<"\n";
}
# PRESENTING CODE
小仕紳手
猜輸出結果
# ++ -- 運算子
++ -- 運算子
- ++ 增加1
- -- 減少1
- ++a 先加
- a++ 後加
#include<bits/stdc++.h>
using namespace std;
int main(){
int a=1558;
cout<<a++<<"\n";
cout<<a<<"\n";
}
# PRESENTING CODE
小仕紳手
猜輸出結果
# += -= *= /= %= 運算子
+= -= *= /= %= 運算子
a+=b;
a=a+b;
就是懶
# == != >= <= > < 關係運算子
== != >= <= > < 關係運算子
- != 是 ≠
- == 兩邊相同時 成立(true)
- 不同時 不成立(false)
# == != >= <= > < 關係運算子
&& || ! 邏輯運算子
- && 邏輯且
- || 邏輯或
- ! 反邏輯(加在左側)
條件
- 邏輯
條件
# if 用法
邏輯 if 用法
if(條件){
執行的東西一; //條件成立(true)時執行
執行的東西二;
}
用法1
if(條件) 執行的東西;
用法2
工程師很懶
小提示: 等等講到的 else if else for while 都可以這樣歐
前面條件不成立(否則)
且
這個的條件成立
- 前面必須是 if 或 else if
else if 否則如果?
# else if 用法
else if 用法
if(條件a){
執行的東西a;
}
else if(條件b){
執行的東西b;
}
else if(條件c){
執行的東西c;
}
條件a
條件b
條件c
結束
- 前面條件不成立(否則)
- 前面必須是 if 或 else if
else 否則
# else if 用法
else if 用法
if(條件a){
執行的東西a;
}
else if(條件b){
執行的東西b;
}
else if(條件c){
執行的東西c;
}
else{
執行的東西d;
}
條件a
條件b
條件c
結束
動手做看看
迴圈
# 爛寫法
爛寫法
工程師很懶
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
for(int i=0;i<8;i++) cout<<"Hello World!\n";
- 重複執行
- 重複執行
- 重複執行
迴圈
# for 用法
for 用法
for(史前初始化;判斷條件;迴圈結束後){
執行的東東;
}
# 爛寫法
爛寫法
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
cout<<"Hello World!\n";
for(int i=0;i<8;i++) cout<<"Hello World!\n";
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int s=0;s<5;s++){
cout<<s<<"\n";
}
}
# PRESENTING CODE
小仕紳手
猜輸出結果
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int s=0;s<5;s++){
//dosomething
}
}
# PRESENTING CODE
常見用法
猜輸出結果
# while 用法
while 用法
while(每次做之前判斷){
要做的事;
}
當表示式為真,不斷重複執行
和if的差別
while 內會一直重複,if 只會執行一次
# while 用法
while 飯粒
#include <bits/stdc++.h>
using namespace std;
int main(){
int a = 12;
while (a < 23) {
cout << a << " ";
a = a + 3;
}
cout << endl << "after while: a=" << a << endl;
return 0;
}
12 15 18 21
after while: a=24
# while 用法
無窮迴圈!
while(true){
//do something
}
在這個情況下 程式永遠不會結束(?
最後會無限的執行直到程式崩潰
for(;;){
//do something
}
# while 用法
break;
while(true){
//do something
if(something){
break;
}
}
判到something為真時,
就會成功跳出迴圈la
# while 用法
continue;
while(true){
//do something 1
if(判斷式){
continue;
}
//do something 2
}
做完something 1之後
若判斷式為真,便會跳過something 2
直接進行下一次迴圈(for迴圈也能用喔
動手做看看
# PRESENTING CODE
小小賽
Code
By 建中店自計算機研習社學術長807⁸⁰⁷
Code
- 180