基礎語法、陣列、迴圈
Claire
Intro
Hello World!
Input & Output
Setup
Variables & Data Types
Operators
Arrays & Vectors
Conditionals
Loops
Practices
程式語言(英語:programming language)是用來表達電腦程式的電腦語言。它是一套標準化的交流技巧,一種能夠讓程式設計師準確地定義電腦所需資料的語言,以向電腦發出指令並精確地定義不同情況下應當採取的行動。 --維基百科
C
C++
物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有物件概念的程式設計典範,同時也是一種程式開發的抽象方針。它可能包含資料、特性、程式碼與方法。物件則指的是類別(class)的實例。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,物件裡的程式可以訪問及經常修改物件相關連的資料。在物件導向程式程式設計裡,電腦程式會被設計成彼此相關的物件。 --維基百科
具有「物件(Objects)」概念的
程式語言設計模式
" 由有限步驟所構成的集合,可以用於解決某一個特定的問題。 "
線上解題系統
編譯器(Compiler)
#include <iostream>
using namespace std;
int main() {
// print Hello World!
cout << "Hello World!\n";
return 0;
}
#include <iostream>
using namespace std;
int main() {
// print Hello World!
cout << "Hello World!\n";
return 0;
}第 1 行:導入 <iostream> 這個標準函式庫
#include:可將函式庫導入程式
<iostream>:函式庫名稱,專門處理程式的輸入輸出
#include <iostream>
using namespace std;
int main() {
// print Hello World!
cout << "Hello World!\n";
return 0;
}
第 2 行:使用標準函式庫
std:C++ 標準函式庫的代號(standard library)
告訴電腦,我們想在程式中使用 C++ 標準函式庫
啊這個等等細講
#include <iostream>
using namespace std;
int main() {
// print Hello World!
cout << "Hello World!\n";
return 0;
}第 3 行:空行
會被電腦自動跳過
目的是為了讓程式碼可讀性更高
不用不會怎麼樣只是可能會被覺得很醜
#include <iostream>
using namespace std;
int main() {
// print Hello World!
cout << "Hello World!\n";
return 0;
}第 4 & 8 行:主函式
main 函式是 C++ 定義一個程式的起點
大括號 {} 內就是 main 函式的內容
電腦執行的程式就要寫在這個大括號內
#include <iostream>
using namespace std;
int main() {
// print Hello World!
cout << "Hello World!\n";
return 0;
}第 5 行:註解
//單行註解
/*多行註解*/
#include <iostream>
using namespace std;
int main() {
// print Hello World!
cout << "Hello World!\n";
return 0;
}第 6 行:Hello World!
cout:輸出
<<:把右邊的資料傳給 cout
\n:跳脫字元,換行
一行程式結束後記得要加 ;
#include <iostream>
using namespace std;
int main() {
// print Hello World!
cout << "Hello World!" << endl;
return 0;
}第 6 行:Hello World!
cout:輸出
<<:把右邊的資料傳給 cout
\n:跳脫字元,換行
一行程式結束後記得要加 ;
<< endl:也可以換行
#include <iostream>
using namespace std;
int main() {
// print Hello World!
cout << "Hello World!\n";
return 0;
}第 7 行:回傳
return 0;return 0:正常退出return 1:異常退出iostream:輸入輸出algorithm:常用演算法cmath:數學函式庫bits/stdc++.h
兩個 name 沒有區分開來,導致編譯錯誤
#include <iostream>
#include <string>
using namespace std;
string name = "C++";
string name = "Python";
int main() {
cout << name;
}不太重要
看看就好
使用命名空間即可避免錯誤
但其實在寫程式時應該避免重複命名
#include <iostream>
#include <string>
using namespace std;
namespace A {
string name = "C++";
}
namespace B {
string name = "Python";
}
int main() {
cout << A::name << '\n'; //C++
cout << B::name; //Python
}不太重要
看看就好
cout, cin, vector, string 等)都定義在 std 命名空間內
未使用 using namespace std;
需要在 cout, endl 前加上 std::
#include <iostream>
int main() {
std::cout << "Hello World!" << std::endl;
}using namespace std; 會導致 std 內的所有函式和類別
變成全域可用,可能會與其他函式名稱衝突,
因此在大型專案中建議避免使用
\n v.s endl變數
數值會改動的數
程式用來存放資料的空間
占有電腦的記憶體
執行的過程中可以對變數進行處理和運算
宣告格式:
資料型態 變數名稱;#include <iostream>
using namespace std;
int main() {
int a;
}
變數命名
需與變數內容相關
只能用大小寫字母、數字、_、$
數字不可作為變數名開頭
大小寫意義不同(為不同變數)
不可使用保留字
保留字
給編譯器做特殊判斷用
cin 和 cout 來進行<iostream> 函式庫輸入
輸出
cin >> 變數(已宣告過的);cin >> 變數 >> 變數;cout << 要輸出的物件;cout << 變數 << 變數;#include <iostream>
using namespace std;
int main() {
string s;
cin >> s; // Hello World
cout << s; // Hello
string a, b;
cin >> a >> b; // Hello World
cout << a << '\n'; // Hello
cout << b << '\n'; // World
}
#include <iostream>
using namespace std;
int main() {
string s;
getline(cin, s);
cout << s;
}getline
getline(cin, 變數)運算子
指定運算子 =
= 右邊進行運算#include <iostream>
using namespace std;
int main() {
int x;
x = 2 + 1;
cout << x << '\n'; // 3
x = x + 1;
cout << x << '\n'; // 4,先計算右邊再存入左邊
}算術運算子
#include <iostream>
using namespace std;
int main() {
int a = 5, b = 3, c = 2; // 逗號左右可以分別賦值
cout << a + b << '\n'; // 8,加
cout << a - b << '\n'; // 2,減
cout << a * b << '\n'; // 15,乘
cout << a / b << '\n'; // 1,除
cout << a % b << '\n'; // 2,模除(取餘數)
cout << c + a * b << '\n'; // 17,先乘除後加減
cout << (c + a) * b << '\n'; // 21,括號內優先
}
#include <iostream>
using namespace std;
int main() {
int a = 5, b = 3, c = 2; // 逗號左右可以分別賦值
cout << a + b << '\n'; // 8,加
cout << a - b << '\n'; // 2,減
cout << a * b << '\n'; // 15,乘
cout << a / b << '\n'; // 1,除
cout << a % b << '\n'; // 2,模除(取餘數)
cout << c + a * b << '\n'; // 17,先乘除後加減
cout << (c + a) * b << '\n'; // 21,括號內優先
}
5 / 3 = 1.66666...
但因為 a 跟 b 都是整數,對兩個整數做除法 / 時自動向下取整
#include <iostream>
using namespace std;
int main() {
int a = 1;
a += 1; // a = a + 1
cout << a << '\n'; // 2
a -= 2; // a = a - 2
cout << a << '\n'; // 0
}
#include <iostream>
using namespace std;
int main() {
int a = 0;
cout << ++a << '\n'; // 1,先加再用
cout << a++ << '\n'; // 1,先用
cout << a << '\n'; // 2,再加
cout << --a << '\n'; // 1,先減再用
cout << a-- << '\n'; // 1,先用
cout << a << '\n'; // 0,再減
}
遞增遞減
++x/--x:加減之後的值x++/x--:加減之前的值#include <iostream>
using namespace std;
int main() {
int a = 4, b = 7, c = 4;
cout << (a == b) << '\n'; // 0
cout << (a == c) << '\n'; // 1
cout << (a != b) << '\n'; // 1
cout << (a > b) << '\n'; // 0
cout << (a > c) << '\n'; // 0
cout << (a >= b) << '\n'; // 0
cout << (a >= c) << '\n'; // 1
cout << (a < b) << '\n'; // 1
cout << (a <= b) << '\n'; // 1
}
比較運算子
回傳 true(1) 或 false(0) 兩種結果
邏輯運算子
邏輯運算也只有 true(1) 或 false(0) 兩種結果
邏輯 AND &&
A、B皆為true時, A && B 為trueA && B 為 false邏輯 OR ||
A、B皆為false時, A || B 為falseA || B 為 true邏輯 NOT !
A 為 true 時,!A 為 falseA 為 false 時,!A 為 true隱含型別轉換
#include <iostream>
using namespace std;
int main() {
cout << 3 / 2 << endl; // 1
cout << 3 / 2.0 << endl; // 1.5
}
使用指定運算子 = 就會以指定運算子左邊的資料型別為準
#include <iostream>
using namespace std;
int main() {
int x;
x = 3 / 2.0;
cout << x << endl; // 1
}強制型別轉換
程式運算過程中對型別做強制的轉換
轉換格式:
#include <iostream>
using namespace std;
int main() {
int x = 3;
cout << (double)x / 2 << endl; //輸出 1.5
cout << (char)97 << endl; //輸出「a」, 97是字元'a'在ASCII碼中的編號
}
(轉換型別) 變數;
(轉換型別) 數值;
陣列
[]加上索引值 表示陣列的某個變數資料型態 陣列名稱[陣列大小];資料型態 陣列名稱[] = {初始值1, 初始值2...};陣列名稱[索引值]#include <iostream>
using namespace std;
int main() {
int a[5]; // 可儲存 5 個整數變數
int b[] = {1, 3, 4}; // 陣列中有 1, 3, 4 三個整數,長度為 3
cout << b[0] << ' ' << b[2] << '\n'; // 1 4
cout << b[3] << '\n'; // 噴錯,陣列 b 長度只有 3
a[] = {1, 2, 3, 4, 5};
cout << a[0] << '\n'; // 1
a[0] = 9;
cout << a[0] << '\n'; // 9
char c[10], d[2]; // 也可儲存其他資料型態
}
n x m 的陣列
陣列宣告格式:
資料型態 陣列名稱[n][m];資料型態 陣列名稱[][] = {{初始值1-1, 初始值1-2...},
{初始值2-1, 初始值2-2...},...};#include <vector>vector<資料型態> 動態陣列名稱;
vector<資料型態> 動態陣列名稱(陣列長度);
vector<資料型態> 動態陣列名稱(陣列長度, 所有元素預設值);vector<vector<資料型態>> 動態陣列名稱
vector<vector<資料型態>> 動態陣列名稱(陣列高度m)
vector<vector<資料型態>> 動態陣列名稱(陣列高度m,
vector<資料型態>(陣列長度n))
vector<vector<資料型態>> 動態陣列名稱(陣列高度m,
vector<資料型態>(陣列長度n, 所有元素預設值))#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v, t, k;
v.push_back(1);
v.push_back(3);
cout << v[0] << ' ' << v[1] << '\n'; // 1 3
cin >> v[0]; // 2
cin >> v[1]; // 4
cout << v[0] << ' ' << v[1] << '\n'; // 2 4
vector<int> a(5, 0);
cout << a[0] << ' ' << a[3] << '\n'; // 0 0
a.pop_back();
cout << a.size() << '\n'; // 4
a.clear(); // 移除所有元素
a.empty(); // 1,回傳是否為空
t.resize(5);
cin >> t[4] >> t[3]; // 1 3
cout << t[3] << ' ' << t[4] << '\n'; // 3 1
k.assign(5, 0);
cout << k[0] << ' ' << k[2] << '\n'; // 0 0
}
if (判斷條件) {
判斷條件成立時執行的程式;
}#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x > 100) {
cout << x << "大於100" << endl;
}
}
if (條件1) {
要執行的東東1;
} else if (條件2) {
要執行的東東2;
}#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x > 100) {
cout << x << "大於100" << endl;
} else if (x > 50) {
cout << x << "大於50且小於等於100" << endl;
}
}
if (條件1) {
要執行的東東1;
} else if (條件2) {
要執行的東東2;
} else {
要執行的東東3;
}#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x > 100) {
cout << x << "大於100"
} else if (x > 50) {
cout << x << "大於50且小於等於100"
} else {
cout << x << "小於等於50";
}
}
switch(變數名稱或運算式) {
case 符合數字或字元:
陳述句1;
break;
case 符合數字或字元:
陳述句2;
break;
default 符合數字或字元:
陳述句3;
break;
}#include <iostream>
using namespace std;
int main() {
int score = 85;
switch(score/10) { //85/10=8
case 10:
cout << "Well done";
break; // 跳出去
case 9:
cout << "Almost...";
break;
default: //執行這裡
cout << "Bad Score!";
break;
}
}迴圈
在某一個條件下一直做事,直到條件為達成為
迴圈可以幫助做會一直重複的事情
通常會用來寫一個要執行特定次數的迴圈
#include <iostream>
using namespace std;
int main() {
int a[5] = {1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++) {
cout << a[i] << ' ';
}
//1 2 3 4 5
}for(初始設定; 重複執行條件; 每次結束後更新) {
要重複執行的東東;
}
通常會用來寫需要在特定條件下重複執行的迴圈
當條件為 true 時,if 只會執行一次,while 則會一直執行
#include <iostream>
using namespace std;
int main() {
int a = 1;
while(a < 6) {
cout << a << ' ';
a++;
}
//1 2 3 4 5
}while(每次執行前判斷) {
要重複執行的東東;
}for(;;){
重複執行的東東;
}while(true){
重複執行的東東;
}只要是迴圈都可以用 break
while(true) {
if(condition) {
break;
}
}只要是迴圈都可以用 break
#include <iostream>
using namespace std;
int main() {
int a = 1;
while(a < 6) {
if(a % 3 == 0) {
break;
}
cout << a << ' ';
a++;
}
//1 2
}while(true) {
if(condition) {
continue;
}
}#include <iostream>
using namespace std;
int main() {
int a = 1;
while(a < 6) {
if(a % 3 == 0) {
a++;
continue;
}
cout << a << ' ';
a++;
}
//1 2 4 5
}// 待捕