290 likes | 433 Views
第三章 Java 流程控制. 【 学习目标 】 程序设计语言使用控制语句来控制程序执行流向, Java 也不例外,控制语句一般包括顺序结构、选择结构、循环结构。通过本章学习,读者应该达到以下预期目标: 了解顺序结构、选择结构、循环结构的原理; 使用顺序结构编写简单程序; 使用 if-else 语句和 switch 语句实现选择结构编程; 使用 for 语句、 while 语句、 do-while 语句实现循环结构编程; 使用 break 语句、 continue 语句实现循环语句中的跳转控制;. 3.1 顺序结构
E N D
第三章 Java流程控制 • 【学习目标】 • 程序设计语言使用控制语句来控制程序执行流向,Java也不例外,控制语句一般包括顺序结构、选择结构、循环结构。通过本章学习,读者应该达到以下预期目标: • 了解顺序结构、选择结构、循环结构的原理; • 使用顺序结构编写简单程序; • 使用if-else语句和switch语句实现选择结构编程; • 使用for语句、while语句、do-while语句实现循环结构编程; • 使用break语句、continue语句实现循环语句中的跳转控制;
3.1顺序结构 • 空语句、表达式语句、复合语句是Java依照顺序执行的语句,所以被称之为顺序结构。 • 空语句是仅由分号构成的语句,表示什么动作都不做。 • 一个表达式加上一个分号就是一个表达式语句。只有少量的几种表达式才能构成表达式语句。他们是: • 赋值运算符构成的赋值表达式 • 由++或--成的表达式 • 方法调用 • new表达式 • 例如,a++,a*=2都是合法的表达式语句,但是a,a+1都不是合法的表达式语句。 • 复合语句是指由一对花括号{}括起来的任意数量的语句,有时又称为块语句或组语句。在复合语句内定义的变量,其作用域值能在该符合语句的范围内。
3.2选择结构 • 3.2.1 if语句 • if语句又称为条件语句,其格式为: • if (逻辑表达式) • <语句1>; • [ else • <语句2>; • ]
【任务3-1】if-else语句嵌套:求三个数中的最大值。【任务3-1】if-else语句嵌套:求三个数中的最大值。 //求三个数的最大值 publicclass max { publicstaticvoid main(String[] args) { int x=5,y=7,z=9,result; if (x>y){ if (x>z){ result=x; }else{ result=z; } }else{ if (y>z){ result=y; }else{ result=z; } } System.out.println("result="+result); } }
3.2.2 switch语句 • switch分支结构用于多条件选择,虽然在多条件选择的情况下,也可以使用if...else...的嵌套结构来实现,但是使用开关语句会使程序更为精炼、清晰。开关语句的格式为: • switch(开关表达式) • { • case 常量表达式1: < 语句1 >; break ; • case 常量表达式2: < 语句1 >; break ; • //...... • case 常量表达式n: < 语句n >; break ; • default: < 语句n+1 >; break ; • }
【任务3-2】switch语句:根据考试成绩打印出等级分数段 。 • import javax.swing.JOptionPane; • publicclass Grade { • publicstaticvoid main(String[] args) { • String StrGrade=JOptionPane.showInputDialog("请输入成绩0-100"); • int iGrade=Integer.parseInt(StrGrade); • switch (iGrade/10){ • case 0:System.out.println("D ");break; • case 1:System.out.println("D ");break; • case 2:System.out.println("D ");break; • case 3:System.out.println("D ");break; • case 4:System.out.println("D ");break; • case 5:System.out.println("D ");break; • case 6:System.out.println("C ");break; • case 7:System.out.println("B ");break; • case 8:System.out.println("A- ");break; • case 9:System.out.println("A ");break; • case 10:System.out.println("A+ ");break; • default:System.out.println("输入的数不在0-100之内"); • } • } • }
3.3循环结构 3.3.1 for循环语句 for语句的格式为: for (初始化语句; 条件语句; 控制语句) { //循环体 }
【任务3-3】一重for循环:计算1到100之间奇数的和。【任务3-3】一重for循环:计算1到100之间奇数的和。 publicclass SumFor { //用for循环计算1到100之间的奇数和 publicstaticvoid main(String[] args) { int i,sum=0; for (i=1,;i<100;i=i+2){ sum = sum +i; } System.out.println(“sum=”+sum); } } sum=2500
【任务3-4】两重for循环:用*号打印出一个倒直角三角形【任务3-4】两重for循环:用*号打印出一个倒直角三角形 publicclass daosangjiao { //打印倒三角 publicstaticvoid main(String[] args) { for (int i=1;i<=5;i++){ for (int j=1;j<=6-i;j++){ System.out.print("*"); } System.out.println(); } } }
【任务3-5】三重for循环:求所有的水仙花数。 publicclass ex3_6 { publicstaticvoid main(String[] args) { for (int i=1;i<=9;i++){ for (int j=0;j<=9;j++){ for (int k=0;k<=9;k++){ if (i*i*i+j*j*j+k*k*k==100*i+10*j+k){ System.out.println((100*i+10*j+k)+"是一个水仙花数"); } } } } } } 153是一个水仙花数 370是一个水仙花数 371是一个水仙花数 407是一个水仙花数
3.3.2 while循环语句 while (逻辑表达式) { //循环体 }
【任务3-6】whlile循环:求某个长整型中数字0出现的次数 。 publicclass longParse { publicstaticvoid main(String[] args) { long num=22340078902234L; int a0=0; while(num!=0){ if (num%10==0) a0=a0+1; num=num/10; } System.out.println("数字0出现的次数为"+a0); } } 数字0出现的次数为3。
3.3.3 do-while循环语句 do ... while 循环语句的格式为: do { //循环主体代码 } while (条件表达式) ;
3.4 break和continue语句 • Break跳出循环体 • Continue结束本次循环(循环体中continue之后的语句不再执行,而进入下一次循环)
3.5 方法调用和return语句 • 3.5.1方法定义 • Java 方法定义的格式是: • <返回值类型><方法名>(<形式参数列表>){ • <方法体> • }
3.5.2 方法调用 方法调用一般有三种形式: 1、方法表达式 方法调用通常返回一个值,一般用在表达式中,如下: int y= square(5); 在这种调用形式中,square方法会将5的平方计算出来放在变量y里面。 2、方法语句 有的时候也可以直接当作语句调用,例如: square(5); 在这种调用形式中,square方法会将5的平方计算并打印出来(square方法中的语句“System.out.println(“结果为”+s);”实现的),但是并没有保存结果。 3、方法返回结果作为参数 System.out.println(“5的平方为:”+square(5));
【任务3-7】水仙花方法定义。 publicclass UseShuiXianHua { static boolean shuixianhua (int i){ //…… } publicstaticvoid main(String[] args) { for (int i=100;i<=999;i++){ if (shuixianhua(i)) System.out.println(i+"是一个水仙花"); } } } publicclass UseShuiXianHua { staticboolean shuixianhua (int i){ int x=i/100; //百位 int y=(i%100)/10;//十位 int z=i%10; //个位 if (x*x*x+y*y*y+z*z*z==i){ returntrue; }else{ returnfalse; } } publicstaticvoid main(String[] args) { for (int i=100;i<=999;i++){ if (shuixianhua(i)) System.out.println(i+"是一个水仙花"); } } } 输出: 153是一个水仙花 370是一个水仙花 371是一个水仙花 407是一个水仙花
3.6习题 • 一、选择题 • 1.以下for循环的执行次数是( )。 • for(int x=0;(x==0)&(x>4);x++); • A)无限次 B)一次也不执行 C)执行4次 D)执行3次 • 2.下列语句序列执行后,j 的值是( )。 • int j=1; • for( int i=5; i>0; i-=2 ) j*=i; • A) 15 B) 1 C) 60 D) 0 • 3.下列语句序列执行后,i 的值是( )。 • int s=1,i=1; • while( i<=4 ) {s*=i; i++;} • A) 6 B) 4 C) 24 D) 5
4.若有循环: • int x=5,y=20; • do { y=y-x; x=x+2; • }while(x<y); • 则循环体将被执行( )。 • A) 2次 B) 1次 C) 0次 D) 3次 • 5. 以下语句中能构成多分支的语句是( )。 • A)for语句 B)while语句 • C)if__else语句的嵌套 D)do__while语句 • 6.下列方法定义中,正确的是( )。 • A) int x( int a,b ) { return (a-b); } B) double x( int a,int b) { int w; w=a-b; } • C) double x( a,b ) { return b; } D) int x( int a,int b) { return a-b; }
7.下列方法定义中,正确的是( )。 • A) void x( int a,int b ); { return (a-b); } B) x( int a,int b) { return a-b; } • C) double x { return b; } D) int x( int a,int b) { return a+b; } • 8. 下列方法定义中,不正确的是( )。 • A) float x( int a,int b ) { return (a-b); } B) int x( int a,int b) { return a-b; } • C) int x( int a,int b ); { return a*b; } D) int x(int a,int b) { return 1.2*(a+b); }
二、填空题 • 1. 以下方法fun的功能是求两参数之积。 • int fun ( int a, int b ) { __________________; } • 2. 以下方法fun的功能是求两参数之积。 • float fun ( int a, double b ) { __________________; } • 3. 以下方法fun的功能是求两参数的最大值。 • int fun ( int a, int b ) { __________________; }
三、问答题 • 1.方法可以没有返回值吗?可以有多个返回值吗? • 2.一个方法如果没有返回值,方法头定义中的返回值类型为何? • 3. 何为形式参数?何为实在参数? • 4. 一个方法或一个复合语句内定义的变量是否可以在方法外或复合语句外使用?这种变量称为什么变量?
5.阅读程序后回答问题 。 • publicclass a • { • publicstaticvoid main( String args[]) • { • int c=6; • for (int n=6; n < 11; n++ ) • { • if ( n == 8 ) continue; • System.out.print("\t"+(c++)); • } • } • } • 问题:1)程序的输出结果是什么? • 2)若将if中的continue语句替换为break语句,输出结果是什么? • 6、假设有一条绳子,长3000m,每天减去一半,请问需要几天时间,绳子的长度会短于5m,用java编码实现
3.7实训 • 实训1: • 【实训目的】 • 练习if-else分支语句的使用 • 【实训步骤】 • 用if else语句实现下列数学公式。 • 并打印当x为5的时候y的结果。
实训2: • 【实训目的】 • 练习switch语句的使用 • 【实训步骤】 • 建立类文件work3_b.java,在main函数中做如下工作: • 实训定义三个整型变量num1和num2 num3,并且都给初始值为0; • 定义一个字符型变量ch,为’A’; • 用switch语句根据下表判断字符ch中的类型,并作相应操作; • 打印出num1 num2 num3的值。
实训3: • 【实训目的】 • 一重循环练习:计算并打印Fiebonacci数列的前20个数 • 【实训步骤】 • Fibonacci数列有如下特点: 第1, 2两个数为0,1。从第3个数开始,每个数等于前2个数之和。 • 生成方法为: • F1=1 (n=1) • F2=1 (n=2) • Fn=Fn-1+Fn-2 (n>=3)
实训4: • 【实训目的】 • 用while语句和switch语句综合练习:统计一个长整型中数字0-9出现的次数。 • 【实现步骤】: • (1)定义一个long类型变量num,并初始化为任意值; • (2)定义10个int类型变量a0,a1,…,a9,并初始化为0; • (3)取得num的个位数,保存在一个整型变量aNum中; • (4)用switch语句判断aNum是0-9中的哪个数,并记录到相应的变量ax中(x代表0-9的数字,例如个位数aNum为9,则a9加一); • (5)将num除以10,再取个位,返回第(4)步运算,一直到除10为0则到第(6)步; • (6)打印出变量a0,a1,…,a9的值。 • 提示:例如计算长整型中数字0出现的次数,流程图为:
实训5: • 【实训目的】 • 练习二重循环代码的编写 • 【实训内容】 • 打印九九乘法表,格式如下: • 1*1=1 • 2*1=2 2*2=4 • 3*1=3 3*2=6 3*3=9 • 4*1=4 4*2=8 4*3=12 4*4=16 • 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 • 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 • 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 • 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 • 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
实训6: • 【实训目的】 • 练习方法的定义和使用 • 【实训步骤】 • 编写一个方法,输出1-1/2+1/3-1/4+…-1/n的值。要求使用三种方式调用该方法:例如: • int s=jiechen(5); • System.out.println(jiechen(6)); • jiechen(7); • 提示:Math.pow(4, 3)可以计算出4的3次方。