目錄

  • 甚麼是C++
    • C++
  • 如何編輯程式碼
    • 編譯器
    • 文字編輯器
    • IDE
  • Hello World
  • 資料型態 、 變數 與 陣列
  • 運算子 = + - * / % ++ += -= *= /= %
  • 輸入 cin
  • 條件判斷 if else if else
  • 迴圈for while
  • 小競賽

甚麼是C++

  • 一種程式語言 廢話
  • 編譯型語言 等等會介紹編譯器

編譯器

編譯的目的: 讓電腦能夠直接執行,有

//排版人幫我畫張圖相信您看的懂

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

編譯器是將程式碼轉成機器能夠執行的機器語言

文字編輯器

功能: 讓你編輯程式碼

優點: 使用較少電腦效能(相較IDE)

缺點: 無法一鍵編譯

常見的文字編輯器

Visual Studio code

  • 屬於microsoft
  • 簡稱Vscode
  • 開放原始碼
  • 是目前全世界最多人用的
  • 優點: 擴充功能多
  • 缺點: 安裝麻煩
  • 總之就是好用

vim

  • 優點
    • 滑鼠再見
    • 直接按件排超級快的啦
  • 缺點
    • 叫背很多按鍵
    • 還要背指令
    • 你可能會卡在vim裡出不來
    • 你還要會終端機的指令
    • 總之不適合初學者
  • 對使用習慣的人來講就是好用
  • 強烈建議先學到要寫200行以上的code在嘗試

IDE整合是開發環境

優點: 好安裝

缺點: 吃效能

常見的IDE

Visual Studio

  • 和剛剛Visual Studio Code名子很像
  • 也是microsoft的
  • 比Vscode早出現
  • 優點: IDE不需要自己安裝編譯器
  • 缺點: 電腦不夠好就會卡

Replit

  • 線上版IDE
  • 優點: 完全不需安裝、手機平板皆可使用
  • 缺點: 沒網路很慘、速度較慢、其實我覺得不好用
  • 今天要用的先去註冊

第一個程式 Hello 暑訓

#include<bits/stdc++.h> using namespace std; int main(){ cout<<"Hello 暑訓!\n"; }

第一行#include<bits/stdc++.h>

引入函式庫

bits/stdc++.h又被稱為萬用標頭檔,包含了幾乎所有你會用到的標頭檔

其他標頭檔

功能 名稱
輸入輸出 iostream
數學 cmath
時間 ctime
隨機 random
還有 更多..

第二行using namespace std;

使用命名空間(namespace)

為了標示類型、函數、變數的範圍,避免同名的類型、函數、變數相互衝突,導致程式出錯。

std 是大家會經常使用的namespace,裡面除了常見的輸入輸出以外,還有些資料類型可以使用,例如stringvector等等。

假設今天有另一個函式cinstd中的cin相互衝突,那就應該使用std::cin即可避免衝突的情況,std::cin代表使用的是std當中的cin

第三行int main(){}

在大括號{}裡,就是這個程式開始時會運行的地方

第四行cout<<"Hello 暑訓!\n";

cout<<"你要輸出的東西";

介紹一下\n

\n是換行的特殊符號

除此之外還有\t\'\"\\

好欸 你會C++了

自己寫一遍吧


變數 資料型態

這是什麼?

一段記憶體位置使我們能夠儲存特定資料並在之後進行存取

變數

暫存資料

可以把變數想像成一個紙箱,裡面裝資訊

//幫我畫個示意圖

資料型態

變數的種類,依照剛才的比喻,可以想成是箱子的大小和裝法

//幫我畫張示意圖

分類的目的是方便電腦進行記憶體的分配和進行不同的運算方式

資料型態有哪些

名稱 用途 記憶體大小
int 整數
231
~
2311
4bytes
unsigned 非負整數
0
~
2321
4bytes
long long 更大的整數
263
~
2631
8bytes
unsigned long long 更大的非負整數
0
~
2641
8bytes
float 浮點數 (可以有小數點的數字) 4bytes
double 更精確浮點數 (可以有小數點的數字) 8bytes
long double 更更精確浮點數 (可以有小數點的數字) 16bytes
bool 布林值(只有truefalse兩種情況) 1byte
char 字元 1byte
string 字串 可變

其實還有更多種,但這些是常用的

變數的宣告

資料型態 變數名稱1;

還可以這樣

資料型態 變數名稱, 另一個變數名稱, 另另一個變數名稱;

int a,b,c=10;
  • 註: 這樣只有c被宣告為10,其餘a, b皆為空的未被賦值的變數喔

變數的命名

一般來說會用有意義的變數名稱,例如我想存一個人的名字,那我的變數名稱會叫做name

變數名稱有限制

  • 只能用大小寫字母、數字、_$
  • 數字不可作為變數名稱的開頭
  • 大小寫意義不同
  • 不可使用保留字

保留字

因為保留字有特殊意涵,所以不可作為變數名稱,以免出錯,
常見的保留字可能是資料型態或是其他具有特殊意涵的字,
以下是常見的保留字清單,這東西不要背,重點在類別的部分

