java語言程序設(shè)計(jì)第3章_第1頁
java語言程序設(shè)計(jì)第3章_第2頁
java語言程序設(shè)計(jì)第3章_第3頁
java語言程序設(shè)計(jì)第3章_第4頁
java語言程序設(shè)計(jì)第3章_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第3章 基本算法和流程控制本章重要介紹Java語言中的基本算法、分支結(jié)構(gòu)和分支結(jié)構(gòu)語句、循環(huán)結(jié)構(gòu)和循環(huán)結(jié)構(gòu)語句以及結(jié)構(gòu)嵌套。 本章要點(diǎn)3.1 算法和控制結(jié)構(gòu)3.2 選擇結(jié)構(gòu)語句3.3 循環(huán)結(jié)構(gòu)語句思考與練習(xí)3本章邏輯結(jié)構(gòu)3.1 算法和控制結(jié)構(gòu)3.1.1 算法3.1.2 算法的描述方法 實(shí)例12 用流程圖描述算法3.2 選擇結(jié)構(gòu)語句3.2.1 if語句3.2.2 switch語句實(shí)例13 批改數(shù)學(xué)試題實(shí)例13 批改數(shù)學(xué)試題實(shí)例15 輸出期末總評成績本章邏輯結(jié)構(gòu)3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句實(shí)例16 買彩票中大獎(jiǎng)3.3.2 for語句3.3.3 跳轉(zhuǎn)語句3.3.4 多重循環(huán)語句實(shí)例

2、17 求1!+2!+10!的值實(shí)例18 求兩數(shù)之間所有偶數(shù)的和實(shí)例19 猜年齡3.1 算法和控制結(jié)構(gòu)3.1.1 算法 一般來說,所謂算法是指解決一個(gè)特定問題采用的特定的、有限的方法和步驟。利用計(jì)算機(jī)來解決問題需要編寫程序,在編寫程序前要對問題進(jìn)行充分的分析,設(shè)計(jì)解題的步驟與方法,也就是設(shè)計(jì)算法。沒有算法,對要解決的問題就無從下手。有了算法,才有可能設(shè)計(jì)程序,最終讓計(jì)算機(jī)執(zhí)行程序,完成所要求的任務(wù)。算法的好壞決定了程序的優(yōu)劣,因此,算法的設(shè)計(jì)是程序設(shè)計(jì)的核心任務(wù)之一。 從計(jì)算機(jī)應(yīng)用的角度來說,算法是用于求解某個(gè)特定問題的一些指令的集合。用計(jì)算機(jī)所能實(shí)現(xiàn)的操作或指令,來描述問題的求解過程,就得到了

3、這一特定問題的計(jì)算機(jī)算法。一個(gè)算法的功能不僅與選用的操作有關(guān),而且與這些操作之間的執(zhí)行順序有關(guān)。算法的控制結(jié)構(gòu)給出了算法的執(zhí)行框架,它決定了算法中各種操作的執(zhí)行次序。博姆(Bohm)和雅可比尾(Jacopini)兩位學(xué)者于1966年提出程序有三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)都具有只有一個(gè)入口和一個(gè)出口的特點(diǎn),不會(huì)出現(xiàn)死循環(huán)。3.1 算法和控制結(jié)構(gòu)3.1.1 算法(1)順序結(jié)構(gòu):它是一種線性結(jié)構(gòu),也是程序設(shè)計(jì)中最簡單、最常用的基本結(jié)構(gòu)。順序結(jié)構(gòu)程序是把計(jì)算機(jī)要執(zhí)行的各種處理依次排列起來。程序運(yùn)行后,便從左至右、從上向下地順序執(zhí)行這些語句(一個(gè)語句行中,從左至右順序執(zhí)行各

4、條語句),直至執(zhí)行完所有語句行的語句或執(zhí)行至END語句止。一個(gè)程序通??煞譃?個(gè)部:輸入、處理和輸出。(2)選擇結(jié)構(gòu):它是一種常用的主要基本結(jié)構(gòu),是計(jì)算機(jī)科學(xué)用來描述自然界和社會(huì)生活中分支現(xiàn)象的重要手段。在實(shí)際工作中,常常需要根據(jù)某個(gè)條件是否成立,來決定下一步應(yīng)做什么工作。編寫程序讓計(jì)算機(jī)工作,同樣存在這種情況。在這種情況下,程序不再按照行號的順序來執(zhí)行各語句行的語句,而是根據(jù)給定的條件來決定選取哪條路徑,執(zhí)行哪些語句。選擇結(jié)構(gòu)的特點(diǎn)是:在各種可能的操作分支中,根據(jù)所給定的選擇條件是否成立,來決定選擇執(zhí)行某一分支的相應(yīng)操作,并且任何情況下均有“無論分支多少,僅選其一”的特性。3.1 算法和控制

