Advanced Search
Search Results
25 total results found
1.1 安裝 Code::Blocks
下載 至 https://www.codeblocks.org/ ,依序點選 [Downloads] →[Download the binary release]。 下載 [codeblocks-16.01mingw-setup.exe] (16.01 是版本,請找當時最新版的) 安裝 基本上都接受預設值,按 [Next] →[I Agree] →[Next]→[Install] 即可。 等待安裝結束。 選 [是] 啟動 Code::Blocks。 把安裝程式結束 [Next]→[Finish]。 ...
1.2 可在線上撰寫程式的 OnlineGDB
如果你只是在練解題,只會寫些小程式,OnlineGDB 是一個不錯的選擇,你不用安裝開發環境,只要連上 OnlineGDB 網站,就可以直接使用。 按下上面綠色的 [Run],執行結果就會顯示在下面。 當手邊沒有電腦,只有手機和平板時,這種線上開發平台就很方便。
2.1 輸出
使用 cout 輸出資料 在 Code::Blocks 裡建立一個專案後,它會自動產生這樣一個程式架構。 #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; return 0; } main function 其中的 main() 稱為主函數(main function),它是程式的起點。程式在啟動後,會由 main 裡的第一行開始依序執行下去。 return 0; 表示帶著...
2.2 變數與輸入
像 1, 24, 3.14 這樣的數,我們稱為 字面常數(literal constant),它的值是固定不變的。 另外像我們在數學代數中用到的 x, y, z 等,則稱為 變數 ,它的值可以改變。 在電腦程式中,變數是很重要的。它可以用來儲存輸入的資料,計算中的數值,表示某個狀態等。 使用 cin 輸入資料 下面這段程式在執行之後,會先詢問你的年齡,在你輸入年齡並按下 [Enter] 後,輸出 "You are xx years old."。這個 xx 會是你輸入的值。 int age; cout << "Ho...
3.1 if ... else ...
每一行程式碼都會執行到? 我們寫的每一行程式碼都有用嗎?當然有用。那每一行都會被執行嗎?這要看情況。 之前我們寫的程式,會從 main() 函數的第一行開始一行一行依序執行下去,直到程式結束。但在真實世界運作的程式是要有彈性的,例如:指紋鎖必須要在使用者指紋與內部設定吻合時,才會開鎖,否則什麼都不做。也就是這樣一個結構: 接下來我們我們以「計算絕對值」為例,來看看這種結構。 if 敘述 練習:絕對值 讀入使用者輸入的整數 $a$,計算並輸出其絕對值 $|a|$。 絕對值表示數線上原點到該數值的距離,所以若 $a\...
3.3 複合條件判斷式
搭配使用邏輯運算子 底下是一個典型的帳密驗證程式片斷。 string id, password; cin >> id; cin >> password; if(id=="admin") { if(password=="123456") { cout << "登入成功" << endl; } else { cout << "登入失敗" << endl; } } else { cout << "登入失敗" << endl; } ...
2.3 運算子與運算優先順序
在掌握了基本輸入、輸出之後,我們已經具備「將資料讀進電腦」,「將處理後資料送回外界」的能力,接下來重點就是中間的「處理」,也就是運算的部分。 首先我們要認識兩個名詞: 運算元(operands) 運算子(operator) 以 2+3 為例,2 和 3 都是運算元,+ 是運算子。 我們可以把運算子想成是「運算符號」,運算元則是「運算的對象」。 指定(assign)運算子 在 C++ 中,= 不是 等於(equal) 而是 指定(assign) a = 3 是「把 3 指定 給 a 這個變數」,而非表示「...
3.4 switch ... case
另一種「多分支」選擇結構 當你遇到像這樣的多分支選擇結構時,可以用 if...else if...else來解決。 例如:一個像這樣的選單功能 #include <iostream> using namespace std; int main() { cout << "(1) 提款" << endl; cout << "(2) 存款" << endl; cout << "(3) 查詢帳上餘額" << endl; cout << "(0) 結束" << endl; cou...
3.2 關於 if 敘述大括號的使用
內容只有一行時可以省略大括號 if...else if...else 的大括號內如果只有一行時,可以省略大括號。 所以前面範例練習的內容可以寫成這樣。 練習:絕對值 #include <iostream> using namespace std; int main() { int a; cin >> a; if(a<0) a = -1*a; cout << "|a|=" << a << endl; return 0; } ...
4.1 while 迴圈
程式執行流程結構 目前為止我們學過了兩種程式執行的流程結構,(1)循序結構;(2)選擇結構。 接下來我們要學的是 重覆結構,也就是可以重覆執行一段程式。 while 練習:輸出一行,共 5 個 '*' 這個很簡單,只要一行 cout 就能搞定。 cout << "*****" << endl; 那如果是這題呢? 練習:輸出一行,共 375 個 '*' 我們不太可能傻傻的在字串裡一邊打字一邊數 375 個吧?我們想要的是重覆 cout << '*'; 375 次。而且要簡單明瞭,不是複製後貼上 375 次。 在這...
4.2 do...while 迴圈
猜數字遊戲 有時候事情要先做了,看狀況才知道要不要繼續下去。例如我們小時候玩的猜數字遊戲,A 心裡選定一個 1~100 之間的整數由 B 來猜,每次 B 猜了之後,A 就要回應他 (1)再大一點;(2)再小一點;(3)答對了。直到 B 猜中那個數字為止。目標是在最少的猜測次數中,命中正確答案。 把它寫成程式,大致如下。主要問題在於,B 要先猜一個數字,你才知道他猜的對不對,要不要繼續讓他猜下去。我們按下面程式這樣設計,while 迴圈的第一次條件判斷會遇到問題 - 「yourguess 的值還沒確定」,因為 B ...
4.4 for 迴圈
while 和 do...while 迴圈很適合用在「你知道什麼條件下迴圈要繼讀或停止」,因為決定是否再繞一圈的就是一個條件判斷式。 但是在你很清楚一共要繞幾圈的情況下,使用接下來介紹的 for 迴圈,會輕鬆很多。 for 迴圈 使用 while 迴圈來繞指定圈數,我們多採用這樣的架構,其中變數 i 擔任計數器,我們會: 指定計數器的初始值 每圈檢查計數器的值是否仍符合條件 每圈遞增計數器的值 for 迴圈可以一次搞定這三者。 for 的基本語法 以輸出 1~10 為例,程式看起來比較簡潔,而且還是很清晰。...
4.5 巢狀迴圈
多層迴圈 如同 if ... else 可以有多層結構,迴圈也可以有多層結構。多層迴圈是什麼樣子呢?我們以時鐘的時針、分針為例來說明。 分針和時針各是一個迴圈,分針 0~59,時針 0~11。 分針會由 0 分 轉到 59 分,接下來轉到 60 分時,時針會前進一格,分針則歸零重新開始新的一圈。 for(int hour=0; hour<12; hour++) // 外圈是時針 { for(int minute=0; minute<60; minute++) // 內圈是分針 { ...
4.3 遞增、遞減與複合指定運算子
遞增與遞減運算子 我們很常在迴圈裡用到 i = i+1 這樣的遞增敘述。 int i=1; while(i<=10) ( cout << i << " "; i = i+1; // 遞增 1 } cout << endl; 1 2 3 4 5 6 7 8 9 10 這種情況可以使用 遞增(increment)運算子 ++ 來處理。 int i=1; while(i<10) ( cout << i << " "; i++; // 遞增 1 } cout << endl; ...
5.1 一維陣列
陣列(Array)的結構 陣列這種資料結構是用來儲存許多相同型別的資料用的。如果我們把變數想像成是一個可以放東西的箱子,那麼陣列就是一堆箱子的集合,而且每個箱子都有一個連續編號的索引值(index)。 例如:我們要儲存 10 個學生的成績(都是整數),我們可以使用這樣一個內含 10 個元素(element)/項目(item)的陣列。 宣告陣列 在程式中我們可以這樣宣告這個陣列 score。 int score[10]; 其語法為 型別 陣列名稱[元素數量]; 其中陣列名稱的命名規則與一般變數的命名規則相...
5.2 字串
字串是字元的陣列 字串可以被視為一個字元型別的一維陣列,例如:"Hello world!"在記憶體中是這樣一個一個字元儲存的。 #include <iostream> using namespace std; int main() { char greeting[13] = "Hello world!"; cout << greeting; return 0; } 在上圖中最後一個字元 '\0'是什麼呢?這個是所謂的 null字元。 因為每個字串的長度是不一定的,cou...
5.3 多維陣列
二維陣列 把索引值擴展為 2 維,我們就可以得到二維陣列。 一個大小為 m x n 的二維陣列,可以這樣宣告。 // 宣告一個 4 x 6 的 int 二維陣列 int A[4][6]; 和一維陣列一樣,可以在宣告時給定初值。 int A[4][6] = { {1, 2, 3, 4, 5, 6}, {5, 12, 7, 11, 9, 8}, {10, 21, 13, 22, 23, 16}, {4, 78, 13, 45, 51, 11} }; 搭配雙層迴圈遍歷其值 我們可以使用雙層迴圈,把前...
6-1 函數
隨著寫程式經驗愈來愈多,你會發現有些程式碼會不斷重複出現,就像例行性工作一樣,例如:求平方根、將資料排序、驗證帳號密碼......等等。一次又一次的輸入這些程式碼會讓人很不耐煩。對於這些經常出現的程式碼片段,我們可以使用函數來把它們包裝起來。C/C++裡面的函數就像數學裡面的函數,例如: $f(x)=2x^2+3x+4$ 它有一個輸入:x,有一個輸出:f(x)。你給它一個輸入 3,它在運算後會給你一個輸出31;你給它另一個輸入 2,它會給你另一個相應的輸出18。不管你給的輸入是什麼,它都會很忠實的去完成該做的事 $...
6-2 重覆使用函數
相同名稱的函數 原則上函數的名稱不能重覆,但是只要其參數列不同,就可以使用相同的名稱。 以下面的程式為例,我們可以觀察到叫用函數時,編譯器會檢查函數名稱和參數列數量和型別。 #include <iostream> using namespace std; // 回傳 2 整數中的最小值 int MIN(int a, int b) { cout << "回傳 2 整數中的最小值" << endl; if(a<=b) return a; else return...
6-3 傳值呼叫 與 傳參考呼叫
參數與引數 在提到函數與呼叫使用函數時,我們會用到 參數(parameter) 和 引數(argument) 這兩個名詞。 我們可以簡單的用這張圖來區分他們。 參數(parameter) 是在定義函數時,用來承接傳入資料的變數。 引數(argument) 是在呼叫使用函數時,傳入的資料。 然而在大多數的情況下,大家並不會區分的那麼清楚,很多時候我們都會用 參數 來意指兩者。在後續的內容裡除非特別需要指出其不同,否則我們會使用 參數 這個詞。 傳值呼叫(call by value) 在叫用函數時,我們通常都...