Microsoft PowerPoint - STU_C_Lang_CH05

Similar documents
untitled

プログラムの設計と実現II

CC213

C/C++基礎程式設計班

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Microsoft PowerPoint - C_Structure.ppt

新版 明解C言語入門編

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

C/C++ - 字符输入输出和字符确认

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

CC213

新・明解C言語入門編『索引』

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

_汪_文前新ok[3.1].doc

Microsoft PowerPoint - ch2.pptx

C C

C/C++语言 - 运算符、表达式和语句

Microsoft Word - 透析8051之迴圈控制方法.doc

Microsoft Word - ACL chapter02-5ed.docx

新・解きながら学ぶC言語

C 語言—陣列及字串

C/C++程序设计 - 字符串与格式化输入/输出

untitled

untitled

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

C/C++ - 函数

Visual C# 2005程式設計

C/C++ - 文件IO

C

Microsoft PowerPoint - ch04_AEL0080.ppt

C/C++语言 - C/C++数据

Microsoft Word - Chap05.doc

C++ 程式設計

untitled

C

PHP與MySQL 入門學習指南

Microsoft PowerPoint - 06_迴圈2.pptx

untitled

C/C++ 语言 - 循环

Microsoft Word - AEL0124-CH05

C/C++语言 - 分支结构

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

untitled

ttian

chap07.key

Microsoft PowerPoint - FS720-Ch06.ppt

p.2 1. a. b. c. (i) (ii)

CC213

untitled

untitled

untitled

Microsoft Word - Prog1-981.docx

(京)新登字063号


Microsoft Word - 全華Ch15-4Ans.doc

nooog

Microsoft Word - 第3章.doc

[改訂新版]C言語による標準アルゴリズム事典

第3章.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Microsoft Word - C-pgm-ws2010.doc

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

Microsoft PowerPoint - C-Ch11.ppt

<4D F736F F D DA5BFA6A1C476C1C92DBEC7ACECB8D5A8F728B57BB35D292E646F63>

碩命題橫式

C 1

編寫 ActionScript 的位置 2 時間軸上 ( Timeline ) 好比導演可指示各演員該如何動作 先點選某一個影格 ( Frame ), 再按 F9 開啟 動作 影格, 再撰寫程式 元件上 好比個別演員本身各要表演的動作 先點選場景上某一元件, 再按 F9 開啟 動作 影片片段 或 動

FY.DOC

2015年计算机二级(C语言)模拟试题及答案(四)

untitled

C/C++ - 字符串与字符串函数

Microsoft Word - 095_ 什麼最快樂 (白話與經文加註)-ok .doc

新・解きながら学ぶJava

CHAPTER VC#

C/C++ - 数组与指针

Microsoft PowerPoint - Raptor-FlowChart-scy.pptx

If Close[Length]!= 0 Then B Close[Length] 是 Length 日前的 Close 不是 0 的話則執行 B % Number 以 Divisor 來求取除法並傳回剩下的部份和 Divisor 具備相同的符 號 格式 :Number % Divisor Numb

C语言的应用.PDF

2016 年 地 质 工 程 系 教 学 工 作 安 排 2016 学 年 我 系 将 在 总 结 过 去 工 作 的 基 础 上, 结 合 今 年 学 院 以 抓 质 量 强 内 涵 促 改 革 调 结 构 建 品 牌 细 管 理 重 过 程 为 宗 旨, 以 规 范 管 理 深 化 内 涵 为

<4D F736F F D203136BCADBBD8D2E4D3EBD1D0BEBF2E646F63>

萧山中学课程建设方案.doc


Microsoft Word - 9pinggb_A4.doc

Microsoft Word - 9pinggb_A4-f4.doc

理 论 探 索 事 业 单 位 改 革 的 五 点 思 考 余 路 [ 摘 要 ] 事 业 单 位 改 革 是 中 国 改 革 的 重 要 环 节, 其 影 响 力 和 难 度 不 亚 于 国 有 企 业 改 革 本 文 着 重 围 绕 推 进 事 业 单 位 改 革 应 考 虑 的 五 个 方 面

日 本 位 于 亚 洲 东 部, 太 平 洋 西 北 角, 是 我 国 东 方 的 一 个 岛 国 在 洪 积 世 ( 注 1) 的 大 部 分 时 期 内, 日 本 与 大 陆 相 连 大 约 在 洪 积 世 晚 期 至 冲 积 世 ( 注 2) 初 期, 日 本 各 地 发 生 海 进, 出 现

2深化教育教学改革、创新人才培养模式


Microsoft Word - 9pinggb_let.doc

