iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 5
1
Software Development

C++ 30天屠龍記系列 第 5

第五天:一文學懂判斷式與迴圈

前言

如果說今天我們需要計算 x + 2 = 10裡面x 的答案,你會怎麼計算呢,你應該會想,不如就把10-2不就是x的答案嗎?你想的很美,但其實任何一個程式語言都沒有自動計算x值的方法,需要我們把這個方法寫出來,

那麼方法有兩個,第一個就是你們所想的,hard code出來,例如說我們想加減所有數,可以這樣

auto varX = 0;
auto var2 = 2;
auto var3 = 10
varX = var3 - var2;
//這個答案就是10-2的答案了

但這樣其實跟你用普通Casio計算機差不多。為什麼不讓電腦自動判斷呢?

IF 與 Else

以電腦自己判斷的Logic,他們判斷問題答案的方法有兩個。第一個便是驗算。也就是說

auto x = 0;
if(x + 2 == 10){
	cout << "The Answer is Correct";
} else {
 cout << "X is incorrect"
}

這裡做了一個快速的運算,如果 x + 2 == 10的話。(⚠️注意,在if當中是 ==),那麼電腦便會輸出正確,反之便會告訴你,你做錯了。

For

If else block看起來並沒有比第一個辦法更好,特別他僅僅包括驗算。但是我們還有迴圈。迴圈的用處在這裏便是列舉所有可能是答案的數值讓上面的if...else...block去驗算。

以For為例子

for(auto x = 0;x <= 10;i++){
	if(x + 2 == 10){
		cout << "The Answer of x is " << x << endl;
		break;
	} else continue;
}
  • For 在這裏列舉了從 x = 0 至到 x = 10 之間的所有整數讓if去試。
  • If則是驗算x是否正確,理論上他會驗算for給他的所有數值,但是 break 則是在尋找到 X之後讓for 停止給數值 if去驗算。也就是說,x=9和x=10這兩個假設並不會運算
  • continue 則相反,他是為了讓程序直接執行下一個loop

While

你們也可以試一下其他數式,但當你嘗試到數值超過10的時候,例如

for(auto x = 0;x <= 10;i++){
	if(x * 2 == 50){
		cout << "The Answer of x is " << x << endl;
		break;
	} else continue;
}

這便會沒有答案了。你當然可以更改x的最大測試值到100這樣,但這樣程式就等於是寫死了一樣,但是我們有while!!!!!

auto x = 0;
while(1){
	if(x * 2 == 50){
		cout << "The Answer of x is " << x << endl;
		break;
	} else continue;
	x++;
}
  • While最大的好處便是不需要指名 x 的最大值,而且靈活性比較強,現在的遊戲渲染都離不開 while loop!!
  • 但是For的好處是 Hard Coded ,速度比較快。正常情況下僅僅用For都夠用

Do While

  • do while的用法便是確保起碼運行loop裡面的內容一次

  • 在獲取/Filter用戶用戶的情況有用

    auto x = 0;
    do{
    cout << "請輸入數值" << endl;
    cin >> x;
    if(x < 0) cout << "你的數值小於0,請重新輸入" << endl;
    }while(x < 0);

Switch

Switch 是當你知道你可能遇到的狀況只有幾個的時候使用,例如

switch(operator){
	case '+': cout << "It is plus sign" << endl; break;
	case '-': cout << "It is minus sign" << endl; break;

通常他的動作都只有一個,或者用函數包裝,這樣看上去更像函數試編程的chooseselect等。如果有多個動作要做建議用if...else...。

所以你見到我並沒有跟著C的標準switch寫法來做。而是跟函數式編程的寫法來寫(Python甚至沒有Switch)

switch(operator){
	case '+': add(x,y) break;
	case '-': minus(x,y) break;
	case '*': multiply(x,y) break;
	case '/': divide(x,y) break;
}
  • 這裡的 add,minus,multiply, divide都是不存在的函數式。只是我用來demo函數在這裡的使用而已

明天更新函數式編程


上一篇
第4天:一文學會變數與運算
下一篇
第6天:一文拆解C++函數
系列文
C++ 30天屠龍記30

尚未有邦友留言

立即登入留言