類別 保留字
資料型態 boot int long short signed unsigned signed char char8_t char16_t char32_t
數值 true false nullptr
宣告用 auto new static const new extern typedef
運算子 and or xor not not_eq or_eq sizeof delete bitand bitor compl operator
條件 if else switch case default
迴圈 for while do continue break goto
函式 return void inline friend
物件導向 class struct this enum namespace private public protected typeid
錯誤 catch noexcept throw try
其他我沒用過的東西 alignas alignof asm const_cast constexpr decltype dynamic_cast explicit reinterpret_cast static_assert static_cast template thread_local

陣列

就是一排可以隨機取用跟變更的變數

陣列的宣告

資料型態 陣列名稱[陣列長度];

int arr[5];

這個陣列有arr[0]arr[1]arr[2]arr[3]arr[4]共5項

請注意陣列一切從0開始(0-base),可能一開始會不習慣,久了就沒事了

陣列的存取與修改

int arr[5]={0};//全部歸0(只有在宣告時才能這樣用) cout<<arr[0]<<"\n"; //0 arr[0]=7; cout<<arr[0]<<"\n"; //7

輸入cin與輸出cout

cout

cout指的是輸出,在我們的第一個程式中有這麼一行程式碼

cout<<"Hello 暑訓!\n";

用法就是cout加上<<再加上你要輸出的東西

要輸出的東西如果是變數,那在<<後就不用加""

否則就要加

而如果要連著輸出多個東西,一樣可以用<<再接下去

int a=10;
cout<<"Hello\n";
cout<<a<<"\n";
cout<<"I am "<<a<<" years old.";

執行結果:

Hello
10
I am 10 years old.

cin

cin指的是輸入,在前面的變數部分有提到,變數是存放資訊的箱子。除了在創建變數的時候就賦值給他,還可以用cin>>來賦值給變數。

int a;//此時只有一個叫a的箱子,裡面沒有東西
cin>>a;
cout<<a;

假如我們要給a賦值為10,執行結果會像

10(你cin給電腦的)
10(電腦cout出來的)

運算子

= 賦值運算子

  • 程式語言中的=與數學中的=的意思不同
  • a=3:將3這個值賦予給a這個變數
  • 如果要使用數學中的比較是否相同,請使用==,詳情請見if else篇
int a=1,b=2,c; c=4; cout<<a<<"\n"; //1 a=b; cout<<a<<"\n"; //2 b=c; cout<<b<<"\n"; //4

+ - * / % 運算子

  • 其實就和一般加減乘除一樣
  • 記得有先乘除後加減
  • %是算餘數的意思
int a=1,b=2,c=4; a=a+b; cout<<a<<"\n"; //3 cout<<a*b<<"\n"; //6 cout<<c%a<<"\n"; //1

++ -- 運算子

  • ++: +1
  • --: -1

工程師就比較懶

int a=1; a++; cout<<a<<"\n"; //2 cout<<a++<<"\n"; //2 cout<<a<<"\n"; //3 cout<<++a<<"\n"; //4

+= -= *= /= %= 運算子

其實就只是縮寫,不是新的東西

a+=10; 等價於 a=a+10;

a*=10; 等價於 a=a*10;

int a=10; a+=10;//a==20 a-=10;//a==10 a*=10;//a==100 a/=10;//a==10 a%=10;//a==0

關係運算子 == != >= <= > <

  • 符合(1) <-> 不符合(0)
  • != 代表 (不等於)

邏輯運算子 || && !

  • ||:兩側至少其中之一為true時回傳true
  • &&:兩側皆須為true才為true時回傳true
  • !:變號 true變false false變true
int a=2, b=2, c=4;
cout<<(a==b||b==c); //1(true)
cout<<(a==b&&b==c); //0(false)
cout<<(!(a==b&&b==c)); //1(true)

其實還有xor^為兩側恰有其一為true時回傳true

if else條件判斷

功能: 用於在不同的條件下,執行不同的程式片段

if() 用法

if(條件){//條件成立(true)時執行 執行的東西1; 執行的東西2; }

偷懶的用法:

if(條件) 執行的東西;

if(條件) 執行的東西;

偷懶是有代價的,如果用的偷懶的用法,執行的東西只能有一個

else if() 用法

可以用於前面的條件不符合

if(條件1){ cout<<1<<"\n";//條件1成立時執行 }//結束這一回合 else if(條件2){//條件1不成立才會判斷 cout<<2<<"\n"; } else if(條件3){//條件2仍然不成立才會判斷 cout<<3<<"\n"; }

else 用法

在所有條件皆不符合時,作為例外狀況使用

if(條件1){ cout<<1<<"\n"; //條件1成立時執行 //結束這一回合 } else if(條件2){//條件1不成立才會判斷 cout<<2<<"\n"; } //...很多個else if過後 else {//上述所有條件皆不成立後 cout<<3<<"\n"; }

for while 迴圈

用法:重複執行相同的事情

for 迴圈

模板:

for(起始設定;每次做之前判斷;每做完一次後的更新){ 要做的事; }

範例:

for(int var=0;var<5;var++){ cout<<var<<"\n"; }

執行結果:

0
1
2
3
4

while 迴圈

模板:

while(每次做之前判斷){ 要做的事; }

範例:

int var = 0; while(var < 5){ cout << var << "/n"; var++; }

執行結果:

0
1
2
3
4

小小賽

註冊iscoj

如果沒有email請向現場助教要臨時帳號