陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司 第五章 控制結構 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司.

Slides:



Advertisements
Similar presentations
程序设计基础 第 2 章 解题要有程序 主讲:吴献彩 Tel : QQ :
Advertisements

创作计算机程序 学习目标: 定义术语 “ 计算机程序 ” 说明编程过程中流程图和伪代码的用途 介绍程序在寻求解决方案的过程中可以利用的两种方 法 区别计算机编程的两个主要步骤 列举并描述面向对象编程的三个要素.
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
数据结构(C语言版) Data Structure
第4章 JavaScript脚本语言基础 4.1 JavaScript简介 4.2 JavaScript语法基础
第 5 章 流程控制 (一): 條件分支.
新世代計算機概論 第14章 程式語言.
高中算法与程 序设计 教学建议 ---循环结构部分
第三章 控制结构.
编译原理与技术 中间代码生成 2018/9/17 《编译原理与技术》讲义.
程式設計實作.
Chapter 1 複習.
第5章 程序结构.
C++Primer 3rd edition 中文版 Chap 5
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
第一次随堂作业(10.16) 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
C++中switch语句的BNF 否极泰来 ——《周易》.
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
C 語言簡介 - 2.
Access VBA程序设计 本章重点 Access Basic编程语言 运算符、函数与表达式 Access Basic语句 模块的使用
第4章 程序控制结构与算法基础.
計算機程式 廖文淵 Department of Computer Science and Engineering
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
数学3(必修)—— 算 法 ALGORITHM 苏州大学数学科学学院 徐稼红
流程控制、陣列 台南市聖功女子高級中學 毛全良.
條件判斷指令 -if 指令 -switch 指令 迴圈指令 - for 迴圈 - while迴圈 - break、continue 指令
程式語言Visual Basic 重複結構 黃瀧輝 老師 Long Hwai,Huang.
6-1 For…Next迴圈敘述 6-2 While…End While迴圈敘述 6-3 Do…Loop迴圈敘述 6-4 巢狀迴圈敘述
第三章 結構化程式設計 授課老師:___________.
CHAP13 演算法概論 高中資訊科技概論 松崗圖書公司.
丙級電腦軟設-VB程式設計 資料來源:林文恭研究室 整理:張福生.
第5章 Visual Basic控制结构 之 常用算法举例
7.4 布尔表达式和控制流语句 布尔表达式有两个基本目的 计算逻辑值 c = (a > b) && a > 1
電腦解題─流程圖簡介 臺北市立大同高中 蔡志敏老師.
程式設計 老師:戴自強 助教:楊斯竣.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
江西财经大学信息管理学院 《数据库应用》课程组2007
小结 郭清溥.
C语言概述 第一章.
Visual Basic 程序设计教程.
软件工程 第四章 软件设计 软件过程设计技术与工具.
程式結構&語法.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
软件设计任务 从工程管理的角度来看,软件设计分两步完成。 概要设计,将软件需求转化为数据结构和软件的系统结构。
第三章 C++的语句和简单的程序设计 主要内容:
第二章、第三章错题分析.
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
第2章 算法与C语言程序 程序 (1)数据的描述:数据的类型和组织形式(数据结构) (2)操作的描述:操作步骤(算法) 沃思指出:
第3 语言翻译问题 [学习目标]:学习和掌握语言的语法的基本概念和基本要素,理解翻译的步骤;学习和掌握BNF文法。
第3章 JavaScript基本语句.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
本节内容 Lua基本语法.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
單元名稱:結構化程式設計 報告人 劉洲溶.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
第二章 Java基本语法 讲师:复凡.
Do While 迴圈 東海大學物理系‧資訊教育 施奇廷.
C#快速導讀 流程控制.
判斷(選擇性敘述) if if else else if 條件運算子.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
C语言基本语句 判断循环.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
1.2.3 循环语句.
Presentation transcript:

陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司 第五章 控制結構 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司

大綱 結構化程式設計 結構化程式設計的基本結構 反覆結構 流程圖 精選習題

結構化程式設計 定義 從事程式設計的過程中,依照程式的邏輯特性將程式細分成幾個較小的問題,再將這些較小的問題同樣依照程式的邏輯特性再往下細分成更小的問題,依此類推直到很容易編寫程式的單元時為止。 注意事項 當採用結構化程式設計法來設計程式時,應當儘量避免使用GOTO命令,以避免破壞程式的可讀性及結構性。 優點 程式可分工、容易除錯、可讀性較高及較易維護 缺點 程式碼較長及執行時間較久

結構化程式設計的基本結構 基本結構共有三類 循序結構(sequential structure) 敘述會按照先後順序來執行 選擇結構(selection structure) 單路選擇 雙路選擇 多重選擇 反覆結構(iteration structure) 前測迴路 後測迴路

循序結構 循序執行的程式段即為循序結構 範例 敘述-1; 敘述-2; … 敘述-n; 以上n條敘述按照敘述-1、敘述-2、…、敘述-n的順序執行

選擇結構 選擇結構可分為 單路選擇 雙路選擇 多重選擇

