奧林匹亞資訊班

講師:吳崇維(wayne)

今日目標~

 

  • 作業檢討
  • while 複習 & 練習
  • 迴圈指令
  • for 迴圈
  • 巢狀迴圈

作業檢討

順便預告作業只有一題:)

今日小練習!

分別輸出1 ~ 1000 中的

奇數, 偶數總和

活用 while + if-else

HomeWork#3

Problem B.

         小明很討厭偶數,他只要看到偶數,就會反覆把它除以二,直到這個數字變成奇數為止。給定一個正整數,經過小明的處理,會變成多少呢?

---------------------------------------

範例輸入: 64

範例輸出: 1

----------------------------------------

範例輸入: 188416

範例輸出: 23

Problem A.

     18:30 ~ 20:05 是奧林匹亞資訊班的上課時間。19:25~19:30是表定的短暫下課。

     給你現在的時、分(24小時制),判斷現在是否為上課時間?

---------------------------------------

範例輸入: 18 45

範例輸出: YES

----------------------------------------

範例輸入: 17 25 

範例輸出: NO

while (不懂迴圈) {
    好好複習;
}

什麼是迴圈?

電腦比起人腦,最突出的一項能力:

          重複一件事情而不犯錯!

程式設計自然也有重複執行的能力!

 

有了迴圈,程式的能力大幅提升

while

最基本迴圈

while

語法:

 

 

 

condition 是真偽的邏輯判斷

大括號裡頭想做什麼都可以!

 

這個迴圈會持續到condition為假

while (condition) {
    do something;
}

計算1~100總和

如果忘了 i++; 

補充, 小技巧!

 

當我想要重複作一件事情

有個簡潔的while寫法

int cnt;
cin >> cnt;
while (cnt--) {
    do something;
}

迴圈恰好會跑cnt次!

補充中的補充

int i = 10;
int x = i++;

V.S.

int i = 10;
int x = ++i;

i++: 程式跑完一行指令之後

        才執行 i = i + 1; 的動作

++i: 程式先執行i = i + 1;

        才執行該行程式

不想教的東西

do ... while 

do {
    statement;
} while (condition);

小練習

給你非負整數a, b, 請輸出a的b次方!

(注意任何正數的0次方 = 1) 

迴圈指令

更彈性的控制

 

設計師有時候不會想要乖乖的照著迴圈的規則走。

有彈性的控制,可以達到隨時跳出迴圈,或隨時重啟迴圈

break;

 

break指令,可以讓任何迴圈遇到他時,強制結束迴圈

 

要注意的是我們現在只知道在迴圈裡使用,迴圈的使用

是不允許的。


int x = 0;
while (1) {
    x += 2;
    if (x >= 10) {
        break;
    }
}

再也不是無窮迴圈!

雖然還是不要這樣寫...


int x = 0;
while (x < 10) {
    x += 2;
}

程式下一步到第幾行~?

while (1) {
    if (2) {
        if (3) {
            if (0) {
                ;
            } else {
                break;
            }
        }
    }
}

按:break到最近迴圈的底部

程式下一步到第幾行~?

while (1) {
    while (1) {
        break;
    }
    break;
}

按:break到最近迴圈的底部

巢狀迴圈

continue;

 

將迴圈移駕到剛開始的位置

int x = 0;
int y = 0;
while (x <= 10) {
    x++;
    continue;
    y++;
}

設計一個登入介面

練習:假設已設定一個四位數密碼1234

接著程式會不斷讀取輸入

若是密碼錯誤,輸出 try again!

若是密碼正確,輸出 login! 並結束程式

for

for

 

更為精準,高級的迴圈!

語法 :

 

 

 

initialization: 初始化                     (第一次進入會跑)

condition : 條件( 類似while )       (每次都會檢查)

adjustment : 每次迴圈的調整      (第二次之後會跑)

基本的 () {} 架構不變。

for ( initialization ; condition ; adjustment) {
    statement;
} 

計算1~100總和 (while版)

計算1~100總和 (for版)

更常這樣寫! (for版)

for 版本的無窮迴圈

三個欄子如果不需要,任何一個可以空著

觀念!

好的迴圈,每次跑的時候都會有一點點的不一樣

否則就是無窮迴圈了!因此總是需要作調整

while

  1. 寫法較為簡潔
  2. 主體僅包含一個判斷式
  3. 迴圈每次的調整需要另外寫(迴圈每輪應該都需要一點點的不一樣)

for

  1. 寫法較為複雜
  2. 主體包含:                         初始式、判斷式、調整式
  3. 基本上可以取代while       (while 特別情況才很難取代)

你是設計師,可以自行決定怎麼寫!

巢狀迴圈!

先用紙筆寫下你覺得的輸出結果!

巢狀迴圈中break ? 

開心的作業時間~

Homework #4

試著用迴圈輸出如下圖的99乘法表!

自我挑戰!

​挑戰1. 壓縮程式碼到15行以內

挑戰2.試試看用 '\t' 排版如下

下禮拜第一堂課要小測驗!

複習到這邊的所有內容

可是下禮拜不會有作業 ;)

FeedBack!

一起努力快樂寫程式吧!

class 11/2 基礎迴圈

By Wayne Wu

class 11/2 基礎迴圈

  • 48