流程图与选择结构_第1页
流程图与选择结构_第2页
流程图与选择结构_第3页
流程图与选择结构_第4页
流程图与选择结构_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CHAPTER7流程圖與選擇結構

學習目標讓讀者了解利用電腦處理問題的步驟流程圖的意義與用法程式的基本結構有那些?選擇結構有那些相關的敘述與函數?If-Then敘述的功能與用法If-Then-Else敘述的功能與用法巢式If敘述的用法Select敘述的功能與用法IIf、Choose與Switch函數的功能與用法MsgBox敘述與函數的功能與用法

-訊息方塊的產生與運用

7-1利用電腦處理問題的步驟一、瞭解問題:先瞭解問題的要求及條件,確定需要輸入的資料及輸出的結果。二、設計解題程序:研究分析解題方法,構思有效可行的處理程序,可以用流程圖(FlowChart)來表達所要處理的步驟。三、編寫程式:依程式語言的語法規則,將解題的程序轉寫成程式。四、上機執行:將程式自鍵盤輸入電腦執行。五、檢查結果:檢查輸出結果是否正確,如果不正確,再將錯誤的原因找出來,並加以更正。

7-2流程圖的意義

流程圖是利用簡明、標準的圖形及線條,來描述程式的處理步驟。常用的流程圖有下列六種:

1.開始或結束符號(起訖符號):表示流程圖的起點或終點,一個流程圖必須有起點及終點,而且只能有一個起點,但可以有一個以上的終點。

【例1】:開始或結束符號

開始結束2.處理符號:表示一件工作的處理,可在內部列出計算公式或處理動作

【例2】:計算a=b+c

處理符號

3.輸入或輸出符號:由輸入設備輸入資料,或由輸出設備輸出資料。

【例3】:輸入n值

輸入或輸出符號【例4】:輸出n值

a=b+c輸入n輸出n4.

流向符號:表示程式進行的方向。

表示有一個條件要判斷,並根據其結果決定下一個執行步驟。菱形內註明待判斷的條件,通常有一個入口,二個或三個出口。

【例7】

5.決策符號

6.迴圈符號:利用迴圈(Loop)敘述時使用。

流程圖是畫來給人看的,可作為自己或別人瞭解程式做法及處理步驟的一種參考文件。初學程式語言的人,在設計程式之前,最好先利用流程圖來規劃整個程式結構,訓練處理問題的邏輯思路,對於程式邏輯比較容易融會貫通。(可利用Word軟體中的【插入/圖片/快取圖案/流程圖】來製作流程圖)

流程圖是畫來給人看的,可作為自己或別人瞭解程式做法及處理步驟的一種參考文件。初學程式語言的人,在設計程式之前,最好先利用流程圖來規劃整個程式結構,訓練處理問題的邏輯思路,對於程式邏輯比較容易融會貫通。(可利用Word軟體中的【插入/圖片/快取圖案/流程圖】來製作流程圖)

7-3程式的基本結構一、循序結構:指多個敘述依序執行的方式。

【例1】

循序結構x=Inputbox("請輸入第一個數")y=Inputbox("請輸入第二個數")s=x+yPrint"兩數的和=";s

意義:依序執行四個敘述二、選擇結構:根據某一條件是否成立,來選擇不同的執行路徑。此結構常用的有下列三種型式:1.If-Then結構【例2】假如x>y就計算x-yIfx>yThena=x-y

意義:以x>y為條件式,如果成立就

執行a=x-y

2.If-Then-Else結構【例3】購買數量>=10,售價打八折Ifq>=10Thena=p*q*0.8Elsea=p*q

意義:以q>=l0為條件式,如果成立就執行a=p*q*0.8,否則(條件不成立)就執行a=p*q3.SelectCase結構【例4】根據c值輸出剪刀、石頭或布SelectCasecCasela="剪刀"Case2a="石頭"Case3a="布"EndSelect

意義:以c為條件式的

比較對象,分別按c的內容而做下列的處理:c=l→a="剪刀",c=2→a="石頭",c=3→a="布"三、重覆結構:根據某一條件是否成立,來控制一段敘述的重覆執行,而造成迴圈(Loop)的運作。此結構常用的有下列三種型式:(將在第九章介紹)l.For-Next結構【例5】輸出1、3、5Fori=1To5Step2PrintiNexti

意義:For與Next之間

形成一個迴圈,其中

的敘述Printi,依

i=1、3、5共執行三次,即印出1、3及5。(此例之條件為i由1到5,每次增加2)2.Do-While結構【例6】輸出1、3、5

i=1DoWhilei<=5Printii=i+2Loop

意義:以i<=5為條件式

,如果條件成立,

就重覆執行Do與Loop之間的敘述。

