开放实验实践基础部分.docx
- 文档编号:8080241
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:17
- 大小:62.24KB
开放实验实践基础部分.docx
《开放实验实践基础部分.docx》由会员分享,可在线阅读,更多相关《开放实验实践基础部分.docx(17页珍藏版)》请在冰豆网上搜索。
开放实验实践基础部分
面向对象程序设计开放实验内容(32学时)
第一部分基本数据类型与数组
实验1输出希腊字母表
1.相关知识点
Java的基本数据类型包括byte、short、int、long、float、double和char。
要特别掌握基本类型的数据转换规则,基本数据类型按精度级别由低到高的顺序是:
byteshortcharintlongfloatdouble
当把级别低的变量的值赋给级别高的变量时,系统自动完成数据类型的转换。
当把级别高的变量的值赋给级别低的变量时,必须使用类型转换运算。
要观察一个字符在Unicode表中的顺序位置,需使用int类型转换,如(int)a。
不可以使用short型转换。
要得到一个0~65535之间的数所代表的Unicode表中相应位置相应位置上的字符,需使用char型转换。
char型数据和byte、short、int运算的结果是int型数据。
2.实验目的
本实验的目的是让学生掌握char型数据和int型数据之间的互相转换,同时了解Unicode字符表。
3.实验要求
编写一个Java应用程序,该程序在命令行窗口输出希腊字母表。
4.程序效果示例
程序运行效果如图1.1所示。
5.程序模板
请按模板要求,将【代码】替换为Java程序代码。
图1.1输出希腊字母
GreekAlphabet.java
publicclassGreekAlphabet{
publicstatiCvoidmain(Stringargs[]){
intstartPosition=0,endPosition=0;
charcStart='α',cEnd='ω';
【代码1】//cStart做int型转换运算,并将结果赋值给startPosition
【代码2】//cEnd做int型转换运算,并将结果赋值给endPosition
System.out.println("希腊字母\'α\'在unicode表中的顺序位置:
"+startPosition);
System.out.println("希腊字母表:
");
for(inti=startPosition;i<=endPosition;i++){
charc='\0';
【代码3】//i做char型转换运算,并将结果赋值给c
System.out.print(""+c);
if((i-startPosition+1)%10==0)
System.out.println("");
}
}
}
6.实验指导
◇为了输出希腊字母表,首先获取希腊字母表的第一个字母和最后一个字母在
Unicode表中的位置,然后使用循环输出其余的希腊字母。
◇要观察一个字符在Unicode字符集中的顺序位置,必须使用int类型转换。
7.实验后的练习
(1)将一个double型数据直接赋值给float型变量,程序编译时提示怎样的错误。
(2)在应用程序的main()方法中增加语句:
floatX=0.618;
程序能编译能通过吗?
(3)在应用程序的main()方法中增加语句:
bytey=128;
程序能编译能通过吗?
在应用程序的main()方法中增加语句:
intz=(byte)128;
程序输出变量z的值是多少?
实验2数组的引用与元素
1.相关知识点
数组属于引用型变量,例如,对于
inta[]={1,2,3},b[]={4,5};
数组变量a和b分别存放着引用(比如a和b的值分别为0x35ce36和0x757aed)。
数组a的元素(变量)a[0]、a[1]、a[2]的值分别是1、2、3。
数组b的元素(变量)b[0]、b[1]的值分别是4、5。
对于一维数组,“数组名.1ength”的值就是数组中元素的个数;对于二维数组,“数组名.1ength”的值是它含有的一维数组的个数。
2.实验目的
本实验的目的是让学生掌握数组属于引用型的一种复合型数据类型。
3.实验要求
编写一个Java应用程序,该程序在命令行窗口输出数组的引用以及元素的值。
4.程序效果示例
程序运行效果如图1.2所示。
图1.2输出数组的引用和元素的值
5.程序模板
请按模板要求,将【代码】替换为Java程序代码。
InputArray.jaVa
publicclassInputArray{
publicstaticvoidmain(Stringargs[]){
int[]a={100,200,300};
【代码1】//输出数组a的长度
【代码2】//输出数组a的引用
intb[][]={{1},{1,1},{1,2,1},{1,3,3,1},{1,4,6,4,1}};
【代码3】//输出二维数组b的一维数组的个数
System.out.println(b[4][2]);
【代码4】//将数组a的引用赋给b[4]
System.out.println(b[4][2]);
}
}
6.实验指导
◇对于数组a和b,如果使用了赋值语句(a和b的类型必须相同)“a=b;”,那么a中存放的引用和b的相同,这时系统将释放最初分配给数组a的元素,使得a的元素和b的元素相同。
◇如果想输出char型数组a的引用,必须让数组a和字符串做并置运算。
7.实验后的练习
(1)在程序的【代码4】之后增加语句“a[3]=200;”,编译是否有错?
运行是否有错?
(2)在程序的【代码4】之前输出二维数组b的各个一维数组的长度和引用。
(3)在程序的【代码4】之后输出二维数组b的各个一维数组的长度和引用。
实验3遍历与复制数组
1.相关知识点
1)遍历数组
Arrays类调用publicstaticStringtoString(int[]a)方法,可以得到参数指定的一维数组a的如下格式的字符串表示:
[a[0],a[1]…a[a.1ength-1]]
例如,对于数组:
int[]a={1,2,3,4,5,6};
Arrays.toString(a)得到的字符串是:
[1,2,3,4,5,6]。
2)复制数组
Arrays类调用publicstaticdouble[]copyOf(double[]original,intnewLength)方法可以把参数original指定的数组中从索引0开始的newLength个元素复制到一个新数组中,并返回这个新数组,且该新数组的长度为newLength,如果newLength的值大于original的长度,copyOf()方法返回的新数组的第newLength索引后的元素取默认值。
Arrays类调用publicstaticdouble[]copyOfRange(double[]original,intfrom,intto)方法可以把参数original指定的数组中从索引from至to-1的元素复制到一个新数组中,并返回这个新数组。
2.实验目的
本实验的目的是让学生掌握使用Array()类调用方法操作数组。
3.实验要求
编写一个Java应用程序,输出数组a的全部元素,并将数组a的全部或部分元素复制到其他数组中,然后改变其他数组的元素的值,再输出数组a的全部元素。
4.程序效果示例
程序运行效果如图1.3所示。
图1.3输出、复制数组的元素
5.程序模板
请按模板要求,将【代码】替换为Java程序代码。
InputArray.java
importjava.util.Arrays;
publicclassCopyArray{
publicstaticvoidmain(Stringargs[]){
int[]a={1,2,3,4,500,600,700,800};
int[]b,c,d;
System.out.println(Arrays.toString(a));
b=Arrays.copyOf(a,a.length);
System.out.println(Arrays.toString(b));
c=【代码1】//Arrays调用copyOf()方法复制数组a的前4个元素
System.out.println(【代码2】);//Arrays调用toString()方法返回数组c的元素值的表示格式
d=【代码3】//Arrays调用copyOfRange()方法复制数组a的后4个元素
System.out.println(Arrays.toString(d));
【代码4】//将-100赋给数组c的最后一个元素
d[d.length-1]=-200;
System.out.println(Arrays.toString(a));
}
}
6.实验指导
◇数组a的最后一个元素的索引是a.1ength-1。
◇“int[]a,b,c;”声明了3个数组,等价的写法是“inta[],b[],c[];”。
7.实验后的练习
(1)在程序的【代码4】之后增加语句:
int[]tom=Arrays.copyOf(C,6);
System.out.println(Arrays.toString(tom));
(2)在程序的最后一个语句之后增加语句:
int[]Jerry=Arrays.copyOf(d,1,8);
System.out.println(Arrays.toString(Jerry));
自测题
1.下列哪些可以是标识符?
(A)boy-girl
(B)int_long
(C)byte
(D)$Boyl2
2.下列程序中哪些【代码】是错误的?
publicclassLianXi2{
publicstaticvoidmain(Stringargs[]){
intx=0;//【代码1】
x=5.0/2;//【代码2】
floaty=1.89F;//【代码3】
y=12.6/8;//【代码4】
System.out.println(y);
)
}
3.对于“booleanboo[]=newboolean[3];”下列哪个叙述是正确的?
(A)boo[0],boo[1]和boo[2]的值是0。
(B)boo[0],boo[1]和boo[2]的值是1。
(C)boo[0],boo[1]和boo[2]的值是false。
(D)boo[0],boo[1]和boo[2]的值是true。
4.对于声明的数组“int[]a={1,2,3,4),b[]={{1,2,3},{4,5,6});”,下列哪个语句是错误的?
(A)b[0]=a;
(B)b[1]=b[0];
(C)a=b:
(D)a[0]=b[O][0];
第2部分分支与循环语句
实验1回文数
1.相关知识点
1)分支语句
if_else语句是Java中的一条语句,由关键字if、else和两个复合语句(分别称为if分支操作和else分支操作)按一定格式构成,if-else语句的格式如下:
if(表达式){
若干语句(if分支操作部分)
}
e1se{
若干语句(else分支操作部分)
}
一条if-else语句的作用是根据一个条件选择两个分支操作中的一个,执行法则是:
if后面()内的表达式的值为true,则执行紧跟着的复合语句,即执行if分支操作;如果表达式的值为false,则执行else后面的复合语句,即执行else分支操作。
if-elseif-else语句称为多条件分支语句,其作用是根据多条件来选择某一操作。
语句的格式如下:
if(表达式1){
若干语句
}
elseif(表达式2){
若干语句
}
.
.
.
else{
若干语句
}
2)将字符串转化为数值
执行“intm=Integer.parseInt(”6789”);”可以将数字型字符串,如“6789”、“123”,转化为int型数据。
2.实验目的
本实验的目的是让学生掌握使用if-elseif-else多分支语句。
3.实验要求
编写一个Java应用程序程序。
用户从键盘输入一个1~9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。
回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是回文数。
4.程序效果示例
程序运行效果如图2.1所示。
图2.1判断回文数
5.程序模板
请按模板要求,将【代码】替换为Java程序代码。
Number.java
importjava.util.Scanner;
publicclassNumber{
publicstaticvoidmain(Stringargs[]){
intnumber=0,d5,d4,d3,d2,d1;
Scannerreader=newScanner(System.in);
System.out.println("输入一个1至99999之间的数");
number=reader.nextInt();
if(【代码1】)//判断number在1~99999之间的条件
{【代码2】//计算number~最高位(万位)d5
【代码3】//计算number千位d4
【代码4】//计算number的百位d3
d2=number%100/10;
d1=number%10;
if(【代码5】)//判断number是5位数的条件
{System.out.println(number+"是5位数");
if(【代码6】)//判断number是回文数的条件
System.out.println(number+"是回文数");
else
System.out.println(number+"不是回文数");
}
elseif(【代码7】)//判断number是4位数的条件
{System.out.println(number+"是4位数");
if(【代码8】)//判断number是回文数的条件码
System.out.println(number+"是回文数");
else
System.out.println(number+"不是回文数");
}
elseif(【代码9】)//判断number是3位数的条件
{System.out.println(number+"是3位数");
if(【代码10】)//判断number是回文数的条件
System.out.println(number+"是回文数");
else
System.out.println(number+"不是回文数");
}
elseif(d2!
=0)
{System.out.println(number+"是2位数");
if(d1==d2)
System.out.println(number+"是回文数");
else
System.out.println(number+"不是回文数");
}
elseif(d1!
=0)
{System.out.println(number+"是1位数");
System.out.println(number+"是回文数");
}
else
System.out.printf("\n%d不在1至99999之间",number);
}
}
}
6.实验指导与检查
◇两个int型数据做除法运算时,运算的结果是int型,因此,6234/1000的结果刚好是6234的最高位上的数字6。
◇为了计算出56321中千位上的数字6,首先计算56321%10000得到6321,然后6321/1000的结果是6。
7.实验后的练习
(1)程序运行时,用户从键盘输入2332,程序提示怎样的信息。
(2)程序运行时,用户从键盘输入654321,程序提示怎样的信息。
(3)程序运行时,用户从键盘输入33321,程序提示怎样的信息。
实验2猜数字游戏
1.相关知识点
循环是控制结构语句中的最重要的语句之一,循环语句是根据条件反复执行同一代码块。
循环语句有下列三种:
1)while循环
while语句的一般格式:
while(表达式){
若干语句
}
while语句的执行规则如下:
(1)计算表达式的值,如果该值是true时,就进行
(2),否则进行(3)。
(2)执行循环体,再进行
(1)。
(3)结束while语句的执行。
2)for循环
for语句的一般格式:
for(表达式1;表达式2;表达式3){
若干语句
}
for语句的执行规则如下:
(1)计算“表达式l”,完成必要的初始化工作。
(2)判断“表达式2”的值,若“表达式2”的值为true,则进行(3),否则进行(4)。
(3)执行循环体,然后计算“表达式3”,以便改变循环条件,进行
(2)。
(4)结束for语句的执行。
3)将字符串转化为数值
执行“intm=Integer.parseInt(”6789");”可以将数字型字符串,如“6789”、“123”转化为int型数据。
4)Scanner类创建一个对象
Scannerreader=newScanner(System.in);
reader对象调用方法nextInt()方法读取用户输入的整数。
2.实验目的
本实验的目的是让学生使用if_else分支和while循环语句解决问题。
3.实验要求
编写一个Java应用程序,实现下列功能:
·程序随机分配给客户一个1~100之间的整数。
·用户输入自己的猜测。
·程序返回提示信息,提示信息分别是“猜大了”、“猜小了”或“猜对了”。
·用户可根据提示信息再次输入猜测,直到提示信息是“猜对了”。
4.程序效果示例
程序运行效果如图2.2所示。
图2.2猜数字
5.程序模板
请按模板要求,将【代码】替换为Java程序代码。
GuessNumbe.java
importjava.util.Scanner;
importjava.util.Random;
publicclassGuessNumber{
publicstaticvoidmain(Stringargs[]){
Scannerreader=newScanner(System.in);
Randomrandom=newRandom();
System.out.println("给你一个1至100之间的整数,请猜测这个数");
intreaINumber=random.nextInt(100)+1;//random.nextInt(100)是[0,100)
//中的随机整数
intyourGuess=0;
System.out.print("输入您的猜测:
");
yourGuess=reader.nextInt();
while(【代码1】)//循环条件
{
if(【代码2】)//猜大了的条件代码
{
System.out.print("猜大了,再输入你的猜测:
");
yourGuess=reader.nextInt();
}
elseif(【代码3】)//猜小了的条件代码
{
System.out.print("猜小了,再输入你的猜测:
");
yourGuess=reader.nextInt();
}
}
System.out.println("猜对了!
");
}
}
6.实验指导
◇人们经常使用while循环“强迫”程序重复执行一段代码,【代码l】必须是值为
boolean型数据的表达式,只要【代码1】的值为true就是让用户继续输入猜测。
◇只要用户的输入能使得循环语句结束,就说明用户已经猜对了。
7.实验后的练习
(1)用“yourGuess>realNumber”替换【代码1】可以吗?
(2)语句“System.out.println(”猜对了!
);”为何要放在while循环语句之后?
放在while语句的循环体中合理吗?
自测题
1.下列哪个表达式的值是false?
(A)0.6F==0.6
(B)12L==12
(C)(int)56.98+1==57
(D)5<4||10<19
2.请说出下列程序的输出结果。
publicclassLianXi3{
publicstaticvoidmain(Stringargs[]){
for(inti=l;i<=4;i++){
switch(i)
{
case2:
Systern.out.print(”B”);
case3:
System.out.print(”C”);
breakj
case1:
System.out.print(”A”);
case4:
System.out.print(”D”);
break;
}
}
}
}
3.请说出下列程序的输出结果。
publicclascLianXil{
publicstaticvoidmain(Stringargs[]){
chara[]={’A’,’B’,’C’,’D’,’E’};
for(inti=0;i<=a.1ength/2;i++){
charc=a[i];
a[i]=a[a.1ength-(i+1)];
a[a.1ength-(i+1)]=c;
}
for(inti=0;i System.out.print(a[i]); } } } 4.下列程序用折半法查找一个整数是否是数组中的某个元素,请说出程序中的【代 码】应当是下列中的哪一个。 (A)n==a[middle] (B)n! =a[middle] (C)n! =a[start] (D)n! =a[end] publicclassLianXi2{ publicstaticvoidmain(Stringargs[]){ intstart,end,middle,n=-2; inta[]={-2,1,4,5,8,12,17,23,45,56,90,100); start=0; end=a.1ength; middle=(start+end)/2; intcount=0; while(【代码】){ if(n>a[middle]) start=middle; elseif(n end=middle; middle=(start+end)/2; count++; if(count>a.length/2) break; } if(count
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 开放 实验 实践 基础 部分