語法書 / AA 競程語法書 上冊 / 第一單元 / 第一支程式:Hello World

1.1 第一支程式:Hello World

我們先從最簡單的程式開始:印出一行「Hello World」。它幾乎是每個人寫的第一支程式,麻雀雖小卻五臟俱全——透過它,你會認識每支 C++ 程式都長一樣的最小結構

#include <iostream>
using namespace std;

int main() {
    cout << "Hello World" << endl;
    return 0;
}

執行結果:

Hello World

先別急著看懂每一行——先動手讓它跑起來! 親手看到「Hello World」蹦出來,後面再回頭讀解說會更有感覺:

  1. 打開線上編輯器(AA 競程的學生用 AACPOJ 內建編輯器,其他人用 OnlineGDB;第一次用、不熟操作的話,先看 附錄 H:OnlineGDB 圖解教學
  2. 把上面的 Hello World 程式碼整段貼進去
  3. (用 OnlineGDB 的話)右上角的 Language 記得選 C++17(AA 競程預設都用這個版本)
  4. Run(執行)
  5. 看看下方是不是印出 Hello World

跑出來了嗎?恭喜你執行了人生第一支 C++ 程式!接下來我們就一行一行來看,它各自在做什麼。

這短短幾行裡,只有 cout 那行是「真正做事」的,其他都是幾乎每支 C++ 程式都長一樣的標準框架

#include <iostream>

  • 它在做什麼#include <某某> 就是「把一個叫 某某標頭檔(header file)拿進來用」——標頭檔是 C++ 預先準備好、裝著各種現成功能的檔案。這裡拿進來的 iostream(input/output stream,輸入/輸出)裡面,就有等一下要用的 cin(讀入)和 cout(印出)。
  • 什麼時候要寫:只要程式會用到 cincout,開頭就一定要有這一行。
  • 小知識:C++ 把很多現成功能分門別類放在不同的標頭檔裡,要用哪一類就 #include 哪一個。例如以後要用 maxmin 找最大/最小值時,會用到 #include <algorithm>。現在先記得「要用 cincout 就寫 #include <iostream>」即可。

using namespace std;

  • 它在做什麼coutcinendl 這些名字,完整寫法前面其實都要加 std::(也就是 std::coutstd::cinstd::endl)。開頭寫了 using namespace std;,之後就可以省略 std::,直接寫 coutcinendl
  • 現在怎麼辦:照著抄就好,細節之後再了解。

不寫的話有多麻煩? 上面範例的第 5 行,本來可以簡單寫成:

cout << "Hello World" << endl;

但少了 using namespace std;,就得把每個名字前面都補上 std::

std::cout << "Hello World" << std::endl;

一支程式裡常常有好多行 coutcin,每一個都要加 std:: 會很囉嗦。所以我們習慣在開頭寫一次 using namespace std;,後面就都省事了。

int main()

  • 它在做什麼main 是程式的起點——電腦執行你的程式時,就是從 main 裡的第一行開始做。
  • 它是一個「函式」main 其實是一個函式(function)。現在你只要先認得一個外型——一個名稱後面接著一對小括號 (),就代表一個函式(像這裡的 main(),之後會用到的 max()swap() 也是)。函式究竟是什麼、怎麼自己寫一個,留到第七單元再詳細介紹;這裡先知道「main() 是程式開始執行的那個函式」就夠了。
  • 規則
    • 每個 C++ 程式都必須有一個 main
    • 你想讓電腦做的事,都寫在它的大括號 { } 之間
    • 做完後用 return 0; 收尾(下面說明)

cout << "Hello World" << endl;

  • 把文字印到螢幕上,endl 表示換行。這是整支程式裡唯一「真正做事」的一行。

return 0;

  • 它在做什麼:放在 main 的最後,告訴電腦「程式正常結束了」。0 代表「一切正常」,其他非 0 的數字(像 return 1;)都代表「出了問題」
  • 可以省略:在 main 裡,就算不寫 return 0;,電腦也會自動幫你補上、當作正常結束。所以這一行寫或不寫都可以,競程裡很多人會直接省略它。

換你了——動手 AC 練習! 你已經會用 cout 印東西了,下面〈相關練習〉的題目,都只要印出一段指定的文字就能通過:訣竅是把上面 Hello World 的 "Hello World",換成題目要你輸出的內容,其他框架(#includemain…)完全不用動。去體驗一下「寫完 → 提交(Submit)→ 看到 AC(通過)」的感覺吧!(還不知道怎麼把程式碼交到評測系統?下一節〈1.2 第一次提交線上評測系統〉就會手把手教你提交。