浙大 Java語言程序設(shè)計(jì) 第三講_第1頁
浙大 Java語言程序設(shè)計(jì) 第三講_第2頁
浙大 Java語言程序設(shè)計(jì) 第三講_第3頁
浙大 Java語言程序設(shè)計(jì) 第三講_第4頁
浙大 Java語言程序設(shè)計(jì) 第三講_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第 3 章 Java流程控制3.1語句及程序結(jié)構(gòu)3.2順序結(jié)構(gòu)3.3選擇結(jié)構(gòu)3.4循環(huán)結(jié)構(gòu)3.5跳轉(zhuǎn)語句1 3.1 語句及程序結(jié)構(gòu)語句向計(jì)算機(jī)系統(tǒng)發(fā)出操作指令的代碼程序由一系列語句組成Java語句類型表達(dá)式語句表達(dá)式;空語句只有一個(gè)“;”復(fù)合語句用 “ ”將多條語句括起來作為一條語句使用方法調(diào)用語句控制語句:包括選擇語句、循環(huán)語句、轉(zhuǎn)移語句2Java 語句類型舉例3程序結(jié)構(gòu)程序的3種基本結(jié)構(gòu) 順序結(jié)構(gòu) 分支結(jié)構(gòu)if 語句、 switch 語句 循環(huán)結(jié)構(gòu)while 語句、 dowhile 語句、 for 語句 4 3.2 順序結(jié)構(gòu)最簡(jiǎn)單的一種程序結(jié)構(gòu)程序的執(zhí)行順序語句的書寫順序程序的基本順序數(shù)據(jù)

2、輸入(定義變量、變量賦初值)處理數(shù)據(jù)(計(jì)算)輸出結(jié)果5【例3-1】計(jì)算太陽和地球之間的萬有引力程序運(yùn)行結(jié)果:The force is 3.541296983601972E276【例3-2】將華氏溫度轉(zhuǎn)換為攝氏溫度 c=5(f-32)/9程序運(yùn)行結(jié)果:Fahrenheit=70.0Centigrade=21.111117【例3-3】求解方程ax+b=0的根x說明:暫時(shí)不考慮a為0的情況8【例3-3】命令行參數(shù)的輸入運(yùn)行前設(shè)置參數(shù)在Eclipse“運(yùn)行配置”窗口的“ (x)=自變量”欄中輸入: 2.0 6.0 這個(gè)欄目就是命令行參數(shù)單擊“運(yùn)行配置”窗口的“運(yùn)行”按鈕,輸出結(jié)果:a=2.0b=6.0

3、 x=-3.0說明2.0 作為第1個(gè)參數(shù)傳遞給args06.0 作為第2個(gè)參數(shù)傳遞給args19【例3-3】命令行參數(shù)的輸入在DOS下運(yùn)行程序設(shè)置Java的路徑將Root.java復(fù)制到指定目錄下進(jìn)入命令提示符 切換當(dāng)前目錄為指定目錄編譯:javac Root.java執(zhí)行:java Root 2.0 6.010命令行輸入命令行輸入的第一個(gè)數(shù)a=Float.parseFloat (args0);轉(zhuǎn)換為浮點(diǎn)數(shù)命令行輸入的是字符串?dāng)?shù)據(jù),需要轉(zhuǎn)換為計(jì)算所需要的數(shù)據(jù)類型將命令行第i個(gè)輸入轉(zhuǎn)換為以下類型的數(shù)據(jù)整型 a=Integer.parseInt(argsi);短整型a=Short.parseSho

4、rt(argsi);單精度浮點(diǎn)a=Float.parseFloat(argsi);雙精度浮點(diǎn)a=Double.parseDouble(argsi)113.3 選擇結(jié)構(gòu)選擇結(jié)構(gòu),也叫分支結(jié)構(gòu)根據(jù)給定的條件來決定執(zhí)行不同的程序段Java選擇語句if 語句 二選一switch 語句 多選一12if 語句格式1if (布爾表達(dá)式) 語句格式2if (布爾表達(dá)式) 語句1else語句2布爾表達(dá)式語句2falsetrue語句1布爾表達(dá)式語句truefalse13if 語句格式1if (布爾表達(dá)式) 語句布爾表達(dá)式語句2falsetrue語句1布爾表達(dá)式語句truefalse格式2if (布爾表達(dá)式) 語句

