Nova的科學反主流學院 

反主流的精神在於不屈於大環境, 本站旨在提供輕鬆自學各種科學。

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:判斷式包括<,>,==,<=,>=等等