第三章-流程控制语句_第1页
第三章-流程控制语句_第2页
第三章-流程控制语句_第3页
第三章-流程控制语句_第4页
第三章-流程控制语句_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

第三章流程控制语句13.1语句概述

3.2分支语句3.3循环语句3.4跳转语句3.5常用的程序设计方法

3.6格式化的输入输出

21.1

Java语言简介3.1.1Java语句的分类3.1.2结构化程序设计的三种基本流程

33.1.1Java语句的分类1.空语句2.表达式语句3.声明语句4.标号语句标号语句的格式为:标号:语句5.块语句6.断言语句

其语法格式:assert表达式1;assert表达式1:表达式2;其中,表达式1必须是boolean表达式,表达式2则可以是任何类型。表达式1为假,抛出异常。43.1.2结构化程序设计的三种基本流程

计算机算法流程,只有三种基本结构:顺序结构、选择结构、循环结构。每种结构是单入口、单出口的。

AB真假BApP循环体假真5Java语言的三个显著特点1跨平台(体系结构中立)

Java程序能够在网络上任何地方执行;完全统一的语言版本,实现平台无关性;字节代码与平台无关性;访问底层操作系统功能的扩展类库,不依赖于具体系统等。典型商用系统。2安全性好

除了Java语言具有的许多安全特性以外,Java提供了字节码校验器、文件访问限制机制、类装载器和运行时内存布局四级安全保证机制。3面向对象

面向对象的技术是当今软件开发的主流技术之一。Java语言是一个彻底的纯面向对象的程序设计语言。它具有面向对象的封装、继承和多态三大特点。61.2

Java程序工作原理

1.2.1Java程序工作流程

1.2.2Java虚拟机

1.2.3Java语言的平台无关性

1.2.4Java平台的分类

73.2.1if语句

格式:if(表达式)语句功能:首先要计算表达式,若值为真,则执行语句,否则(值为假时)结束执行if语句,执行if语句的后续语句。

表达式语句truefalse8【例3-1】判断两个数的最大值。classMyMax{ publicdoublegetMax(doublea,doubleb){ doublemax; max=a;

if(max<b){ max=b; } returnmax; }}9【例3-1】判断两个数的最大值(续)publicclassEx3_1{publicstaticvoidmain(String[]args){ MyMaxobj=newMyMax(); System.out.println("max="+obj.getMax(3.14,3.1415926));}}【模仿例3-1】判断四个数的最大值。103.2.2

if-else语句格式:if(表达式)语句1else语句2功能:首先要计算表达式,若值为真,则执行语句1,否则(值为假时)执行语句2。

表达式语句1语句2truefalse11【例3-2】闰年问题。输入一个年份,判断概念是否为闰年?importjava.util.*;classLeap{ publicbooleanisLeap(intyear){

if((year%4==0)&&(year%100!=0)||(year%400==0)){ returntrue;表达式语句1语句2truefalse0 }

else{returnfalse; } }}12【例3-2】闰年问题。输入一个年份,判断概念是否为闰年?(续)publicclassEx3_2{publicstaticvoidmain(String[]args){ intyear; System.out.println("输入一个年份:");Scannerreader=newScanner(System.in); year=reader.nextInt(); Leapobj=newLeap();

if(obj.isLeap(year)){ System.out.println(year+"是闰年."); }

else{ System.out.println(year+"不是闰年."); }}}13【例3-4】设计一个四则运算的计算器importjava.util.*;importjava.io.*;publicclassEx3_4{publicstaticvoidmain(String[]args)throwsIOException{(newCalculator()).calculate();}}classCalculator{ publicvoidcalculate()throwsIOException{doublea,b,c=0; charop;14【例3-4】设计一个四则运算的计算器(续) System.out.println("输入2个操作数:"); Scannerreader=newScanner(System.in); a=reader.nextDouble(); b=reader.nextDouble(); System.out.println("输入运算符"); op=(char)System.in.read(); if(op=='+')c=a+b; if(op=='-')c=a-b; if(op=='*')c=a*b;if(op=='/')c=a/b; System.out.println(a+""+op+""+b+"="+c);

}}153.2.3switch语句

switch语句的格式:switch(表达式){case值1:语句1; [break;]case值2:语句2;[break;]……case值N:语句N;[break;][default:语句N+1;]}功能:执行switch语句时,首先计算switch后表达式的值,然后在switch语句中寻找与该表达式的值相匹配的case值,如果找到,则执行该case后的各语句,直至遇到一个break语句为止;如果找不到匹配的case值,则执行switch的默认语句(default),直到switch语句体结束。如果找不到匹配的case值且不存在默认语句(default),则跳过switch语句体,什么也不做。