3.Do-Until結構【例7】累加輸入的數值,直到輸入0為止a=Inputbox("請輸入一個數“)DoUntila=0s=s+aa=Inputbox("請輸入一個數")Loop意義:以a=0為條件,如果條件

成立就停止執行Do與Loop之

間的敘述,否則就重覆執行

該段敘述。

7-4If-Then敘述

If-Then的中文意思是「假如…就執行…」。格式一:If條件式Then敘述

如果If後面的條件式成立了,就接著執行Then後面的敘述,完成後再執行下一列的敘述;如果條件未成立,則直接執行下一列的敘述。

【例1】求某一數值變數a的絕對值。Ifa<0Thena=-aPrinta【例2】

輸入購書數量及單價,假如購買十本以上,就打八折,否則不打折,計算並輸出購書金額。1PrivateSubForm_Activate()2DimqtyAsInteger,priceAsInteger,moneyAsInteger3qty=InputBox("請輸入購書數量","購書數量")4price=InputBox("請輸入單價","單價")5money=price*qty6Ifqty>=10Thenmoney=money*0.87Print"購書金額=";money;"元"8EndSub【執行情況】第一次執行:

第二次執行:1.輸入2.按此鈕3.輸入1.輸入2.按此鈕【例3】輸入1~3的代號,再輸出對應的

剪刀、石頭、布)1PrivateSubForm_Activate()2DimcAsString3c=InputBox$("請輸入代號1~3")4Print"你選的是:";5Ifcode="1"ThenPrint"剪刀"6Ifcode="2"ThenPrint"石頭"7Ifcode="3"ThenPrint"布"8EndSub【執行情況】1.輸入2.按此鈕【例5】

多個連續敘述的用法Ifk=1Thena=a+1:b=b+1:c=c+1Ifk=2Thena=a+3:b=b+3:c=c+3【說明】要連續執行的多個敘述,可用冒號(:)分隔而排在同一列上。格式二:

If條件式Then敘述區段EndIf

(敘述區段代表

兩列以上的敘述)【例6】

例4改成格式二Ifk=1Thena=a+1b=b+1c=c+1EndIfIfk=2Thena=a+3b=b+3c=c+3EndIf

7-5IF-Then-Else敘述

格式一:IF條件式Then敘述1Else敘述2

(此格式係一列完成)【例1】

根據分數(s),印出「及格」或「不及格」Ifs<60ThenPrint"不及格"ElsePrint"及格"或Ifs>=60ThenPrint"及格"ElsePrint"不及格"【例2】

計算購書金額(money):數量(qty)在十本以上,就打八折,否則不打折。(price為單價)Ifqty>=10Thenmoney=price*qty*0.8_Elsemoney=price*qty格式二:

IF條件式Then敘述區段1Else敘述區段2EndIf【說明】假如在Then或Else下面的敘述區段中,再使用If敘述,則稱為巢式If敘述(NestedIfStatement),如下:IF條件式1Then:IF條件式2Then敘述區段AElse敘述區段BEndIf:Else:IF條件式3Then敘述區段CElse敘述區段DEndIf:EndIf【例3】

根據分數(s),印出「及格」「恭喜」或「不及格」「請多用功!」

Ifs<60ThenPrint"不及格"Print"請多用功!"ElsePrint"及格"Print"恭喜!"EndIf【例4】

巢式If敘述的應用:根據分數的範圍,輸出文字如下:<60「不及格」「請多用功!」60~89「及格」「恭喜!」>=90「優等」「發獎狀一張!」Ifs<60ThenPrint"不及格"Print"請多用功!"ElseIfs<90ThenPrint"及格"Print"恭喜!"ElsePrint"優等"Print"發獎狀一張!"EndIfEndIfIF條件式1Then敘述區段1[ElseIf條件式mThen敘述區段m

::]Else敘述區段nEndIf

格式三:最後用Else,安排上述條件都不符合時要執行的工作

例5】

將例4改用格式三Ifscore<60ThenPrint"不及格"Print"請多用功!"ElseIfscore<90ThenPrint"及格"Print"恭喜!"ElsePrint"優等"Print"發獎狀一張!"EndIfc=InputBox$("請輸入一個字元")Ifc>="A"Andc<="Z"ThenPrint"大寫字母"ElseIfc>="a"Andc<="z"ThenPrint"小寫字母"ElseIfc>="0"Andc<="9"ThenPrint"數字"ElsePrint"不是字母或數字"EndIf

【例6】判斷輸入的字元是大寫字母、小寫字母、數字或都不是7-6IIf函數格式:IIf(條件式,資料1,資料2)1.如果條件式成立(結果為True),就傳回資料1,不成立(結果為False)則傳回資料2。2.資料1與資料2都可配用數值、字串或運算式。【例1】假如購書十本以上,就打八折,否則不打折,計算並輸出購書金額。Print"購書金額=";IIf(qty>=10,price*qty*0.8,price*qty);"元"【例2】根據分數(score),印出「及格,恭喜!」或「不及格,請多用功!」PrintIIf(score>=60,"及格,恭喜!","不及格,請多用功!")SelectCase運算式Case測試資料1敘述區段1Case測試資料2敘述區段2…Case測試資料n敘述區段n[CaseElse敘述區段]EndSelect

