第三章 Java 流程控制

29
第第第 Java 第第第第 第第第第• 程程程程程程程程程程程程程程程程程程程程程Java 程程程程 程程程程程 程程程 ,一 程程程程 程程程程程 程程程程程 程程程程程程程 程程程程程程程程程程程程程 、、。,: • 程程程程程程 程程程程程 程程程程程程程程 、、; • 程程程程程程程程程程程程• 程程 if-else 程程程 switch 程程程程程程程程程程• 程程 for 程程while 程程do-while 程程程程程程程程程程• 程程 break 程程continue 程程程程程程程程程程程程程程

description

第三章 Java 流程控制. 【 学习目标 】 程序设计语言使用控制语句来控制程序执行流向, Java 也不例外,控制语句一般包括顺序结构、选择结构、循环结构。通过本章学习,读者应该达到以下预期目标: 了解顺序结构、选择结构、循环结构的原理; 使用顺序结构编写简单程序; 使用 if-else 语句和 switch 语句实现选择结构编程; 使用 for 语句、 while 语句、 do-while 语句实现循环结构编程; 使用 break 语句、 continue 语句实现循环语句中的跳转控制;. 3.1 顺序结构 - PowerPoint PPT Presentation

Transcript of 第三章 Java 流程控制

Page 1: 第三章   Java 流程控制

第三章 Java 流程控制• 【学习目标】• 程序设计语言使用控制语句来控制程序执行流向, Java 也

不例外,控制语句一般包括顺序结构、选择结构、循环结构。通过本章学习,读者应该达到以下预期目标:

• 了解顺序结构、选择结构、循环结构的原理;• 使用顺序结构编写简单程序;• 使用 if-else 语句和 switch 语句实现选择结构编程;• 使用 for 语句、 while 语句、 do-while 语句实现循环结构

编程;• 使用 break 语句、 continue 语句实现循环语句中的跳转控

制;

Page 2: 第三章   Java 流程控制

• 3.1 顺序结构 • 空语句、表达式语句、复合语句是 Java 依照顺序执行的语句,所以被

称之为顺序结构。 • 空语句是仅由分号构成的语句,表示什么动作都不做。• 一个表达式加上一个分号就是一个表达式语句。只有少量的几种表达

式才能构成表达式语句。他们是:• 赋值运算符构成的赋值表达式• 由 ++ 或 -- 成的表达式• 方法调用• new 表达式• 例如, a++ , a*=2 都是合法的表达式语句,但是 a , a+1 都不是合

法的表达式语句。• 复合语句是指由一对花括号 {} 括起来的任意数量的语句,有时又称为

块语句或组语句。在复合语句内定义的变量,其作用域值能在该符合语句的范围内。

Page 3: 第三章   Java 流程控制

• 3.2 选择结构• 3.2.1 if 语句• if 语句又称为条件语句,其格式为:• if ( 逻辑表达式 ) • < 语句 1> ;• [ else • < 语句 2> ;• ]

Page 4: 第三章   Java 流程控制

【任务 3-1 】 if-else 语句嵌套:求三个数中的最大值。

// 求三个数的最大值public class max {

public static void 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);

}}

结束

x>y?

开始

result=x

x>z?

result=z

result=y

y>z?

result=z

是 否

初始化x,y,z,result

打印result

Page 5: 第三章   Java 流程控制

• 3.2.2 switch 语句•   switch 分支结构用于多条件选择,虽然在多条件选择的情况下,也

可以使用 if...else... 的嵌套结构来实现,但是使用开关语句会使程序更为精炼、清晰。开关语句的格式为:

• switch( 开关表达式 )• {• case 常量表达式 1: < 语句 1 >; break ;• case 常量表达式 2: < 语句 1 >; break ; • //......• case 常量表达式 n: < 语句 n >; break ;• default: < 语句 n+1 >; break ; • }

Page 6: 第三章   Java 流程控制

【任务 3-2 】 switch 语句:根据考试成绩打印出等级分数段 。

import javax.swing.JOptionPane;public class Grade {

public static void 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 之内 ") ;}

}}

Page 7: 第三章   Java 流程控制

