# QwQ:從C++開始的APCS之旅 {%hackmd theme-dark %} ## 開發環境(IDE)與參考教材 + [Code::Blocks](https://www.codeblocks.org/) + [下載CodeBlocks Windows安裝包](https://www.codeblocks.org/downloads/binaries/#imagesoswindows48pnglogo-microsoft-windows) :::warning **記得要選檔名中有mingw-setup.exe**的下載,才能正常編譯與執行C++ ::: + [W3schools C++ Tutorial](https://www.w3schools.com/cpp/default.asp) ## 開啟新c++(cpp)程式碼檔案與基本輸出語法 ![](https://i.imgur.com/XY43iaR.png) ### 先按`Ctrl` + `S`存檔後再開始寫code ![](https://i.imgur.com/k5FempQ.png) #### 記得存檔檔名要.cpp結尾 ```cpp= #include <iostream> using namespace std; int main() { cout << "Hello World!"; return 0; } ``` ### 按`F9`建置(編譯)並執行 ![](https://i.imgur.com/aBXGvwH.png) ### 程式碼中的註解 ```cpp= #include <iostream> using namespace std; // 我是單行註解 int main() { return 0; } /* *1 2 3 我們是多行註解 */ ``` ### C++字串中的特殊符號 ```cpp= #include <iostream> using namespace std; int main() { cout << "Line 1\n"; // 反斜線n 為換行符號 cout << "Line 2" << endl;// 或是你也可以用<<endl換行 cout << "我們之間\t相隔1個TAB符號" << endl; cout << "\"你好\"我有雙引號" << endl; return 0; } ``` ## 變數(Variables) ### 宣告不同型態的變數 ```cpp= #include <iostream> using namespace std; int main() { int pig = 1; // [變數型態] [變數名稱] = [指派的值]; // 每一行的分號;很重要代表這行程式碼的結尾 double a = 6.68; char b = 'b'; string h = "Hello World"; bool t = true; // true = 1, false = 0 cout << pig << "\t" << a << "\t" << b << endl; cout << h << "\t" << t << endl; return 0; } ``` ### 在同一行內宣告多個變數 ```cpp= #include <iostream> using namespace std; int main() { int x = 5, y = 6, z = 50; cout << x + y + z << endl; double x1 = 5.3, y1 = 6.9, z1 = 3.14; cout << x1 * y1 / z1; return 0; } ``` ### 更改變數值與宣告常數(不可變) ```cpp= #include <iostream> using namespace std; int main() { int a = 1; const float PI = 3.141592; // 加上const代表常數,不可更改值 a = a + 6; //執行完上行後a的值為7 cout << a << "\nPI:" << PI; return 0; } ``` ## 基本輸入與輸出(cin與cout) ```cpp= #include <iostream> using namespace std; int main() { int x; cout << "請輸入整數(輸入完後按ENTER):"; cin >> x; // 把使用者輸入的值存到指定的變數裡 cout << "你輸入的數字為:" << x; int a,b; cin >> a >> b; // 也可以輸入多個數值(在題目中通常以空白隔開不同的輸入) return 0; } ``` > REF: https://www.w3schools.com/cpp/cpp_user_input.asp ## 基本資料型態(Data Types) ![](https://i.imgur.com/8YMNh7K.png) ```cpp= int myNum = 5; // Integer (whole number) float myFloatNum = 5.99; // Floating point number double myDoubleNum = 9.98; // Floating point number char myLetter = 'D'; // Character bool myBoolean = true; // Boolean string myText = "Hello"; // String ``` > REF: https://www.w3schools.com/cpp/cpp_data_types.asp > 可以點進去看每個資料型態的詳細說明 ## 運算子(Operator) ### 基礎運算子(四則運算) > REF: https://www.w3schools.com/cpp/cpp_operators.asp ```cpp= #include <iostream> using namespace std; int main() { double a=3,b=2,c=6,d=9; cout << a/2 + b*c - d << endl; cout << (a + b) * c<< endl; return 0; } ``` ### 取餘數運算子(%) ```cpp= #include <iostream> using namespace std; int main() { int a=187,b=69,c=6; c = a % b; // %代表取餘數,只能用在整數運算(int) // %讀音是mod cout << c << endl; return 0; } ``` ### ++與+=運算子 ![](https://i.imgur.com/8Sy5vnG.jpg) ```cpp= #include <iostream> using namespace std; int main() { int pig = 6; pig++;// 這行等同下面被註解的那行 // pig = pig + 1; pig+=2;//也可以加任何數 cout << pig << endl; return 0; } ``` ### - -與-=運算子 :::info **加加 的妹妹叫 減減** :laughing: ::: ```cpp= #include <iostream> using namespace std; int main() { int pig = 88; pig--;// 這行等同下面被註解的那行 // pig = pig - 1; pig-=2;//也可以減去任何數 cout << pig << endl; return 0; } ``` ### 指派運算子(Assignment Operators) > REF: https://www.w3schools.com/cpp/cpp_operators_assignment.asp > ![](https://i.imgur.com/xQ3Izc9.png) ### 比較運算子(Comparison Operators) > REF: https://www.w3schools.com/cpp/cpp_operators_comparison.asp > ![](https://i.imgur.com/2ZpB2a6.png) ```cpp= int x = 5; int y = 3; cout << (x > y); // 回傳結果為 1 (true) 因為 5 大於 3 ``` ### 邏輯運算子(Logical Operators) > REF: https://www.w3schools.com/cpp/cpp_operators_logical.asp > ![](https://i.imgur.com/EYnK1OM.png) #### 邏輯運算子常用於 if / if else 的判斷式 ## 20230128練習題 ### 課堂練習 + [ZERO JUDGE-a001. 哈囉](#a001-哈囉) + [ZERO JUDGE-a002. 簡易加法](#a002-簡易加法) ### 下次上課複習題 + [輸入兩整數輸出完整算術結果與餘數](#EX1-輸入兩整數輸出完整算術結果與餘數) + [輸入三小數輸出相減結果](#EX2-輸入三小數輸出相減結果) --- ## if、else if、else條件判斷(Conditions and If Statements) > REF: https://www.w3schools.com/cpp/cpp_conditions.asp ### 在開始之前先[複習上次的內容](20230128練習題) ## 零壹是否布林值(Boolean) ### 認識布林值(Boolean Value) > REF: https://www.w3schools.com/cpp/cpp_booleans.asp ### 布林表達式(Boolean Expressions)與應用範例 > REF: https://www.w3schools.com/cpp/cpp_booleans_expressions.asp ## 常用數學函式(C++ Math) > REF: https://www.w3schools.com/cpp/cpp_math.asp ### 記得要先引入cmath函式庫 ```cpp= #include <cmath> ``` ## C++字串(Strings)與他們的函式 ### 引入字串函式庫與宣告字串 ```cpp= #include <string> // 還是要記得加上面那行避免舊版IDE無法識別string資料型態 string greeting = "Hello"; ``` ### 字串連接函式(Concatenation) > REF: https://www.w3schools.com/cpp/cpp_strings_concat.asp ### 注意字串與數字的加法 > REF: https://www.w3schools.com/cpp/cpp_strings_numbers.asp ### 字串長度(Length)與存取特定字串中的特定字元 > REF1: https://www.w3schools.com/cpp/cpp_strings_length.asp > REF2: https://www.w3schools.com/cpp/cpp_strings_access.asp #### 陣列的概念後面詳細介紹,這裡先簡易帶過 ### 特殊字元(Special Characters) > REF: https://www.w3schools.com/cpp/cpp_strings_esc.asp ### 讀取使用者的整行輸入為字串(getline函式) > REF: https://www.w3schools.com/cpp/cpp_strings_input.asp ## 函式命名空間(Namespace) ### Namespace References + https://www.w3schools.com/cpp/cpp_strings_namespace.asp + https://openhome.cc/Gossip/CppGossip/Namespace.html + https://www.runoob.com/cplusplus/cpp-namespaces.html ### 假設Steve與Alex都寫了名為greeting function的程式碼 ```cpp= #include <iostream> #include <string> namespace alex { void greeting(){ std::cout << "Hello! I am Alex." << std::endl; } } namespace steve { using namespace std; void greeting(){ cout << "Hi~ I am Steve." << endl; } } int main(){ // 讓Steve與Alex互相打招呼 steve::greeting(); alex::greeting(); return 0; } ``` --- ## 再下周的授課內容籌畫中(Switch與Loops) --- ## LuckyPig自己出的練習題 ### EX1-輸入兩整數輸出完整算術結果與餘數 #### 範例輸入 #### 範例輸出 #### 範例解答(請自行練習完後再參閱) ```cpp= #include <iostream> owo; ``` ### EX2-輸入三小數輸出相減結果 #### 範例輸入 #### 範例輸出 #### 範例解答(請自行練習完後再參閱) ```cpp= #include <iostream> owo; ``` --- ## 高中生程式解題系統 + https://zerojudge.tw/Problems :::info **都答對的話會出現如下圖式(AC)** ![](https://i.imgur.com/fr7BMb6.png) ::: ### a001. 哈囉 + https://zerojudge.tw/ShowProblem?problemid=a001 ```cpp= #include <iostream> using namespace std; int main() { string input; cin >> input; cout << "hello, " << input << endl; return 0; } ``` ### a002. 簡易加法 + https://zerojudge.tw/ShowProblem?problemid=a002 ```cpp= #include <iostream> using namespace std; int main() { int a,b; cin >> a >> b; cout << a+b << endl; return 0; } ```