5、結(jié)構(gòu)3.1.1 算法(3)循環(huán)結(jié)構(gòu)算法中有時(shí)需要反復(fù)地執(zhí)行某組操作,循環(huán)控制就是指由特定的條件決定某些語句重復(fù)執(zhí)行次數(shù)的控制方式。它具有封閉型的單入單出性質(zhì),也就是說進(jìn)入循環(huán)結(jié)構(gòu)后,只要循環(huán)條件未達(dá)到結(jié)束狀態(tài),就始終執(zhí)行循環(huán)體內(nèi)的操作。3.1 算法和控制結(jié)構(gòu)3.1.2 算法的描述方法 算法有許多描述方法,例如:使用日常語言描述解決問題的步驟與方法的自然語言法。這種描述方法通俗易懂,但比較繁瑣,且對條件轉(zhuǎn)向等的描述欠直觀。針對自然語言法描述的缺點(diǎn),又產(chǎn)生了流程圖法、N-S圖法和PAD圖等方法。計(jì)算機(jī)的算法有數(shù)值型運(yùn)算算法和非數(shù)值型運(yùn)算算法。例如,計(jì)算N!的算法就屬于數(shù)值型運(yùn)算算法;而進(jìn)行數(shù)據(jù)檢索

6、、分類、排序和計(jì)算機(jī)繪圖、制表等都屬于非數(shù)值型算法。 下面我們介紹三種在計(jì)算機(jī)算法中常用的描述方法。 1流程圖 流程圖也稱為框圖,它是用各種幾何圖形、流程線及文字說明來描述計(jì)算過程的框圖。用流程圖表示算法的優(yōu)點(diǎn)是:用圖形來表示流程,直觀形象,各種操作一目了然,不會(huì)產(chǎn)生“歧義性”,流程清晰。但缺點(diǎn)是:流程圖所占面積大,而且由于允許使用流程線,使流程任意轉(zhuǎn)移,容易使人弄不清流程的思路。3.1 算法和控制結(jié)構(gòu)3.1.2 算法的描述方法 書中的表3.1所示為用傳統(tǒng)流程圖描述算法時(shí)常用的符號。例如:賦值、數(shù)學(xué)運(yùn)算等判斷框根據(jù)框中給定的條件是否滿足,選擇執(zhí)行兩條路徑中的某一條路徑流程線表示流程的路徑和方向

7、連接點(diǎn)表示兩段流程圖流程的連接點(diǎn)用流程圖描述程序的三種基本結(jié)構(gòu)如書中圖3.1所示。其中循環(huán)結(jié)構(gòu)有兩種形式:當(dāng)型循環(huán)和直到型循環(huán)。當(dāng)型循環(huán)是先進(jìn)行判斷,再執(zhí)行循環(huán)體內(nèi)的操作。直到型循環(huán)是先執(zhí)行循環(huán)體內(nèi)的操作,再進(jìn)行判斷。如果采用直到型循環(huán)結(jié)構(gòu),則不論條件是否成立,循環(huán)體內(nèi)的操作都會(huì)被至少執(zhí)行一次。3.1 算法和控制結(jié)構(gòu)3.1.2 算法的描述方法 圖3.1 流程圖描述程序3種基本結(jié)構(gòu)3.1 算法和控制結(jié)構(gòu)3.1.2 算法的描述方法 2N-S圖 N-S結(jié)構(gòu)化流程圖是在美國學(xué)者INassi和BSchneiderman1973年提出的方法的基礎(chǔ)上形成的一種以他們的名字命名的流程圖,其主要特點(diǎn)是取消了流程