5、1else語句214if 語句例子1. 如果星期天不下雨,去西湖劃船,否則去茶樓喝茶。if (星期天不下雨) 劃船;else喝茶;if 語句可以寫成一行或兩行if(x=0) y=x;else y=-x; 或:if(x=0) y=x; else y=-x;2. 求y=|x| if (x=0) y=x; elsey=-x;或:if (星期天下雨) 喝茶;else劃船; 15if 語句例子3. 找出a 和b兩數(shù)中的大數(shù), 放到max中if (a=b) max=a;else max=b;或 max=a; if (maxb) max=b; 4. 找出a、b 和 c 三個(gè)數(shù)中的最大數(shù),放到max中 max

6、=a;if (maxb) max=b; if (maxb) min=b; if (minc) min=c;16if 語句例子5. 判斷一個(gè)數(shù) n 是奇數(shù)還是偶數(shù)if (n%2=0)System.out.println(n+is even.);elseSystem.out.println(n+is odd.);17【例3-4】通過命令行輸入2個(gè)整數(shù),輸出較小者。18【例3-4】改成從鍵盤輸入2個(gè)整數(shù)19【例3-4】改成從鍵盤輸入2個(gè)整數(shù)輸入:1 2輸出:x=1 y=2min=120【例3-5】求解ax+b=0(a0)的根這對(duì) 可以不寫嗎?21if 語句注 意點(diǎn)當(dāng)if 語句包含多條語句時(shí),一定要加

7、“ ” 編寫程序時(shí),要注意“ ”的位置浮點(diǎn)數(shù)類型數(shù)據(jù)的相等比較浮點(diǎn)數(shù)在計(jì)算機(jī)中用近似值表示不使用嚴(yán)格相等比較“=”判斷它們的差是否是一個(gè)很小的值如:判斷float 類型變量a 和b 是否相等的表達(dá)式|a-b|0.0000001f22if 語句嵌套在if 語句中包含 if 語句,就形成嵌套當(dāng)由多個(gè)條件來決定執(zhí)行不同的程序段時(shí)使用格式if(布爾表達(dá)式1)語句1else if(布爾表達(dá)式2)語句2 else if(布爾表達(dá)式3) 語句3 else if(布爾表達(dá)式n) 語句nelse 語句n+123條件 00&x=10錯(cuò)誤:0 x=10可讀性差: 0 x &x=10【例3-6】計(jì)算分段函數(shù)xyx00

8、0 x10 x10 x2010200) if (b0) c=100; else;else c=99;c=027switch語句switch(表達(dá)式) case 常量1: 語句序列1; break; case 常量2: 語句序列2; break; case 常量n: 語句序列n; break; default: 語句序列n+1;if 語句中,布爾表達(dá)式的值只能有兩種:true 或 false若情況更多時(shí),需要提供更多的選擇:使用switch語句/ 計(jì)算表達(dá)式,得到值/ 如果表達(dá)式值為常量1,執(zhí)行語句序列1/ 終止,結(jié)束switch 語句/ 如果表達(dá)式值為常量2,執(zhí)行語句序列2 / 終止,結(jié)束sw

9、itch 語句/ 如果表達(dá)式值為常量n,執(zhí)行語句序列n / 終止,結(jié)束switch 語句 /如果表達(dá)式值與常量1常量n都不同,執(zhí)行語句序列n+1 28Switch語句執(zhí)行流程計(jì)算值=常量1?語句塊1; break; 語句塊2 ; break; 語句塊n ; break; 語句塊n+1=常量2?=常量n?truetruetruedefaultfalsefalse29switch 語句注意點(diǎn)表達(dá)式的數(shù)據(jù)類型必須是byte,char,short,int case 子句中的值必須是常量,而且互不相同 break 語句用來終止switch 語句的執(zhí)行,即在執(zhí)行完一個(gè)case 分支后,使程序跳出switc

10、h 語句 switch(表達(dá)式) case 常量1: 語句序列1; break; case 常量2: 語句序列2; break; case 常量n: 語句序列n; break; default: 語句序列n+1;30【例3-7】通過 命令行輸入112之間的一個(gè)整數(shù),輸出相應(yīng)月份的英文單詞。 31【例3-8】成績(jī)轉(zhuǎn)化將百分制成績(jī)轉(zhuǎn)化為優(yōu)秀、良好、中等、及格和不及格的5級(jí)制成績(jī)。轉(zhuǎn)化標(biāo)準(zhǔn)優(yōu)秀:90100分良好:8089分中等:7079分及格:6069分不及格:60分以下思路第一步:將百分制劃分等級(jí)第二步:將等級(jí)對(duì)應(yīng)的中文字符輸出構(gòu)造表達(dá)式 (grade/10)1001090999808987079