單路選擇結構 意義 範例 條件成立時有相對應的敘述必須被處理,但是當條件不成立時則沒有相對應的敘述要處理,因此稱為單路選擇 Pascal語言 if 條件 then 敘述 C/C++/Java語言 if (條件) 敘述 Basic語言 if 條件 then 行號或敘述 Algol 60語言 if 條件 then敘述 以上的單路選擇敘述均代表條件成立時執行對應之敘述,但若條件不成立則直接執行if的下一條敘述

雙路選擇結構 意義 範例 條件成立時有相對應的敘述必須被處理,而且當條件不成立時也有相對應的敘述要處理,因此稱為雙路選擇 Pascal if 條件 then 敘述1 else 敘述2 C/C++/Java  if (條件) 敘述1;else 敘述2 BASIC  if 條件 then 行號或敘述 else 行號或敘述 Algol 60  if 條件 then敘述1 else敘述2

範例 若A=-5,B=5,則執行完下列程式後,A、B變成多少?(A)5,5 (B) -5,-5 (C) 5,-5 (D) 15,5 if (A<0) if (B<0) A=B; else B=A; else A=B+10;

範例 (1)執行下列程式所印出之值為何? (2)若將S的值改為85,則印出之值又將為何? (3)又若將S的值改為65,則結果為何? S=30; G=2; IF S> =60 THEN IF S> =70 THEN G=4 ELSE G=6; WRITELN(G);

範例 執行右側的Java程式,可能得到幾種不同的V值,分別為何?使V值為1的條件為何?(將條件盡量簡化) V=1; if (C && L) V=2; else if (! C) { if (S && Y) V=3; else if (S && (! Y)) V=4; }

範例 底下的C程式會讓變數X之值為何? if (((3>2) && (2<2))∣∣(5==6)∣∣((5>4) && 3)) x=3; else x=4;

多重選擇結構 多重選擇結構一般是指case結構 Algol W首創case結構

多重選擇結構 -- Algol W Algol W的case結構語法如下: case <整數運算式> of begin exp 1; exp 2; ... exp n; end; 其中case的選擇項一定必須是整數運算式,此點大大限制了case敘述的使用彈性。當選擇項的值為1時執行exp 1,為2時執行exp 2,...,為n時則執行exp n

多重選擇結構 -- Pascal Pascal語言提供的case敘述語法如下: case <選擇運算式> of <選擇標記1>: 敘述1; <選擇標記2>: 敘述2; ...... <選擇標記n-1>: 敘述(n-1) 〔else 敘述n〕 end; 以上case敘述代表當<選擇運算式>=<選擇標記1>時執行“敘述-1”,若<選擇運算式>=<選擇標記2>時執行“敘述-2”,….,若<選擇運算式>=<選擇標記n-1>時執行“敘述-(n-1)” 但若<選擇運算式>與所有的<選擇標記>皆不符合時則執行時執行“敘述-n”(假如“else”部份存在) Pascal語言的case敘述屬於內隱分歧(implicit branch)結構 運算式的型態:整數,布林值,字元、列舉式資料型態或子範圍皆可

多重選擇結構 – C/C++/Java C/C++/Java 語言提供的多重選擇結構語法 switch (<選擇運算式>) { case(選擇標記1): 敘述1; break; case(選擇標記2): 敘述2; break; ..... case(選擇標記n-1): 敘述(n-1); break; [default: 敘述n;] } 以上switch敘述代表,當<選擇運算式>=<選擇標記1>時執行“敘述1”,若<選擇運算式>=<選擇標記2>時執行“敘述2”,….,若<選擇運算式>=<選擇標記n-1>時執行“敘述(n-1)” 但若<選擇運算式>與所有的<選擇標記>皆不符合時則執行時執行“敘述n”(假如“default”部份存在)。 switch敘述屬於外顯分歧(explicit branch)結構 switch結構中之敘述為單一或複合敘述皆可

多重選擇結構 – ADA Ada語言的case結構之語法結構 case 運算式 is {when 選擇 {∣選擇}敘述} end case “運算式”可為整數或列舉式資料的型態 可利用“others”來減少未定義之情況

多重選擇結構設計時應注意的事項 選擇運算式允許的型態為何? 是否允許由 CASE 標記內,跳出到外部結構? 標記間是否必須彼此互斥 (disjoint)? 是否提供“default”或“else”等未定義情況?

反覆結構 定義 反覆結構(iteration structure)是指讓一個或一群敘述能夠反覆的執行之敘述群 種類 前測迴路 後測迴路

前測迴路(pre-test loop) 特性 一般程式語言常見的前測迴路可分為二類 迴圈執行的最少次數是0次 最多次數是無限多次 while-loop for-loop

Pascal 的 while-loop 語法 while <條件> do begin 迴圈敘述 end; 執行while loop時會先測試<條件>是否成立,當<條件>成立時,才會進入迴圈敘述執行,否則跳出迴圈結構,所以while loop可能一次也不執行

