流程控制结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
流程控制结构 Final approval draft on November 22, 2020
(单元教案首页)
单元标题第3章流程控制结构
教学时数:()学时,其中理论()学时、实验()学时、上机()其它()学时,其它是指:
教学目的与要求:
1.理解程序的的三大控制结构。
2.掌握选择结构实现语句的用法编程应用
3.掌握循环结构实现语句的用法及其编程应用。
4.理解并掌握各种跳转语句的使用方法。
主要教学内容:
1.程序的控制结构:顺序、选择、循环。
2.选择结构语句:if语句(两种格式)和switch语句、程序举例。
3.循环结构语句:for语句、while、语句、do-while语句、三种循环语句的互相转化、程序举例。
4.控制结构跳转语句:break语句、continue语句、return语句
教学重点与难点:
重点:if语句、switch语句、for语句、while语句、do-while语句
难点: switch语句、选择结构编程应用、循环结构编程应用、跳转语句的编程应用课后作业:
1.课本P66 综合练习三:第一题~第四题
2.上机实习:实习3:Java流程控制
课后体会:
兰州资源环境职业技术学院教师授课教案
——————————————————————
第3章流程控制结构
一、本章主要内容:
本章主要讲述Java程序的基本控制结构和控制语句,使得学生能利用这三种结构来解决一些比较复杂的问题。
Java程序的基本控制结构有三种:顺序结构、选择结构、循环结构。
二、具体授课内容:
概述
选择结构
循环结构
跳转语句
三、本章授课思路:
1. 回顾C语言中结构化程序设计方法所所用的程序三大控制结构(顺序结构、选择结构、循环结构)语法知识,以复习回顾的方式引入讲解Java语言的程序控制结构知识(和 C语言用法一致),学生易于理解记忆。
2.具体讲解选择结构(if、switch)和循环结构语法(while、for、do-while)及其编程用法的典型程序编写举例,使学生理解掌握Java语言中控制结构的使用特点及编程技巧。
将两种输入数据的编程方法融入到控制结构用法的编程举例的程序中,使学生对输入数据方法的能够有一定的理解掌握和编程使用,结合在后续第4章面向对象的程序设计的方法的具体学习中再加强理解和掌握。
4.课堂上通过练习和讲解第3章课后习题,加强和巩固学生对所学知识的理解和掌握使用。
——————————————————————
流程控制结构概述
引例:要编写Java 程序,首先要了解Java 程序的结构。
例如:一个程序模拟用户从银行账户中取钱的业务过程。
public class demo {
/** Creates a new instance of demo */
public demo() { }
public static void main(String args[])
{
double account ;
double withdraw ;
int count=0; );
}
}
}
说明:一个完整的Java 程序包括主类、主函数、变量、常量声明语句、赋值语句、程序主体功能语句、控制语句以及注释语句等。
该程序中,有两个重要的语句结构,如:
(1) (2)
If() while()
{ … } { … }
else
{ … } 程序结构组成:
这两种语句结构为本章要讲的选择结构和循环结构。
这两种
语句结构和顺序结构共同构成Java 语言的基本语法结构。
顺序结构是最简单的程序结构,如图3-1所示。
选择结构
一、If 语句形式1
else 语句的形式为:
if(条件判断)
{ 语句A ; }
[ else { 语句B ; } ]
2.举例:
例如,下面程序判断a,b if (a>b)
else
例如:
if (a>0)
) ;
3.简化的if分支语句形式:
if (条件判断)
{ 语句A ; }
流程图:它表达的逻辑关系如右图3-3所示。
二、if语句形式2
1.引入:
很多情况下,两个分支选择并不够用,有时需要多分支结构。
多分支选择的逻辑结构如图3-4所示。
说明:对于这种多分支选择结构,也可以用if else语句来表达。
将上面的逻辑结构图转化为if else结构的多分支选择逻辑结构,如图3-5所示。
2.嵌套的if else语句的多分支选择结构
⑴格式:
if (判断A1)
语句A1;
else
{ if(判断A2)
语句A2;
else
{
if(判断A3)
语句A3;
else
{
……
}
}
}
⑵简化格式:
if (判断A1)
语句A1;
else if(判断A2)
语句A2;
else if(判断A3)
语句A3;
……
[ else
语句; ]
⑶编程用法举例:
程序如下:
int score=90;
if (score>=90)
else if(score>=80)
else if(score>=70)
else if(score>=60)
else
三、switch 语句
内容引入:
对于图3-4所示的分支选择结构,无论有多少个分支,理论上说都可以使用嵌套的if else语句表达。
但是,if else语句的嵌套层次太多容易造成程序结构不清晰。
Java程序允许使用一种专门的多分支选择语句——switch语句来表达这种多分支结构,这简化了多分支结构的表达,使程序简明易懂。
语句的具体格式为:
switch(整型或者字符型变量)
{
case n1 :
语句1;
break;
case n2 :
语句2;
break;
case n3 :
语句3;
break;
……
case nn :
语句n;
break;
[ default :
语句n+1; ]
}
2.执行过程为:
(1)求出switch括号内整型变量的值。
(2)将其值顺序地和……比较,如果整型变量值和某个n值相等,程序就转到这个n后面的语句开始执行,遇到break语句则跳出整个switch语句。
(3)如果整型变量值和任何n值都不等,则执行default后面的语句,最后跳出switch结构。
(4)default 子句可有可无。
3.格式说明:
⑴switch 语句括号里面的类型只能是整数,或者是其他和整型兼容的数据类型(如char类型),不能是其他的数据类型(如String类型)。
⑵case后面只能是一个整型数据,不能是一个“>=”、“<”等符号的一个范围。
4.应用举例—成绩等级的问题。
行过程:
先初始化循环变量,然后测试循环变量是否满足条Array件,不满足则跳出循环,满足就执行循环体里面的语句;接着修改循环变量的值,测试循环变量……,进行新一轮的循环。
循环的逻辑结构如右图3-6所示。
4.编程举例:
求解1+2+3+…+100的累加和。
【例程3-2 】
public class ForDemo {
public ForDemo() { }
public static void main(String args[])
{
int sum = 0;
int i;
行过程:
当测试循环条件满足时,则执行循环体;否则退出循环体。
3.逻辑结构如图3-7所示。
4.编程举例:求解1+2+3+…+100的累加和。
public class WhileDemo {
public WhileDemo() { }
public static void main(String args[])
{
int sum = 0;
int i; i=1;
行过程:执行循环体,直至测试循环条件不满足时退出循环体。
3.流程图:逻辑结构如图3-8所示。
4.程序举例:
i=1;
do{
sum=sum+i; i++; }while(i<=100);
四、for 和while 的转化
For 语句和while 语句都可以用于设计循环程序结构,而且它们之间是可以相互转化的:用for 做得到的事情,用while 也能做到;用while 能做到的事情,用
for 也能够实现。
例如程序1:
sum= 0 ;
for(j=1; j<= 100; j++ )
{ sum+= j; }
可以转化为:
j=1 ;
sum=0 ;
while(j<=100)
{ sum +=j ; j++ ; }
例如程序2:
while(j<10 && i>23 || m<100)
{ 语句; }
等价于:
for( ; j<10 && i>23 || m<100 ;)
{ 语句; }
说明:
要设计出好的程序,形式不是最重要的,重要的是程序设计者能将逻辑思维通过合理的形式表达出来。
五、循环结构应用举例(3个例子)
1.打印菱形图形
×
×××
×××××
×××
×
分析:该问题需要使用两层循环结构来实现。
外循环处理每行,内循环处理具体某列。
程序如下:
[例程3-3]
public class DrawPic {
public DrawPic() { }
public static void main(String[] args)
{ int I,j;
for(i=1; i<=5; i++) 印出1000以内的所有完全立方数。
(如:1=13,8=23)[例程3-4]
public class cube {
public cube() { }
public static void main(String[] args)
{
int n =1;
自然对数的底e的值,利用公式e=(1+1/n)n(其中n趋于无穷大),要求达到较好的精度。
说明:Math类常用数值运算方法——— x y = pow(x,y)
public static double pow(double x,double y), 即:x y
[例程3-5]
import .*;
public class CalE {
public CalE() { }
public static void main(String[] args) {
double now ; double next ;
double value ; int count ;
value = 1E-20; 式:break;
2.作用:跳出break语句所在的控制结构,转到该控制结构后继续执行。
在switch结构中,break的作用就是跳出switch整个结构。
在循环语句中,break语句的作用就是跳出循环。
当使用多层循环的时候,break 语句只跳出当前这一层循环(内循环),而不能跳出整个循环。
3.程序举例:计算:1+2+3+…+100的值,例如程序如下。
int sum=0;
int n=1;
while(true)
{ if(n>100) break;
Sum+=n;
n++;
}
"1+2+3+…+100="+sum);
二、continue语句
continue也是一个使用在循环语句里面的跳转语句。
1.格式:continue;
2.作用:提前结束本次循环的语句。
语句和break语句的区别:
break停止循环体的执行的同时,跳出了当前的循环结构;而程序在遇到continue 的时候,只是停止continue后面的循环体的执行,然后跳到循环开始的地方重新执行。
换句话说,continue的作用只是略过本次循环的continue后面的语句而已,并没有停止执行整个循环。
4.程序举例:计算1~10内所有奇数的总和。
int sum=0;
int n=0;
while(n<=9)
{ n++;
if(n%2==0) continue;
();
("");
sum+=n;
}
"1+3+…+9="+sum);
运行结果为:
1 3 5 7 9
1+3+…+9=25
三、return语句
1.作用:
break和continue语句只能在一定的结构中使用;
return则不然,它几乎可以在所有场合下使用,作用是“返回”。
如果它用在函数中,“返回”就意味着程序返回调用这个函数的程序;如果在主函数中遇到return语句,则程序执行结束。
return可以不带值返回,也可以带值返回。
2.格式:
(1)return ;
(2)return 表达式;
如: return;
return true;
return a+b;
renturn fn();
语句执行过程:
⑴例如1:
如图3-9所示箭头线指示程序执行的过程:
执行语句area=Fn(a) 时,程序转到函数Fn()处执行,遇到 return Area语句则返回area=Fn(a);并把Fn()中求得的Area值赋给area。
如果函数中没有return语句,则函数体执行到最后一条语句后自动返回。
图3-9:
⑵例如2:
如果在调用的函数中,又调用了其他程序,按照同样的原则来进行返回。
后调用的先返回,如图3-10所示。
图3-10:
4.程序举例
[例程3-6]
public class calArea {
public calArea() { }
public static double calR(double rad)
{ if (rad < 0) 该类提供了next()方法:输入数据为字符串型。
例如:
String name=new String();
Scanner sc = new Scanner;
请输入你的名字:" );
name= ();
2. 可以使用:nextInt()、nextFloat()、nextBoolean()方法取得使用者的输入,并转换为正确的数据类型。
例如:
int score;
Scanner sc = new Scanner;
请输入学生的成绩:" );
score = ();
3. Scanner类取得输入的依据是空格符,所以按下空格键、Tab键或回车键,Scanner 就会返回下一个输入。
接下来给出一个完整的示例程序,该程序完成的功能是根据学生成绩(输入)计算成绩等级(输出),在JDK或JCreator中调试运行得出正确的结果便可验证此方法。
;
public class chengjidengji
{ public static void main(String[] args)
{ int score;
Scanner sc=new Scanner;
score=(); 果想取得包括空格符的输入,可以使用的方法是类取得输入。
例如1:
BufferedReader in = new BufferedReader(
new InputStreamReader);
String s=();
int x=(s);
上面的程序段中的第一行定义BufferedReader类的对象in的方法也可以分别来定义,写成如下的方式,阅读起来更为清晰。
例如2:
InputStreamReader ir;
BufferedReader in;
ir=new InputStreamReader;
in=new BufferedReader(ir);
String s=();
int x=(s);
接下来给出一个完整的示例程序,同方法二的实例,输入并调试该程序得出正确的结果,验证掌握该方法。
;
public class chengji2
{ public static void main(String[] args) throws IOException
{ int score;
InputStreamReader ir;
BufferedReader in;
ir=new InputStreamReader;
in=new BufferedReader(ir);
String s=(); 符串转换为数值
⑴转换方法:通过基本数据类型的包装类提供的parseInt、parseDouble、parseLong、parseByte、parseFloat等方法实现。
⑵注意:这些方法分别属于Integer、Double、Long、Byte、Float不同类的对象。
⑶这些方法的原型为:
public static int parseInt(String s)
public static double parseDouble(String s)
public static long parseLong(String s)
public static byte parseByte(String s)
public static float parseFloat(String s)
⑷程序举例
String s1="";
String s2="1234";
float y1=(s1);
int y2=(s2);
long y3=("");
2.数值转换为字符串
⑴转换方法:通过基本数据类型的包装类提供toString方法实现,该方法的原型为:public String toSting()
⑵程序举例:
float x1=;
int x2=1234;
String s1=(x1);
String s2=(x2);
方法
⑴将数值转换为字符串
实现方法:String类的valueOf方法,例如:
int x1=1234;
float x2=;
double x4=;
String s1=(x1);
String s2=(x2);
String s3=(x3);
String s4=(x4);
⑵将字符串转换为数值
实现方法:包装类提供的valueOf方法。
例如:
int y1=(s1).intValue();
float y2=(s2).floatValue();
long y3=(s3).longValue();
double y4=(s4).doubleValue();
语句使用说明:语句组成有两部分。
第一部分(例如:(s2))是类对象(比如:Float对象)。
第二部分(例如:.floatValue())是对应的数值(比如:浮点值)。
小结:
本章重点介绍了Java控制语句结构:顺序结构、选择结构和循环结构。
这三种结构为Java语言中基本的语句结构。
掌握好这三种语法结构是Java应用程序开发的基础。
在实际的项目开发过程中,往往需要灵活运用这三种语法结构来达到所需要的效果。
此外,还要求同学们理解掌握Java语言的输入数据的两种方法和相应的程序编写应用。