16switch表达式语句1语句2语句n语句…...值1值2值ndefaultcase17【例3-6】【例3-6】根据输入的百分制成绩(score),要求输出成绩等级(grade)A、B、C、D、E。90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。

importjava.util.*;publicclassEx3_6{publicstaticvoidmain(String[]args){ (newGrade()).toGrade();}}18【例3-6】(续1)classGrade{ publicvoidtoGrade(){ intscore,m; Scannerreader=newScanner(System.in); System.out.println("输入成绩:"); score=reader.nextInt(); if(score<0||score>100){ System.out.println("dataerror."); } else{

m=score/10; switch(m)

{

case9:

19【例3-6】(续2)

case10:System.out.println("ThegradeisA.");

break;

case8:System.out.println("ThegradeisB.");

break;

case7:System.out.println("ThegradeisC.");

break;

case6:System.out.println("ThegradeisD.");

break;

default:System.out.println("ThegradeisE.");

break;

}

}

}}【改写】用switch语句设计一个四则运算的计算器。203.3

循环语句

3.3.1while循环语句

3.3.2do-while循环语句

3.3.3for循环语句

213.3.1while循环语句

while语句的一般格式:[初始化]while(终止表达式){语句序列(循环体);[迭代]}功能:首先初始化,其次,计算终止表达式的值,如果其值为真(true),则执行语句序列(循环体),再执行迭代语句,然后计算终止表达式的值,并重复上述过程,直到终止表达式的值为“假”(值为false)时,退出循环,执行下一条语句。

终止循环体falsetrue初始化迭代22【例3-7】有一张足够大的纸,厚0.01毫米,问将它对折多少次后可以达到珠穆拉玛峰的高度(8844.43米)。classFoldCount{ publicintgetCount(doubleh){ intn=0; while(h<8844.43){

h=2*h; n++; } returnn; }}23【例3-7】(续)publicclassEx3_7{publicstaticvoidmain(String[]args){ FoldCountobj; obj=newFoldCount(); System.out.println("count="+obj.getCount(0.01e-3));}}程序运行结果:count=30243.3.2do-while循环语句

do-while语句的一般格式:[初始化]do{语句序列(循环体);[迭代]}while(终止表达式);功能:首先初始化,其次,执行do后面循环体中的语句。再执行迭代语句,然后,计算终止表达式的值。当值为true时,转去执行do后面循环体中的语句;当值为false时,退出do-while循环,执行下一条语句。

初始化迭代终止falsetrue循环体25【例3-9】循环接受并输出从键盘输入的字符,直到输入的字符为回车为止。importjava.io.*;classCharIO{publicvoidaceptChar()throwsIOException{ charch; System.out.print("请输入字符(按Enter键结束):");

do{ ch=(char)System.in.read();//接收键盘输入 System.out.print(ch+"");

}while(ch!='\n');}}26【例3-9】(续)publicclassEx3_9{publicstaticvoidmain(String[]args)throwsIOException{ (newCharIO()).aceptChar();}}特点:先执行循环体,后判断终止表达式。循环体至少被执行一次。273.3.3for循环语句格式:for(初始化;终止表达式;迭代){循环体;}功能:执行过程如下:1)执行初始化。2)计算“终止表达式2”,若其值为true,则转步骤(3);若其值为false,则转步骤(5)。3)执行一次循环体。4)执行迭代语句,然后转向步骤2。5)结束循环,执行for循环之后的语句。终止循环体false初始化迭代true28【例3-11】求1+2+3+…+100的和。classSum{ publicintsum1ton(intn){ intsum=0; for(inti=1;i<=n;i++){ sum+=i; } returnsum; }}publicclassEx3_11{publicstaticvoidmain(String[]args){ System.out.println("sum="+(newSum().sum1ton(100)));}}29累加型问题的一般编程方法【累加型】类型诸如□+□+□+□+……+□+□求其前n项之和的编程题。累加型算法:若设i为循环变量,s为前n项累加之和,则程序的基本结构为:

s=0;for(i=1;i<=n;i++)s=s+□;【模仿例3-11】编程求1+3+5+7+……+95+97+99的和。【例3-12】编程求1-1/2+1/3-1/4+1/5-…+1/99-1/10030【例3-13】编程求阶乘n!classFactorial{ publiclonggetFac(intn){ longfac; fac=1; for(inti=1;i<=n;i++){ fac=fac*i; } returnfac; }}publicclassEx3_13{publicstaticvoidmain(String[]args){System.out.println("fac="+(newFactorial().getFac(10)));}}31阶乘型问题的一般编程方法【阶乘型】类型诸如□×□×□×□×……×□×□求其前n项之积的编程题。阶乘型算法若设i为循环变量,fac为前n项相乘之积,则程序的基本结构为:

fac=1;for(i=1;i<=n;i++)fac=fac*□;【模仿例3-13】编程求1×3×5×7×9×11×13×…前n项之积。323.4

跳转语句

3.4.1

break语句

3.4.2

continue语句

3.4.2

return语句333.4.1break语句

break有两种形式:不带标号的break和带标号的break。不带标号break的格式:break;功能:⑴跳出switch语句;⑵跳出当前一层循环。说明:⑴break只能终止并跳出最近一层的结构。⑵break不能用于循环语句和switch语句之外的任何其它语句之中。34【例3-16】韩信点兵又称为中国剩余定理,相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人,5人一列余2人,7人一列余4人,13人一列余6人。刘邦茫然不知其数。请问韩信至少有多少名士兵?

classHanXin{publicintgetNum(){intn=1;while(true){ if(n%3==1&&n%5==2&&n%7==4&&n%13==6)

break; n++;}returnn;}}35【例3-16】(续)publicclassEx3_16{publicstaticvoidmain(String[]args){ System.out.println((newHanXin()).getNum());}}程序运行结果:48736带标号break语句的格式: 标号://标号应在break前面 …… break标号;功能:直接跳出由标号所指定的循环语句、开关语句或块语句,使程序继续执行后面的语句。37【例3-17】用break终止外层块语句

classBreakClass{ publicvoidbreakMethod(){ booleant=true;

first:{//定义块first

second:{//定义块second

third:{

//定义块third System.out.println("在break之前。"); if(t)breaksecond;//break终止second块 System.out.println("本语句将不被执行。");

} System.out.println("本语句将不被执行。");

}

System.out.println("在second块后的语句。");

} }}38【例3-17】用break终止外层块语句(续)publicclassEx3_17{publicstaticvoidmain(String[]args){ (newBreakClass()).breakMethod();}}程序运行结果:在break之前。在second块后的语句。393.4.2continue语句

continue有两种形式:不带标号的continue和带标号的continue。格式:continue;功能:结束本次循环,跳过循环体中尚未执行的语句,重新开始下一轮循环。从循环体第一个语句开始执行。说明:只有用在循环结构中。【例3-18】求输入的十个整数中正数的个数及其平均值。40importjava.util.*;classPositive{ publicfloatgetPosAve(){ inti,num=0,a;//i循环控制变量,num计数器,a输入数floatsum=0; Scannerreader=newScanner(System.in); System.out.print("输入整数:");for(i=0;i<10;i++)

{ a=reader.nextInt();

if(a<=0)continue; num++; sum+=a;

} returnsum/num; }}41publicclassEx3_18{publicstaticvoidmain(String[]args){ System.out.println((newPositive()).getPosAve());}}程序运行结果:输入整数:234-7-235-1145-910.0423.4.3return语句

格式:return[表达式];功能:从当前方法中推出,返回到调用的语句处,可以带参数返回。说明:如果指定的返回类型是void,那么方法中的return语句不应该带表达式;如果指定的返回类型是非void,那么方法中的return语句必须带表达式。一个方法中可以包含多个return语句,程序一旦执行到return语句就从方法中返回。一般情况下,出现在方法体末尾不带表达式的return语句可以被省略。433.5常用的程序设计方法

3.5.1枚举法(穷举法)

3.5.2

递推法3.5.3

递归法3.5.4简单图形的输出

3.5.5简单游戏的设计

443.5.1枚举法(穷举法)

枚举法:把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。【例3-20】百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只。classHundredYunChicken{ publicvoidprintChicken(){ intx,y,z;45

for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++)

{if(x+y+z==100&&5*x+3*y+z/3.0==100)System.out.println("公鸡="+x+",母鸡="+y+",小鸡="+z);

} }}publicclassEx3_20{publicstaticvoidmain(String[]args){ (newHundredYunChicken()).printChicken();}}46为了减少循环次数,可将三个for语句改写为:for(x=0;x<=20;x++)for(y=0;y<=33;y++){z=100-x-y;if(5*x+3*y+z/3.0==100) System.out.println("公鸡="+x+",母鸡="+y+",小鸡="+z);}程序运行结果:公鸡=0,母鸡=25,小鸡=75公鸡=4,母鸡=18,小鸡=78公鸡=8,母鸡=11,小鸡=81公鸡=12,母鸡=4,小鸡=84473.5.2递推法

