Java基础教程第3版习题答案.docx
《Java基础教程第3版习题答案.docx》由会员分享,可在线阅读,更多相关《Java基础教程第3版习题答案.docx(41页珍藏版)》请在冰豆网上搜索。
![Java基础教程第3版习题答案.docx](https://file1.bdocx.com/fileroot1/2022-11/26/abfd9b87-71ec-4ef2-b2f0-fad6e3a451d4/abfd9b87-71ec-4ef2-b2f0-fad6e3a451d41.gif)
Java基础教程第3版习题答案
部分习题答案
第一章
答案】答案见教材<略>。
第二章
4.如果intx=1,y=-2,n=10;那么,表达式x+y+(--n)*(x>y&&x>0?
(x+1):
y)的值是什么类型?
结果是多少?
【答案】int型,值为17。
5.如果intk=1,那么'H'+k的类型是什么?
下面语句是否存在差错?
如果有,请改正。
(1)intk=1;
(2)charch1,ch2;
(3)ch1='H'+k;
(4)ch2=98;
【答案】'H'+k的类型为int型。
(3)有错。
’H'+k为int型,ch1为char型,将高精度赋给低精度类型时必须实行强制转换。
6.请指出下面程序在编译时是否会出现错误。
如果有,请改正。
publicclassdoubleTointExample{publicstaticvoidmain(Stringargs[]){inta;
doubleb=1,c=2;a=(int)(b+c);System.out.println("a="+a);
}
}
【答案】无错误。
输出结果:
a=3
7.请指出执行完下面程序后x、y和z的输出值是多少?
请上机验证。
publicclassdoubleTointExample{
publicstaticvoidmain(Stringargs[]){intx,y,z;
x=1;
y=2;
z=(x+y>3?
x++:
++y);System.out.println("x="+x);System.out.println("y="+y);System.out.println("z="+z);
}
}
【答案】
x=1
y=3
z=3
8.请指出下面程序片段输出的结果是什么。
inti=1,j=10;
do
{if(i++>--j)break;
}while(i<5);
System.out.println(“i=””+”+“j=”+j);
【答案】i=5<--->j=6
9.请分别用if-else语句和switch语句编写实现下列功能的程序。
某同学某门课的成绩可能的结果为1,2,3,4,5。
当成绩为1时请输出不及格;成绩为2
时请输出及格;成绩为3时请输出中等;成绩为4时请输出良好;成绩为5时请输出优秀。
【答案】
/*if-else描述程序*/publicclassxt020901{
publicstaticvoidmain(Stringargs[]){
intscore=4;
if(score==1){System.out.println("不及格");}elseif(score==2){System.out.println("及格");}elseif(score==3){System.out.println("中等");}elseif(score==4){System.out.println("良好");}else{System.out.println("优秀");}
}
}
描述程序*/
/*switch
publicclassxt020902{
publicstaticvoidmain(Stringargs[]){intscore=4;
switch(score)
{
case1:
System.out.println("不及格");break;
case2:
System.out.println("break;
case3:
及格");
System.out.println("break;
中等");
case4:
System.out.println("break;
case5:
良好");
System.out.println("优秀");break;
}
}
10.请编写输出乘法口诀表的程序。
乘法口诀表的部分内容如下:
1*1=1
1*2=22*2=3
1*3=32*3=63*3=9
1*4=42*4=83*4=124*4=16
publicclassxt0210{
publicstaticvoidmain(Stringargs[])
{finaldoublePI=3.141592654;doublearea,r;area=PI*r*r;
System.out.println("面积=”+area);
}
【答案】
publicclassxt0210{
publicstaticvoidmain(Stringargs[]){
for(i=1;iv=9;i++)
for(j=1;j<=i;j++)
System.out.print(j+"*"+i+"="+i*j+"");
System.out.printlnO;
11.请编写程序实现如下效果图。
DGK
O
FJN
Q
S
T
【答案】
publicclassxt0211{
publicstaticvoidmain(Stringargs[]){inti,j,k,num;
charch;
num='A'-1;
for(i=1;i<=4;i++)
{
for(k=1;k<=4-i;k++)System.out.print("");
for(j=1;j<=i;j++)
{
num=num+1;ch=(char)num;
System.out.print(ch+”");
}
System.out.println();
}
for(i=1;i<=4;i++)
{
for(k=1;k<=i-1;k++)System.out.print("");
for(j=1;j<=5-i;j++)
num=num+1;ch=(char)num;
System.out.print(ch+"");}
System.out.println();
for语句'While语句以及dowhile语句编写一个求和程序(即sum=1+2+3+…+n)。
}}12.分别利用【答案】/*for语句实现*/publicclassxt021201{
publicstaticvoidmain(Stringargs[]){inti,n=100;longsum=0;for(i=1;i<=n;i++)sum=sum+i;
System.out.println("sum[1:
n]="+sum);
}
}
语句实现*/
/*whilepublicclassxt021202{
publicstaticvoidmain(Stringargs[]){inti,n=100;longsum=0;
i=1;while(i<=n)
{
sum=sum+i;i=i+1;
}
System.out.println("sum[1:
n]="+sum);
}
}
/*dowhile语句实现*/
publicclassxt021203{
publicstaticvoidmain(Stringargs[]){inti,n=100;
longsum=0;i=1;
do
{
i=i+1;
}
while(i<=n);
System.out.println("sum[1:
n]="+sum);
2x3-4x2+3X-6=0
参考答案:
〃程序名称:
xt0213.java
//功能:
方程求解的应用
//2*x*x*x-4*x*x+3*x-6=0
importjava.io.*;//引入类库
publicclassxt0213{//定义类
publicstaticvoidmain(Stringargs[]){//定义main方法
doublex0=0.1,x,eps=0.000001;
x=(-2*x0*x0*x0+4*x0*x0+6)/3;
while((x-x0)>eps)
{
x0=x;
x=(-2*x0*x0*x0+4*x0*x0+6)/3;
}
System.out.printin(”方程的跟="+x);
14、题目判断3-1000之间有多少个素数,并输出所有素数。
}
System.out.println("素数个数是:
"+count);}
}
if(year<0||month<0||month>12||day<0||day>31){System.out.println("输入错误,请重新输入!
");e=1;
}
}while(e==1);
for(inti=1;iswitch(i){case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;break;
case4:
case6:
case9:
days=30;
break;
case2:
days=28;
if((year%400==0)||(year%4==0&&year%100!
=0)){days=29;
}
break;
}d=d+days;
}
System.out.println(year+"-"+month+"-"+day+"是这年的第"+(d+day)+"天。
");}
}
classInputData{
publicintinputInt(){intvalue=0;
Scanners=newScanner(System.in);
value=s.nextInt();returnvalue;
}
}
12.复习break和continue语句,调试本章设计这两个语句的程序。
【答案】答案见教材<略>。
第三章
1.选择题
(1)不允许作为类及类成员的访问控制符的是()。
A.publicB.private
C.staticD.protected
【答案】C
(2)
()。
B.publicvoidmethod()D.abstractvoidmethod()
为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为
A.staticvoidmethod()
C.finalvoidmethod()
【答案】A
)。
⑶Java中main()函数的值是(
A.StringB.int
【答案】D
2.改错题
(1)一个名为Hello.java程序如下:
//Hello.java程序
publicclassA
{
voidf()
{System.out.println("IamA");}
}classB
{}publicclassHello
{
publicstaticvoidmain(Stringargs[]){
System.out.println("你好,很高兴学习Aa=newA();
a.f();
Java");
}要求:
【答案】错误原因:
一个程序中不可同时申明一个以上的改正措施:
将publicclassA变为classA即可
(2)类A的定义如下:
classA{voidf(){
intu=(int)(Math.random()*100);
intv,p;if(u>50){v=9;}p=v+u;
指出错误,说明错误原因,并改正。
public类。
Java语言规定,任何变量在使用之前,
当u<=50时,v在使用前没有赋值,此时执行
将intv,p;变为intv=0,p;即可
}要求:
指出错误,说明错误原因,并改正。
【答案】错误原因:
法产生的,改正措施:
(3)B.java内容如下:
classA{intx,y;
staticfloatf(inta){returna;}
floatg(intx1,intx2){returnx1*x2;}
}publicclassB{publicstaticvoidmain(Stringargs[]){
Aa=newA();
A.f(3);
必须对变量赋值。
由于u的值是由随机方
p=v+u;会出现错误。
a.f(4);a.g(2,5);
A.g(3,2);
}
}要求:
指出错误,说明错误原因,并改正。
【答案】
错误原因:
A.g(3,2);由于类方法不仅可以由对象调用而且还可以直接由类名调用,而实例
方法不能由类名调用。
改正措施:
删除A.g(3,2);或将A.g(3,2);改为a.g(3,2);
3.简答题
(1)
(2)
(3)
(4)
(5)
(6)
4.编程题
1)定义一个长方形类myBox并在另一类中使用,其中myBox类包含长length和宽width
两个成员变量,和计算面积、周长、修改长length和宽width等方法。
publicclassTest1{
publicstaticvoidmain(Stringargs[]){
myBoxobj=newmyBox();
intx=10,y=20;
obj.setvalue(x,y);
System.out.println("width="+obj.width+"length="+obj.length);
System.out.println("周长="+obj.circle());
System.out.println("面积="+obj.area());
intwidth,length;
voidsetvalue(intwidth,intlength)
this.width=width;
this.length=length;
intcircle()
return2*(width+length);
intarea()
returnwidth*length;
2)利用递归输入如下图形。
###################
###############
###########
#######
###
程序如下所示。
//程序名称:
Je030515.java//功能:
利用递归输出特定图形classRecursionApp2{
voidoutput(charch,intk){if(k>0){
System.out.print(ch);
output(ch,k-1);
}
}
voidshow(charch,intm,intn){if(n>0){output('',m);output(ch,n);System.out.println();
}
}
}
publicclassJe030515{
publicstaticvoidmain(Stringargs[]){
RecursionApp2obj=newRecursionApp2();obj.show('#',4,19);
}
}
3)
定义满足以下要求的复数类Complex:
Complex():
构造函数,将复数的实部和虚部都置0
Complex(intr,inti):
构造函数,形参r为实部的初值,i为虚部的初值。
addComplex(Complexa):
计算当前复数对象与形参复数对象相加。
编写一个完整的JavaApplication程序使用复数类Complex验证两个复数1+2i和3+4i相加产生一个新的复数4+6i。
参考答案:
Complex{
intRealPart;
intImagePart;
Complex(){
RealPart=0;
ImagePart=0;
Complex(intx,inty){
RealPart=x;
ImagePart=y;
addComplex(Complexc1){
RealPart=RealPart+c1.RealPart;
ImagePart=ImagePart+c1.ImagePart;
publicclassxt020902{
publicstaticvoidmain(Stringargs[]){
Complexc1=newComplex(1,2);
Complexc2=newComplex(1,2);
System.out.print(“复数c1的实部=”+c1.RealPart+”虚部=”+c1.ImagelPart)
System.out.print(“复数c2的实部=”+c1.RealPart+”虚部=”+c1.ImagelPart)c1.addComplex(c2);
System.out.print(“复数c1=c1+c2的实部=”+c1.RealPart+”虚部=”+c1.ImagelPart)
+=-=
X=axc+bxd
(3)定义一个二维向量<a,b>类,其中a、b为其属性,主要操作为:
向量相加:
向量相减:
向量内积:
编程定义该类,并使用该类。
参考答案:
//程序名称:
Java030801.java//目的:
演示自定义类及其如何使用classMyVector{
}void
floatx,y;//表示向量中的x,ymyVector(floatx,floaty){this.x=x;this.y=y;
setVector(floatx,floaty){this.x=x;this.y=y;
}
//向量相加+=voidaddVector(myVectorv1,myVectorv2){
this.x=v1.x+v2.x;
}
//向量相减-=voidminusVector(myVectorv1,myVectorv2){
this.x=v1.x-v2.x;this.y=v1.y-v2.y;
}
//向量内积-vc,d>=axc+bxdfloatmultVector(myVectorv1){
returnthis.x*v1.x+this.y*v1.y;
}
//显示向量vx,y>voidshowVector(){
System.out.println("vx,y>="+"v"+x+","+y+">");}
}publicclassJava030801{publicstaticvoidmain(Stringargs[]){
MyVector(1,2);
MyVector(3,4);
MyVector(0,0);
MyVectora1=new
MyVectora2=new
MyVectora3=newa1.showVector();a2.showVector();a3.addVector(a1,a2);a3.showVector();a3.minusVector(a1,a2);a3.showVector();
第四章
1.简述Java中继承的含义及特点。
【答案】答案见教材<略>。
2.
returna;}
returnb;}
{returnc;}
请说明错误原因。
指出下列程序中的错误,classA{publicinta=1;privateintb=2;protectedintc=3;intd=4;publicintdispA(){privateintdispB(){protectedintdispC()intdispD(){returnd;}
}
publicclassBextendsA{
publicstaticvoidmain(Stringargs[]){
Bbb=newB();
bb.testVisitControl();
}
publicvoidtestVisitControl(){
System.out.println(a+dispA());
System.out.println(b+dispB());
System.out.println(c+dispC());
}
}【答案】
(1)子类
(2)子类
System.out.println(d+dispD());
System.out.println(b+dispB());行编辑时出现错误。
原因如下:
B和父类A在同一包中;
B不能继承父类的private型属性和方法。
3.根据下面程序片段,画出类和对象的内存映像图。
classA{
…}
staticintsv1=10;intsv2=20;intsv3=30;staticvoidsf1(){voidf1(){…}}classBextendsA{
staticintsv2=30;intv2=3;voidf1(){…}}Aref1=newA();Bref2=newB();ref1=ref2;
答案】
A/svlI10I
B/sv2I30I
sfl
refl
A/svl
A/sv2
ref2
B/v2
4.简述子类对象的成员初始化的方法。
【答案】答案见教材<略>。
A/svlI10I
sH
J
5.简述成员变量的隐藏的含义,并举例说明。
【答案】答案见教材<略>。
6.简述方法的重载和方法的覆盖的区别,【答案】答案见教材<略>。
7.列举this和super的用途。
【答案】答案见教材<略>。
:
A
svl1
11
sv2
JO
n
4■+++I
并举例说明。
8.指出下列程序运行的输出结果。
classPoint{
intx,y