8、線,即不允許流程任意轉(zhuǎn)移,而只能從上到下順序進(jìn)行,從而使程序結(jié)構(gòu)化。它規(guī)定了3種基本結(jié)構(gòu)作為構(gòu)造算法的基本單元,如圖3.3所示。3.1 算法和控制結(jié)構(gòu)3.1.2 算法的描述方法 2N-S圖圖3.3 N-S圖描述程序3種基本結(jié)構(gòu)圖中的A和B分別代表某些操作,例如:數(shù)據(jù)賦值、數(shù)據(jù)的輸入或輸出等,也可以是3種基本控制結(jié)構(gòu)中的某一種。順序結(jié)構(gòu)是最簡單的一種結(jié)構(gòu),先執(zhí)行A然后再執(zhí)行B。選擇結(jié)構(gòu)則根據(jù)條件是否滿足決定執(zhí)行A或B。循環(huán)結(jié)構(gòu)中的“直到型循環(huán)”,是先執(zhí)行一次A,然后檢查條件是否滿足,如不滿足則再執(zhí)行一次A,直到某一次在執(zhí)行完A后條件滿足為止。循環(huán)結(jié)構(gòu)中的“當(dāng)型循環(huán)”,是先檢查給定的循環(huán)條件是否滿

9、足,若滿足則執(zhí)行A,然后再檢查一次條件滿足否,直到某一次條件不滿足為止。N-S圖的不足之處是,當(dāng)算法存在著較多層嵌套的選擇結(jié)構(gòu)時(shí),圖中的每個(gè)選擇結(jié)構(gòu)框會(huì)越分越窄,可能難以寫下所需要的操作內(nèi)容。3.1 算法和控制結(jié)構(gòu)3.1.2 算法的描述方法 2N-S圖圖3.3 N-S圖描述程序3種基本結(jié)構(gòu) 圖3.3 N-S圖描述程序3種基本結(jié)構(gòu)3.1 算法和控制結(jié)構(gòu)3.1.2 算法的描述方法 2N-S圖圖中的A和B分別代表某些操作,例如:數(shù)據(jù)賦值、數(shù)據(jù)的輸入或輸出等,也可以是3種基本控制結(jié)構(gòu)中的某一種。順序結(jié)構(gòu)是最簡單的一種結(jié)構(gòu),先執(zhí)行A然后再執(zhí)行B。選擇結(jié)構(gòu)則根據(jù)條件是否滿足決定執(zhí)行A或B。循環(huán)結(jié)構(gòu)中的“直

10、到型循環(huán)”,是先執(zhí)行一次A,然后檢查條件是否滿足,如不滿足則再執(zhí)行一次A,直到某一次在執(zhí)行完A后條件滿足為止。循環(huán)結(jié)構(gòu)中的“當(dāng)型循環(huán)”,是先檢查給定的循環(huán)條件是否滿足,若滿足則執(zhí)行A,然后再檢查一次條件滿足否,直到某一次條件不滿足為止。N-S圖的不足之處是,當(dāng)算法存在著較多層嵌套的選擇結(jié)構(gòu)時(shí),圖中的每個(gè)選擇結(jié)構(gòu)框會(huì)越分越窄,可能難以寫下所需要的操作內(nèi)容。 3.1 算法和控制結(jié)構(gòu)3.1.2 算法的描述方法 3PAD圖 PAD是英文Problem Analysis Diagram的縮寫,其原意是問題分析圖。它是近年來在軟件開發(fā)中被推廣使用的一種描述算法的圖形方法。它是一種二維圖形,從上到下各框功能

11、順序執(zhí)行,從左到右表示層次關(guān)系。這種描述算法的方法,層次清楚,邏輯關(guān)系明了,在有多次嵌套時(shí),不易出錯(cuò)。用PAD圖描述程序的三種基本結(jié)構(gòu)如書中圖3.5所示。 在為具體問題設(shè)計(jì)算法時(shí),選用何種算法描述工具并不重要,重要的是一定要把算法描述得簡潔、正確,不會(huì)產(chǎn)生理解上的“歧義性”。3.1 算法和控制結(jié)構(gòu)3.1.2 算法的描述方法 3PAD圖 圖3.5 用PAD圖描述程序的3種基本結(jié)構(gòu)3.2 選擇結(jié)構(gòu)語句3.2.1 if語句1if語句形式之一 (1)if形式流程圖:可以根據(jù)表達(dá)式的值來判斷應(yīng)該執(zhí)行哪一條或者哪些條語句,其語句的流程圖如書中圖3.6所示。 圖中判斷框內(nèi)的條件是if語句中的表達(dá)式,處理框A

