第四章迴圈指令

4_1 for

4_2 巢狀迴圈

4_3 while

4_4 實例探討

4_5 APCS實例探討

 

範例4-1a

請寫一個程式,印出110,並求其和。

自我練習

1、請寫一程式,可以輸出『ABCDE』五次。

2、乘法運算。假如沒有乘法運算子,請用連加法,求兩數相乘的結果。例如,6乘以4,就是666624

3、請寫一程式,計算13579之和。

4、請寫一程式,計算463626166之和。

5、電腦心算測驗。請寫一程式,可以自動產生10題兩個1位數,由使用者回答相加結果,電腦並評判正確題數。

 

範例6_1b 請用循序猜值法求任意數的平方根。

自我練習

1、請用暴力法求解某一正數的立方根。例如,輸入27可得到3.0。本例小數點取1位。

2、請用暴力法求解兩數相除的結果。例如,輸入279可得到3.0。本例小數點取1位。

3、假設有一函式y=f(x)=x2-4x-5請分別印出x-1010的值。

4、同上題,請用暴力猜值找出其整數解。提示:x-1010一一代入,找出使函數為零的值,此即為暴力猜值法解題。

5、同上題,請找出極小值。

6、函數極值。請寫一程式,可以輸入一個一元二次函式,並求其極大或極小值。例如,輸入y=f(x)=x2-2x+2有極小值1,輸入y=f(x)=-x2-2x+2有極大值-1

7、假設一個一元多次方程式含有實數解,請寫一程式,可求其解。例如,y=f(x)= x2+x-0.75=0 的解是0.5-1.5。提示:浮點運算時,若無法得到0,此時要使用接近0的判斷。例如,abs(y)<0.0001,即可視為成立,0.0001即是其精密度,請換成自己想要的精密度0.10.010.001。但是Python竟然無此問題,請鍵入以下程式,並觀察結果。

    s=10#放大倍數

for x in range(-10*s,10*s):

        y=((x/s)**2)+x/s-0.75

        if y==0:

            print (x/s)

8、勘根定理。若f(x)*f(x+1)<0,則表示f函數於xx+1有一實數根。請寫一程式,可輸入一函數,並求其有多少個實根,並求其實根範圍。例如,y=f(x)= x2+x-0.75=0實根範圍在-2-1,還有另一個在12之間。

 

範例6-1d求解某一數的所有因數。

自我練習

1、請寫一個程式,找出1100的整數中,所有37的倍數,並計算共有多少個。

2、找出西元1600年至西元2000年的所有閏年。

3、完全數,又稱完美數完備數,是一些特殊的自然數:它所有的真因子(即除了自身以外的因數)的和,恰好等於它本身。例如:第一個完全數是6,它有因數1236,除去它本身6外,其餘3個數相加,1+2+36,恰好等於本身。第二個完全數是28,它有因數12471428,除去它本身28外,其餘5個數相加,1+2+4+7+1428,也恰好等於本身。後面的數是4968128。請寫一程式,找出110000的所有完美數。

範例6-1e求解輸入數值是否質數。

自我練習

2、請寫一程式,可以輸入兩數,並判斷其是否互質。

 

範例4-1f請寫一個程式,找出1200的整數中,找出含有2的數字,且統計共含有多少個2。例如,122有兩個2

範例6-1g

 

4_2 巢狀迴圈

範例6-2a

請寫一程式,印出如下的九九乘法表。

自我練習

1、請寫一程式,嘗試使用兩層迴圈印出如下的九九乘法表。

2、請寫一程式,嘗試使用三層迴圈印出如下的九九乘法表。

 

 

範例6-2b

請寫一程式,印出2 100的所有質數。

自我練習

1、同上範例,但請加上讓每列僅輸出10個數字。

2、參考範例5_3c,找出西元18002100的所有閏年。

3、質因數連乘積。請寫一個程式,輸入一正整數,將其質因數分解後印出其式子,例如:

    輸入:319

    輸出:319=11*29

    輸入:19

    輸出:19 =質數

    輸入:521752

    輸出:521752 = 2^3*7^2*11^3

 

 

範例6-2c

試寫一程式,找出三位數“阿姆斯壯數”。所謂阿姆斯壯數是指一數等於各個位數的立方和。例如,153=13+53+33

