第四章 流程控制_第1页
第四章 流程控制_第2页
第四章 流程控制_第3页
第四章 流程控制_第4页
第四章 流程控制_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

JAVA语言程序设计西藏民族学院张孝飞1语句和复合语句分支结构(选择结构)循环结构跳转语句本章主

要内容第四章流程控制23Java语言中语句可以是以分号“;”结尾的简单语句,也可以是用一对花括号“{}”括起来的复合语句。Java语言的复合语句与C++复合语句不同的是:Java语言不允许在两个嵌套的复合语句内声明两个同名的变量。Java中的注释形式:单行://多行:/**/文件注释(Java特有的):/***/

文件注释产生一个HTML文档,从而为程序提供文档说明。publicstaticvoidmain(String[]args){

inta;……{intb;

inta;//错误,因变量a前面已定义……}}4.1语句与复合语句34语句1图4.1顺序结构语句24.2顺序结构4if语句1.简单的条件语句语句的格式如下:if(表达式){ 语句;}图4-1简单的条件语句4.3Java分支结构5(1)放在if之后的括号里的只能是一个逻辑表达式,即这个表达式的返回值只能是true或false。(2)如果表达式的值为true,则执行语句;如果表达式的值为false,则什么也不执行。(3)花括号括起来的语句块可以只有一行语句,也可以由多行代码构成。一个语句块通常被当成一个整体来执行。如果语句块只有一行语句时,则可以省略花括号,因为单行语句本身就是一个整体,无须花括号来把它们定义成一个整体。说明:6【例4-1】通过命令行输入一个人的年龄,判断其是否为未成年人。importjava.io.*;publicclassTestAge{ publicstaticvoidmain(String[]args)throwsIOException

{

InputStreamReaderin=newInputStreamReader(System.in); BufferedReaderbin=newBufferedReader(in);

intage;System.out.println("请输入一个年龄,回车");

age=Integer.parseInt(bin.readLine());

if(age<18)

System.out.println("这是一个未成年人!");

}

}72.带else的条件语句语句的格式如下:if(表达式){ 语句1;}else{语句2;}图4-2带else的条件语句8说明:(1)放在if之后的括号里的只能是一个逻辑表达式,即这个表达式的返回值只能是true或false。(2)如果if表达式的值为true,则执行语句1;如果表达式的值为false,则执行语句2。9【例4-2】判断一个年份是否为闰年,是则显示,否则提示某年不是闰年。(闰年的判断规则:如果某年能被4整除且不能被100整除;或者某年能被400整除)importjava.io.*;publicclassTestYear{ publicstaticvoidmain(String[]args)throwsIOException

{

InputStreamReaderin=newInputStreamReader(System.in); BufferedReaderbin=newBufferedReader(in);10intyear;System.out.println("请输入一个年份,回车");year=Integer.parseInt(bin.readLine());

if(year%4==0&&(year%100!=0)||(year%400==0))

System.out.println(year+"是闰年!");elseSystem.out.println(year+"不是闰年!");}}11【例4.3】找出三个整数中的最大值和最小值。//filename:App4_1.javaif语句的应用publicclassApp4_1{publicstaticvoidmain(String[]args){inta=1,b=2,c=3,max,min;if(a>b)max=a;elsemax=b;

12if(c>max)max=c;System.out.println("Max="+max);min=a<b?a:b;min=c<min?c:min;System.out.println("Min="+min);}}1314if多重条件选择结构(if-else嵌套)if(条件表达式1){语句序列1}elseif(条件表达式2){语句序列2}......elseif(条件表达式n){语句序列n}else{语句序列n+1}图4.4多重条件选择结构TF条件表达式1语句序列1TF条件表达式2语句序列2TF条件表达式n语句序列n语句序列n+1条件表达式的结果必须都是布尔型见例4.44.3分支结构14【例4-5】根据百分制分数判定成绩等级,标准如下:A:90~100分B:80~89分C:70~79分D:60~69分E:60分以下publicclassTestGrade{publicstaticvoidmain(String[]args){intscore=89;charch;if(score>=90)ch='A';15

elseif(score>=80)ch='B';elseif(score>=70)ch='C';elseif(score>=60)ch='D'; elsech='E';System.out.println("等级"+ch);}}16Java提供了多分支选择语——switch语句。使用switch可以测试多个不同的条件并做出相对的响应。