11、7606965059540494303932029210191090優(yōu)秀優(yōu)秀良好中等及格不及格不及格不及格不及格不及格不及格32【例3-8】成績(jī)轉(zhuǎn)化能不寫嗎?(grade/10)10 或(grade/10) 0的處理存在問題:輸入101109,顯示等級(jí)為“優(yōu)秀”33【例3-8】新的處理思路輸入錯(cuò)誤數(shù)據(jù)時(shí)的處理34實(shí)驗(yàn)示例輸入n表示做n次下面的操作: 輸入兩個(gè)正整數(shù),輸出它們的和。 例: 輸入:2 /表示n=2,做兩次操作 10 11 20 30 輸出: sum=21sum=50 import java.util.Scanner;public class Test10097 public sta

12、tic void main(String args) int n,a,b,i,sum;Scanner in=new Scanner(System.in);n=in.nextInt(); /輸入nfor(i=1; i=n; i+) /*-*/System.out.println(sum=+sum);a=in.nextInt(); /輸入ab=in.nextInt(); /輸入bsum=a+b; /計(jì)算和353.4 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)程序在一定條件下,反復(fù)執(zhí)行一段程序代碼被反復(fù)執(zhí)行的程序代碼稱為循環(huán)體Java 循環(huán)語句while 語句dowhile 語句for 語句 36for 語句格式for (

13、表達(dá)式1; 表達(dá)式2; 表達(dá)式3 ) 循環(huán)體例說明表達(dá)式1:循環(huán)控制變量賦初值表達(dá)式2:布爾型,循環(huán)條件,判斷循環(huán)是否繼續(xù)表達(dá)式3:修改循環(huán)控制變量值37例:同學(xué)們一個(gè)學(xué)期(56天)的生活用for循環(huán)表示 開學(xué)報(bào)到 for ( i=1; i=1; i- )38for 語句執(zhí)行過程(1)計(jì)算表達(dá)式1,給循環(huán)控制變量賦初值(2)計(jì)算表達(dá)式2如果值是true,執(zhí)行循環(huán)體如果值是false,執(zhí)行(4)(3)計(jì)算表達(dá)式3,修改循環(huán)控制變量值,返回(2)(4)結(jié)束循環(huán),執(zhí)行 for 語句的下一條語句true表達(dá)式1表達(dá)式2表達(dá)式3false循環(huán)體39for 語句執(zhí)行過程第一步 i=1第二步 1=3?第三步

14、 輸出1第四步 i=22=3?輸出2i=33=3?輸出3i=44=3?結(jié)束循環(huán)運(yùn)行結(jié)果:123 特別注意:循環(huán)結(jié)束時(shí)循環(huán)控制變量的值40【例3-12】計(jì)算1100之間的整數(shù)之和s =1+2+3+4+10041【例3-12】 for 語句執(zhí)行過程s=0i=1i=100?s=0+1i=2i=100?s=1+2i=3i=100?s=1+2+3i=4i=100?結(jié)束循環(huán)i0?m=4-1輸出m=330?m=3-1輸出m=220?m=2-1輸出m=110?m=1-1輸出m=000?結(jié)束循環(huán)如果修改為:int m=0;則不進(jìn)入循環(huán)45 while 語句實(shí)例分析運(yùn)行結(jié)果:此程序沒有結(jié)果,沒有走while循環(huán)!

15、死循環(huán)!46【例3-9】計(jì)算10!s*=i; i+;運(yùn)行結(jié)果10!=3628800.0s*=i+; 47【例3-9】 while 語句執(zhí)行過程i=1 s=1i=10?s=1*1i=2i=10i=10?s=1*2i=3i=10?s=1*2*3i=4i=10?s=1*2*3*10i=11i0?m=3-1輸出m=2m0?m=2-1輸出m=1m0?m=1-1輸出m=0m0?結(jié)束循環(huán)如果修改為:int m=0;則輸出:m=-1注意分號(hào)不能忘 55【例3-10】 計(jì)算1+3+5+99 運(yùn)行結(jié)果sum=250056【例3-11】 計(jì)算 150之間的奇數(shù)和與偶數(shù)和運(yùn)行結(jié)果Odd sum=625Even sum