12、是if語句中的子語句體,處理框B是if語句下面所有的語句。當(dāng)程序執(zhí)行到if語句時(shí),計(jì)算機(jī)首先計(jì)算表達(dá)式的值,如果值是true,則執(zhí)行if語句中的子語句體,然后再執(zhí)行if語句下面的一條語句;如果值是false,則不執(zhí)行if語句中的子語句,直接執(zhí)行if語句下面的語句。3.2 選擇結(jié)構(gòu)語句3.2.1 if語句1if語句形式之一(2)if語句形式。if語句形式為:if ( 表達(dá)式 )子語句體; 其中,表達(dá)式的值必須是布爾類型的,可以是布爾類型的常量或者變量、關(guān)系表達(dá)式、或者邏輯表達(dá)式。子語句體可以是一條語句或者多條語句,但是多條語句要用一對大括號括起來。子語句體中可包含Java語言中的任何語句。 3.

13、2 選擇結(jié)構(gòu)語句3.2.1 if語句1if語句形式之二 (1)if-else形式流程圖:可以根據(jù)表達(dá)式的值來判斷是執(zhí)行if語句中的子語句體,還是執(zhí)行else語句中的子語句體,如書中圖3.7所示。 當(dāng)程序執(zhí)行到if-else語句時(shí),計(jì)算機(jī)首先計(jì)算表達(dá)式的值,如果值是true,則執(zhí)行if語句中的子語句體A,然后跳過else語句執(zhí)行下面的一條語句C;如果值是false,則不執(zhí)行if語句中的子語句體A,而執(zhí)行else語句中的子語句體B,然后再繼續(xù)向下執(zhí)行語句C。 3.2 選擇結(jié)構(gòu)語句3.2.1 if語句1if語句形式之二 (2)if語句形式。if-else語句形式:if ( 表達(dá)式 )語句體;else

14、語句體; 其中表達(dá)式的值必須是布爾類型的,可以是布爾類型的常量或者變量、關(guān)系表達(dá)式、或者邏輯表達(dá)式。語句體可以是一條語句或者多條語句,但是多條語句要用一對大括號括起來。 else語句不能單獨(dú)作為一個(gè)獨(dú)立的語句使用,它必須和if語句配對使用。3.2 選擇結(jié)構(gòu)語句3.2.1 if語句3if語句形式之三 (1)if-else if-else形式流程圖: 可以根據(jù)多個(gè)表達(dá)式的值來判斷執(zhí)行哪一條或者哪些條語句,而不執(zhí)行其他語句體,如書中圖3.8所示。 圖中判斷框內(nèi)的條件1是if語句中的表達(dá)式,條件2是else if語句中的表達(dá)式。處理框A是if語句中的子語句體,處理框B是else if語句中的子語句體,

15、處理框C是else語句中的子語句體,處理框D是if-else if-else語句下面的語句。 3.2 選擇結(jié)構(gòu)語句3.2.1 if語句3if語句形式之三 當(dāng)程序執(zhí)行到if-else if-else語句時(shí),計(jì)算機(jī)首先計(jì)算表達(dá)式1的值,如果值是true,則執(zhí)行if語句中的子語句體A,然后跳過else if語句和else語句,繼續(xù)執(zhí)行下面的語句D。如果表達(dá)式1的值為false,則執(zhí)行else if語句。 如果else if語句中的表達(dá)式2的值為true,則執(zhí)行else if語句中的子語句體B,然后跳過else語句,繼續(xù)執(zhí)行下面的語句D。如果表達(dá)式2的值為false,則執(zhí)行else語句的字語句體C,然

16、后再繼續(xù)執(zhí)行下面的語句D。 在實(shí)際應(yīng)用中,else if語句可以多次使用,但是else語句只有一個(gè)。 3.2 選擇結(jié)構(gòu)語句3.2.1 if語句3if語句形式之三 (2)if-else if-else語句形式。if-else if-else語句基本格式為:if ( 表達(dá)式1 ) 語句體1else if ( 表達(dá)式2 ) 語句體2 else if ( 表達(dá)式n ) 語句體 nelse 語句體 n+1 3.2 選擇結(jié)構(gòu)語句3.2.1 if語句3if語句形式之三 其中表達(dá)式的值必須是布爾類型的,可以是布爾類型的常量或者變量、關(guān)系表達(dá)式、或者邏輯表達(dá)式。語句體可以是一條語句或者多條語句,但是多條語句要用

17、一對大括號括起來。一個(gè)if語句可以跟隨任意多個(gè)else if語句,但只能有一個(gè)else語句。圖3.8 if-else if-else形式流程圖3.2 選擇結(jié)構(gòu)語句3.2.2 switch語句1switch語句形式switch語句的完整形式為:switch( 表達(dá)式 ) case 常量1: 語句體1;break; case 常量2: 語句體2;break; case 常量3: 語句體3;break; case 常量n: 語句體n;break; default: 語句體n+1; 3.2 選擇結(jié)構(gòu)語句3.2.2 switch語句1switch語句形式在使用時(shí)要注意以下幾點(diǎn):(1)表達(dá)式的值必須是整型