switch(表达式){case常量1:语句序列1; [break;]case常量2:语句序列2; [break;]…case常量n:语句序列n; [break;][default:语句序列n+1;]}4.3.2switch语句17(1)表达式的数据类型可以是byte、short、char和int类型,不允许是浮点数类型和long类型。break语句和default子句是可选项。(2)switch语句先计算表达式的值,然后依次匹配case子句后的常量1、常量2……常量n等值,如果遇到匹配的值即执行对应的语句序列,直到遇到break语句为止;如果case子句中没有break语句,则程序继续匹配剩余case子句后的值。(3)如果没有一个常量值与表达式的值相等,则执行default子句中的语句序列;如果没有default子句,switch语句不执行任何操作。说明:18【例4.6】利用switch语句来判断用户从键盘上输入的运算符,再输出计算后的结果。//filename:App4_3.javaswitch语句的应用publicclassApp4_3{publicstaticvoidmain(String[]args)throwsException{inta=100,b=6;charoper;System.out.print("请输入运算符:");oper=(char)System.in.read();//从键盘读入一个字符存入变量oper中switch(oper){

19case'+'://输出a+bSystem.out.println(a+"+"+b+"="+(a+b));break;case'-'://输出a-bSystem.out.println(a+"-"+b+"="+(a-b));break;case'*'://输出a*bSystem.out.println(a+"*"+b+"="+(a*b));break;case'/'://输出a/bSystem.out.println(a+"/"+b+"="+((float)a/b));break;default://输出字符串System.out.println("输入的符号不正确!");}}}20【例4.7】从键盘上输入一个月份,然后判断该月份的天数。//filename:App4_4.javaswitch语句的应用importjava.util.*;publicclassApp4_4{publicstaticvoidmain(String[]args){intmonth,days;Scannerreader=newScanner(System.in);System.out.print("请输入月份:");month=reader.nextInt();21switch(month){case2:days=28;//2月份是28天break;case4:case6:case9:case11:days=30;//4、6、9、11月份的天数为30break;default:days=31;//其它月份为31天}System.out.println(month+"月份为【"+days+"】天");}}22【例4-7】根据用户输入1~7之间的一个整数,输出相对应星期的英文单词。importjava.io.*;publicclassTestWeek{publicstaticvoidmain(String[]args)throwsIOException{ InputStreamReaderin=newInputStreamReader(System.in); BufferedReaderbin=newBufferedReader(in); shortday;System.out.println("请输入1~7之间的一个整数");

