实训3 顺序结构与选择结构
3.1实训目的
(1)掌握顺序结构程序的设计。
(2)掌握可视化输入输出语句的使用。
(3)掌握if语句的使用以及if语句的嵌套编程特点。
(4)掌握switch语句的使用。
3.2 知识要点
输入操作是指由外部设备将信息写入计算机系统内部;输出操作是指将计算机系统中的信息输出给外部设置。通过输入、输出操作,可以实现人机交互,同时也是验证程序正确性的必要手段。
3.2.1 赋值语句
所谓语句即向计算机系统发出的操作命令。
由赋值运算符构成的表达式,称为赋值表达式。赋值表达式后面加上分号,即成为赋值语句。分号是Java语言的语句结束符。赋值语句的格式为:
变量=表达式;
3.2.2 顺序结构
结构化程序设计的三种基本流程结构为:顺序结构、分支结构(选择结构)、循环结构。Java语句虽然是面向对象的程序设计语言,但是在方法体内或其语句段内,仍旧是按照面向过程的结构化程序设计原则来组织语句的。
顺序结构是程序设计中最简单、最基本的一种流程结构,是按照语句在程序中出现的顺序逐条执行。顺序结构中的每一条语句都被执行一次,而且只能被执行一次。
3.2.3 可视化输入/输出
Java程序的数据输入及输出比较麻烦,但可借助Java语言提供的“选择对话框类(JOptionPane)”可以进行数据的可视化输入/输出。
JOptionPane类主要用来生成各种标准的对话框,实现显示出信息、提出问题、警告、用户输入参数等功能。这些对话框都是模式对话框。使用这个类的成员函数时,用到javax 文件夹下的swing子文件夹中JoptionPane文件,故需要添加JoptionPane类的定义文件:import javax.swing.JOptionPane;
(1)显示信息对话框showMessageDialog
JOptionPane.showMessageDialog(null,消息内容,对话框标题, 消息类型) 例:JOptionPane.showMessageDialog(null, "在对话框内显示的描述性的文字", "标题条文字串", JOptionPane.ERROR_MESSAGE);
结果如图3.1所示:
图5.1 显示信息对话框
(2)显示及供用户进行输入对话框showInputDialog
JOptionPane.showInputDialog(消息内容)
例:String str=JOptionPane.showInputDialog("Please input a value");
结果如图3.2所示:
图5.2 显示输入对话框
3.3 程序代码编写风格与书写规范
Eclipse是一个开放源代码的、跨平台的自由集成开发环境(IDE),最初主要用于Java 语言的开发。
Eclipse本身只是一个框架和一组服务,通过插件的支持构建开发环境,使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性,所以亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。
在软件规格与复杂程度不断增长的今天,程序员在编写代码的过程中只注重个人风格和编程技巧,而对代码的可读性、后续的维护及功能扩展没有给与足够的重视,会制约软件业的进一步发展。逻辑正确但过分强调个人风格,书写格式杂乱无章的程序没有实用价值。
为了增加程序代码的可读性,下面两个原则是必须遵守的:
1.根据程序的逻辑结构设置代码的层次比较下面两个功能相同的程序片段可以发现前者将多条语句写在同一行中,缺乏层次感,降低其可读性;相比之下后者层次感就好很多。
int x=10,y=30;
if (x if (x==y) System.out.println( "x现在等于y" ); else { x=x*2; if (x>y) System.out.println( "x现在大于y" );} int x = 10, y = 30; if (x < y) System.out.println("x小于y"); x = x * 2; if (x == y) System.out.println("x现在等于y"); else { x = x * 2; if (x > y) System.out.println("x现在大于y"); } 在编写代码的过程中适当地使用空格、空行和缩进方式,可以增加程序的层次感和可读性。 2. 标识符的名称应有明确的含义标识符包括文件夹名称、类名、变量名等,虽然Java 语言本身对标识符的命名没有太多限制,但是如果程序中的标识符名称能反应其类型、含义、功能、特点,则利于识别和理解,程序的功能及可读性也提高了。如用变量systolicPressure 和diastolicPressure分别表示血压的收缩压和舒张压,就比用空洞、无意义的x和y好。不用担心定义有实际意义的变量名比较长,会增加输入代码时的负担,下面介绍Eclipse的智能编辑技巧,能帮助用户自动输入(上周实验后面操作说明)。 3.4 实训样例分析(自己学习和思考,不用写在本上) 1 样例1 编写一个Java程序,实现以下功能:已知梯形的上底为5,下底为8,高为3.5,求其面积。 【分析】先计算梯形的面积,再输出结果。梯形面积公式为:(上底+下底)*高/2。 【参考程序1】 public class Area1 { public static void main(String[] args) { double x=5; //上底 double y=8; //下底 double h=3.5; //高 double s=(x+y)*h/2; //计算面积 System.out.println("面积为"+s); } } 程序运行结果如图3.4所示: 图3.4 求梯形的面积 【参考程序2】 public class Area2 { public static void main(String[] args) { double s=(5+8)*3.5/2; System.out.println("面积为"+s);//计算面积 } } 【说明】: (1)计算机编写程序可以是多样的,但只要能实现目标即可。 (2)编写程序还要注意程序的可读性,增加适当的程序注释,有利于程序的阅读。 (3)对程序中引入的变量通常要加以注释。 (4)变量的命令一般是见其名知其意。 (5)Eclipse中很多代码可以使用键盘快捷方式“Alt+/”辅助输入。如输入“syso”之后,按下“Alt+/”就可以自动生成整行“System.out.println();”代码,只要填入括号中的内容就可以了。 (6)注意输出语句中变量与字符串之间的连接表示。 2 样例2 编写一个Java程序,实现以下功能:已知a=200,b=100,交换变量a和b的值,使得a=100,b=200,并输出结果。 【参考程序】 public class Swap { public static void main(String[] args) { int a=200; //变量a赋初值 int b=100; //变量b赋初值 int t; //增加一个中间变量 t=a; a=b; b=t; System.out.println("a的值为:"+a); System.out.println("b的值为:"+b); } } 程序运行结果如图3.5所示: 图3.5 交换两个数 【思考】: (1)变量t在程序中的作用? (2)假如把t=a;a=b;b=t;这三个语句改成a=b;b=a;这两句语句,程序运行的结果又会是什么?为什么会有这样的结果。 (3) t=a;a=b;b=t;这三个语句的顺序能否颠倒? 3 样例3 编写一个Java程序,实现以下功能:从键盘上任意输入一个正数,计算其平方根,并通过可视化消息框输出结果。 【分析】: 本题的关键是在于变量的键盘赋值方式。为此可借助Java语言提供的“选择对话框类(JOptionPane)”可以进行数据的可视化输入。 【参考程序】 import javax.swing.JOptionPane; public class Squar { public static void main(String[] args) { double a,b; String str; str=JOptionPane.showInputDialog("输入一个正数:"); a=Double.parseDouble(str); b=Math.sqrt(a); str=a+"的平方根为:"+b; JOptionPane.showMessageDialog(null,str); } } 程序运行,执行结果如图3.6所示,输入数据15后,结果如图3.7所示。 图3.6 程序运行后的输入对话框 图3.7 程序运行结果 【说明】: (1)方法showInputDialog的返回值是字符串型的数据,故接收数据存放的变量str的类型需定义为字符串类型(注意定义时String中的第一个字母是大写)。 输入程序代码“str=JOp”后,可按组合快捷键“Alt+/”,代码自动生成一半“str=JOptionPane”,再键入一个点,稍停,继续输入“showi”后再按“Alt+/”,就可以完成整行代码的自动输入。 (2)可视化输入/输出JoptionPane类要用到javax文件夹下的swing子文件夹中JoptionPane文件,故需要有语句import javax.swing.JOptionPane;告诉Eclipse编辑器将该文件导入到本程序中。 import javax.swing.JOptionPane;可以直接手工输入;也可以在代码输入“str=JOp”后按组合快捷键“Alt+/”时被Eclipse编辑器自动插入到相应的位置。 (3)Double.parseDouble(str)的作用是从字符串变量str转换为双精度数。 (4)求平方根可调用数学函数Math.sqrt。 (5)注意字符串与非字符串数据之间的连接。 4 样例4 编写一个Java程序,实现以下功能:从键盘上输入一个学生的成绩,根据成绩给出相应的等级(要求分别用if语句和switch语句来完成)。 ????? ????≤<≤<≤<≤≥=60 70608070908090成绩不及格 成绩及格成绩一般 成绩良好成绩优秀等级 【分析】: 根据题意可以先画出相应的程序流程图,在流程图的基础之上来编写程序。程序流程 图如图4.8所示: 输入x X<60X<70X<85输出D true false false false 输出C true 输出B true 输出A 图4.8 判断等级的if 语句程序流程图 【参考程序1】 import javax.swing.JOptionPane; public class Score_if { public static void main(String[] args) { int score; String str; str=JOptionPane.showInputDialog ("输入学生的成绩:"); score=Integer.parseInt(str); if (score<60) str=score+"不及格!"; else if (score<70) str=score+"及格!"; else if (score<80) str=score+"一般!"; else if (score<90) str=score+"良好!"; else str=score+"优秀!"; JOptionPane.showMessageDialog(null,str); } } 【说明】: 通过if语句嵌套来完成,整个程序比较简单明了。要注意条件的书写必须由边界条件开始书写。 【参考程序2】 import javax.swing.JOptionPane; public class Score_case { public static void main(String[] args) { double score; String str; int x; str=JOptionPane.showInputDialog("输入学生的成绩:"); score=Double.parseDouble(str); x=(int) (score /10); switch (x){ case 0: case 1: case 2: case 3: case 4: case 5: str=score+"不及格!";break; case 6: str=score+"及格!";break; case 7: str=score+"一般!";break; case 8: str=score+"良好!";break; default: str=score+"优秀!"; } JOptionPane.showMessageDialog(null,str); } } 【说明】: Swtich表达式的值只能是简单类型的值(如字符型、整形、短整形、字节型),故不能直接对变量score进行判断,需要进行类型转换才可以。 3.6 实训内容及要求 1、编写一个Java程序,用可视化方法输入半径r,求以r为半径的圆的周长及面积。 【提示】: (1)先计算圆的周长和面积,再输出结果。 π。 (2)圆周长公式为C=2πr,面积公式为:S=2r (3)圆周率π的Java语言表示是Math.PI。 2、输入并运行下面程序,体会break语句的作用。 public class Test_switch1 { public static void main(String[] args) { int num; String str; str=JOptionPane.showInputDialog("请输入0~10之间的整数:"); num=Integer.parseInt(str); System.out.println("\n你输入的数字是:"+num); switch (num) { case 0: case 1:System.out.print("你"); case 2:System.out.print("好!"); case 3:System.out.print("我是"); case 4:System.out.print("小明。"); break; case 5:System.out.print("大家"); case 6: case 7: case 8:System.out.print("早上好!"); break; case 9:break; case 10: System.out.print("Good Good Study, Day Day Up!"); break; default: System.out.println("对不起,你输入的数字超出范围了。"); } System.out.println("\n退出switch结构。"); } } 【思考】: (1)通过输入0~10之间不同的数,预测程序的运行结果,与实际的运行结构相比较,看看有没有不同。若有,原因在哪里? (2)break语句在switch语句中有什么作用?default语句又有什么作用。 3、鸡兔同笼问题: 在一个笼子里装着鸡和兔,用可视化方法输入头数和脚数,然后对输入数据的有效性进行判断,满足条件再求有多少只鸡和多少只兔子。 思考:鸡有2只脚,兔有4只脚。兔比鸡多2只脚。 (1)h>0,f>0 (2)f是偶数 (3)f>=2h (4)f<=4h (5)满足上面的条件才计算有多少只鸡和多少只兔子 3.7 实训总结 (1)在本次实训中遇到哪些问题?如何解决的? (2)在本次实训中有哪些收获? (3)自己编写及调试了哪些程序? (4)将上述问题及实现心得体会总结成实训报告。