18、或者字符型數(shù)據(jù),并且要與各個(gè)語句中case之后的常量值類型相同。(2)一個(gè)switch語句中,可以有任意多個(gè)case語句,但是每個(gè)case之后的常量值不能相同。case語句中的子語句體可以是一條或者多條任意Java語句。(3)一般情況下,每個(gè)case語句的最后是break語句,用來從整個(gè)switch語句中,跳出,繼續(xù)執(zhí)行switch語句下面的語句。如果沒有使用break語句,則繼續(xù)執(zhí)行下面的case語句中的字語句體,直到遇到break語句,或者整個(gè)switch語句結(jié)束。(4)當(dāng)所有case語句中的常量值都與表達(dá)式的值不相同時(shí),則執(zhí)行default語句中的子語句體,如果沒有default語句,則

19、不執(zhí)行任何內(nèi)容。3.2 選擇結(jié)構(gòu)語句3.2.2 switch語句 2switch語句執(zhí)行順序 當(dāng)執(zhí)行到switch語句時(shí),首先計(jì)算表達(dá)式的值,然后依次與下面大括號中case語句中的常量作比較。當(dāng)找到和表達(dá)式值相同的常量值后,將不在繼續(xù)查找,并以此處作為進(jìn)入大括號中case語句的子語句體的插入點(diǎn)。插入點(diǎn)之前的子語句體不會(huì)再被執(zhí)行,而插入點(diǎn)之后到第一個(gè)break語句之前的所有子語句體都會(huì)被執(zhí)行。遇到break語句時(shí),結(jié)束整個(gè)switch語句的執(zhí)行,跳到其下面的語句,繼續(xù)運(yùn)行程序。switch語句執(zhí)行順序可以這樣比喻:switch語句中的表達(dá)式值是一把鑰匙,每個(gè)case語句的常量值代表一個(gè)房間的門鎖

20、。只有當(dāng)鑰匙和門鎖吻合時(shí),我們才能打開門,進(jìn)入房間。如果沒有吻合的門鎖,我們將直接進(jìn)入default房間。進(jìn)入某個(gè)房間后,我們執(zhí)行房間中的命令,然后一直向下走,依次進(jìn)入其后的每個(gè)房間并執(zhí)行其中的命令。直到遇到出口,也就是break語句,走出房間,完成整個(gè)switch語句的執(zhí)行。3.2 選擇結(jié)構(gòu)語句3.2.2 switch語句 2switch語句執(zhí)行順序 從上面的描述中,我們可以看出break語句的重要性。break語句的位置會(huì)影響到輸出結(jié)果。 例如,下面是某個(gè)程序的switch語句部分,如果變量i的值為1,則會(huì)輸出“鍵入的數(shù)字是1”的文字,然后繼續(xù)執(zhí)行switch語句后邊的語句。但是如果cas

21、e 1中沒有break語句,則當(dāng)變量i的值為1時(shí),會(huì)執(zhí)行case 1和case 2中的打印語句,而不是只執(zhí)行case 1中的打印語句,輸出結(jié)果為“鍵入的數(shù)字是1”和“鍵入的數(shù)字是2”兩行文本。3.2 選擇結(jié)構(gòu)語句3.2.2 switch語句switch ( i ) case 1: System.out.println( 鍵入的數(shù)字是1 ); break; case 2: System.out.println( 鍵入的數(shù)字是2 ); break; case 3: System.out.println( 鍵入的數(shù)字是3 ); break; case 4: System.out.println( 鍵

22、入的數(shù)字是4 ); break; case 5: System.out.println( 鍵入的數(shù)字是5 ); break; case 6: System.out.println( 鍵入的數(shù)字是6 ); break; default: System.out.println( 輸入的數(shù)字超出范圍! );一般情況下,每個(gè)case語句的最后都會(huì)使用break語句。如果有default語句,則放置在所有case語句的最后,不需要使用break語句。3.2 選擇結(jié)構(gòu)語句3.2.2 switch語句 3合并case語句 如果不同case語句中的常量之后的語句體相同,則可以合并多個(gè)case語句,合并的形式為