7-7SelectCase敘述如果末加列CaseElse,而所有Case後的測試資料都不符合時,將會順著離開Select結構,而執行EndSelect下面的敘述。【例1】SelectCase的應用01c=InputBox("請輸入代號1~3")02SelectCasec03Case104Print"剪刀"05Case206Print"石頭"07Case308Print"布"09CaseElse10Print"代號錯誤!"11EndSelect

Case測試資料的用法一、使用單一或多個常數:如果運算式的結果值等於其中一個常數,就算符合該Case的條件。如下:Case1Case

"SUN"Case1,2,3,4Case2,4,8,16,32,64Case"MON","TUE","WED","THU","FRI"Case"台北","台中","高雄"

二、利用常數指定範圍:如果運算式的結果值在範圍之內,就算符合該Case的條件。如下:Case1To4運算式的結果值為1~4均符合條件Case"A"To"Z"運算式的結果值為A~Z的26個字母均符合條件三、測試資料為關係運算式的型態:必須在Case後加列關鍵字Is,如果運算式的結果值符合該運算式之條件,就算符合該Case的條件。如下:CaseIs>=60 運算式的結果值≧60就符合條件CaseIs<>"SUN" 運算式的結果值≠"SUN"就符合條件CaseIs="Y" 運算式的結果值為"Y"就符合條件四、將前述三種用法混合使用。如下:

Case10To20,30,Is>60

運算式的結果值為10~20,或等於30,或>60,均符合條件。

Case"A"To"D","I","J",Is>="P"

運算式的結果值為A~D,或I,或J,或P~Z等字母均符合條件【例2】輸入成績,再輸出如7-5節例4的文字。

01SelectCasescore

02CaseIs<6003Print"不及格"04Print"請多用功!"05Case60To8906Print"及格"07Print"恭喜!"08CaseElse09Print"優等"10Print"發獎狀一張!"11EndSelect【討論】此程式的考慮比較單純,如果分數為負值或高於100分,會怎樣?應該如何修改程式,才會比較周全?7-8Choose函數

格式:Choose(i,資料1[,資料2,…[,資料n]])

【功能】依i的整數值,傳回其後面參數中對應的資料項【說明】1.當i值不是整數時,會捨去其小數部分。2.當i=1時,傳回資料1;i=2時,傳回資料2;依此類推,當i=n時,傳回資料n。3.當i的整數值小於1或大於n時,傳回空字串(null,無內容)。4.參數中的各項資料可以是不同型態的資料。【例1】將上一節的例1改用Choose函數處理c=InputBox("請輸入代號(1~3)")Ifc<1Orc>=4ThenPrint"代號錯誤!"_ElsePrintChoose(c,"剪刀","石頭","布")【例2】輸1~7的數字,並輸出對應的星期一、星期二、…、星期日的英文字。(如輸入1,就輸出Monday;輸入6,就輸出Saturday)d=InputBox(“請輸入1~7的數字”)Ifd<1Ord>=8ThenPrint(“輸入數字超出範圍”)_ElsePrintChoose(d,"Monday","Tuesday","Wednesday","Thursday","Friday",_"Saturday","Sunday")7-9Switch函數格式:Switch(運算式1,資料1[,運算式2,資料2,…[,運算式n,資料n]])

【功能】依序判斷運算式是否成立(True),成立就傳回其後一個參數的資料。【說明】1.先判斷運算式1是否成立,成立就傳回資料1

(不再判斷後面的運算式),不成立則繼續判斷運算式2,其後依此類推。2.如果所有運算式都不成立,則傳回空字串(null,無內容)。3.參數中的各項資料可以是不同型態的資料。

【例1】輸入分數,並輸出「及格,恭喜!」或「不及格,請多用功!」s=InputBox("請輸入分數")PrintSwitch(s>=60,"及格,恭喜!",_s<60,“不及格,請多用功!”)【例2】將成績分三段s=InputBox("請輸入成績")PrintSwitch(s<60,"不及格,請多用功!",_s>=60Ands<90,"及格,恭喜!",_s>=90,“優等,發獎狀一張!”)【討論】如果分數超出0~100的範圍時,要輸出「分數超出0~100的範圍」,要如何修改?7-10MsgBox敘述與函數

敘述:

MsgBox訊息[,[格式碼][,標題]]

函數:

MsgBox(訊息[,[格式碼][,標題]])1.兩者的用法一樣,只不過在函數中,參數列的前後要加上小括弧,而且會傳回值(可測知使用者按了那個鈕),使用敘述時不會傳回值。2.訊息:要提醒使用者注意的文字,如:「密碼錯誤!」。3.標題:要出現在對話方塊標題欄上的文字,若省略此參數,會以專案名稱為標題。4.格式碼:用來設定在方塊內要出現的圖示與按鈕,可用「代碼」或「常數變數」表示,其對照關係如表8-2。(若省略此參數,會自動設定為0)5.利用MsgBox函數出現對話方塊後,使用者按下方塊中的命令鈕時,會傳回一個數值(參看表8-3)供程式辨認,作為執行後續敘述的依據。

表8-2MsgBox常用的基本格式碼及其作用對照表

類別代碼常數變數作

用命令鈕0vbOKOnly只顯示

確定

命令鈕1vbOKCancel顯示

確定

取消

兩個命令鈕2vbAbortRetryIgnore顯示異常終止(A)、重試(R)與略過(I)三個命令鈕3vbYesNoCancel顯示是(Y)、否(N)與取消

三個命令鈕4vbYesNo顯示是(Y)、否(N)兩個命令鈕5vbRetryCancel顯示重試(R)與

取消

兩個命令鈕圖示16vbCritical顯示「重要訊息」圖示32vbQuestion顯示「警告查詢」圖示48vbExclamation顯示「警告訊息」圖示64vbInformation顯示「資訊訊息」圖示表8-2MsgBox常用的基本格式碼及其作用對照表

類別代碼常數變數作

用命令鈕0vbOKOnly只顯示

確定

命令鈕1vbOKCancel顯示

確定

取消

兩個命令鈕2vbAbortRetryIgnore顯示異常終止(A)、重試(R)與略過(I)三個命令鈕3vbYesNoCancel顯示是(Y)、否(N)與取消

三個命令鈕4vbYesNo顯示是(Y)、否(N)兩個命令鈕5vbRetryCancel顯示重試(R)與

取消

兩個命令鈕圖示16vbCritical顯示「重要訊息」圖示32vbQuestion顯示「警告查詢」圖示48vbExclamation顯示「警告訊息」圖示64vbInformation顯示「資訊訊息」圖示表8-2MsgBox常用的基本格式碼及其作用對照表

類別代碼常數變數作

用命令鈕0vbOKOnly只顯示

確定

命令鈕1vbOKCancel顯示

確定

取消

兩個命令鈕2vbAbortRetryIgnore顯示異常終止(A)、重試(R)與略過(I)三個命令鈕3vbYesNoCancel顯示是(Y)、否(N)與取消

三個命令鈕4vbYesNo顯示是(Y)、否(N)兩個命令鈕5vbRetryCancel顯示重試(R)與

取消

兩個命令鈕圖示16vbCritical顯示「重要訊息」圖示32vbQuestion顯示「警告查詢」圖示48vbExclamation顯示「警告訊息」圖示64vbInformation顯示「資訊訊息」圖示表7-2MsgBox函數傳回值與按下的命令鈕對照表傳回值對應的常數變數按下的命令鈕1vbOK

確定

2VbCancel

取消

3VbAbort異常終止(A)4VbRetry重試(R)5VbIgnore略過(I)6VbYes是(Y)7VbNo否(N)

使用代碼使用常數變數作用35(=3+32+0+0)vbYesNoCancel+vbQuestion顯示是(Y)、否(N)與取消三個命令鈕及圖示,並設定第一個按鈕是(Y)為預設按鈕273(=1+16+256+0)vbOKCancel+vbCritical

+vbDefaultButton2顯示確定與取消兩個命令鈕及圖示,並設定第二個按鈕取消為預設按鈕格式碼的用法【例1】密碼(Password)檢查:假設密碼為“1234”,輸入密碼正確就輸出「通過密碼檢查了!」,不正確則輸出「密碼錯誤!」。01PrivateSubForm_Activate()02password=InputBox$("請輸入密碼","密碼檢查")03Ifpassword="1234"Then04MsgBox"通過密碼檢查了!",vbOKOnly+vbExclamation,"恭喜!"05Else06feedback=MsgBox("密碼錯誤!",vbYesNoCancel+vbCritical,"抱歉!")07SelectCasefeedback08CasevbYes09MsgBox"你按了「是(Y)」鈕",0,"是"10CasevbNoMsgBox"你按了「否(N)」鈕",0,"否“12CasevbCancel13MsgBox"你按了「取消」鈕",0,"取消"14CaseElse15MsgBox"不應有此情況"16EndSelect17EndIf18EndSub【執行情況】第一次執行:

第二次執行

1.輸入2.按此鈕3.按此鈕1.輸入3.按此鈕4.按此鈕2.按此鈕7-11應用實例【實例一】假設某出版社圖書售價依採購數量而分成下面三種情況:1~9本 照定價出售10~49本 照定價

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论