自我練習

1、試寫一程式,找出四位數“阿姆斯壯數”abcd=a4+b4+c4+d4

 

6-2d

請嘗試使用雙迴圈,寫一程式輸出如下:

 

自我練習

題號

題目

題號

題目

1

       

      **

    ***

  ****

*****

2

*****

  ****

    ***

      **

       

3

       

      ***

    *****

  *******

*********

105APCS試題)

4

******

  ****

    **

105APCS試題)

5

1  1  1  1  1

2  2  2  2

3  3  3

4  4

5

6

        5

      5 4

    5 4 3

  5 4 3 2

5 4 3 2 1

7

 1

 2  3

 4  5  6

 7  8  9 10

11 12 13 14 15

8

          A

        B    B

      C   C    C

    D   D    D    D

 E    E   E    E     E

9

1

1 2

1 2 3

1 2 3 4

1 2 3 4 5

 

10

1

2 2

3 3 3

4 4 4 4

5 5 5 5 5

 

11

5 5 5 5 5

4 4 4 4

3 3 3

2 2

1

12

5 4 3 2 1

4 3 2 1

3 2 1

2 1

1

13

      1

     1 2

   1 2 3

 1 2 3 4

1 2 3 4 5

 

14      

       1

     1  2

   1  2  3

 1  2  3  4

1  2  3  4  5

 

15

A

AB

ABC

ABCD

ABCDE

16

a

bb

ccc

dddd

eeeee

17、請寫程式完成+(1+2)+(1+2+3)+(1+2+3+4)+(1+2+3+4+5)的和。

 

4_3 while

範例4-3a

假如沒有除法運算子,請自行使用加減法,完成除法運算。

自我練習

1、同範例,但可以求到小數點1位的實數除法。提示:將被除數先乘以10,再運算,最後將商再除以10

 

範例4-3b

若有一級數s=3+6+9+,請問加到第n項,其和剛好超過100   

自我練習

1、請寫一程式,可以輸入任意個數的整數,當輸入-1時結束,計算輸入數字的平均。

2、請寫一程式,可以輸入任意個數的整數,並將其從個位數逐一輸出。例如,輸入25,輸出5 2

3、請寫一程式,可以輸入任意個數的整數,並計算其幾位數。例如,輸入25,輸出2位數。

4、於範例4_3b中,請增加一個功能,要使用此程式前,要先輸入密碼,密碼為數字1234,但至多可輸入3次,第三次錯了,就結束程式。

 

範例4_3c

請寫一個擲骰子程式,滿足以下條件:

(1) 可以產生 1 6 的亂數。

(2) 累加以上亂數。

(3) 輸出此亂數與統計其和。

(4) 若亂數不為 1,則重複(1)∼(3),否則輸出其和並結束程式。

自我練習

1、同上題,但人和電腦玩,點數和大的為贏。

2. 請寫一個程式,滿足以下條件:( 擲骰子遊戲 )

(1) 可以產生兩個 1 6 的亂數。

(2) 累加以上亂數。 

(3) 輸出此亂數與其和。 

(4) 若亂數和大於 8,則重複(1)∼(3),直到亂數和小於等於 8,則程式結束。

2、電腦心算測驗。請寫一程式,可以無限次數,顯示題號、出現兩個1位數,並由使用者回答,直到答對10題,電腦顯示使用的時間。

3、同上題,但加上直到答錯才停止,並顯示連續答題數目。

4. 請寫一程式,可以連續產生兩個 1 6 的亂數,並輸出此兩個亂數,直到後面的亂數大於前面的亂數。

5. 請寫一猜拳遊戲程式,可以讓人與電腦猜拳,並輸出結果,直到任一方贏3次為止。

 

範例4_3d 擲骰子遊戲。

請寫一程式,可以連續產生 3 1 6 的亂數,並輸出此 3 個亂數,直到有其中兩個亂數相等為止,並輸出另一個不相同的數字。

 

範例4_3e 擲骰子遊戲。

請寫一程式,可以連續產生 4 1 6 的亂數,並輸出此 4 個亂數,直到有其中兩個亂數相等為止,並輸

出此不相等的數字與和。例如,產生 6,4,5,1 則繼續產生亂數,若亂數為 6,2,1,6 則其和為 3

自我練習

