Java程序设计各章习题及其答案.docx
《Java程序设计各章习题及其答案.docx》由会员分享,可在线阅读,更多相关《Java程序设计各章习题及其答案.docx(77页珍藏版)》请在冰点文库上搜索。
Java程序设计各章习题及其答案
Java程序设计各章习题及其答案
第一章习题及思考题
1、Java程序是由什么组成的?
一个程序中必须有public类吗?
Java源文件的命名规则是怎样的?
答:
一个Java源程序是由若干个类组成。
一个Java程序不一定需要有public类:
如果源文件中有多个类时,则只能有一个类是public类;如果源文件中只有一个类,则不将该类写成public也将默认它为主类。
源文件命名时要求源文件主名应与主类(即用public修饰的类)的类名相同,扩展名为.java。
如果没有定义public类,则可以任何一个类名为主文件名,当然这是不主张的,因为它将无法进行被继承使用。
另外,对Applet小应用程序来说,其主类必须为public,否则虽然在一些编译编译平台下可以通过(在BlueJ下无法通过)但运行时无法显示结果。
2、怎样区分应用程序和小应用程序?
应用程序的主类和小应用程序的主类必须用public修饰吗?
答:
JavaApplication是完整的程序,需要独立的解释器来解释运行;而JavaApplet则是嵌在HTML编写的Web页面中的非独立运行程序,由Web浏览器内部包含的Java解释器来解释运行。
在源程序代码中两者的主要区别是:
任何一个JavaApplication应用程序必须有且只有一个main方法,它是整个程序的入口方法;任何一个Applet小应用程序要求程序中有且必须有一个类是系统类Applet的子类,即该类头部分以extendsApplet结尾。
应用程序的主类当源文件中只有一个类时不必用public修饰,但当有多于一个类时则主类必须用public修饰。
小应用程序的主类在任何时候都需要用public来修饰。
3、开发与运行Java程序需要经过哪些主要步骤和过程?
答:
主要有三个步骤
(1)、用文字编辑器notepad(或在Jcreator,Gel,BuleJ,Eclipse,Jbuilder等)编写源文件;
(2)、使用Java编译器(如Javac.exe)将.java源文件编译成字节码文件.class;
(3)、运行Java程序:
对应用程序应通过Java解释器(如java.exe)来运行,而对小应用程序应通过支持Java标准的浏览器(如MicrosoftExplorer)来解释运行。
4、安装JDK之后如何设置JDK系统的PATH,CLASSPATH?
他们的作用是什么?
答、更新系统PATH的方法随Windows版本不同而不同。
对于Windows95/98,可以将下列项目作为C:
\autoexec.bat文件的最后一行:
SETPATH=C:
\j2sdk1.4.2\bin;%PATH%
当程序需要第三方的类库支持,而且比较常用,就可以采用此种方法.比如常用的数据库驱动程序,写servlet需要的servlet包等等.设置方法就是在环境变量中加入CLASSPATH.然后就可以直接编译运行了.Java运行环境从CLASSPATH环境变量中寻找要执行的用户项目(三方的类库)。
可以按如下的方式设置
SETCLASSPATH=.;C:
\J2SDK1.4.2\jre\lib\jaws.jar;%CLASSPATH%
通常我们要从当前目录中寻找用户类,因为开发的程序相关的类放在这里,.表示当前工作目录.
5、Java语言特点是什么?
答:
Java是一种简单的面象对象的分布式的解释的健壮的安全的结构中立的可移植的性能很优异的多线程的动态的语言。
6、简述面向过程问题求解和面向对象问题求解的异同。
试列举出面向对象和面向过程的编程语言各两种。
解:
面向过程问题求解利用计算机能够理解的离散逻辑来描述和表达所求解的问题本身以及具体问题解决的过程,它的核心是算法和数据结构,面向对象的问题求解则利用符合人们日常思维习惯的方式去模拟所求解的问题,模拟它的构成、特征和各种动态行为,从而得到问题的解答。
它的核心是类、对象和设计模式。
常见的面向过程的编程语言有BASIC,FORTRAN,Pascal,C等。
常见的面向对象的编程语言有Smalltalk-80,ObjectPascal,C++,Java等。
第二章习题及思考题
1.试分析基本数据类型和引用数据类型的基本特点?
答:
Java的基本数据类型都有固定的数据位,不随运行平台的变化而变化。
引用类型都是用类或对象实现的
2.请使用异或运算符^,实现两个整数的交换。
答:
intx=5,y=19;
x=x^y;
y=y^x;
x=x^y;
3.下列哪个是合法的标识符:
()。
A、a=bB、_HelloC、2ndD、Chongqing
4.下列哪些是合法的标识符()。
A、newB、classC、intD、const2
5.如果定义有变量doubled1,d2=4.0则下列说法正确的是:
A、变量d1,d2均初始化为4.0
B、变量d1没有初始化,d2初始化为4.0
C、变量d1,d2均未初始化
D、变量d2没有初始化,d1初始化为4.0
6.判断题:
所有的变量在使用前都必须进行初始化。
()
答:
正确。
7.内部数据类型byte的取值范围是:
()
A、0~65,535
B、(-128)~127
C、(-32,768)~32,767
D、(-256)~255
8.下列哪些是不能通过编译的语句:
()
A、inti=32;
B、floatf=45.0;
C、doubled=45.0;
D、chara=‘c’;
9.判断题:
Java中数据类型的长度与具体使用的机器相关。
()
答:
错误。
10.如果定义有doublex;floaty;intm,则表达式x*y-m的类型为():
A、doubleB、floatC、intD、short
11.如果定义有shorts;byteb;charc,则表达式s*b+c的类型为():
A、charB、shortC、intD、byte
12.已知inti=2147483647;++i;则i的值等于多少()
A-2147483648B2147483647C2147483648
13.已知bytei=127;++i;则i的值等于多少()
A-128B127C128
14.已知bytei=127;i=i+1;这两行语句能否编译成功?
()
答:
编译不成功。
15.执行以下程序段inta=5,b;b=++a*3后b的值为:
()
A、17B、18C、16D、15
16.如果x=3,y=5,则表达式x|y的值为:
()
A、15B、8C、1D、7
17.如果inta=3,b=2,则执行a*=b+8后a的值为:
()
A、20B、14C、30D、16
18.若所用变量都已正确定义,以下选项中,非法的表达式是:
()
A、a!
=4||b==1B、'a'%3C、'a'=1/2D、'A'+32
19.设有定义语句inta[]={1,1,2};则以下对此语句的叙述错误的是()。
A、定义了一个名为a的一维数组B、a数组有3个元素
C、a数组的下标为1~3D、数组中的每个元素是整型
20.以下数组初始化形式正确的是:
()
A、intt1[][]={{1,2},{3,4},{5,6}}B、intt2[][]={1,2,3,4,5,6}
C、intt3[3][2]={1,2,3,4,5,6}D、intt4[][];t4={1,2,3,4,5,6}
第三章习题及思考题
1、编写一个程序,用选择法对数组a[]={20,10,55,40,30,70,60,80,90,100}进行从大到小
解:
publicclassArraySort{
publicstaticvoidmain(Stringargs[]){
intarray[]={20,10,55,40,30,70,60,80,90,100};inti,j,k,t;
intm=array.length;
for(i=0;ifor(j=i+1;jif(array[j]t=array[k];array[k]=array[i];array[i]=t;}
for(i=0;iSystem.out.println("array["+i+"]="+array[i]);}
2、求两个整数的最大公约数
解publicclassGcd_do
publicstaticvoidmain(Stringargs[])
inta=45,b=21,k=0;
System.out.print("Gcd("+a+","+b+")=");do
k=a%b;
a=b;
b=k;
}while(k!
=0);
System.out.println(a);
3、请打印出如下九九乘法表
*|123456789
-------|------------------------------------
1|1
2|24
3|369
4|481216
5|510152025
6|61218243036
7|7142128354249
8|816243240485664
9|91827364554637281
if(a==0.0){
if(b!
=0.0){
System.out.println("Notaquadrtaticrootis"+(-c/b));
else{
if(c==0.0)
System.out.println("Trival");
elseSystem.out.println("IMpossible");
else{
p1=-b/(2.0*a);
disc=b*b-4.0*a*c;
absdisc=disc>=0?
disc:
-disc;
p2=Math.sqrt(absdisc)/(2.0*a);
if(disc<0.0){
System.out.println("Complexroots:
"+p1+"+or-"+p2+"i");
else{
x1=p1+p2;
x2=p1-p2;
System.out.println("FirstRealroots:
"+x1);
System.out.println("Secondrealroots:
"+x2);
}//endfor
5、求前40个Fibonacci数列。
Fibonacci数列:
1,1,2,3,5,8,13,21,34,?
从数列看到:
F1=1(n=1)
F2=1(n=2)
Fn=Fn-1+Fn-2(n≥3)
publicclassFibonacci{
publicstaticvoidmain(Stringargs[])
longf1,f2;
inti;
f1=1;
f2=1;
System.out.println(f1+""+f2);
for(i=3;i<=20;i++){
f1=f1+f2;
f2=f1+f2;
System.out.println(f1+""+f2);
6、已知公鸡5元1只,母鸡3元一只,小鸡1元3只,要求用100元刚好买100只鸡,问有多少种
采购方案。
解:
publicclassLoop_Loop3_20
{publicstaticvoidmain(Stringargs[]){
intI,J,K;
System.out.println("IJK");
for(I=0;I<=20;I++)//I为公鸡数
for(J=0;J<=33;J++)//J为母鸡公鸡数
K=100-I-J;//K为小鸡数
if(5*I+3*J+K/3.0==100)
System.out.println(""+I+""+J+""+K);
7、判断一个字符串是否是回文,例如“rotor“反转之后还是”rotor“,所以是回文。
需
查阅String类的一些方法。
publicclassRotor
publicstaticvoidmain(Stringargs[])
Stringstr="rotor",sub1;
inti=0,n;
booleanyes=true;
if(args.length>0)
str=args[0];
System.out.println("str="+str);
n=str.length();
charch1,ch2;
Stringtemp="";
for(i=0;isub1=str.substring(i,i+1);
temp=sub1+temp;
System.out.println("temp="+temp);
System.out.println(str+“:
”+str.equals(temp));
8、求2-1000内的所有素数
classprime
{publicstaticvoidmain(Stringargs[])
{intsum=0,i,j;
for(j=2;j<=1000;j++)//求50以内的素数
{for(i=2;i<=j/2;i++)
{if(j%i==0)
break;
if(i>j/2)
{System.out.println(""+j+"是素数");
9、在一个循环中使用break,continue和return有什么不同?
解:
在循环中使用break语句,将使循环终止,流程从break语句处跳转到break语句所在的
循环外面的第一个语句继续执行。
在循环中使用continue语句,将提前结束本轮循环,流程跳转到continue语句所在循环的第
一个语句继续执行。
在循环中使用return语句,将终止当前方法调用,同时终止循环,使流程返回到调用语句的
下一个语句执行。
10、结构化程序设计有哪三种流程?
他们分别对应Java中那些语句
解:
结构化程序设计有三种基本流程:
循环、分支和顺序。
Java程序中的分支语句包含if
语句、switch语句;循环语句包括了while语句,do-while语句、for语句;其他语句如变量、对象定义、赋值语句、方法调用语句、以及上面的循环结构、分支结构等按照上下文排列都是顺序语句。
第四章习题及思考题
1.什么是类?
什么是对象?
对象和类是什么关系?
答:
类是抽取了同类对象的共同属性和行为形成的对象或实体的“模板”。
对象是现实世界中实体的描述,是其自身所具有的状态特征及可以对这些状态施加的操作结
合在一起所构成的独立实体。
类和对象之间的关系是抽象和具体的关系:
类表达的是一种抽象的概念,它描述
了该类对象的共同特征;而对象是具体事物,以类为模板来生成,它具有自
己的状态。
举例:
类与对象的关系犹如零件的图纸与按图纸制造出的零件关系一样;图纸(类)描述了零件(对象)的共同特征,每个零件(对象)又有自己的个性,如加工精度的不同等等
2、什么是方法?
方法的结构是怎样的?
设计方法应考虑哪些因素?
答:
方法是Java类的一个组成部分,通过类的方法改变对象的状态。
方法的结构:
[方法修饰符]返回值类型方法名([形参列表])[throws异常列表]{
设计方法应考虑因素有:
(1)方法名是Java中任意的标识符,按照命名的约定,方法名应该是有意义的
动词或动词短语,它的第一个字母一般要小写,其他有意义的单词的首字母要大写,其余字母小写。
(2)返回值类型可以是任意的Java类型,甚至可以是定义此方法的类。
如果方
法没有返回值,则用void表示。
(3)形式参数列表是可选的。
如果方法没有形式参数,就用一对小括号“()”表
示。
形式参数列表的形式如下:
(类型形参名,类型形参名,……)
(4)throws异常列表规定了在方法执行中可能导致的异常。
3.创建一个有两个方法的类,其中第一个方法两次调用第二个方法,第一次不使
用this,第二个使用this。
classRectangle//矩形类
intwidth;//矩形的宽
intusethis(intwidth)//返回宽度的函数
{this.width=width;//指自己这个对象
returnwidth;
intunusethis(intwidth)
{intw=width;
returnw;
publicstaticvoidmain(Stringargs[])
Rectangler=newRectangle();//类对象的实例化
System.out.println("Itisaboutthenodeofthis.");//输出语句
System.out.println(r.usethis
(1));
System.out.println(r.unusethis
(2));
运行结果:
Itisaboutthenodeofthis.
4、创建一个类,该类还有int和char类型的成员变量且未被初始化,然后编程输
tt.display(23);tt.a=9;text1.a=4;tt.b=3;}}
运行结果:
staticinta=5intb=6
staticdisplay:
intb=0staticdisplay:
intb=23
6、下面给出了一个矩形类Rectangle,其中含有多个构造方法。
上机编译并运行
此程序,观察运行结果,体会其中不同构造方法的设计和使用。
importjava.io.*;
classRectangle//矩形类{
privateintwidth;//矩形的宽度privateintlength;//矩形的长度
Rectangle()//矩形的不带参数的构造函数,缺省的给出长(30)和宽(20){
length=30;width=20;}
Rectangle(intl,intw)//矩形的带参数的构造函数{
length=l;width=w;}
Rectangle(Rectangler)//此构造方法以另一个Rectangle作为参数{
width=r.width();//通过对象调用函数并附值给相应变量length=r.length();}
intwidth()//返回宽度{
returnwidth;}
intlength()//返回长度{
returnlength;}}
publicclassCRctngle{
publicstaticvoidmain(Stringargs[]){
Rectanglex1=newRectangle();//声明类的对象并实例化Rectanglex2=newRectangle(50,40);//声明类的对象并初始化Rectanglex3=newRectangle(x1);System.out.println(x1.length());System.out.println(x1.width());System.out.println(x2.length());System.out.println(x2.width());System.out.println(x3.length());System.out.println(x3.width());}}
运行结果:
302050403020
体会:
此程序中共定义了3个构造方法:
Rectangle()、Rectangle(intl,intw)、
Rectangle(Rectangler),其中Rectangle()是没有参数的,Rectangle(intl,intw)以常数作为参数,Rectangle(Rectangler)是以对象最为参数。
构造函数的调用实在用new运算符创建类对象是由系统自动完成的,构造函数的参数传递和形实结合也是由系统在调用的同时自动完成。
7、下面给出了一个计算阶乘的类Fact和使用该类计算阶乘的程序Check1。
编译并运行该程序,观察运行结果,体会方法的参数的传递和返回值的用法。
在调用时改变参数的个数和类型,看看编译时会得到什么信息。
classFact{
floatfact(intn)//定义计算n!
的方法{inti;
floatx=1;
for(i=1;ipublicclassCheck1{
publicstaticvoidmain(Stringargs[]){
Factx=newFact();
System.out.println(x.fact(10));//计算10!
System.out.println(x.fact(15));//计算15!
}}
运行结果:
1.0E9
2.91929271E16
8、编译并运行下面的程序,观察分析运行结果,体会程序中super和this的用法,进一步理解变量隐藏和方法重写的概念。
importjava.io.*;
classSuperClss//定义父类{
intx;
SuperClss()//父类的构造方法{x=10;}
voiddoClss(){
System.out.println("SuperClss.doClass()");}}
classSubClssextendsSuperClss//定义子类{intx;
SubClss()//子类的构造方法
super();x=100;}
voiddoClss()//重写父类的doClss方法//调用父类的构造方法
System.out.println("SubClss.doClss()");}
voiddoDemo(){intx;x=1000;
super.doClss();doClss();System.out.println("super.x="+super.x);System.out.println("this.x="+this.x);System.out.println("x="+x);}}
publicclassSuperDemo{
publicstaticvoidmain(Stringargs[]){
SubClsss=newSubClss();
//演示super和this的方法//调用父类的doClss方法//调用本类的doClss方法//父类的x//本类的x//本方法的x//主方法
voidspeak(Strings)//有参数的speak方法
System.out.println(″Ilike″+″″+s+″.