C/C++基礎程式設計班 控制敘述 講師:林業峻 CSIE, NTU 3/7, 2015
課程大綱 選擇控制 (流程控制) 重覆控制 (迴圈) 作業 IF-ELSE SWITCH-CASE FOR WHILE 迴圈中的流程控制: break, continue 巢狀迴圈 作業
IF-ELSE 用途:程式執行時根據條件情況選擇要執行的程 式碼。 語法:
IF-ELSE 範例:寫個程式,判斷一個人的成績是否及格 (及 格分數為60分) Start End #include <stdio.h> int main() { int score; printf("輸入您的分數:"); scanf("%d",&score); if ( score < 60 ) printf("不及格\n"); } else printf("及格\n"); return 0; 輸入分數 分數 < 60 no yes 不及格 及格 End
IF-ELSE 邏輯判斷可以使用的運算符號如下 用來連結邏輯判斷的符號有 ! “非“, 條件不成立時, 整個判斷就會成立 運算符號 意義 > 大於 < 小於 >= 大於或等於 <= 小於或等於 == 等於 != 不等於 符號 意義 && "而且", 所有的條件都要成立, 整個判斷才會成立 || "或", 只要有任何一個條件成立, 整個判斷就會成立 ! “非“, 條件不成立時, 整個判斷就會成立
IF-ELSE IF 若我們要判斷的條件不只是做“對”或“錯”的 二分法時,可以在if後增加else if來做多重判斷。 語法: if( 條件判斷式1 ) { 條件1成立的話要做的程式碼; } else if ( 條件判斷式2 ) { 條件2成立的話要做的程式碼; } else { 以上條件都不成立的話要做的程式碼; }
IF-ELSE IF 範例:寫個程式,判斷一個人的成績是否及格 (大 學部及格分數為60分,研究所為70分) #include <stdio.h> int main() { int score, n; printf("(1)大學部 (2)研究所:"); scanf("%d",&n); printf("輸入您的分數:"); scanf("%d",&score); if ( score < 60 && n == 1) printf("不及格\n"); } else if ( score < 70 && n == 2) else printf("及格\n"); return 0;
練習 修改上頁程式, 若使用者輸入值不合下列格式則不 做任何輸出 100 只能輸入 1 或 2 代表大學部或研究所 成績只能輸入 0~100 100 score < 0 score >=0 && score <= 100 score >100
課程大綱 選擇控制 (流程控制) 重覆控制 (迴圈) 作業 IF-ELSE SWITCH-CASE FOR WHILE 迴圈中的流程控制: break, continue 巢狀迴圈 作業
SWITCH-CASE 用途:程式執行時根據資料數值選擇要執行的程 式。 語法: switch( 變數或運算式 ) { case 值1: 程式碼; break; //可不加, 程式結果不同! case 值2: 程式碼; break; default: 程式碼; break; }
SWITCH-CASE 範例, 輸入兩個數字, 再根據指定功能顯示兩數計 算結果 #include <stdio.h> int main() { double a,b,ans; int n; scanf("%lf%lf",&a,&b); printf("1: 加法\n"); printf("2: 減法\n"); printf("3: 乘法\n"); printf("4: 除法\n"); scanf("%d",&n); switch(n) case 1: ans=a+b; break; case 2: ans=a-b; case 3: ans=a*b; case 4: ans=a/b; default: printf("無此功能\n"); return 0; } printf("計算結果: %lf\n", ans);
課程大綱 選擇控制 (流程控制) 重覆控制 (迴圈) 作業 IF-ELSE SWITCH-CASE FOR WHILE 迴圈中的流程控制: break, continue 巢狀迴圈 作業
FOR迴圈 用途:當程式需要來回重複執行某一段程式碼時 語法: for通常用在已知重覆執行次數時。
FOR迴圈 範例:印出10行hello 所以在下面的例子中,進入迴圈前會做i=0;當i<10的時候,迴 圈會繼續跑。 #include <stdio.h> int main() { int i; for ( i=0; i<10; i++ ) printf("hello %d\n",i); } return 0;
FOR迴圈 範例:算出1+2+3+....+99+100 #include <stdio.h> int main() { int i; int sum=0; for ( i=1; i<=100; i++ ) sum+=i; } printf("%d\n",sum); return 0;
練習 輸入一個大於0的整數n 印出"1+2+3+…+n = 結果" 例如: 輸入5, 印出 1+2+3+4+5 = 15
課程大綱 選擇控制 (流程控制) 重覆控制 (迴圈) 作業 IF-ELSE SWITCH-CASE FOR WHILE 迴圈中的流程控制: break, continue 巢狀迴圈 作業
WHILE迴圈 用途:當程式需要來回重複執行某一段程式碼時 語法: while通常用在未知重覆執行次數時。 把for中的進入迴圈前要做的事與每跑完一次迴圈會做的事拿 掉,就是while迴圈。
WHILE迴圈 範例:輸入鍵盤按鍵,直到輸入q後程式結束。 #include <stdio.h> #include <conio.h> int main() { char key=0; while(key!='q') key=getche(); } return 0;
DO-WHILE迴圈 用途:當程式需要先做一次某一段程式碼再判斷 是否要重複執行該一段程式碼時 語法: while迴圈中的判斷式可以放在迴圈的最後端, 形成一個do- while迴圈. 這樣子的迴圈最少會跑一次
DO-WHILE迴圈 範例:輸入鍵盤按鍵,直到輸入q後程式結束。 #include <conio.h> int main() { char key; do key=getche(); }while(key!='q'); return 0; }
課程大綱 選擇控制 (流程控制) 重覆控制 (迴圈) 作業 IF-ELSE SWITCH-CASE FOR WHILE 迴圈中的流程控制: break, continue 巢狀迴圈 作業
迴圈中的流程控制 在迴圈中,有兩個指令可方便做控制: break:直接結束迴圈 continue:直接跳到迴圈開頭處繼續下一次執行 用途:常用來設定在迴圈中某些情形下,選擇做 結束(break)或回頭(continue)
迴圈中的流程控制: break 範例:輸入鍵盤按鍵,直到輸入q後程式結束。 #include <conio.h> int main() { char key; while(1) //while中條件為 1 稱為無窮迴圈 key=getche(); if ( key=='q' ) break; } return 0;
迴圈中的流程控制: continue 範例:假如有一棟大樓沒有4樓這個樓層,寫一個 程式顯示從1樓坐電梯到10樓所經過的樓層 #include <stdio.h> int main() { int i; for ( i=1; i<=10; i++ ) // 若是4樓就跳過, 回到迴圈開頭繼續執行 if ( i==4 ) continue; printf("floor %d\n",i); } return 0;
練習 寫個程式,判斷一個人的成績是否及格 (及格分數 為60分) 每次判斷完成績後可輸入 'y': 繼續 其他: 離開 Start End 輸入分數 分數 < 60 no yes 不及格 及格 輸入字元 是否繼續? yes End no End
課程大綱 選擇控制 (流程控制) 重覆控制 (迴圈) 作業 IF-ELSE SWITCH-CASE FOR WHILE 迴圈中的流程控制: break, continue 巢狀迴圈 作業
巢狀迴圈 迴圈中的迴圈 下面範例中, i每加三次, j才加一次, 試著觀察輸出結果 #include <stdio.h> int main() { int i, j; for ( j=0; j<3; j++ ) for ( i=0; i<3; i++ ) printf("* "); } printf("\n"); return 0;
練習 輸入一個整數, 印出n列*號, 每列各含1~n個* 例如: 輸入5 輸出:
練習 印出下列九九乘法表:
課程大綱 選擇控制 (流程控制) 重覆控制 (迴圈) 作業 IF-ELSE SWITCH-CASE FOR WHILE 迴圈中的流程控制: break, continue 巢狀迴圈 作業
作業: 中文大寫數字輸出 輸入一個金額1~99999整數, 印中文大寫數字金額 輸入輸出格式 (格式必須與下面程式結果一致) 中文大寫1~9: 壹,貳,參,肆,伍,陸,柒,捌,玖 需要印出單位: 萬,仟,佰,拾 不需輸出"零" 最後要印出"元整" 輸入錯誤數值範圍,顯示錯誤後程式直接結束 輸入輸出格式 (格式必須與下面程式結果一致) http://www.csie.ntu.edu.tw/~d95027/train/download/number.exe
繳交 使用FTP上傳 請使用FileZilla上傳作業至指定FTP主機 繳交期限:2015. 03/14(六) 主機: 使用者名稱: 密碼: 連接埠: 將程式存到自己學號之資料夾 (請自行新增) 檔名: 251XX_hw1_##.c XX為學號, ##為版本編號 Ex: 25100_hw1_01.c (25100號同學 作業1 第1版) 請使用FileZilla上傳作業至指定FTP主機 繳交期限:2015. 03/14(六) 公佈解答後,不再收作業