day=Short.parseShort(bin.readLine()); switch(day) {23case1:System.out.println("Monday");break; case2:System.out.println("Tuesday");break;case3:System.out.println("Wednesday");break;case4:System.out.println("Thursday");break;case5:System.out.println("Friday");break;case6:System.out.println("Saturday");break;case7:System.out.println("Sunday");break; default:System.out.println("请输入1~7之间的一个数!"); }}}244.2.3while语句语句的格式如下:while(表达式){循环体;}图4-6while语句流程图25说明:(1)放在while之后的括号里的只能是一个布尔表达式。布尔表达式表示循环执行的条件。(2)循环体可以是一条语句,也可以是复合的语句序列。如果只有单个语句需要重复,花括号可以省略。(3)while循环语句的执行流程:先判断while语句中的布尔表达式的值;如果是false,则不执行循环体,直接执行后面的程序;如果是true,则执行循环体语句,然后重新验证表达式的值,直到表达式的值为假时退出循环。(4)while语句的特点是先判断表达式值为真后,再执行循环体。如果while循环一开始布尔表达式的值就是假的,那么循环体就根本不被执行。26【例4.5】计算Fibonacci序列的前16项。//filename:App4_5.javawhile语句的应用publicclassApp4_5{publicstaticvoidmain(String[]args){finalintMAX=15;//定义常量MAX=15inti=0,j=1,k=1;while(k<=MAX){System.out.print(""+i+""+j);i=i+j;//计算Fibonacci序列中的下一个数j=i+j;//计算Fibonacci序列中的下一个数k=k+2;//用于改变循环的条件表达式的值}System.out.println();}}27【例4.6】从键盘上输入一个数,判断该数是否是Fibonacci序列中的数。//filename:App4_6.javawhile语句的应用importjava.io.*;publicclassApp4_6{publicstaticvoidmain(String[]args)throwsIOException{inta=0,b=1,n,num;Stringstr;BufferedReaderbuf;buf=newBufferedReader(newInputStreamReader(System.in));28System.out.print("请输入一个正整数:");str=buf.readLine();//从键盘上读入字符串赋给变量strnum=Integer.parseInt(str);//将str转换成int类型后赋给numwhile(b<num){n=a+b;a=b;b=n;}if(num==b)System.out.println(num+"是Fibonacci数");elseSystem.out.println(num+"不是Fibonacci数");}}29【例4.7】利用hasNextXXX()和nextXXX()方法的配合使用来完成键盘输入。//filename:App4_7.javahasNextXXX()方法的使用importjava.util.*;publicclassApp4_7{publicstaticvoidmain(String[]args){doublesum=0;intn=0;System.out.println("请输入多个数,每输入一个数后按Enter或Tab或空格键确认:");System.out.println("最后输入一个非数字结束输入操作");30Scannerreader=newScanner(System.in);//用System.in创建一个Scanner对象while(reader.hasNextDouble())//判断输入的数是否是双精度浮点型{doublex=reader.nextDouble();//读取并转换表示double型数据的字符序列sum=sum+x;n++;}System.out.print("共输入了【"+n+"】个数,其和为:"+sum);}}314.2.2do—while语句语句的格式如下:do{ 循环体;}while(表达式);图4-5do-while语句流程图32说明:(1)放在while之后的括号里的只能是一个布尔表达式。布尔表达式表示循环执行的条件。(2)循环体可以是一条语句,也可以是复合的语句序列。如果只有单个语句需要重复,花括号可以省略。(3)do—while语句的执行过程是:先执行一次循环体再判断布尔表达式的值,当布尔表达式的值为true时重复执行循环体中的语句,每次执行循环体之后都要重新验证表达式的值,直到表达式的值为false时退出循环。一定要有使布尔表达式的值取假的时候,否则会出现死循环。(4)特点:先执行循环体,然后判断循环条件是否成立,do—while语句总是执行它的循环体至少一次。33【例4.8】从键盘上输入一个正整数n,然后计算1+2+…+n的结果并输出。//filename:App4_8.javado-while循环的应用importjava.util.*;publicclassApp4_8{publicstaticvoidmain(String[]args){intn,i=1,sum=0;Scannerbuf=newScanner(System.in);do{System.out.print("输入正整数:");n=buf.nextInt();}while(n<=0);//要求输入数n必须大于0,否则一直要求重新输入