实 习 上 下 点 表 格 解 释 和 相 关 纪 律 要 求 : 1 表 格 中 所 有 名 词 都 为 简 称, 包 括 医 院 名 称 四 年 级 五 年 级 各 专 业 名 称 等 所 有 时 间 都 为 学 生 装 好 行 李 出 发 时 间, 请 提 前 0 分 钟 将 行 李 运 到

3 基 金 杠 杆 从 分 级 基 金 的 概 念, 我 们 知 道 了 分 级 基 金 的 A 份 额 是 每 年 获 得 固 定 收 益 的 稳 健 份 额,B 份 额 是 具 有 杠 杆 效 应 的 激 进 份 额 分 级 基 金 中 的 杠 杆 一 般 有 三 类 : 份 额 杠 杆 =(A

简报158期.doc

Microsoft Word - 9pingb5_let.doc

退休權益.ppt [相容模式]

Microsoft Word - 1.《國文》試題評析.doc

Ps22Pdf

$%%& ()*+, %&, %-&&%%,. $ %,, $,, & /$- 0(1 $%%& %& 234 %-%, 5&%6&633 & 3%%, 3-%, %643 -%%% :::; 7<9; %-%, 3$%$ :::;

# $# #!# # # # # # # %# # # &# # # # #! "

Transcription:

第 5 章程式之設計模式 - 迴圈結構 程式設計與生活 - 使用 C 語言 Shi-Huang Chen Spring 2013 1 第 5 章程式之設計模式 - 迴圈結構 5-1 程式運作模式 5-2 迴圈結構 5-3 break 與 continue 敘述 2

5-1 程式運作模式 日常生活中, 常常有一段時間我們會重複做一些固定的事, 過了這段時間就換做別的事 每星期六 5:00PM 時, 電視台就會播出卡通節目海賊王, 直到電視台與製作片商簽約到期 3 C 語言有下列三種運作模式 : 循序結構 選擇結構 : 第四章介紹 重複結構 : 為一種迴圈控制結構, 是否重複執行迴圈內部的程式敘述, 是由條件判斷式來決定的 4

錯 條件 對 程式敘述 ; 圖 5.1 迴圈結構流程圖 例 : 一位大學生是否能畢業, 必須視該系規定 如果沒達到該系規定, 則必須繼續修課 5-2 迴圈結構 根據條件 ( 這些條件通常是由關係算術運算式 邏輯算術運算式及算術運算式組合而成 ) 撰寫的位置, 迴圈結構分為兩種類型 前測式迴圈 : for, while 後測式迴圈 : do - while 6

前測式迴圈結構 : 即條件寫在迴圈結構開端之迴圈 當執行到迴圈結構開端時, 會檢查條件判斷式 若條件判斷式為對時, 則會執行迴圈內部的程式敘述, 之後會再回到迴圈結構的開端, 再檢查條件判斷式 ; 否則直接跳到迴圈結構外的下一個敘述 7 開始 錯 條件 對 程式敘述 ; 程式敘述 ; 結束 圖 5.2 前測式迴圈結構流程圖例 : 一位大學生是否還要繼續修課, 必須視該系規定 如果沒達到該系規定, 則必須繼續修課

後測式迴圈結構 : 即條件寫在迴圈結構尾端之迴圈 當執行到迴圈結構時, 是直接執行迴圈內部的程式敘述, 並在迴圈結構尾端會檢查條件判斷式 若條件判斷式為對時, 則會從迴圈結構的開端, 再執行一次 ; 否則執行迴圈結構外的下一個敘述 例 : 一位大學生是否能畢業, 必須視該系規定 如果沒達到該系規定, 則必須繼續修課 9 開始 do 程式敘述 ; 對 條件 錯 程式敘述 ; 結束 圖 5.3 後測式迴圈結構流程圖

5-2-1 前測式迴圈結構 在 C 語言提供 for 及 while 兩種前測式迴圈結構 for 語法如下 : for ( 迴圈變數初值設定 ; 進入迴圈的限制條件 ; 迴圈變數增減量 ) 程式敘述 ; 11 當程式執行到 for 迴圈結構時, 程式執行的步驟如下 : (1) 設定迴圈變數的初值 (2) 檢查進入迴圈的限制條件是否成立? 若成立, 則執行步驟 (3); 否則跳到 for 迴圈結構外的下一列敘述 (3) 執行 for 內的程式敘述 (4) 增加 ( 或減少 ) 迴圈變數的值, 然後回到步驟 (2) 12

範例 1-1: 寫一程式, 印出 1+2+ +10 的結果 #include <stdio.h> #include <stdlib.h> int main(void) int i,sum=0; sum= sum+1; sum= sum+2; sum= sum+3; sum= sum+4 ; sum= sum+5; sum= sum+6 ; sum= sum+7; sum= sum+8 ; 暴力解法 13 sum= sum+9; sum= sum+10; printf("1+2+ +10=%d\n",sum); system("pause"); return 0; [ 程式解說 ] 若問題改成印出 1+2+ +100 的結果, 則必須再增加 90 列類似的指令 因此, 這種相當於我們在小學時所學的基本解決方法, 是比較沒有效率的 執行結果 1+2+ +10=55. 14

範例 1-2: 寫一程式, 印出 1+2+ +10 的結果 #include <stdio.h> #include <stdlib.h> int main(void) int i,sum=0; for (i=1 ; i<=10 ; i=i+1) sum=sum + i ; printf("1+2+ +10=%d\n",sum); system("pause"); return 0; 執行結果 1+2+ +10=55. 15 [ 程式解說 ] (1) 由 for ( ) 中, 知道迴圈變數 i 的初值 =1, 進入迴圈的限制條件為 i<=10 及迴圈變數增量 =1 ( 因 i=i+1) 利用這三個資訊, 知道 for 迴圈結構 內的程式敘述總共會執行 10((10-1)/ 1+1) 次, 即執行了 1+2+ +10 的計算 直到 i=11 時, 才違反迴圈限制條件而跳離 for 迴圈結構 16

(2) 因大括號 內只有一列敘述, 所以 被省略 (3) 若改成印出 1+2+ +100, 程式只須將 i<=10 改成 i<=100 17 while 語法 ( 一 ) while ( 進入迴圈的限制條件 ) 程式敘述 ; 18

當程式執行到 while 迴圈結構時, 程式執行的步驟如下 : (1) 檢查 while( ) 內的限制條件是否成立? 若成立, 則執行步 (2), 否則跳到 while 迴圈結構外的下一列敘述 (2) 執行 while 內的程式敘述 (3) 回到步驟 (2) 19 範例 3: 寫一程式, 一個字元一個字元輸入, 直到按 Enter 鍵才停止, 印出共輸入幾個字元 (Enter 鍵對應的字元為 '\r',ascii 值為 13) #include <stdio.h> #include <stdlib.h> int main(void) int number=0; printf(" 一個字元一個字元輸入 "); printf(" ( 直到按 Enter 鍵才停止 ):"); while (getche()!= '\r') number = number + 1; printf("\n 共輸入 %d 個字元 \n", number); system("pause"); return 0; 20

執行結果 一個字元一個字元輸入 :week 1 (Enter 鍵 ) 共輸入 6 個字元 21 while 語法 ( 二 ) while (1) 程式敘述 ; 22

當程式執行到 while 迴圈結構時, 程式會不斷地重複執行 while 內的程式敘述 在 while 內的程式敘述中, 一定要包含一選擇結構及 break; 敘述 若選擇結構中的條件成立, 則執行 break; 敘述, 而離開 while 迴圈 ; 否則繼續重複執行 while 內的程式敘述 23 範例 5: 寫一程式, 輸入整數 a 及 b, 然後再讓使用者回答 a+b 的值 答對, 則印出答對了 ; 否則繼續讓使用者回答 #include <stdio.h> #include <stdlib.h> int main(void) int a, b, answer; printf(" 輸入 a, b:"); scanf("%d, %d", &a, &b); while (1) printf("a+b="); 24

scanf("%d", &answer); if (answer == a + b) break; printf(" 答對了!\n"); system("pause"); 執行 return 0; 結果 輸入 a 及 b: 2,3(Enter 鍵 ) a+b= 4 a+b= 5 答對了! 25 5-2-2 後測式迴圈結構 do - while 語法如下 : do 程式敘述 ; while( 進入迴圈的限制條件 ); 26

do - while 迴圈結構, 程式執行的步驟如下 : (1) 程式會直接執行 do while 內的程式敘述 (2) 內的程式敘述執行完畢, 檢查進入迴圈的限制條件是否成立, 若成立, 則執行步驟 (1); 否則跳到 do while 迴圈結構外的下一列敘述 27 範例 8: 寫一程式, 連續輸入字元, 直到使用者按 Esc 鍵為止, 最後印出共輸入幾個字元 ( 提示 :Esc 鍵的 ASCII 值為 27) #include <stdio.h> #include <stdlib.h> #include <conio.h> int main (void) char ch; int num_char = -1; // 共輸入幾個字元 printf(" 連續輸入字元 ( 直到按 Esc 鍵為止 ):") 28

do num_char++; ch = getche(); while (ch!= 27); // ASCII 值為 27 表示 Esc 鍵 printf("\n 共輸入 %d 個字元.\n", num_char); system("pause"); return 0; 執行結果 連續輸入字元 :Today is Moday(Esc 鍵 ) 共輸入 14 個字元. 29 5-2-3 巢狀迴圈 巢狀迴圈指的是一層迴圈中至少還有一層迴圈 當問題具有重複執行某些特定的敘述, 且這些特定的敘述受到兩個或兩個以上的因素而改變, 此時使用巢狀迴圈結構來撰寫是最適合的用法 30

範例 10: 寫一程式, 印出九九乘法 #include <stdio.h> #include <stdlib.h> int main(void) int i,j; for (i=1; i<=9; i++) for (j=1; j<=9; j++) printf( %d x %d = %2d\t,i, j, i*j); printf("\n"); system("pause"); return 0; 31 1x1= 1 1x2= 2 1x3= 3 1x4= 4 1x5= 5 1x6= 6 1x7= 7 1x8= 8 1x9= 9 2x1= 2 2x2= 4 2x3= 6 2x4= 8 2x5=10 2x6=12 2x7=14 2x8=16 2x9=18 3x1= 3 3x2= 6 3x3= 9 3x4=12 3x5=15 3x6=18 3x7=21 3x8=24 3x9=27 4x1= 4 4x2= 8 4x3=12 4x4=16 4x5=20 4x6=24 4x7=28 4x8=32 4x9=36 5x1= 5 5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45 6x1= 6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 6x7=42 6x8=48 6x9=54 7x1= 7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 7x8=56 7x9=63 8x1= 8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 8x9=72 9x1= 9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

(1) 列印時, 列從第一列變化到第九列, 行從第一行變化到第九行, 有兩個因素在改變, 所以使用兩層迴圈結構來撰寫是最適合 (2) 以九九乘法的資料共有九列九行資料為例, 其呈現的樣子為平面 ( 或表格 ) 為二度空間, 故使用兩層迴圈結構來撰寫是最適合 33 範例 11: 寫一程式, 用 * 模擬金字塔 ( 單面, 高度 3, 寬度 5) 圖案 #include <stdio.h> #include <stdlib.h> int main(void) int i, j; for (i=1; i<=3; i++) for (j=1; j<=3-i; j++) printf(" "); for (j=1; j<=2*i-1; j++) printf("*"); printf("\n"); system("pause"); return 0; 執行結果 * *** ***** 34

5-3 break; 與 continue; 敘述 在 for while 及 do - while 這三種迴圈結構中, 一般情況是在違反進入迴圈的限制條件, 才會結束迴圈的運作 但若問題除了具有重複執行某些特定的敘述特性外, 還包括某些例外性時, 則在這三種迴圈結構中必須加入 break; ( 目的 : 符合某個例外條例時, 跳出迴圈結構 ), 或加入 continue; 目的 : 符合某個例外條例時, 不執行某些敘述 35 5-3-1 break; 敘述的功能與使用方式 break; 敘述除了用在 switch 的選擇結構 ( 參考 5-2- 4 節 ) 外, 還可用在迴圈結構 當程式執行到迴圈結構內的 break; 敘述時, 程式會跳出迴圈結構, 並執行迴圈結構外的第一列敘述 注意 : 當 break; 敘述用在巢狀迴圈結構內時, 它一次只能跳出一層迴圈結構 ( 離它最近的那層迴圈結構 ), 而不是跳出整個巢狀迴圈結構外 36

範例 13: 寫一程式, 模擬密碼驗證 ( 假設密碼為 201209), 最多可以輸入三次密碼 #include <stdio.h> #include <stdlib.h> int main(void) int i, password; for (i=1; i<=3; i++) // 最多可輸入 3 次密碼 printf(" 輸入密碼 :"); scanf( %d", &password); if (password==201209) printf(" 密碼正確.\n"); break; 37 else printf(" 密碼不正確.\n"); system("pause"); return 0; 執行結果 輸入密碼 :65214 密碼不正確輸入密碼 :201209 密碼正確 38

5-3-2 continue; 敘述的功能與使用方式 continue; 敘述的目的是不執行迴圈結構內的某些敘述 for while 及 do - while 三種迴圈結構, 在使用 continue; 所產生的流程之差異 : 在 for 迴圈結構內使用 continue;: 執行到 continue;, 程式會跳到該層 for ( ) 內的第三部分, 做迴圈變數增 ( 或減 ) 量 39 在 while 迴圈結構內使用 continue;: 執行到 continue;, 程式會跳到該層 while ( ) 內, 檢查迴圈的限制條件是否成立 在 do while 迴圈結構內使用 continue;: 執行到 continue;, 程式會跳到該層 do 的地方 40

範例 14: 寫一程式, 計算 1 到 100 之間的偶數和 #include <stdio.h> #include <stdlib.h> int main(void) int i,sum=0; for (i=1; i<=100; i++) 是否有其他寫法? if (i%2==1) continue; sum=sum+i; // end of for printf("1 到 100 之間的偶數和 =%d\n, sum); system("pause"); return 0; 執行 1 到 100 之間的偶數和 結果 =2550 41