23、:case 常量1: case 常量2: case 常量n: 語句體; 例如,下面顯示2005年某個(gè)月份天數(shù)的程序中的switch語句就合并了某些case語句。因?yàn)?、3、5、7、8、10和12月的天數(shù)都是31天;4、6、9和11月的天數(shù)都是30天,而2月份為28天,switch語句簡化為:switch ( month ) case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println( “31天” ); break; case 4: case 6: case 9: case 11: System.out

24、.println( “30天” ); break; case 2: System.out.println( “28天” )3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句1while循環(huán)語句形式之一 (1)while形式流程圖:while形式可以反復(fù)執(zhí)行某些特定的子語句體,并根據(jù)表達(dá)式的值來判斷什么時(shí)候結(jié)束循環(huán),繼續(xù)執(zhí)行while語句下面的語句,其語句的流程圖如書中圖3.12所示。 1while循環(huán)語句形式之一 3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句1while循環(huán)語句形式之一 圖中判斷框內(nèi)的條件是while語句中的表達(dá)式,處理框A是while語句中的子語句體,也就是循環(huán)體。處理框B是w

25、hile語句下面的語句。當(dāng)程序執(zhí)行到while語句時(shí),首先計(jì)算其表達(dá)式的值,如果值是true,則執(zhí)行while語句中的循環(huán)體A,然后再次計(jì)算while語句中表達(dá)式的值,如果值是true,則再次執(zhí)行while語句中的循環(huán)體A,如此反復(fù)循環(huán)下去。 當(dāng)小括號中表達(dá)式的值為false時(shí),則不再執(zhí)行while語句中的循環(huán)體A,而是直接執(zhí)行while語句下面的語句B。3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句1while循環(huán)語句形式之一 (2)while語句形式。while語句的形式為:while ( 表達(dá)式 ) 循環(huán)體; 其中表達(dá)式的值必須是布爾類型的,可以是布爾類型的常量或者變量、關(guān)系表達(dá)式、或者

26、邏輯表達(dá)式。循環(huán)體可以是一條或者多條語句。多條語句時(shí),要用大括號括起。如果在程序執(zhí)行過程中,while語句中表達(dá)式的值始終為true,則循環(huán)體會(huì)被無數(shù)次執(zhí)行,進(jìn)入到無休止的“死循環(huán)”狀態(tài)中。這種情況在編寫程序時(shí)一定要避免。例如,表示式盡量不要使用布爾類型的常量。如果在第一次執(zhí)行while語句時(shí),表示式的值為false,則不執(zhí)行循環(huán)體,直接執(zhí)行while語句下面的語句。 3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句1while循環(huán)語句形式之一 例如,下面的程序是使用while語句求1+2+99+100的和。public class Sum public static void main(Str

27、ing args) int sum = 0, n = 1; while( n = 100 ) sum = sum + n; / 累加器 n = n + 1; System.out.println( 1+2+99+100= + sum ); 在上面的程序中,sum = sum + n;語句中的變量sum又叫累加器,用來保存變量n從1一直累加到100的和,也可以寫為sum += n;的形式。一般來說,累加器的初始值為0。3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句 2while循環(huán)語句形式之二 (1)do-while形式流程圖:它與while語句很相似,它是先執(zhí)行循環(huán)體,然后再判斷的循環(huán)語句,其

28、語句的流程圖如書中圖3.13所示。 圖3.13 do-while形式流程圖3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句 2while循環(huán)語句形式之二 圖中判斷框內(nèi)的條件是do-while語句中的表達(dá)式,處理框A是do-while語句中的子語句體,也就是循環(huán)體。處理框B是do-while語句下面的語句。 當(dāng)執(zhí)行到do-while語句時(shí),先執(zhí)行do-while語句的循環(huán)體A,然后判斷do-while語句中表達(dá)式的值。如果值是true,則再次執(zhí)行循環(huán)體A,然后再次計(jì)算表達(dá)式的值,如果值是true,則繼續(xù)執(zhí)行循環(huán)體A,如此反復(fù)循環(huán)下去。 當(dāng)表達(dá)式的值為false時(shí),則不再執(zhí)行循環(huán)體A,循環(huán)結(jié)束,直接

29、執(zhí)行下面的語句B。3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句 2while循環(huán)語句形式之二 (2)do-while語句形式。do-while語句的形式為:do 循環(huán)體;while ( 表達(dá)式 ); 其中表達(dá)式的值必須是布爾類型的,可以是布爾類型的常量或者變量、關(guān)系表達(dá)式、或者邏輯表達(dá)式。循環(huán)體可以是一條或者多條語句。多條語句時(shí),要用大括號括起。不論表達(dá)式的值是true還是false,循環(huán)體中的語句至少被執(zhí)行一次。 要注意:在do-while形式中,while ( 表達(dá)式 )后邊要有分號,而在while形式中,則不需要分號。while語句和do-while語句沒有本質(zhì)的區(qū)別,在大多數(shù)情況下可

