# CH1 探索C++ ## 程式的輪廓 ``` c++= #include <iostream> int main() { std::cout << "Hello, world!" return 0; //註解 } ``` 第1行並不算是`C++`的程式,但是往往`C++`程式都少不了它,這一行是包含(或導入)一個標項庫文件,名為iostream。iostream是一個`C++`標準庫,它提供了`C++`與輸入/輸出設備。 第3行才是真正的程式,`int main()`是一個函式,我們寫的程式都需要他,因為這是程式的起點。 3至6行大括號{}包着的地方,稱為main的本體(body)用作放入main函式的內容 第4行使用了`C++`的輸出運算子`<<`來輸出一段文字。std::cout是一種稱為“字符輸出流”的物件,常常用來將資訊輸出到終端機。在這個例子中,我們用`<<`運算子將"Hello, world!"這個字串輸出到std::cout,即終端機。**每個`C++`語句的結尾需要用分號`;`來標記。** 第6行。在main()函數的最後,我們通常會加入return 0,這代表當main()函數運行完成後,它將向操作系統回傳一個"0",代表程式成功無誤地執行完成。 在第6行後的`//`是程式的**註解**(comment),用作寫給自己或別人閱讀的說明文字,編譯器遇到註解的時候會自動跳過。 ## 輸出和輸入 在`C++`程式中,我們通常使用兩個主要的串流物件來處理輸出和輸入:std::cout和std::cin。"cout"代表"character output",用於輸出文字和數據,而"cin"代表"character input",用於讀取使用者的輸入。 ### std::cout std::cout是我們最常用的輸出工具。透過使用"插入運算子"(<<),我們可以將多種類型的資料輸出到終端機。以下是一個範例: ```c++= #include <iostream> int main() { int age = 20; std::cout << "Hello, world!\n"; std::cout << "I am " << age << " years old.\n"; return 0; } ``` 輸出 ``` Hello, world! I am 20 years old. ``` 第3行程式碼定義了主函數main。在一個C++程式中,main函數是程式執行的起始點。 第4行程式碼在main函數中定義了一個名為age的變數,並給它賦值為20。 第5行程式碼用std::cout輸出了一個字串"Hello, world!"到終端機,\n會使輸出換到下一行。 第6行程式碼先輸出字串"I am ",然後輸出變數age的值(20),然後輸出字串" years old."。輸出結果將為"I am 20 years old."。 第7行程式碼表示main函數的結束,並且回傳值為0,表示程式執行成功。 ### std::cin std::cin用於從鍵盤讀取使用者的輸入。我們使用"提取運算子"(>>)將輸入的資料儲存到變數中。以下是一個範例: ```c++= #include <iostream> int main() { int age; //宣告一個整數變數age std::cout << "Enter your age: "; std::cin >> age; //鍵盤輸入數字 std::cout << "You are " << age << " years old.\n"; return 0; } ``` 輸出 ``` Enter your age: 25 You are 25 years old. ``` 第4行程式碼定義了一個整數變數age,但並未給它賦初值。 第5行程式碼輸出一個提示信息"Enter your age: ",要求使用者輸入他們的年齡。 第6行程式碼讀取使用者的輸入並存入變數age中。 第7行程式碼輸出"You are ",然後輸出變數age的值(使用者輸入的年齡),然後輸出" years old."。 ### 名稱空間(Namespace) 名稱空間是用來封裝一系列的識別符(如變數名、函式名等)的一種機制,以防止名稱衝突。當我們在使用`std::cout`和`std::cin`時,`std::`前綴指出了我們正在使用"std"名稱空間中的cout和cin。 為了方便,我們可以使用`using namespace std;`來避免在每次引用std名稱空間中的名稱時都需要添加`std::`,例如在`cout`和`cin`前省略`std::`。以下是一個範例: ```c++= #include <iostream> using namespace std; int main() { int age = 20; cout << "Hello, world!\n"; cout << "I am " << age << " years old.\n"; return 0; } ``` 這個程式的輸出將與先前的程式完全相同。不過,為了避免可能的名稱衝突,一般建議只在需要的地方使用using namespace std;,特別是在大型的專案中。 ## 練習 1. 請你印出以下圖形 ``` * ** *** **** ***** ``` 2. 修改上面的 "Hello, World!" 程式,使其可以問用戶他們的名字,然後打印出 "Hello, [Name]!"。其中 [Name] 是用戶輸入的名字。提示:請用string宣告變數,加入```#include <string>```,```string name``` | input 1 | input 2 | | -------- | ------- | | Tom | Mary | | output 1 | output 2 | | ----------- | ------------ | | Hello, Tom! | Hello, Mary! | 3. 請修改以下的錯誤程式 ```c++= #include <iostream> using namespace std; int main(){ cout<<"Apple"<<endl return 0 } ``` 4. C++程式中,哪種符號用於標記語句的結束? * A. `:` * B. `;` * C. `,` * D. `.` 5. 在iostram中定義的endl作用是什麼? * A. 結束程式 * B. 空一格 * C. 換行 * D. 註解 ## 解答 **1** ``` #include <iostream> using namespace std; int main() { cout << "*" << endl; cout << "**" << endl; cout << "***" << endl; cout << "****" << endl; cout << "*****" << endl; return 0; } ``` **2** ```c++= #include <iostream> #include <string> using namespace std; int main() { string name; cout << "Please enter your name: "; cin >> name; cout << "Hello, " << name << "!\n"; return 0; } ``` **3** ```c++= #include <iostream> using namespace std; int main() { cout << "Apple" << endl; return 0; } ``` **4** B **5** C