16、=65057【例3-13】求Fibonacci數(shù)列中的前20項(xiàng)Fibonacci 數(shù)列前兩項(xiàng)都是1,以后每項(xiàng)的值都是前兩項(xiàng)值之和1 1 2 3 5 8 13 21 34 55 由“兔子問題”引發(fā)使用“遞推法”解決也叫“迭代法”不斷由已知值推出新值,直到求解為止用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)迭代的3個(gè)環(huán)節(jié)迭代初始值迭代公式迭代終止條件58【例3-13】求Fibonacci數(shù)列中的前20項(xiàng)1 1 2 3 5 8 13 21 34 55 分析迭代算法(1)初始值, f1=1、f2=1(2)迭代公式, fn=fn-1+fn-2(n2)f1f2f3f4f5f6 11f1f2f1f2 f1=1f2=1f3= f1+ f

17、2f4= f2+ f3fn=fn-1+fn-2f1= f1+ f2f2= f2+ f1在程序中用f1、f2 表示二個(gè)數(shù) 59【例3-13】求Fibonacci數(shù)列中的前20項(xiàng)運(yùn)行結(jié)果1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765循環(huán)控制變量可以在for循環(huán)中說明60【例】求水仙花數(shù) 水仙花數(shù)一個(gè)三位數(shù),其個(gè)、十、百位數(shù)的立方和等于它本身如:153 = 1*1*1 + 5*5*5 + 3*3*3窮舉法對(duì)100999中的每一個(gè)數(shù),測(cè)試是否為水仙花數(shù)關(guān)鍵是分離出個(gè)位、十位、百位上的數(shù)字百位數(shù)字a為n/100十位數(shù)字

18、b為n/10%10 或 n%100/10個(gè)位數(shù)字c為n%10滿足以下條件的數(shù)就是水仙花數(shù)n = = a*a*a + b*b*b + c*c*c 61【例】找水仙花數(shù) 注意:如果被判斷的數(shù)不是三位數(shù), 就不能使用這種分解方式。62【例】整數(shù)的各位數(shù)字之和 輸入一個(gè)整數(shù),輸出它的各位數(shù)字之和例:輸入123456輸出21 輸入120輸出3 輸入-32輸出5關(guān)鍵是分離出各個(gè)位上的數(shù)字思路個(gè)位數(shù)字為n%10求和計(jì)算 n/10,放入n當(dāng) n0時(shí)重復(fù)以上操作nn%10n/10120 01212 211 1063【例】整數(shù)的各位數(shù)字之和 64循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)的實(shí)現(xiàn)要點(diǎn)歸納出哪些操作需要反復(fù)執(zhí)行? 循環(huán)

19、體這些操作在什么情況下重復(fù)執(zhí)行? 循環(huán)條件選用合適的循環(huán)語句for while do-while事先給定循環(huán)次數(shù),首選for通過其他條件控制循環(huán),考慮while或do-while65【例3-14】判斷素?cái)?shù)什么是素?cái)?shù)除了1及自身外,不能被其它整數(shù)整除的自然數(shù)判斷素?cái)?shù)的方法對(duì)一個(gè)自然數(shù) k,用 2 k-1 之間的每個(gè)整數(shù)進(jìn)行相除測(cè)試如果所有數(shù)都不能整除k,則k是素?cái)?shù)如果有一個(gè)數(shù)能整除k,則k不是素?cái)?shù)窮舉法測(cè)試 2 k-1 間的每個(gè)整數(shù)判斷k 能被i 整除的表達(dá)式k % i = 0 66算法 輸入 k 對(duì) i = 2k-1,執(zhí)行若 k % i = 0 ( 可知 k 不是素?cái)?shù) ),結(jié)束循環(huán) ( 否則繼

20、續(xù)循環(huán),用下一個(gè)數(shù)測(cè)試 ) 顯示判斷結(jié)果若 i=k(說明完成了整個(gè)循環(huán)),則 k 是素?cái)?shù); 否則( i=0.0001)計(jì)算公式item = flag*1.0/n/當(dāng)前項(xiàng),初值 item=1sum + = item /求和,初值 sum=0n + = 2 /下一項(xiàng)的分母,初值 n=1flag = - flag /實(shí)現(xiàn)一次正、一次負(fù),初值 flag=172【例】 計(jì)算多項(xiàng)式之和(三)運(yùn)行結(jié)果=3.1417926135957908思考:如果要求所有項(xiàng)的絕對(duì)值均大于等于0.0001, 應(yīng)如何修改?73【例】 計(jì)算多項(xiàng)式之和(四)計(jì)算 s=20+21+22+23+2n,n從鍵盤輸入運(yùn)行結(jié)果輸入:10輸出