30、以互相代替。3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句 2while循環(huán)語句形式之二 例如,下面的程序是使用do-while語句求1+2+3+99+100的和。public class Sum public static void main(String args) sum = 0; n = 1; do sum = sum + n; n = n + 1; while ( n = 100 ); System.out.println( 使用do-while語句求和: + sum ); 3.3 循環(huán)結(jié)構(gòu)語句3.3.1 while語句 3設(shè)計(jì)循環(huán)語句 在編寫循環(huán)語句之前,需要先設(shè)計(jì)好循環(huán)語句的內(nèi)容

31、,以確保運(yùn)行程序后達(dá)到預(yù)期的效果。設(shè)計(jì)循環(huán)語句主要有4個(gè)步驟,介紹如下。(1)設(shè)計(jì)循環(huán)體。首先要確保循環(huán)體中的語句可以被執(zhí)行,然后要有規(guī)律地改變與表達(dá)式有關(guān)的變量的值,從而使表達(dá)式的值在特定的循環(huán)次數(shù)完成后,可以變成false,結(jié)束循環(huán)。(2)設(shè)計(jì)表達(dá)式。使用表達(dá)式來控制什么時(shí)候結(jié)束循環(huán)。在使用關(guān)系表達(dá)式時(shí),要注意大于和大于等于、小于和小于等于關(guān)系符號的使用,以確保循環(huán)次數(shù)不會(huì)少一次或者多一次。例如,在上面求和的程序中,如果while語句中的表達(dá)式寫為n 100,則程序變?yōu)榍?+2+3+99的和。(3)循環(huán)的初始化:一般要在循環(huán)語句之前定義在循環(huán)體中所要使用的變量,并且給變量賦初值。初值的不同

32、,會(huì)影響到最終的運(yùn)行結(jié)果。例如,在上面的程序中,如果將變量n的初值從1改為30,則變成求30+31+99+100的和。(4)結(jié)束循環(huán):確保表達(dá)式的值最終會(huì)變?yōu)閒alse,避免出現(xiàn)“死循環(huán)”。 3.3 循環(huán)結(jié)構(gòu)語句3.3.2 for語句 1for循環(huán)語句 (1)for語句流程圖:與while語句類似,for語句也可以反復(fù)執(zhí)行某些特定的子語句體,并根據(jù)表達(dá)式的值來判斷什么時(shí)候結(jié)束循環(huán),繼續(xù)執(zhí)行for語句下面的語句。所不同的是,for語句的形式更加簡單明了,其語句的流程圖如書中圖3.15所示。 圖3.15 for語句流程圖 3.3 循環(huán)結(jié)構(gòu)語句3.3.2 for語句 1for循環(huán)語句 圖中判斷框內(nèi)的

33、條件是for語句中的表達(dá)式2,處理框初始化循環(huán)變量是for語句中的表達(dá)式1,處理框增量是for語句中的表達(dá)式3,處理框A是for語句中的子語句體,也就是循環(huán)體。處理框B是for語句下面的語句。當(dāng)程序執(zhí)行到for語句時(shí),先執(zhí)行for語句中的表達(dá)式1,給循環(huán)變量賦初值。如果在for語句之前沒有定義循環(huán)變量,則該表達(dá)式可以定義循環(huán)變量并賦初值。循環(huán)變量與其他變量在使用上沒有區(qū)別,只是該變量主要是用來控制for語句的循環(huán)次數(shù),并且在某些情況下參與循環(huán)體中的計(jì)算。完成初始化后,再對表達(dá)式2進(jìn)行判斷,如果其值為true,則執(zhí)行循環(huán)體A;如果其值為false,則跳出整個(gè)for語句,執(zhí)行其下面的語句B。執(zhí)行完

34、循環(huán)體A后,按照表達(dá)式3來修改循環(huán)變量的值,然后重新計(jì)算表達(dá)式2的值,開始第2輪循環(huán)。 3.3 循環(huán)結(jié)構(gòu)語句3.3.2 for語句 1for循環(huán)語句(2)for語句的形式。for語句的形式為:for ( 表達(dá)式1; 表達(dá)式2;表達(dá)式3 ) 循環(huán)體; 循環(huán)體可以是一條或者多條語句。多條語句時(shí),要用大括號括起。 表達(dá)式1:表達(dá)式1是循環(huán)變量賦初值的表達(dá)式,循環(huán)體內(nèi)使用的變量也可以在此定義或者賦初值。表達(dá)式1中可以并列多個(gè)表達(dá)式,但它們之間要用逗號隔開。3.3 循環(huán)結(jié)構(gòu)語句3.3.2 for語句 1for循環(huán)語句 例如:for( sum = 0, n = 1; n = 100; n+ ) 循環(huán)體;