递推是一个序列U1,U2,U3,…,Un,后面的每一项都能按公式由前面的一项或连续的几项推算出来。递推初值、递推公式和递推终止条件是递推法的三要素。【例3-22】斐波纳契数列。斐波纳契数列是这样一个数列:前两个数都是1,第三个数是前两个数之和,以后的每个数都是其前两个数之和。求斐波那契数列前n项的和。48【例3-22】斐波纳契数列

classFibonacci{ publicintgetSum(intn){ intsum=2,f1=1,f2=1,f;

for(inti=3;i<=n;i++) {

f=f1+f2; sum=sum+f; f1=f2; f2=f; } returnsum; }}49【例3-22】斐波纳契数列

(续)publicclassEx3_22{publicstaticvoidmain(String[]args){ Fibonaccio=newFibonacci(); System.out.println("sum="+o.getSum(20));}}本题的三要素是:递推初值:f1=1,f2=1递推公式:f=f1+f2终止条件:共计算n-2次503.5.3递归法

在一个方法有调用该方法自身的情况时,称为方法的递归调用。大多数情况是直接递归,即一个方法直接自己调自己。当一个实际问题可用递归形式描述时,该问题的求解用递归方法变得容易。例如,求n!、求前n个自然数的和、求第n个Fibonacci数等。【例3-25】用递归调用求第n个Fibonacci数的方法求前20个Fibonacci数。51classFibo{ publicvoidprintFibo(intn){ for(inti=1;i<=n;i++){ System.out.print(f(i)+""); if(i%10==0)System.out.println(); } } longf(longn){

if(n==1||n==2)return1;

elsereturnf(n-1)+f(n-2); }}52publicclassEx3_25{publicstaticvoidmain(String[]args){ newFibo().printFibo(20);}}对求第n个Fibonacci数列的递归方法来说,这两个条件是:递归计算公式:fib(n)=fib(n-1)+fib(n-2)递归结束条件:n=1或n=2【模仿例3-25】用递归法求n的阶乘。533.5.4简单图形的输出

【例3-26】编程显示以下图形(共N行,N由键盘输入)。*************************⑴设N=5第1行4个空格=5-11个“*”=2*行号-1第2行3个空格=5-23个“*”=2*行号-1第3行2个空格=5-35个“*”=2*行号-1第4行1个空格=5-47个“*”=2*行号-1第5行0个空格=5-59个“*”=2*行号-1由此归纳出:第i行的空格数N-i个;第i行的“*”数是2i-1个。54打印图形的程序结构:for(i=1;i<=h;i++)/*重复打印h行*/{重复打印h-i个空格;重复打印2i-1个*;换行;}55importjava.util.*;classTriGraphic{ publicvoidprintTriGra(inth){ for(inti=1;i<=h;i++){ for(intj=1;j<=h-i;j++) System.out.print(""); for(intj=1;j<=2*i-1;j++) System.out.print("*"); System.out.println();//换行 } }}56publicclassEx3_26{publicstaticvoidmain(String[]args){ intn; Scannerreader=newScanner(System.in); System.out.print("输入正整数:"); n=reader.nextInt(); newTriGraphic().printTriGra(n);}}573.5.5简单游戏的设计

【例3-28】设计一个猜数字游戏。游戏自动产生一个0至1000范围内的一个整数,游戏玩家从键盘输入数字去猜,如果猜对了,打印共猜了多少次数;如果猜小了,给玩家提示猜小了,重新输入数字;如果猜大了,同样,给玩家提示猜大了,重新输入数字。58importjava.util.*;classGuessGame{publicvoidplayGuessGame(){intgoalNum=(int)(Math.random()*1000);intcount=0;//计数器intguessNum;do{ guessNum=inputGuessNum(); count++; if(guessNum<goalNum){ System.out.println(“你猜小了,请重猜。} if(guessNum>goalNum){System.out.println("你猜大了,请重猜。")}while(guessNum!=goalNum);59System.out.println("恭喜你猜对了。共猜了"+count+"次。")

}intinputGuessNum(){ Scannerreader=newScanner(System.in); System.out.println("请输入你所猜的数(0-1000):");intn=reader.nextInt(); while(n<0||n>=1000){ System.out.println("你所猜的数不在

温馨提示

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

评论

0/150

提交评论