C++程式範例-從1加到N是多少?下篇(重複執行-迴圈)
上一篇提到我們可以進行加減乘除等四則運算
可是我們需要 1 加到 3 ,要怎麼辦?
你可以像下面這樣:
int n = 1;
n = n + 2;
n = n + 3;
這樣照上面的規則的話,一開始箱子裡面是 1,
然後第二行把箱子的數拿出來加 2 後放回去,
第三行再把剛才放進去的新數字拿出來,加 3 後再放回去,
的確會把 1 加到 3
等等,這樣寫會不會太笨了?那 1 加到 100 豈不是要寫 100 次?
所以我們要教大家一個快一點的方法
也就是讓我們人類寫比較少行,電腦自己會處理的方法
Loop(迴圈),也就是重複做
程式設計概念-設計重複做(迴圈)
首先,我們在這邊列一個最好用的迴圈,也就是 for 迴圈
格式如下:
for(int i = 0;i <= 10;i++){
//要執行的事情
}
for 的功能分為三個部分
1.他會在第一個分號左邊跑一次後進來
以這邊為例,就是他會先做一次 int i = 0
準備一個名字叫 i 的變數,並且存放 0 的資料。
(只會執行一次)
2.每次要跑中間要執行的事情,都會看第一和第二分號中間的判斷式*1成不成立
所以在這邊,他每次都會去看 i <= 10
也就是每次比較 i ,有沒有小於或等於 10 ,如果有的話,
就執行一次中間要執行的事情,假如沒有的話較跳出來
3.跑完後要做的事情
假如i是0的話,那不是永遠小於 10 ,就卡死在裡面了?
沒錯,所以我們必須加上一個中止條件,
希望他能跑到一定次數就結束
在這邊最後一個分號之後,我們加上了 i++
這邊的 i++ 是 i = i + 1 的簡寫
意思就是讓每次跑完"要做的事情"就會把 i+1
所以他跑了夠多次後,一定會不滿足小於等於 10 這個條件,
所以就會結束程式。
以下再多列一個例子
for(int i = 0;i <= 10;i++){
std::cout << "a";
}
請問螢幕上會出現幾個a?
中間是 10 ,應該是 10 個 a
不對,應該是 11 個 a
因為第一次進來的時候是 0,小於等於 10 會先做一次,然後 i 加 1,
再跑下一輪,發現 1 還是小於等於 10,所以再做一次。
那跑到 10,發現 10 也是小於或等於 10,所以還會再做一次,
總共是 0 到 10,共 11 個數字滿足,所以他會在螢幕上印出 11 個 a
好了,我們可以回到原本的問題。
中間的部分把他換成
sum = sum + i;
假設我們現在輸入 n 是 3,程式會照下面的方式跑:
sum 這個箱子因為整個程式最前面給他 0,
所以一開始裡面是 0,
而這邊的i,一進來因為分號左邊的 int i = 0 的關係
跑了第1次是 i 是 0,
檢查 i <= 3 是對的,
所以把箱子 sum 的數字和箱子i的數字箱加
0+0=0 再丟回箱子 sum
跑完第 1 次的時候 i++起動,所以 i 從 0 變成 1
跑了第 2 次是 i 是 1 ,
檢查 i <= 3 是對的,
所以把箱子 sum 的數字和箱子i的數字箱加
0+1=1 再丟回箱子
跑完第 2 次的時候 i++ 起動,所以i從 1 變成 2
跑了第 3 次是 i 是 2,
檢查 i <= 3 是對的,
所以把箱子 sum 的數字和箱子 i 的數字箱加
1+2=3 再丟回箱子
跑完第 3 次的時候 i++ 起動,所以 i 從 2 變成 3
跑了第 3 次是 i 是 3,
檢查 i <= 3 是對的,
所以把箱子 sum 的數字和箱子i的數字箱加
3+3=6 再丟回箱子
跑完第 3 次的時候 i++ 起動,所以 i 從 3 變成 4
跑了第 3 次是 i 是 4,
檢查 i <= 3 是錯的,
所以箱子 sum 的數字和箱子 i 的數字箱加的動作不做了
跳出程式!
這樣就可以每次跑這個循環迴圈的時候,
把他從 1 加到 3
因為 n 是我們輸入的,所以不管輸入 3 或是 100,程式都會照著這個步驟算,
不會算錯。
講解到此。
*1:判斷式包括<,>,==,<=,>=等等