21、:sum=2047.0 210=1024.074多重循環(huán) 當(dāng)循環(huán)體中包含循環(huán)語句時(shí),形成多重循環(huán)結(jié)構(gòu),稱為循環(huán)嵌套常用的循環(huán)嵌套二重循環(huán)三重循環(huán)75二重循環(huán)結(jié)構(gòu)示例 內(nèi) 循 環(huán) 外 循 環(huán) 語句條件語句條件76二重循環(huán)實(shí)例 外循環(huán)體內(nèi)循環(huán)體注意先執(zhí)行內(nèi)循環(huán),內(nèi)循環(huán)結(jié)束后才執(zhí)行外循環(huán)中的i+內(nèi)循環(huán)和外循環(huán)的控制變量要有區(qū)別77二重循環(huán)實(shí)例分析 i = 1j=1輸出 1j=2輸出 2j=3換行 i = 2j=1輸出 2j=2輸出 4j=3換行 i = 3j=1輸出 3j=2輸出 6j=3換行 i = 4運(yùn)行結(jié)果 12 24 3678【例】輸出九九乘法表表頭表體79【例】輸出九九乘法表i思考:這樣修

22、改后輸出結(jié)果會(huì)怎樣?80【例】輸出平面圖形輸入一個(gè)正整數(shù)n (n=1),輸出 n 行如下圖形A BBB CCCCC DDDDDDD EEEEEEEEE分析有幾行每行 有幾列每列輸出什么行 1 2 3 4 5列 1 13 15 17 19輸出內(nèi)容 A B C D E A A+1 A+2 A+3 A+4 A+i-1 i 1(2*i-1) ? for(i=1; i=n; i+) for(j=1; j=2*i-1; j+) System.out.print(char)(A+i-1); System.out.println();81【例】輸出平面圖形82【例】找水仙花數(shù) (窮舉法)水仙花數(shù)一個(gè)三位數(shù),其

23、個(gè)、十、百位數(shù)的立方和等于它本身如:153 = 1*1*1 + 5*5*5 + 3*3*383【例】找水仙花數(shù) (窮舉法)對(duì)每個(gè)數(shù)位使用窮舉法百位:19十位和個(gè)位:0 984【例3-15】計(jì)算輸出1! , 2! , , 5! 以及它們的和s=1!+2!+3!+4!+5!求和s=0;for(i=1; i=5; i+) s=s + k; 其中k 就是 i !計(jì)算k = i!k=1;for(j=1; j=i; j+)k=k*j; System.out.println(i+!=+k);注意變量s 和k 賦初值的位置是在各自的循環(huán)之前85【例3-15】計(jì)算輸出1! , 2! , , 5! 以及它們的和運(yùn)

24、行結(jié)果1!=12!=23!=64!=245!=120Total sum=15386【例3-15】使用迭代法 s=1!+2!+3!+4!+5!多頂式求和問題s=0;for(i=1; i=5; i+) k=?s=s + k; k 的分析第1 項(xiàng) 1! = 1 * 1第2 項(xiàng) 2! = 1! * 2第3 項(xiàng) 3! = 2! * 3第4 項(xiàng) 4! = 3! * 4第5 項(xiàng) 5! = 4! * 5第i 項(xiàng)i ! = (i -1)! * i k=k * i ; k=1 ;87【例3-15】使用迭代法 s=1!+2!+3!+4!+5!88【例3-16】求 2 50 之間的所有素?cái)?shù)思路對(duì) k =2 50 之間的每個(gè)數(shù),執(zhí)行 判斷k是否為素?cái)?shù)程序框架 for(k=2; k=50; k+) 判斷k是否為素?cái)?shù)for(i=2; i=k-1; i+)if(k%i=0)break; if(i=k)System.out.println(k);boolean flag;flag =true;for(i=2;i=k-1;i+)if(k%i=0) flag=false; break; if(flag)System.out.println(k);89【例3-16】求

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論