Download presentation
Presentation is loading. Please wait.
1
Class 2 流程控制-選擇敘述與迴圈
2
復習1 資料形態 printf(“%d %f %c”,int_num,float_num,char_num);
scanf(“%d”,&int_num); 2
3
復習2 強制轉換 其他例子 int a=5,b=11; float c=a/b;
printf(“%f”,c); //結果印出 ??? 改成 float c=(float)a/(float)b; 其他例子 float c= ; printf(“%d”,(int)c);
4
何謂流程控制? 程式設計師自由控制程式的流向 某段程式碼在某些情況下跳過 選擇敘述 某段程式碼需要重複執行好幾次 迴圈
5
選擇敘述 單向選擇 if… 雙向選擇 if…else… 逐一過濾選擇 if…else if…else… 多重選擇 switch…case…
6
單向選擇 if… 語法 流程圖
7
條件式中的邏輯判斷式 邏輯判斷式可以使用的運算符號 運算符號 意義 > 大於 < 小於 >= 大於等於 <=
小於等於 = = 等於 != 不等於
8
範例練習 使用者輸入一個分數 如果該分數為60分以上 顯示”及格”
9
課堂練習 練習1 練習2 試寫一個程式,讓使用者由鍵盤輸入一個數字,如果大於1000,電腦會印出"大於1000" 偶數(奇數)確認
由使用者由鍵盤輸入數字,如果是偶數,電腦會印出"偶數" 利用%運算
10
條件式 條件式可以同時利用多個判斷式 連結邏輯判斷的符號 && 而且 || 或
if((score1>=60 )&& (score2>=60)) printf(“兩科都及格”); || 或 if((score1>=60 )|| (score2>=60)) printf(“至少一科及格”);
11
雙向選擇 if…else… 語法 流程圖
12
範例練習 使用者輸入一個分數 如果該分數為60分以上 顯示”及格” 否則 顯示”不及格”
13
課堂練習 練習1 試寫一個程式,讓使用者由鍵盤輸入一個數字,如果大於1000,電腦會印出“大於1000” ,否則印出”小於等於1000” 練習2 偶數(奇數)確認 由使用者由鍵盤輸入數字,如果是偶數,電腦會印出“偶數” ,否則印出”奇數”
14
課堂練習3 判斷閏年 提示並接受使用者輸入一個西元的年份,處理過後輸出該年是否為閏年 判斷規則
假如該年份可被4整除,又不可被100整除,則為閏年 假如該年份可被400整除則為閏年 否則皆不為閏年
15
判斷閏年 if (x%4==0) { if ((x%100!=0)||(x%400==0)) { printf(“是閏年\n”); }
else { printf(“不是閏年\n”);
16
判斷閏年 if ((x%400==0) || (x%4==0 && x%100 !=0)) { printf(“是閏年\n”); }
else { printf(“不是閏年\n”);
17
逐一過濾選擇 if…else if…else…
語法 流程圖
18
課堂練習 請設計一個可以讓使用者輸入分數,並依照分數輸出等級A(90~100)、B(80~89)、C(70~79)、D(60~69)、E(0~59)的程式。 小提示:可以在if的條件式中,利用&&連結兩個邏輯判斷式
19
多重選擇 switch…case… 資料或運算式用來比對下面每一個case的常數值 跳至第一個比對成功(數值相等)的地方繼續執行
遇見 break; 敘述,結束整個switch敘述 若沒有比對成功,則會執行 default: 後的敘述區塊 語法
20
範例練習 利用switch改寫剛才課堂練習程式 讓使用者輸入分數,依照分數輸出等級 A(90~100)、 B(80~89)、
D(60~69)、 E(0~59)的程式。
21
課堂練習 修改上面的範例,以防止使用者輸入不合理的分數(大於100、小於0)
if ((points>100)||(points<0)) { printf(“請輸入一個正確的分數:0~100”); return 0; }
22
補充 (判斷式 ? x : y); 判斷式成立,則執行x,反之執行y 以下兩種寫法是相同結果
(score>=60 ? printf("及格!\n") : printf("不及格!\n"));
23
作業二 請利用課堂學到的if…else if…else…敘述和switch分別撰寫計算機程式
使用者可以選擇一種運算(+、-、×、/),並輸入兩個數字,程式將計算並輸出結果。(HW2_1_if.cpp、HW2_1_switch.cpp )
24
過重:24≦BMI<27 輕度肥胖:27≦BMI<30 中度肥胖:30≦BMI<35 重度肥胖:BMI≧35
作業二-2 身體質量指數(BMI) (kg/m2) 體重過輕 BMI < 18.5 正常範圍 18.5≦BMI<24 異常範圍 過重:24≦BMI<27 輕度肥胖:27≦BMI<30 中度肥胖:30≦BMI<35 重度肥胖:BMI≧35 請利用所附左表,修改上一個作業,使之成為附有評語的BMI計算器 (HW2_2.cpp)
25
複習 If(條件判斷1){ //滿足條件判斷1 } else if(條件判斷2){ //不滿足條件判斷1, 滿足條件判斷2
//不滿足條件判斷1, 不滿足條件判斷2 ,滿足條件判斷3 else{ //不滿足條件判斷1, 不滿足條件判斷2 ,不滿足條件判斷3
26
複習 switch(要判斷的變數){ case 變數值1: //變數==變數值1 時要做什麼 break; case 變數值2:
//變數==變數值2 時要做什麼 default: //變數== 其他數值 時要做什麼 }
27
複習 If(條件判斷1){ if(條件判斷2){ //滿足條件判斷1和條件判斷2會執行 } else{
//滿足條件判斷1但不滿足條件判斷2會執行 //滿足條件判斷1就會執行 //不滿足條件判斷1 會執行
28
補充 什麼時候要用fflush(stdin);//清除輸入緩衝區 讀取字元 or 字串之前 Why???
scanf(“%d”,&int_num); fflush(stdin); scanf(“%c”,&char_num); 讀取字元 or 字串之前 Why??? 輸入數字時,除了數字外還輸入了一個enter enter=‘\n’ (可視為一個char)
29
迴圈 當程式需要來回重複執行某一段程式碼時, 就可以使用迴圈 迴圈又可以分為以下三種: while迴圈 do…while迴圈 for迴圈
30
while迴圈 語法 流程圖 while(條件判斷) while之後的敘述 敘述 成立 不成立
31
範例練習 利用while敘述 計算1+2+3+…+100的數值 進階題 計算2+4+6+…+100的數值
32
增減變數值 運算子 運算 x=val 將值val指定到變數x(基本指定) x += val 等同於x=x+val x -= val
33
課堂練習 練習1 讓使用者輸入數字,若輸入-1則結束輸入,否則一直輸入直到-1為止
當使用者輸入-1後,將使用者輸入的錯誤數字加總並計算平均輸出 Int input=0,sum=0,num=0; While(input!=-1){ //目前為止的加總+使用者輸入的值 //讓使用者輸入數字到input //輸入的次數+1 } //算平均時,要避免除以0的情況
34
課堂練習 練習2 有一個聚寶盆,一開始裡面只有一塊錢,但每隔一天會多一倍(總錢數=2天數) 請讓使用者選擇1或2
1 使用者輸入放置天數,系統輸出聚寶盆最後的錢數 2 使用者輸入想賺到的錢數,系統輸出需要多少天 Int day=0,money=1; While(day<day_input){ //錢 * 2 //天數加一 } 34
35
do…while迴圈 和while的作用相同,只是判斷的先後不同 至少執行一次 語法 流程圖 do{ 進入do迴圈 敘述區塊 成立 }
不成立 離開迴圈
36
課堂練習 請改寫剛剛的程式,利用do…while敘述計算1+2+3+…+100的數值 進階題
37
for迴圈 確定想要重複執行的次數 語法 初始運算式 條件式 運算式 設定計次變數的初始值,只在進入迴圈時會執行
計次變數的限制條件式,每次進入迴圈前檢查 運算式 執行完敘述區塊後,利用運算式更新計次變數
38
流程圖 範例練習 1+2+3+…+100 敘述區塊 條件式 for迴圈 初始運算式 for迴圈之後的敘述區塊 不成立 成立 計次運算式 更新
計次變數
39
課堂練習 練習1 練習2 請設計可以由使用者輸入 n, 然後計算出由 1+3+5+……+ n = ?
for(i=1;i<=n;i+=3){ // 計算加總 } 練習2 請印出 10、8、6、 …、0、-2、-4 (每行一個數字)
40
巢狀迴圈(雙重迴圈) for(a=1;a<10;a=a+1) { 程式碼; ... for(b=1;b<8;b=b+1) {
{ 程式碼; ... for(b=1;b<8;b=b+1) { 程式碼; ... } } /*這種觀念叫雙重迴圈*/
41
範例練習 請印出下面的形狀 * ** *** ****
42
課堂練習 練習1 :請印出下面的形狀 **** *** ** * 練習2 : 請印出下面的形狀
43
作業三 請利用for迴圈輸出九九乘法表。 1*1=1 1*2=2 … 9*8=72 9*9=81
提示:可以利用雙層迴圈來計次兩個變數。 (HW3_1.cpp)
44
作業三-2 (HW3_tree.cpp) (回家自己練習,寫出來有加分)
** **** ****** ******** bonus 使用者輸入欲建樹的字元 使用者決定幾層 提示: 空白的數目=總層數-目前的層數 星星的數目=目前的層數*2
45
改變迴圈結構流程 要讓迴圈結束有規則的和不規則的方式 規則的方式 不規則的迴圈結束方法 讓反覆執行的迴圈藉由適當的條件測試而自然結束
條件變成false 不規則的迴圈結束方法 在不可預期的執行狀況下,強制迴圈中斷,以避免可能發生的程式錯誤 一旦在迴圈自然結束前,已經得到想要的運算結果,同樣可以運用強制中斷的方式結束迴圈 可以提高程式執行的效率
46
break敘述 提供從 for、while、do – while 間提早離開的方法 break 只離開最內層迴圈
回想一下剛教過的switch,break用來做什麼事情?
47
範例練習 占卜系統設計 用到哪些教過的語法? 利用while迴圈讓使用者可以抽籤直到按0離開系統
if…else, switch, while, break
48
課堂練習 撰寫一個程式,使用者輸入一數,程式會找出大於此數的數字中,最小的17的倍數 //輸入數字 While(1){ //數字+1
//判斷數字可不可以被17整除,可以則跳出 }
49
continue敘述 不離開迴圈 立即停止這一次的迴圈 跳到測試迴圈的地方決定是否進行下一次迴圈 在 for 迴圈中是跳到運算式
只能用在迴圈,不適用 switch 寫在 switch 中,效果是對包著 switch 的迴圈,即包著 switch 的迴圈進入下一次迴圈
50
範例練習 有棟公寓沒有四樓這個樓層 請寫程式模擬坐電梯從一樓到十樓,電梯顯示樓層的情形
51
作業三 請撰寫一個程式,使用者輸入兩個數字範圍 在這範圍中的數字,除了3的倍數之外都印出 HW3_2.cpp)
//要注意輸入的兩個數字誰比較大 If(input1>input2){ } else{
Similar presentations