35、在for語句的表達(dá)式1中,給變量sum和n賦初值。 表達(dá)式2:必須為布爾類型的常量或者變量、關(guān)系表達(dá)式、或者邏輯表達(dá)式。因?yàn)楸磉_(dá)式2是循環(huán)結(jié)束的條件,所以編寫表達(dá)式時(shí)要避免程序陷入“死循環(huán)”。當(dāng)表達(dá)式的值為true時(shí),繼續(xù)執(zhí)行循環(huán)體;當(dāng)表達(dá)式的值為false時(shí),結(jié)束循環(huán),執(zhí)行for語句下面的程序內(nèi)容。 表達(dá)式3:一般是增量表達(dá)式,每次執(zhí)行完循環(huán)體后,都要執(zhí)行該表達(dá)式改變其中變量的值。 3.3 循環(huán)結(jié)構(gòu)語句3.3.2 for語句 3for語句的特殊形式 除了上面介紹的for語句的標(biāo)準(zhǔn)形式外,for語句還具有一些特殊的形式。 (1)空循環(huán)體:for語句可以沒有循環(huán)體,也就是說循環(huán)過程什么都不執(zhí)行,

36、僅僅產(chǎn)生一個(gè)時(shí)間延遲的效果。例如:下面的語句for( int n = 1; n = 80000; n+ )該語句沒有循環(huán)體。當(dāng)程序執(zhí)行到該語句時(shí),只會(huì)執(zhí)行80000次對表達(dá)式n = 80000的判斷和n+;語句。 (2)減量表達(dá)式:for語句中的表達(dá)式3不僅可以是增量表達(dá)式,還可以是減量表達(dá)式,也就是說循環(huán)變量的值不僅可以由小到大,還可以由大到小。 3.3 循環(huán)結(jié)構(gòu)語句3.3.2 for語句 3for語句的特殊形式 (3)省略表達(dá)式:for語句中的3個(gè)表達(dá)式都可以省略,但是其中的分號不可以省略。 如果省略表達(dá)式1,則不對循環(huán)變量賦初值,使用其默認(rèn)值,或者在for語句之前賦初值。 如果省略表達(dá)式

37、2,則不再進(jìn)行判斷選擇形成“死循環(huán)”。我們也可以在循環(huán)體中添加與表達(dá)式2相同功能的語句,控制循環(huán)結(jié)束的條件。如果省略表達(dá)式3,則不對循環(huán)變量的值進(jìn)行改變。我們也可以在循環(huán)體中添加與表達(dá)式3相同功能的語句,改變循環(huán)變量的值。如果3個(gè)表達(dá)式都省略,則for語句不對循環(huán)進(jìn)行控制。我們也可以在循環(huán)體中添加語句來控制循環(huán)。 3.3 循環(huán)結(jié)構(gòu)語句3.3.2 for語句 3for語句的特殊形式 (4)簡化循環(huán)體:如果循環(huán)體中的語句只有一兩條,可以放在表達(dá)式3之前,兩者用逗號隔開,for語句的最后要添加一個(gè)分號。例如,求數(shù)字1到100平方數(shù)的和,其程序可以寫成如下形式:public class Sqaure

38、public static void main( String args ) for ( int n = 1; n = 100; System.out.print( n * n+ ), n+ ); 3.3 循環(huán)結(jié)構(gòu)語句3.3.3 跳轉(zhuǎn)語句 1break語句 break語句通常用在循環(huán)語句和switch語句中。它的作用是使程序從一個(gè)語句體的內(nèi)部跳出去,繼續(xù)執(zhí)行該語句體下面的語句。例如,從switch語句的case語句中跳出,或者從循環(huán)體內(nèi)跳出。在循環(huán)語句中,break語句一般與if語句一起使用,滿足一定條件時(shí)跳出循環(huán)。例如:public class Example public static void main( String args ) for ( int d = 1; d 30 ) break; System.out.println ( area ); 3.3 循環(huán)結(jié)構(gòu)語句3.3.3 跳

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論