迴圈(重複結構)

2012/10/30 謝碧景(c)編製更新

學習目標

一、迴圈的種類與應用

(一)迴圈的種類

(二)迴圈的應用

格式、流程圖

(一) while 迴圈

 while(條件式)

 { 成立敘述; }

例:輸出 a=1 a=2 a=3~a=10。

※ 比較 if 條件指令

 執行

(二) for 迴圈

 for (初始值;條件式;更新值)

 { 成立的迴圈敘述; }

§實作練習

題1:輸入一正整數 n,求1+2+3+4+...+n=? 【流程圖】(檔名:while-1.cpp、for-1.cpp)【參閱:複合指定運算子、遞增運算子】

題2:輸入一正整數 n,求1+1/2+1/3+1/4+...+1/n=?【流程圖注意:型別強制轉換】(檔名:while-2.cpp、for-2.cpp)

題3:巧克力分裝,七個一數餘二且十一個一數餘二且三個一數餘二,求<10000之內所有可能分裝的結果。【流程圖】【延伸想法】求可能分裝結果之個數。(檔名:while-3.cpp、for-3.cpp) 

題4:讀入10個數字(可為正值>0,或負值<0),列印正值的個數與負值的個數。並依其結果列印訊息“正值多”、“負值多”、“正負值一樣多”。【流程圖】(檔名:while-4.cpp、for-4.cpp)
【提示: for(;;) {  }   相同於  while(1) {  }          //為無窮迴圈,注意:條件】

題5:寫一程式計算一組數字的乘積。程式必須能夠連續輸入數個整數(至少1筆非0),以Enter隔開,當輸入數字為0時, 就輸出結果,並結束程式。【流程圖】(檔名:while-5.cpp、for-5.cpp) 【提示:while(1){...if(條件) break; ...}    //整數1代表真true,可讓迴圈反覆執行,直到if條件成立即break跳出迴圈。】

題6:輸入一正整數,列出此數的所有正因數,並判斷此數字是否為質數?【流程圖】(檔名:while-6.cpp、for-6.cpp) 

*延伸思考:質數判斷方式→變數i 一定要由 2, 3, 4...n-2, n-1 嗎? 能不能最後到 n/2 就好?迴圈次數可不可以更少?

題7:計算任意正整數 n 的階乘值(n!)。(n<15) ( n!=1*2*3……*n)【流程圖】(檔名:while-7.cpp、for-7.cpp) 

題8:輸入兩數字,求最大公因數(GCD)與最小公倍數(LCM)。【流程圖【提示:a*b兩數乘積等於gcd*lcm 】(方法2:利用『輾轉相除法』求最大公因數。)(檔名:while-8.cpp、for-8.cpp) 

題9:計算並列印出2的前20次方之 數值。【流程圖】【方法2:以 pow(x,n) 次方函數,求x的n次方,參閱:數學函式】(檔名:while-9.cpp、for-9.cpp) 

題10:輸出九九乘法表。(*多層迴圈應用,檔名:while-10.cpp、for-10.cpp) 

    【方法1:引入#include <iomanip> 函式庫,可運用 cout<<setw(n)<<x; 讓變數x值以n格的寬度輸出。】

    【方法2:參閱→欄位寬度設定。】

題11:費氏數列(Fibonacci)﹦0,1,1,2,3,5,8,13,…… 即 第I位數﹦第(I-1)位數+第(I-2)位數 ,I>2 請列出 Fibonacci 數列的前25項。【流程圖】(檔名:while-11.cpp、for-11.cpp) 

題12:一個數等於它所有的因數和,這種數我們叫它完全數﹝不包括它本身﹞,例如:  6=1+2+3、28=1+2+4+7+14 請列印出10000之內,所有的完全數。【流程圖】(檔名:while-12.cpp、for-12.cpp) 

題13:請輸出四位數(d1d2d3d4)中,所有位數總和為9的數值即d1 +d2 +d3+d4=9 (流程圖,檔名:while-13.cpp、for-13.cpp)【提示:利用%(求餘數)及/(求整數商)的方式,以迴圈重複求出各個位數值 】【方法2:以 一維陣列設計 】

題14:擲骰子遊戲,以亂數產生1-6的點數,若按鍵盤 Enter 鍵('\r')表示遊戲結束。 (檔名:while-14.cpp、for-14.cpp)

【提示:亂數 rand() 函數產生不同之亂數 srand(time(NULL)),使用系統時間當亂數種子必須引用 time.h 標頭檔】

題15:請列出小於等於五位數中,符合 N=2i ×3j ×5k 之數   (檔名:while-15.cpp、for-15.cpp)

題16:求小於五位數中,求位數和(每一位數相加,如28之位數和為2+8=10)為23的正整數為何? (檔名:while-16.cpp、for-16.cpp)