C/C++/Java 的 while-loop 語法 while (<條件>) {      迴圈敘述 } 執行while loop時會先測試<條件>是否成立,當<條件>成立時,才會進入迴圈敘述執行,否則跳出迴圈結構,所以while loop可能一次也不執行

Basic 的 while-loop 語法 while <條件> 迴圈敘述 wend 執行while loop時會先測試<條件>是否成立,當<條件>成立時,才會進入迴圈敘述執行,否則跳出迴圈結構,所以while loop可能一次也不執行

while loop 重要特性 迴圈執行之次數事先可不知

範例 右側程式段執行完畢後,S=? S = 0; I = 7; while (I <= 127) { S := S+I; I := I+3; }

Pascal 的 for-loop 第一種 for 控制變數 := <初值> to <終值> do begin     迴圈敘述 end; 第二種 for 控制變數 := <初值> downto <終值> do begin     迴圈敘述 end; 變數每次遞增之值需在程式中控制,而非在“for statement”中控制

C/C++/Java 的 for-loop 語法 for (exp1;exp2;exp3) { 迴圈敘述 } exp1:設定控制變數之初值

Basic 的 for-loop 語法 FOR 控制變數 = 初值 TO 終值 STEP 遞增量 迴圈敘述 NEXT 控制變數 當遞增量>=0時,控制變數<=終值,執行迴圈敘述 當遞增量<0時,控制變數>=終值,執行迴圈敘述

範例 BASIC程式片段如右,試計算出當程式執行後,何數將被印出? 10 S = 0 20 FOR I = 11 TO 123 STEP 7 30 S = S+I 40 NEXT I 50 PRINT S

範例 右列BASIC程式中K=K+I*J將被執行多少次? 10 FOR I=1 TO 6 STEP 3 20 FOR J=5 TO 0 STEP-2 30 K=K+I*J 40 NEXT J 50 NEXT I

範例 10 S=0 20 FOR I=7 TO 127 STEP 3 30 S=S+I 40 NEXT I 50 PRINT S 60 END 請問S=?

Fortran 77 的 DO-loop Fortran 77“DO-loop”即一般高階語言的“for-loop” 語法 Do label控制變數=初值,終值,增值    迴圈敘述 label continue DO loop的特性為控制變數的型態可以是整數、單精確度型態 控制變數在Do loop中可變更,僅能由Do敘述進入Do loop中(即“單一入口”之規定) Fortran 77的Do loop結構中的迴圈敘述可能一次也未能執行,也就是說Fortran 77的DO loop是前測迴路

Algol 60 的 for-loop 語法 for敘述::=for控制變數:= <list-element> {,<list-element>}do <stmt> <list-element>::= <exp>∣<exp> step <exp> until <exp>∣<exp> while <Boolean-exp> Algol 60“for loop”的特性為前測迴路 控制變數的型態可以是整數或實數 控制變數在Do loop中能改變 可利用GOTO敘述跳躍至迴圈敘述內

Ada 的 for-loop 語法 for 控制變數 in 〔reverse〕 範圍 loop 迴圈敘述 end loop 控制變數的型態必須是整數或列舉式資料型態 控制變數在Do loop中不能改變 不可利用GOTO敘述跳躍進入迴圈敘述

後測迴路 (post-test loop) 特性 迴圈執行的最少次數是1次 最多次數是無限多次

Pascal 的後測迴路 語法 repeat 迴圈敘述 until <條件> 先執行迴圈敘述再檢查<條件>,<條件>不成立時執行迴圈敘述,當<條件>成立時將離開迴圈結構

C/C++/Java 的後測迴路 語法 do { 迴圈敘述 } while (<條件>) 先執行迴圈敘述再檢查<條件>,<條件>成立時執行迴圈敘述,當<條件>不成立時將離開迴圈結構

Fortran IV 的 DO-loop 語法 Do label控制變數=初值,終值,增值 迴圈敘述 label continue 控制變數的型態必須是整數 控制變數在Do loop中不能改變 可利用GOTO敘述離開迴圈敘述 最特別的是Fortran IV的Do loop結構中的迴圈敘述至少會執行一次,也就是說Fortran IV的DO loop其實是後測迴路,這種作法,大大地違背了程式設計師的習慣用法,因此在Fortran 77便已將“DO loop”改為前測迴路

流程圖(flow chart) 主要的功用是發展程式時可利用流程圖來做為分析的工具,而且讓維護工作較容易且容易除錯

常見的流程圖符號 開始/結束符號 敘述符號 副程式 條件判斷符號 輸入/輸出符號 連接符號 流向符號

精選習題 請簡述GOTO敘述的分類 GOTO結構有何利弊,舉出四種可以取代GOTO結構的流程控制敘述指令 試舉一例說明何謂無窮迴路(infinite loop)? 說明FORTRAN IV和FORTRAN 77 之DO迴圈的不同之處。 試問C語言和Pascal語言的for loop有何不同?二種語言不同設計的主要理由為何? 試說明C語言的switch結構和Pascal語言的case結構的相異之處。