第一個 C++ 程式:Hello, World!

1
2
3
4
5
6
7
#include <iostream>  // 引入標準輸入輸出函式庫
using namespace std;

int main() {
cout << "Hello, World!" << endl; // 輸出文字
return 0; // 結束 main 函式,回傳 0 表示成功執行
}

在這個程式中,會在螢幕印出 Hello, World! 並換行,接下來就開始解釋這程式的每一個代碼的功用。


引入函式庫

的意思就是引入函示庫,`<>` 裡面塞的就是想引入的函示庫。
1
2
3
4
5
6
7
8
9

> [!NOTE]
>
> 函式庫大概的意思是一組已經寫好且經過測試的程式碼集合,裡面包含許多可以直接使用的函數、其他工具等。

舉例來說

```c++
#include <iostream>

就是引入 iostream 這個函式庫,而 iostream 就是一個輸入 (cin) 和輸出 (cout) 的函式庫。

補充 萬用標頭檔

在競技程式中,可以使用 bits/stdc++.h,他可以為我們節省引入其他的時間。

命名空間

C++ 標準函式庫(Standard Library)包含許多功能,例如剛剛講的 iostream,定義在 std 命名空間(namespace) 內。

如果不加上 using namespace std;,則必須這樣寫 :

1
2
3
4
5
6
#include <iostream>

int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}

主函式

主函式(main())是 C++ 程式的進入點,所有 C++ 程式執行時都會從 main() 開始執行。沒有 main(),C++ 程式無法運行。

然後裡面要寫的內容就放在 { } 裡。

[!NOTE]

提醒每段code後面都要記得加 ; 喔!

然後 return 0 代表這個函式結束。


輸出

在剛剛的演示程式中,我們使用了 cout << "Hello, World!" << endl; 來把我們要的文字輸出出來。所以現在我們就來細講C++中的輸出。

1
cout << "Hello, World!" << endl;
  • cout:標準輸出。
  • <<:輸出運算子,把內容傳送到 cout

  • "Hello, World!":要顯示的字串。

  • std::endl:換行(等同於 '\n')。

  • ;:結尾要加分號。

你也可以串很多串

1
cout << 1 << ' ' << 2 << ' ' << 3 << ' ' << 4 << endl;

補充 位運算

<< 其實可以使位元左移,意思是說把二進制左移。

然後這跟輸出那邊別搞混了,這兩者在不同情境下有不同的意義!

1
2
cout << (5 << 1) << endl;  // 结果:5(101) → 10 (1010)
cout << (5 << 2) << endl; // 结果:5(101) → 20 (10100)

結論 : 把二進制數左移 $n$ 位,相當於乘以 $2^n$。


接下來介紹變數與運算。

變數

你可以把它當作儲存資料的容器。

常見的說法是 : 把變數當成一個箱子,我們可以把東西丟進去。

資料型別

資料型別可以告訴你箱子裡存的是啥種類的東西。像是丟進去的東西可以是食物、玩具等。

常見的資料型別如下

整數型別

  • int:最常用的整數型別。範圍 : $[-2^{31} , 2^{31} – 1]$
  • long long:較大的整數。範圍 : $[-2^{63} , 2^{63} – 1]$

浮點數型別

  • float:單精度浮點數。
  • double:雙精度浮點數,精度較高。

[!NOTE]

精度 指的是數值型別能夠表示的 有效位數,特別是在浮點數運算時,會影響計算的準確性。

字元型別

  • char:單一字元,通常用於儲存字母或符號。 ex : ‘a’

布林型別

  • bool:只有 true(1)和 false(0)兩個值。

還有很多,像是 string,但以第一次接觸來說先知道這些就行了。

宣告

好了,現在來說該怎麼把東西放到箱子裡了。

1
int a = 10;

這樣就好了。

語法就是 資料型別 變數名稱 = 要存的內容;

可以把那段程式碼看成 : 有一個箱子 a,他要存的是食物 (int),然後我把牛肉 (10) 放進去。

[!CAUTION]

記住變數不能以數字開頭,以及不能和 C++ 的保留字相同。

運算

算術運算子

用來進行數學運算,例如加、減、乘、除等。

運算子 說明 範例
+ 加法 a + b
- 減法 a - b
* 乘法 a * b
/ 除法 a / b (無條件捨去小數)
% 取餘數 a % b(僅限整數運算)
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;

int main() {
int a = 10, b = 3;
cout << "加法 : " << (a + b) << endl;
cout << "減法 : " << (a - b) << endl;
cout << "乘法 : " << (a * b) << endl;
cout << "除法 : " << (a / b) << endl;
cout << "取餘數 : " << (a % b) << endl;
return 0;
}
1
2
3
4
5
加法 : 13
減法 : 7
乘法 : 30
除法 : 3
取餘數 : 1

賦值運算子

用來將數值指定給變數。

運算子 說明 範例
= 指定 a = 10
+= 加後賦值 a += 5a = a + 5
-= 減後賦值 a -= 2a = a - 2
*= 乘後賦值 a *= 3a = a * 3
/= 除後賦值 a /= 2a = a / 2
%= 餘數後賦值 a %= 3a = a % 3
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;

int main() {
int a = 10;
a += 5; // 等同於 a = a + 5;
cout << "a 的值: " << a << endl; // 輸出 15
return 0;
}

遞增與遞減運算子

用來對變數進行 +1-1 的操作,有前置與後置之分。

運算子 說明 範例
++a 前置遞增(先加再使用) int a = 5; int b = ++a; // a=6, b=6
a++ 後置遞增(先使用再加) int a = 5; int b = a++; // a=6, b=5
--a 前置遞減(先減再使用) int a = 5; int b = --a; // a=4, b=4
a-- 後置遞減(先使用再減) int a = 5; int b = a--; // a=4, b=5
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;

int main() {
int a = 5, b;
b = ++a; // 先加 1,再賦值給 b
cout << "a: " << a << ", b: " << b << endl; // a=6, b=6

a = 5;
b = a++; // 先賦值給 b,再加 1
cout << "a: " << a << ", b: " << b << endl; // a=6, b=5
return 0;
}

這裡前置後置搞不明白的可以先跳過沒關係。

比較運算子 (等後面學到條件式再來看這裡)

用來比較兩個值,結果為 true(1)或 false(0)。

運算子 說明 範例
== 是否相等 a == b
!= 是否不等 a != b
> 是否大於 a > b
< 是否小於 a < b
>= 是否大於等於 a >= b
<= 是否小於等於 a <= b

邏輯運算子 (等後面學到條件式再來看這裡)

運算子 說明 範例
&& AND(且),兩者皆為 true 才為 true (a > 0) && (b > 0)
|| OR(或),一者為 true 就為 true (a > 0) || (b > 0)
! NOT(非),取反 !(a > 0)

位元運算子

痾….這對新手不太友善,有興趣的自己看看。


輸入

有了變數的概念後,我們就可以來看輸入了。

1
2
int a;
cin >> a;
  • int a:宣告一個整數變數 a

  • cin:標準輸入流,負責從鍵盤讀取使用者的輸入。

  • >>:輸入運算子,將從 cin 讀取的數據傳送到右側的變數中。

  • a:存放從輸入中讀取到的數值。

  • ;:每個語句結尾必須加上分號。

一樣可以串很多串。

1
2
int a, b, c;
cin >> a >> b >> c;

補充 位運算

>> 一樣可以進行位運算,意思是說把二進制右移。

然後這跟輸入那邊別搞混了,這兩者在不同情境下有不同的意義!

1
2
cout << (20 >> 1) << endl;  // 结果:20(10100) → 10 (1010)
cout << (20 >> 2) << endl; // 结果:20(10100) → 5 (101)

結論 : 把二進制數右移 $n$ 位,相當於除以 $2^n$。


其他補充

關於輸入輸出的補充

在 C++ 中,我們有兩套主要的輸入輸出方式:

  • C++ 風格:使用 cincout
  • C 風格:使用 scanfprintf

scanf/printf 通常來說速度會比預設的 cin/cout 快一些,尤其在大量 I/O 操作時更明顯。

所以我們可以透過以下設定來提升效能 :

1
2
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);

不過以現階段來講其實沒差就是了。

輸出格式化

有些題目可能要求輸出小數點後幾位,這時可以利用一些功能完成他。

1
2
3
4
#include <iomanip> // 要加他
...
double a = 1.2345678;
cout << fixed << setprecision(2) << a; // 1.23

可以看到 setprecision 會指定總有效數字的位數,() 裡塡 2 就會保留小數點後 2 位數。