1、有範例可知,若是1166那就有點運氣了,其和有可能12,或有可能2,若是定義得分取大的,那應該其和是12才對,請自己思考如何完成。(提示:先將以上亂數排序,那也許可以簡化問題)

2、若是擲5顆骰子,且要能有3顆相同,且取不相同的兩顆為分數,那程式又如何?

 

範例4-3f

請將10進位數轉為N進位數(本例暫討論N<=9,其餘N>=11時,待陣列介紹之後再討論)。

自我練習

1、請寫一程式,可以將所輸入的正整數,反向輸出。例如,輸入1234,輸出『4 3 2 1 』。

2、同上題,可以正向輸出。例如,輸入1234,輸出『1 2 3 4』。

 

範例4-3g

請以輾轉相除法,求兩數的最大公因數。

4-4實例探討

電腦輔助測驗

坊間有不少電腦輔助測驗系統,這些系統有填充題、有選擇題等,都會自動評判對錯、都會計時、都可以反覆練習,達到熟能生巧的效果,本書將會在各章介紹一些範例,希望您自己也可以設計出適合自己的電腦輔助學習與測驗系統。

範例4_4a心算測驗。心算測驗不用準備題庫,只要產生亂數就可以,程式如下:

自我練習

1、同範例,但改為12位數的加法。

2、同範例,但改為運算子加、減、乘、除、取餘也是亂數產生。

3、同範例,但改為分數的加、減、乘、除。(結果若能約分,也先約分,結果若為整數,也要轉為整數)

4、打地鼠。請設計一個程式,電腦自動顯示『a,b,cx,y,z』等字元,然後由使用者鍵入此字元,並統計一分鐘可正確輸入字元數目。

 

積分的剖析

範例4-4b積分的剖析

演算法

積分的計算就如同將一個不規則的圖形,先切割成一條條很細的長條矩形,因為每個長條矩形很細,其面積趨近於底乘以高,再累加這些長條矩形面積,即為其總面積,例如,若有積分式如下:

 

 

自我練習

1.  使用以上積分法,求解四分之一圓面積

2.  使用以上積分法求解sin(x)正半週面積 =2。(sinx請先查詢第八章公用函式,此為高職基本電學一年級題目)

 

 

範例4_4c 猜數字。請您先默想一個1100的數字,讓電腦猜,但每次要回應太大『3』或猜中『2』或太小『1』。

範例4_4d 請以二分猜值法求解一正數的平分根。本例要精密度到小數點以下第二位。

自我練習

1、請以二分猜值法,求解兩數相除的結果。

2、請以二分猜值法,求解一正數的立方根。

3、請寫一程式,由電腦產生一個1100的亂數,由使用者用二分猜值法猜,電腦應逐次回答太大、太小、或猜中,且回應幾次猜中。

 

 

e= 2.718的由來

工程與科學的指數與對數計算,通常不是以210為底,而是以e為底,我簡單闡述如下:

1.     假設借款金額為一元,言明年利率為100%,每年複利一次,則一年後本利和為2元。

                1×(1+1)1= 2

 

2.         假設借款金額為一元,言明年利率為100%,每月複利一次,則一年後本利和為2.613

                 1

                1×(1+         )12= 2.613

                12

 

3.         假設借款金額為一元,言明年利率為100%,每日複利一次,則一年後本利和為2.714

                 1

                1×(1+         )365= 2.714

                365

 

4.     假設借款金額為一元,言明年利率為100%,每秒複利一次,則一年後本利和為2.718

                    1

                1×(1+               )365×24×60×60  = 2.718

              365×24×60×60

 

5.細菌的繁殖、電容的充放電等,這些都是數量非常龐大的成長現象,都要用e 來解釋才能理解。也就是數量非常龐大的物件,若其一年「平均」成長2 倍,則一年後總數量會成長為2.718 倍,而不是2 倍。

範例4_4d根據以上演算法,計算e的值。

 

級數

數列的和稱為級數,古代的數學家就很強,竟然可以用不同的級數求出所要的函數值。例如,

x為徑度量

 

範例4_4e

寫一程式,可依所需精密度求得sinx函數值,本例要求精密度到小數第三位。

自我練習

1.ex

2.cos6000.5,演算法在上面,請寫程式完成。

