450 likes | 803 Views
C/C++ 基礎程式設計班 程式流程控制 (Control Flow ). 講師:鄒尚軒 , 8/6, 2013. 課程大綱. 基本輸入輸出複習 選擇判斷 ( 流程控制 ) i f-else 判斷 switch-case 判斷 重覆控制 ( 迴圈 ) for 迴圈 while 迴圈 迴圈中的流程控制: break 、 continue 巢狀迴圈 作業. 基本輸入輸出複 習. scanf (" 格式化字串 ", & 參數 1…) ; 有幾個 " % 什麼 " 就跟使用者拿幾個輸入 printf (" 格式化字串 ", 參數 1…) ;
E N D
C/C++基礎程式設計班程式流程控制 (Control Flow) 講師:鄒尚軒, 8/6, 2013
課程大綱 • 基本輸入輸出複習 • 選擇判斷 (流程控制) • if-else 判斷 • switch-case 判斷 • 重覆控制 (迴圈) • for 迴圈 • while 迴圈 • 迴圈中的流程控制:break、continue • 巢狀迴圈 • 作業
基本輸入輸出複習 • scanf("格式化字串",&參數1…); • 有幾個"%什麼"就跟使用者拿幾個輸入 • printf("格式化字串", 參數1…); • 一個%就代表後面要有一個參數 • 除了"%什麼"以外都直接輸出 • printf("Hello world, %d times\n", num); • 修飾子"數字"代表要有幾個空格寬,並印在空格裡 • 修飾子".數字"代表小數後面要有幾位,和前者沒關係 • 如果只是要輸出到小數第三位:printf("%.3lf", num); • 如果要空十格,輸出到小數第三位:printf("%10.3lf", num); • %什麼:%d(int), %c(char), %f(float), %lf(double)
練習 • 製作一個簡易計算機 • 要求 • 印出+-*/的運算結果(不須考慮除以0) • 輸入:兩個數字,以空白隔開 • 輸出:小數皆印到第一位,數字寬度占5格參考程式
課程大綱 • 基本輸入輸出複習 • 選擇判斷 (流程控制) • if-else 判斷 • switch-case 判斷 • 重覆控制 (迴圈) • for 迴圈 • while 迴圈 • 迴圈中的流程控制:break、continue • 巢狀迴圈 • 作業
if-else 判斷 • 用途:程式執行時根據條件情況選擇要執行的程式碼。 • 語法: • if( 條件判斷式){ 條件成立的話要做的程式碼;}else{ 條件不成立的話要做的程式碼;} • else可視情況省略不寫 • 當{ }中程式只有一行, 可省略{ }(但不建議)
if-else 判斷 • 範例:寫個程式,判斷一個人的成績是否及格 (及格分數為60分) Start 輸入分數 分數<60 no yes 不及格 及格 End
if-else 判斷 • 邏輯判斷可以使用的運算符號如下 • 用來連結邏輯判斷的符號有
if else-if else判斷 • 若我們要判斷的條件不只是做“對”或“錯”的二分法時,可以在if後增加else if來做多重判斷。 • 語法: • if( 條件判斷式1){ 條件1成立的話要做的程式碼;}else if( 條件判斷式2) { 條件2成立的話要做的程式碼;}else{ 以上條件都不成立的話要做的程式碼;}
if else-if else 判斷 • 範例:寫個程式,判斷一個人的成績是否及格 (大學部及格分數為60分,研究所為70分)
練習 • 修改上頁程式,若使用者輸入值不合下列格式則不做任何輸出 • 只能輸入 1 或 2 代表大學部或研究所 • 成績只能輸入 0~100 0 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 判斷 • 範例:輸入一個簡單的運算式,算出結果如:輸入1.2*3.9,輸出1.20*3.90=4.68
課程大綱 • 基本輸入輸出複習 • 選擇判斷 (流程控制) • if-else 判斷 • switch-case 判斷 • 重覆控制 (迴圈) • for 迴圈 • while 迴圈 • 迴圈中的流程控制:break、continue • 巢狀迴圈 • 作業
for 迴圈 • 用途:當程式需要來回重複執行某一段程式碼時 • for通常用在已知重覆執行次數時。 • 語法: • for ( 進入前做的事情; 繼續執行迴圈的條件; 每跑完一次迴圈會做的事 ){要被重覆執行的程式碼;} • for迴圈會重複執行數次{ }中所包含的程式碼, 至於是執行幾次則由for ( ; ; )當中的東西來決定。
for 迴圈 • 範例:印出10行hello • 所以在下面的例子中,進入迴圈前會做i=0;當i<10的時候,迴圈會繼續跑。 • 迴圈每跑完一圈,就會做i++的動作。 • 執行程式時可以看到i由一開始的0會每次都累加上1, 到最後變成10之後就結束程式。
for 迴圈 • 範例:算出1+2+3+....+99+100
練習 • 輸入一個大於0的整數n印出"1+2+3+…+n= 結果" • 例如: 輸入5, 印出 1+2+3+4+5 = 15
課程大綱 • 基本輸入輸出複習 • 選擇判斷 (流程控制) • if-else 判斷 • switch-case 判斷 • 重覆控制 (迴圈) • for 迴圈 • while 迴圈 • 迴圈中的流程控制:break、continue • 巢狀迴圈 • 作業
while 迴圈 • 用途:當程式需要來回重複執行某一段程式碼時 • while通常用在未知重覆執行次數時。 • 語法: • while(繼續執行迴圈的條件){ 條件成立的話要做的程式碼;} • 把for中的進入迴圈前要做的事與每跑完一次迴圈會做的事拿掉,就是while迴圈。 • 例如:for(; i < 40;) 等於 while(i<40)
while 迴圈 • 範例:直到輸入0才結束迴圈。
do-while 迴圈 • 用途:當程式需要先做一次某一段程式碼再判斷是否要重複執行該一段程式碼時 • 語法: • do{ 條件成立的話要做的程式碼;}while(繼續執行迴圈的條件); • do-while 保證{}中的程式碼一定會至少執行一次
do-while 迴圈 • 範例:比較while和do-while。
課程大綱 • 基本輸入輸出複習 • 選擇判斷 (流程控制) • if-else 判斷 • switch-case 判斷 • 重覆控制 (迴圈) • for 迴圈 • while 迴圈 • 迴圈中的流程控制:break、continue • 巢狀迴圈 • 作業
迴圈中的流程控制 • 在迴圈中,有兩個指令可方便做控制: • break:直接結束迴圈 • continue:直接跳到迴圈開頭處繼續下一次執行 • 用途:常用來設定在迴圈中某些情形下,選擇做結束(break)或回頭(continue)
迴圈中的流程控制: break • 範例:直到 i>10 才結束迴圈
迴圈中的流程控制: continue • 範例:假如有一棟大樓沒有4樓這個樓層,寫一個程式顯示從1樓坐電梯到10樓所經過的樓層
練習 • 寫個程式,判斷一個人的成績是否及格 (及格分數為60分) • 每次判斷完成績後可輸入 • 'y': 繼續 • 其他: 離開 Start 輸入分數 分數< 60 no yes 不及格 及格 輸入字元 是否繼續? yes End no End
課程大綱 • 基本輸入輸出複習 • 選擇判斷 (流程控制) • if-else 判斷 • switch-case 判斷 • 重覆控制 (迴圈) • for 迴圈 • while 迴圈 • 迴圈中的流程控制:break、continue • 巢狀迴圈 • 作業
巢狀迴圈 • 迴圈中的迴圈 • 下面範例中, i每加三次, j才加一次, 試著觀察輸出結果
練習 • 輸入一個整數, 印出n列*號, 每列各含1~n個* • 例如: • 輸入5 • 輸出:
練習 • 印出下列九九乘法表:
課程大綱 • 基本輸入輸出複習 • 選擇判斷 (流程控制) • if-else 判斷 • switch-case 判斷 • 重覆控制 (迴圈) • for 迴圈 • while 迴圈 • 迴圈中的流程控制:break、continue • 巢狀迴圈 • 作業
作業一 • 有兩題 • 若是用 visual studio 開兩個專案寫會比較好,因為一個專案裡面只能有一個 int main() • 只要繳交程式碼(c,cc,cpp檔)就好 • 檔案名為"座號-hw1-1.cpp"和"座號-hw1-2.cpp" • 以 email 繳交至 ntu.train@gmail.com • 標題請以”[cb230] hw1-座號”寄送 • 座號是學號的後兩碼(01~??) • 作業成績會公佈於課程網站 • 作業輸出請符合規定,不要多輸出也不要少輸出 • 繳交期限:8/9(五)23:59,遲交12小時為一單位,一次扣10% • 有問題上下課時請盡量問! 這裡有空白
作業一 • 第一題-50% • 輸入年份與月份,例如:19992 • 輸出年月及該月天數,如:1999.2 is 28days. • 需考慮閏年,為簡化題目,只要年份被4整除即是閏年 • 提示: • 利用switch case判斷月份 • 利用if else處理閏年 • 利用取餘數(%)判斷是否被整除 • 範例程式: • win: http://www.csie.ntu.edu.tw/~r01922006/train/cb230/code/hw1-1.exe • mac: http://www.csie.ntu.edu.tw/~r01922006/train/cb230/code/hw1-1 • 輸入輸出請與範例程式一樣
作業一 • 第二題-50% • 練習題延伸,輸入一個數字n,印出1~n奇數排的星號,星號間不用空白,如圖n=9: • 若n=10,結果仍和右圖相同 • 提示: • 巢狀 for 迴圈 • 利用 if 判斷 • if 裡面有 for 迴圈沒問題(重點提示) • 範例程式: • win: http://www.csie.ntu.edu.tw/~r01922006/train/cb230/code/hw1-2.exe • mac: http://www.csie.ntu.edu.tw/~r01922006/train/cb230/code/hw1-2 • 輸入輸出請和範例程式一樣
作業一評分標準 • 編譯通過:20% • 程式正確性:40% • 輸入輸出是否正確:40% • 輸入輸出請和範例程式一致,不要多輸出也不要少輸出,視情況扣分 • 繳交程式碼前請再三確認是否可以編譯,以及是否正確 • 有問題請發問 • 早點開始做歐!
作業一 • 如果你覺得上面兩題很簡單,可以試著寫這題 • 輸入一個整數,每三位插入一個逗號,也就是常見的數字分位 • 如: • 輸入:1234 • 輸出:1,234 • 這題不用交