34while(i<=n)sum+=i++;//计算和System.out.println("1+2+…+"+n+"="+sum);//输出结果}}35【例4.9】用辗转相除法求两个整数的最大公约数。//filename:App4_9.javaimportjava.io.*;publicclassApp4_9{publicstaticvoidmain(String[]args)throwsIOException{inta,b,k;Stringstr1,str2;BufferedReaderbuf;buf=newBufferedReader(newInputStreamReader(System.in));System.out.print("请输入第一个数a=");str1=buf.readLine();//将输入的文字赋值给字符串变量str136a=Integer.parseInt(str1);//将str1转成int类型数据后赋给aSystem.out.print("请输入第二个数b=");str2=buf.readLine();//将输入的文字赋值给字符串变量str2b=Integer.parseInt(str2);//将str2转成int类型数据后赋给bSystem.out.print("gcd("+a+","+b+")=");do{k=a%b;a=b;b=k;}while(k!=0);//若余数k不为0,则继续进行下一次循环System.out.println(a);}}37【例4.10】已知S=N!,其中N为正整数,从键盘上任意输入一个大于1的整数M,求满足S<M时的最大S及此时的N,并输出S和N的值。//filename:App4_10.java循环语句的应用importjava.util.*;publicclassApp4_10{publicstaticvoidmain(String[]args){intn=1,s=1,m;Scannerreader=newScanner(System.in);38do{System.out.print("请输入大于1的整数m:");m=reader.nextInt();}while(m<=1);//若m≤1会一直要求重新输入,直到m>1为止while(s<m)//判断n!<m是否成立{s*=n;//计算s=n!n++;}System.out.println("s="+s/(n-1)+"n="+(n-2));//输出结果}}39

4.2.1for语句语句的格式如下:for(表达式1;表达式2;表达式3){ 循环体;}图4-4for语句流程图40说明:(1)表达式1一般是一个或多个(用逗号隔开)赋值语句,它用来给循环控制变量赋初值;表达式2是一个布尔类型的表达式,它决定什么时候退出循环;表达式3一般用来修改循环变量,控制变量每循环一次后按什么方式变化。这三个部分之间用“;”分开。41(2)for语句的执行过程:在循环刚开始时,先计算表达式1,在这个过程中,一般完成的是初始化循环变量或其它变量。根据表达式2的值来决定是否执行循环体。表达式2是一个返回布尔值的表达式,若该值为假,将不执行循环体,并退出循环;若该值为真,将执行循环体。执行完一次循环体后,计算表达式3。每次执行循环体之后都要重新验证表达式2的值,直到表达式2的值为false时退出循环。(3)循环体可以是一条简单语句,此时可以省略循环体外的花括号。循环体也可以是一组语句块,此时不可以省略循环体外的花括号。42【例4.11】求1到10的累加和。//filename:App4_11.javafor循环语句的应用publicclassApp4_11{publicstaticvoidmain(String[]args){inti,n=10,s=0;for(i=1;i<=n;i++)//从1到10进行累加求和s=s+i;System.out.println("Sum=1+……+"+n+"="+s);s=0;System.out.print("Sum=");

43for(i=n;i>1;i--)//从10到2进行累加求和{s+=i;System.out.print(i+"+");//输出数i和加号“+”}System.out.println(i+"="+(s+i));//输出结果}}444.2.4嵌套循环如果在循环语句的循环体中又包含循环语句,就形成多重循环结构,称为嵌套循环。嵌套循环既可以是for循环嵌套while循环,也可以是while循环嵌套do—while循环……即各种类型的循环都可以作为外层循环,各种类型的循环也可以作为内层循环。当程序遇到嵌套循环时,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将被外层循环的循环体来执行——只是内层循环需要反复执行自己的循环体而已。当内层循环执行结束、且外层循环的循环体执行结束,则再次计算外层循环的循环条件,决定是否再次开始执行外层循环的循环体。45根据上面分析,假设外层循环的循环次数为i次,内层循环的循环次数为j次,那么内层循环的循环体实际上需要执行i*j次。嵌套循环不仅可以是两层嵌套,还可以是三层嵌套,四层嵌套……不论循环如何嵌套,我们都可以把内层循环当成外层循环的循环体来对待,区别只是这个循环体里包含了需要反复执行的代码。循环嵌套时,要求内循环完全包含在外循环之内,不允许出现相互交叉46【例4-17】利用双重循环,输出九九乘法表:publicclassTable{publicstaticvoidmain(Strin

温馨提示

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

评论

0/150

提交评论