3pi的級數公式如下:

    pi=4(1-1/3+1/5-1/7++(-1)i+1/(2i+1)

請寫程式完成。

 

4_5 APCS實例探討

一、完全奇數(107/10試題)

13311,13199 稱為完全奇數,請寫一程式,可以輸入一個整數N,並求出比此數大的完全奇數M 與比此數小的完全奇數P,並求其差的最小值,也就是| N-M |與| N-P |的最小值。例如, 輸入13256, 則M=13311P=13199, 而13311-13256=55 ,13119-13199=112,所以輸出112

 

二、秘密差(106/10/01

將一個十進位正整數的奇數位數的和稱為A,偶數位數的和稱為B,則A B 的絕對差值|A B| 稱為這個正整數的秘密差。例如:263541 的奇數位數的和A = 6+5+1 = 12,偶數位數的和B= 2+3+4 = 9,所以263541 的秘密差是|12 9|= 3。給定一個十進位正整數X,請找出X 的秘密差。

 

習題

 

1.  雙迴圈演練。迴圈是電腦最常用的運算思維,有單迴圈、雙迴圈、三迴圈等,雙迴圈是程式設計最常用且最強的運算思維,以下題目可用來演練。其次,雙迴圈有兩個變數,通常都要找出其關係,這樣才能簡化問題,請自己練習。以下請用雙迴圈印出如下的執行結果:

(1) 11  21  31  41  51  61  71  81  91  101

    12  22  32  42  52  62  72  82  92

    13 23 33 43 53 63  73 83

    14 24 34 44 54 64 74

    15 25 35 45 55 65

    16 26 36 46 56

    17 27 37 47

    18 28 38

    19 29

    20

 

 

(2) 11

    12 22

    13 23 33

    14 24 34 44

    15 25 35 45 55

    16 26 36 46 56 66

    17 27 37 47 57 67 77

    18 28 38 48 58 68 78 88

    19 29 39 49 59 69 79 89 99

    20 30 40 50 60 70 80 90 100  110

 

(3) 101

    92 102

    83 93 103

    74 84 94 104

    65 75 85 95 105

    56 66 76 86 96 106

    47 57 67 77 87 97 107

    38 48 58 68 78 88 98 108

    29 39 49 59 69 79 89 99 109

    20  30  40 50 60 70 80 90 100  110

 

 

(4) 11 21  31 41 51 61 71 81 91 101

    22 32 42 52 62 72 82  92  102

    33 43 53 63 73 83 93 103

    44 54 64 74 84 94 104

    55 65 75 85 95 105

    66 76 86 96 106

    77 87 97 107

    88 98 108

    99 109

    110

 

 

(5) 11  21  31 41 51 61 71 81 91       (6)            51

        22 32 42 52 62 72 82                      42 52 62

            33 43 53 63 73                      33 43 53 63 73

                44 54 64                      24 34 44 54 64 74     84

                    55                      15  25 35 45 55 65 75     85 95

 

(7) 1       1       2       3       5           (8)                         1

            8       13      21      34                              2        3

                    55      89      144                     4      5        6

                            233     377             7      8      9        10

                                    610     11     12      13      14        15

 

2.  寫程式計算下列結果:

    (1) s=7^2+10^2+13^2+83^2

    (2) s=(1-1/2)(1-1/3)(1-1/4)(1-1/N) 。(要先輸入N值)

    (3) s=1-1/2^2+1/3^2-1/4^2++(-1)^N/N^2。(要先輸入N值)

   

 

3.  寫程式求以下數列之和(n可任意輸入)。

   

 

4.  7+77+777+...n項之總和。(n可任意輸入)

 

5、費氏數列的定義如下:

F1=1,f2=1,Fn=Fn-1+Fn-2  n>=3

請寫一個程式,可以印出費氏數列的指定項目。例如,

輸入4,印出1,1,2,3

輸入5,印出1,1,2,3,5

輸入6,印出1,1,2,3,5,8

 

6、請寫一程式,可以輸入任意整數,並求其每個數字的和。例如,輸入1234,得到1+2+3+4=10,輸入12,得到1+2=3

7、請寫一程式,可以連續輸入若干個09的數字,輸入-1表示結束,並將其組合成一個數字。例如,輸入3,2,1,-1,可以輸出321