3.3 循环结构3.3.1 for 循环语句 for 语句的格式为: for ( 初始化语句 ; 条件语句 ; 控制语句 ) {   // 循环体 }

Page 8: 第三章   Java 流程控制

【任务 3-3 】一重 for 循环:计算 1到 100 之间奇数的和。

开始

结束

定义i=1,sum=0

i<100?

sum=sum+i打印i和sumi=i+2

public class SumFor {// 用 for 循环计算 1 到 100 之间的奇数和

public static void 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

Page 9: 第三章   Java 流程控制

【任务 3-4 】两重 for 循环:用 * 号打印出一个倒直角三角形

public class daosangjiao {// 打印倒三角

public static void main(String[] args) {for (int i=1;i<=5;i++){

for (int j=1;j<=6-i;j++){System.out.print("*");

}System.out.println();

}}

}

Page 10: 第三章   Java 流程控制

【任务 3-5 】三重 for 循环:求所有的水仙花数。

public class ex3_6 {public static void 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 是一个水仙花数

Page 11: 第三章   Java 流程控制

3.3.2 while 循环语句    while ( 逻辑表达式 ) {

// 循环体 }

Page 12: 第三章   Java 流程控制

【任务 3-6 】 whlile 循环:求某个长整型中数字 0 出现的次数 。

long num=22340078902234L;

While(num!=0)

If ( num%10==0)a0=a0+1;

num=num/10;否

结束

打印a0

开始 public class longParse {public static void 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 。

Page 13: 第三章   Java 流程控制

3.3.3 do-while 循环语句 do ... while 循环语句的格式为: do { // 循环主体代码 }    while ( 条件表达式 ) ;

Page 14: 第三章   Java 流程控制

3.4 break 和 continue 语句• Break 跳出循环体• Continue 结束本次循环(循环体中 continue

之后的语句不再执行,而进入下一次循环)

Page 15: 第三章   Java 流程控制

3.5 方法调用和 return 语句• 3.5.1 方法定义• Java 方法定义的格式是:• < 返回值类型 >< 方法名 >(< 形式参数列表

>){• < 方法体 >• }

Page 16: 第三章   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 ) );

Page 17: 第三章   Java 流程控制

【任务 3-7 】水仙花方法定义。public class UseShuiXianHua { static boolean shuixianhua (int i){//…… }

public static void main(String[] args) {for (int i=100;i<=999;i++){

if (shuixianhua(i))System.out.println(i+" 是一个水仙花 ");

}}

}public class UseShuiXianHua {

static boolean 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){ return true; }else{ return false;

}

}public static void main(String[] args) {

for (int i=100;i<=999;i++){if

(shuixianhua(i))

System.out.println(i+" 是一个水仙花 ");}

}}

153 是一个水仙花370 是一个水仙花371 是一个水仙花407 是一个水仙花

输出:

Page 18: 第三章   Java 流程控制

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

Page 19: 第三章   Java 流程控制

• 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; }

Page 20: 第三章   Java 流程控制

• 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); }

Page 21: 第三章   Java 流程控制

二、填空题• 1. 以下方法 fun 的功能是求两参数之积。• int fun ( int a, int b )

{ __________________; } • 2. 以下方法 fun 的功能是求两参数之积。• float fun ( int a, double b )

{ __________________; }• 3. 以下方法 fun 的功能是求两参数的最大

值。• int fun ( int a, int b )

{ __________________; }

Page 22: 第三章   Java 流程控制

• 三、问答题• 1. 方法可以没有返回值吗?可以有多个返

回值吗 ? • 2. 一个方法如果没有返回值,方法头定义

中的返回值类型为何?• 3. 何为形式参数?何为实在参数?• 4. 一个方法或一个复合语句内定义的变量

是否可以在方法外或复合语句外使用?这种变量称为什么变量?

Page 23: 第三章   Java 流程控制

• 5. 阅读程序后回答问题 。• public class a • {• public static void 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 编码实现

Page 24: 第三章   Java 流程控制

3.7 实训

• 实训 1 :• 【实训目的】• 练习 if-else 分支语句的使用• 【实训步骤】• 用 if else 语句实现下列数学公

式。

• 并打印当 x 为 5 的时候 y 的结果。

y= x*x+1 ( x>5 )

x+1 ( -5<=x<=5 )

-x ( x<-5 )

Page 25: 第三章   Java 流程控制

• 实训 2 :• 【实训目的】• 练习 switch 语句的使用• 【实训步骤】• 建立类文件 work3_b.java, 在 main函数

中做如下工作:• 实训定义三个整型变量 num1 和 num2

num3 ,并且都给初始值为 0 ;• 定义一个字符型变量 ch, 为’ A’ ;• 用 switch 语句根据下表判断字符 ch 中

的类型,并作相应操作;

• 打印出 num1 num2 num3 的值。

参数变化 字符 ch 的值

num1++ ; ‘A’ ‘E’ ‘I’ ‘O’ ‘U‘

num2++ ; ‘a’ ‘e’ ‘i’ ‘o’ ‘u’

num3++ ; 其他

Page 26: 第三章   Java 流程控制

• 实训 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)

Page 27: 第三章   Java 流程控制

• 实训 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 出现的次数,流程图为:

Long num=12345678901234L;

While(num!=0)

If ( num%10==0)A0=a0+1;

结束

打印a0

开始

Page 28: 第三章   Java 流程控制

• 实训 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

Page 29: 第三章   Java 流程控制

• 实训 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 次方。