《java程序设计》复习题
第一,二章java语言基础
练习一(两类java程序)
1.Java是低级语言还是高级语言 (高级)
2.Java是面向对象的程序设计语言吗 (是)
3. Java是编译型的计算机语言还是解释型的计算机语言 (解释型)
4. Java语言的程序设计包含哪3个步骤 (编写源程序,编译源程序,解释运行编译后形成的字节码文件)
5. Java源程序文件的后缀是什么 (.java)
6. Java源程序经编译后生成什么文件 其后缀是什么 (字节码文件,.class)
7. Java程序有哪两类 (java应用程序,java小程序)
8.类的定义由哪两部分组成 (类头和类体)
9.方法的定义由哪两部分组成 (方法头和方法体)
10.一个Java源程序中可以有多个公共类(主类)吗 (不能)
11.一个Java源程序中可以有多个类吗 若有多个类时,程序文件名是什么 (能,与公共类名一致)
12.一个Java Applet源程序的主类能有多个父类吗 (不能)
13. Java应用程序(Application)的主类的类头应如何写 它的主方法的方法头应如何写 Application 的入口在哪
14.Java应用程序(Application)的主类中一定要有主方法(main)吗
15. Java小程序(Applet)的主类的类头应如何写 小程序在什么环境下运行
16.Java小程序(Applet)的主类的父类必须是类Applet吗 (是)
17.Java中的的字符使用什么编码 (unicode)
18. 在Java语言中,将源代码翻译成____________时产生的错误称为编译错误,而将程序在运行中产生的错误称为运行错误.(字节码)
19. 为了使包sos中的所有类在当前程序中可见,可以使用的语句是( A ).
A)import sos.*; B)package sos.*;
C)sos import; D)sos package;
20. 在 Applet 的坐标系中,(0,0) 代表输出窗口______角的象素点.(左上)
21.下面是用户程序对 Applet 类中方法 paint( ) 的重新定义.
(public drawString)
__________ void paint(Graphics g)
{ g.____________("你好!",10,20); }
练习二(数据类型)
1.以下的选项中能正确表示Java语言中的一个整型常量的是( B ).
A) 12. B) -20 C) 1,000 D) 4 5 6
2.下列的变量定义中,错误的是( A).
A) int 6_a; B) float a;
C) int i=Integer.MAX_VALUE; D) static int i=100;
3.下列的变量定义中,错误的是(A).
A) int a;b; B) float a,b1=1.23f;
C) char ch1='d',ch2='\''; D) public int i=100,j=2,k;
4.下列的变量定义中,错误的是(D).
A) int _a=123; B) long j=12345678900L;
C) int m,n; D) static i=100;
5.下列的变量定义中,正确的是(D).
A) boolean b1="true"; B) float x=6.6;
C) byte i=200; D) double y;
6.以下字符常量中不合法的是(C).
A) '@' B) '&' C) "k" D) '整'
7.以下的选项中能正确表示Java语言中的一个整型常量的是( A ).
A) Integer.MAX_VALUE B) 8.8F C) 2.0E16 D)true
8.下列最终属性(常量)i 的定义中,正确的是(C).
A) static final double i; B) abstract final int i=8;
C) final double i=3.14159; D) float i=1.2f;
9.以下的选项中能正确表示Java语言中的一个double型常量的是(C).
A) Float.MIN_VALUE B) 1.8e-6F C) 2.0 D)'abcf'
10.以下的变量定义语句中,合法的是(C).
A) float $_*5= 3.4F; B) byte b1= 15678;
C) double a =Double. MAX_VALUE; D) int _abc_ = 3721L;
11.以下字符常量中不合法的是(C).
A) '|' B) '\'' C) "\n" D) '我'
12.定义初值为10的10次方的长整型变量 var 的语句是:_________________.
(long var=10000000000L;或long var=(long)1e10;)
13. Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为哪两种具体类型,各占二进制的多少位
(float 32位,double 64位)
14. Java的复合数据类型有那几种 (类,数组和接口)
15.在Java语言中,逻辑常量只有哪两个值 (true,false)
16.字符串 "\'a\'" 的长度是几(即有几个字符) (3个字符)
17. Java语言中的逻辑变量可以和整型变量相互强制转换吗 (不能)
18. 在程序中可对用final修饰的变量的值进行更改吗 (不能)
练习三(运算符与表达式)
1.已定义a为int类型的变量.以下选项中,合法的赋值语句是( B ).
A) a +1==2; B) a+=a*6; C) a=8.8f; D) int a=8;
2.以下选项中的变量都已正确定义,不合法的表达式是(C ).
A) a >= 4 = = b3; B)t=!false; C)t=(true|false); D)t=(2==3) true:false;
7.以下变量均已正确定义并赋值,下面符合Java语言语法的赋值语句是(A ).
A) m = n>=5; B) m = k % c=h+y;
C) j=t+ % 100; D) j = y > 2= x + 3;
8.设 i, j, k, m为已赋值的 int 型变量,下列表达式的结果属于逻辑值的是( A).
A) i==k & j+k >=m B) i+k C) m++ D) m=i+j
9.设a,b,c,d 为已赋值的 int 型变量,下列表达式的结果属于非逻辑值的是(C ).
A)a!=b & c%d =c+d
10.变量a定义为int类型.以下选项中,合法的赋值语句是( B ).
A) a +1==2; B) a+=1; C) a=8.8f; D) a=new int(8);
11.若有定义int x = 13;则执行完语句x %= 8; 后,x的值是(C ).
A) 0 B) 1 C) 5 D) 8
12.以下选项中,合法的赋值语句是( B ).
A) a = = 1; B) ++ i; C) a=a + 1= 5; D) !(++a!=b- -);
13.若所用变量都已正确定义,以下选项中,非法的表达式是( C).
A) a != 4||b= =1 B) 'a' % 3 C) 'a' = 1/2 D) 'A' + 32
14.若有定义int a = 2;则执行完语句 a -= a * a; 后,a的值是( C).
A) 0 B) 4 C) -2 D) –4
15.现有一变量声明为boolean aa;下面赋值语句中正确的是( A ).
A) aa=false; B) aa=False; C) aa="true"; D) aa=0;
16. 下列程序段执行后 b3 的结果是(D).
boolean b1=true, b2=true, b3;
b3= !b1 b1 :!b2;
A) 0 B) 1 C) true D) false
17. 设有定义 int i=123; long j=456; 下面赋值不正确的语句是(D).
A) j=i; B) j=(long)i; C) i=(int)j; D) i=j;
18.若以下变量均已正确定义并赋值,下面符合Java语言语法的语句是( A).
A)b=a!=7; B)a=7+b+c=9; C)i=12.3* %4; D)a=a+7=c+b;
19.下列程序段执行后t5的结果是(B ).
int t1 = 9, t2 = 11, t3=8;
int t4,t5;
t4 = t1 > t2 t1 : t2+ t1;
t5 = t4 > t3 t4 : t3;
A) 8 B) 20 C) 11 D) 9
20.执行下面程序段后,b, x, y的值分别是( D).
int x=6,y=8;
boolean b;
b=x>y&&++x==--y;
A)true , 6, 8 B)false , 7, 7 C)true, 7, 7 D)false, 6, 8
21.执行下列程序段后,m,x,y的值分别是( B).
int x=2,y=4;
boolean m;
m=++x>y--;
A)true , 2,4 B)false , 3,3 C) true, 3,3 D) false, 2,4
22.下面语句序列执行后,a的值是(D ).
int a=13; a%=a/5;
A) 3 B) 13 C) 169 D) 1
23.设x,y,max,min均为int型变量,x,y已赋值.用三目条件运算符求x,y的最大值和最小值,并分别赋给变量max和min,这两个赋值语句分别是______和______.(max=x>y x:y; min=xy), b2=(++x==--y);
g.drawString( "b1和b2相与的结果是:"+ ( b1 && b2 ), 25, 25 );
g.drawString( "b1和b2相或的结果是:"+ ( b1 || b2 ), 25, 45 );
g.drawString( "!b1的结果是:"+ ( !b1), 25, 65 );
g.drawString( "x=" +x+"; y="+y, 25, 85 );
}
}
问题: 1)程序执行后共输出几行 (4行)
2)输出结果是什么 (略)
练习四(条件,分支语句)
1.下列语句序列执行后,m 的值是( C).
int a=10, b=3, m=5;
if( a==b ) m+=a; else m=++a*m;
A) 15 B) 50 C) 55 D) 5
2.下列语句序列执行后,k 的值是(B ).
int i=4,j=5,k=9,m=5;
if(i>j||mA) 5 B) 10 C) 8 D) 9
3.下列语句序列执行后,x 的值是( D ).
int a=2, b=4, x=5;
if( a<--b ) x*=a;
A) 5 B) 20 C) 15 D) 10
4.下列语句序列执行后,b 的值是( B).
int a=2, b=4;
if( a < - - b ) a*=a;
A) 5 B) 3 C) 15 D) 10
5.下列语句序列执行后,m 的值是( D ).
int i=9, j=8, m=10, n=9;
if( iA) 6 B) 7 C) 8 D) 9
6.下列语句序列执行后,x 的值是( A ).
int a=3, b=4, x=5;
if( ++aA) 5 B) 3 C) 4 D) 6
7.下列语句序列执行后,ch1 的值是( B ).
char ch1='A',ch2='W';
if(ch1 + 2 j||mA) 12 B)11 C) 10 D) 9
10.下列语句序列执行后,k 的值是(C ).
int i=10, j=18, k=30;
switch( j - i )
{ case 8 : k++;
case 9 : k+=2;
case 10: k+=3;
default : k/=j;
}
A) 31 B) 32 C) 2 D) 33
11.若a和b均是整型变量并已正确赋值,正确的switch语句是(D ).
A) switch(a+b); { ...... } B) switch( a+b*3.0 ) { ...... }
C) switch a { ...... } D) switch ( a%b ) { ...... }
12.下列语句序列执行后,r 的值是( C).
char ch='8'; int r=10;
switch( ch+1 )
{
case '7': r=r+3;
case '8': r=r+5;
case '9': r=r+6; break;
default: r=r+8;
}
A) 13 B) 15 C) 16 D) 18
13.设int 型变量 a,b,float 型变量 x,y,char 型变量 ch 均已正确定义并赋值,正确的switch语句是(B ).
A) switch (x + y) { ...... } B) switch ( ch + 1 ) { ...... }
C) switch ch { ...... } D) switch ( a + b ); { ...... }
14.下列语句序列执行后,k 的值是(D ).
int x=6, y=10, k=5;
switch( x%y )
{
case 0: k=x*y;
case 6: k=x/y;
case 12: k=x-y;
default: k=x*y-x;
}
A) 60 B) 5 C) 0 D) 54
15.下列语句序列执行后,r 的值是(B ).
char ch='A'; int r=6;
switch( ch+5 )
{
case 'A': r=r+3;
case 'B': r=r+5;
case 'C': r-=6; break;
default : r/=2;
}
A) 11 B) 3 C) 2 D) 9
16.如果变量x已正确定义,写出实现以下功能的语句:如果变量x是偶数,则将其增加2.
______________________ ;.(if(x%2= =0) x+=2;)
17. 设ch1, ch2是 char 型变量:
if ( ch1 == 'a' )
{ if ( ch2 == 'b' )
System.out.print(" ch1=\'a\' , ch2=\'b\' ");
}
else
System.out.print(" ch1!=\'a\' ");
System.out.println(" end ");
问题: 1)若执行前 ch1 的值为 'a', ch2 的值为 'c' 该程序段输出是什么 (end)
2)若执行前 ch1 的值为 'w', ch2 的值为 'b' 该程序段输出是什么 (ch1='a'end)
3)若执行前 ch1 的值为 'a', ch2 的值为 'b' 该程序段输出是什么 (ch1='a',ch2='b'end)
18.阅读下面的程序段,回答问题.
if ( x < 5 )
System.out.print(" one ");
else
{
if ( y 4);x++);
A)无限次 B)一次也不执行 C)执行4次 D)执行3次
2.下列语句序列执行后,j 的值是( A ).
int j=1;
for( int i=5; i>0; i-=2 ) j*=i;
A) 15 B) 1 C) 60 D) 0
3.以下for循环的执行次数是( B ).
for(int x=0;(x==0)&(x0; i-=2 ) j*=2;
A) 15 B) 1 C) 60 D) 32
5.以下for循环的执行次数是(B ).
for(int x=0,y=0;(y!=0)&&(x0; i-- ) j+=i;
A) 3 B) 4 C) 5 D) 6
7.以下由 for 语句构成的循环执行的次数是(B ).
for ( int i = 0; true ; i++) ;
A)有语法错,不能执行 B)无限次
C)执行1次 D)一次也不执行
8.下面语句执行后,i 的值是(B).
for( int i=0, j=1; j < 5; j+=3 ) i=i+j;
A) 4 B) 5 C) 6 D) 7
9.下列语句序列执行后,k的值是(D).
int j=8, k=15;
for( int i=2; i!=j; i++ ) { j-=2; k++; }
A) 18 B) 15 C) 16 D) 17
10.下列语句序列执行后,k 的值是(B).
int m=3, n=6, k=0;
while( (m++) < ( -- n) ) ++k;
A) 0 B) 1 C) 2 D) 3
11.下列语句序列执行后,i 的值是( D).
int s=1,i=1;
while( i<=4 ) {s*=i;i++;}
A) 6 B) 4 C) 24 D) 5
12. 下列语句序列执行后,k 的值是(C ).
int m=3, n=6, k=0;
while( m 4 ) --j;
A) 5 B) 6 C) 7 D) 8
14.下列语句序列执行后,j 的值是( C ).
int j=8, i=6;
while( i >4 ) i-=2;
- -j;
A) 5 B) 6 C) 7 D) 8
15.下列语句序列执行后,j 的值是( B ).
int j=9, i=6;
while( i-- >3 ) --j;
A) 5 B) 6 C) 7 D) 8
16.下列语句序列执行后,j 的值是(D).
int j=3, i=2;
while( --i!=i/j ) j=j+2;
A) 2 B) 4 C) 6 D) 5
17. 若有循环:
int x=5,y=20;
do { y-=x; x+=2; }while(x则循环体将被执行(A ).
A) 2次 B) 1次 C) 0次 D) 3次
18.以下由do-while语句构成的循环执行的次数是(B).
int m = 8;
do { ++m; } while ( m 1 );
A) 1 B) 5 C) 2 D) 0
20.下列语句序列执行后,i的值是(D).
int i=10;
do { i/=2; } while( i--> 1 );
A) 1 B) 5 C) 2 D) -1
21.下列语句序列执行后,i的值是(C ).
int i=10;
do { i-=2; } while( i>6 );
A) 10 B) 8 C) 6 D) 4
22.下列语句序列执行后,i的值是(D).
int i=16;
do { i/=2; } while( i > 3 );
A) 16 B) 8 C) 4 D) 2
23.以下由do-while语句构成的循环执行的次数是(B).
int k = 0;
do { ++k; }while ( k < 1 );
A)一次也不执行 B)执行1次 C)无限次 D)有语法错,不能执行
24. 若有循环:
int x=5,y=20;
do{ y-=x; x++; } while(++x<--y);
则循环体将被执行(C ).
A)0次 B)1次 C)2次 D)3次
25.下面是一个java应用程序(Application),它的功能是在屏幕上输出26个小写英文字母,其中每个字母相隔一个制表符,请完成程序填空.
(class (c++)+"\t" 或 (c++)+'\t')
public _____ Class1
{
public static void main( String args[] )
{
char c='a';
for (int i=1;i<=26;i++)
{ System.out.print(______); }
}
}
26.下面是一个java应用程序(Application),它的功能是计算 s=1+2+3+...+10 ,请完成程序填空.(class i)
public _____ Class1
{
public static void main( String args[] )
{
int s=0;
for (int i=1;i<=10;i++)
{
s+=______;
}
System.out.println("s="+s);
}
}
27.下面是一个java Application 的主类的定义,其功能是输出乘法口诀表第一列,请完成程序填空.(i<=9 j*i)
import java.io.*;
public class MyClass
{
public static void main(String[] args)
{
int j=1;
for(int i=1; _______; i++)
{
System.out.println(i+"*"+j+"="+_______);
}
}
}
练习六(控制结构与循环体内的跳转)
1.结构化程序设计的三种基本流程控制结构是:_______,_______,________. (略)
2. 什么语句能构成顺序结构 (略)
3. 以下语句中能构成分支的语句是(B).
A) for 语句 B) if 语句
C) continue 语句 D) 方法调用语句
4. 以下语句中能构成多分支的语句是( C ).
A) for 语句 B) while 语句
C) switch 语句 D) do - while 语句
5. 以下语句中能构成多分支的语句是( C ).
A)for语句 B)while语句
C)if__else语句的嵌套 D)do__while语句
6. 以下语句中是循环语句的是( D ).
A)break 语句 B)switch 语句 C)if 语句 D)do - while 语句
7. 以下语句中不能构成循环的语句是( C ).
A) for 语句 B) while 语句 C) switch 语句 D) do__while 语句
8.能从循环语句的循环体中跳出的语句是(B).
A)for语句 B)break语句 C) continue语句 D)return语句
9. continue 语句和break 语句可以带标号吗 带标号的目的是什么
10.下面程序的功能是求2 到100 之间的素数,请将程序补充完整.
(0 continue )
public class Class1
{
public static void main( String args[] )
{
Label1: for(int i=2;i<100;i++)
{
for(int j=2;j {
if( i%j==_____)
_________;
}
System.out.print(i+"\t");
}
}
}
11.阅读程序后回答问题 .
public class ContinueTest
{
public static void main( String args[])
{
char c='i';
for (int n=6; n < 11; n++ )
{
if ( n == 8 ) continue;
System.out.print("\t"+(c++));
}
}
}
问题:1)程序的输出结果是什么 (i j k l)
2)若将if中的continue语句替换为break语句,输出结果是什么
(i j)
12.阅读程序,回答问题.
import java.awt.Graphics;
import java.applet.Applet;
public class BreakTest extends Applet
{
public void paint( Graphics g )
{
int count, xPos = 25;
for ( count = 1; count <= 10; count++ )
{
if ( count == 8 ) break;
g.drawString( " " + count, xPos, 25 );
xPos += 10;
}
}
}
问题:1)程序的输出结果是什么 (1 2 3 4 5 6 7)
2)方法调用g.drawString( " " + count, xPos, 25 );的第一个实参中为什么要有串 " " (因为该方法的第一个参数是字符串,串 " "与count相加表示字符串连接,使之成为字符串)
13. 阅读程序,回答问题.
public class ContinueTest
{
public static void main( String args[])
{
for (char c='a';cb a:b)
int fun ( int a, int b ) { __________________; }
9. 以下方法m的功能是求两参数之积的整数部分.
(return (int)(a*b))
int m ( float x, float y ) { __________________; }
10. 下面是用户程序对 Applet 类中方法 paint( ) 的重新定义.
(void call)
public ___ paint(Graphics ____)
{ call.drawString("Hello,java!",10,20); }
11. 方法可以没有返回值吗 可以有多个返回值吗 (可以;不能)
12. 一个方法如果没有返回值,方法头定义中的返回值类型为何 (void)
13. 何为形式参数 何为实在参数 (略)
14. 一个方法或一个复合语句内定义的变量是否可以在方法外或复合语句外使用 这种变量称为什么变量 (不能;局部变量)
15. 采用_______的程序设计原则,使程序结构清晰简单,设计容易,有助于软件可靠性的提高.(模块化)
16.下面方法的功能是判断一个整数是否为偶数,将程序补充完整.(boolean true)
public ________ isEven(int a)
{ if(a%2==0)
return _____;
else
return false;
}
17.下面程序的功能是从文本域中输入一个整数作为方法sum( )的参数,
并在小程序窗口中输出调用该方法后的结果,请完成程序填空.
(implements i)
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Applet1 extends Applet _______ ActionListener
{
Label a;
TextField t1;
int i;
public void init( )
{
a=new Label("请输入一个整数");
add(a);
t1=new TextField(12);
add(t1);
t1.addActionListener(this);
}
public void paint(Graphics g)
{ g.drawString("sum="+sum(______),20,60); }
public void actionPerformed(ActionEvent e)
{
i=Integer.parseInt(t1.getText( ));
repaint( );
}
long sum(long n)
{
long s=0;
for(long k=1; k<=n; k++) s+=k;
return s;
}
}
18. 阅读程序,回答问题.
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class Applet1 extends Applet implements ActionListener
{
Label aa;
TextField t1;
int i=0;
public void init()
{
aa=new Label("请输入一个整数:");
add(aa);
t1=new TextField(10);
add(t1);
t1.addActionListener(this);
}
public void paint(Graphics g)
{
g.drawString("a="+( ++i*--i),20,60);
g.drawString("i="+( i),20,80);
}
public void actionPerformed(ActionEvent e)
{
i=Integer.parseInt(t1.getText()); //转化为整数
repaint();
}
}
问题:
1)程序开头的 import java.applet.Applet ; 的含义是什么
(引入程序中要用到的小程序的主类的父类:Applet)
2)ActionListener是类还是接口 程序中哪个方法是ActionListener中的方法,其功能为何 (接口;actionPerformed方法)
3)若在文本域中输入6并回车,程序输出什么
(输出两行,分别是:42; 6)
练习八(方法重载)
1.同一个类中多个方法具有相同的方法名,不同的_____________称为方法的重载.(参数列表)
2.在某个类中存在一个方法:void getSort(int x),以下能作为这个方法的重载的声明的是(C).
A)public getSort(float x) B)int getSort(int y)
C)double getSort(int x,int y) D)void get(int x,int y)
3.在某个类中存在一个方法:void sort(int x),以下不能作为这个方法的重载的声明的是(B).
A)public float sort(float x) B)int sort(int y)
C)double sort(int x,int y) D)void sort(double y)
4. 为了区分类中重载的同名的不同方法,要求( A).
A) 采用不同的形式参数列表 B) 返回值类型不同
C) 调用时用类名或对象名做前缀 D) 参数名不同
5. 重载的方法可以通过它们的返回值类型的不同来区分吗 (不能)
6. 编译程序如何区分重载方法的调用 (根据参数列表不同来区分)
练习九(数组)
1. 在一个应用程序中定义了数组a:int[ ] a={1,2,3,4,5,6,7,8,9,10};,为了打印输出数组a的最后一个数组元素,下面正确的代码是( B).
A) System.out.println(a[10]); B) System.out.println(a[9]);
C) System.out.println(a[a.length]); D) System.out.println(a(8));
2.下面关于数组定义语句不正确的是( D ).
A)int[ ] a1,a2; B)int a0[ ]={11,2,30,84,5};
C)double[] d=new double[8]; D)float f[ ]=new {2.0f,3.5f,5.6f,7.8f};
3.设有定义语句int a[ ]={3,9,-9,-2,8}; 则以下对此语句的叙述错误的是(C ).
A) a数组有5个元素 B) 数组中的每个元素是整型
C) a的值为3 D) 对数组元素的引用a[a.length-1]是合法的
4.设有定义语句int a[ ]={66,88,99}; 则以下对此语句的叙述错误的是(C).
A) 定义了一个名为a的一维数组 B) a数组有3个元素
C) a数组的元素的下标为1~3 D)数组中的每个元素是整型
5. 为了定义三个整型数组a1,a2,a3,下面声明正确的语句是( B ).
A)intArray [ ] a1,a2; int a3[ ]={1,2,3,4,5};
B)int [ ] a1,a2; int a3[ ]={1,2,3,4,5};
C)int a1,a2[ ]; int a3={1,2,3,4,5};
D)int [ ] a1,a2; int a3=(1,2,3,4,5);
6.设 i,j 为int型变量名,a 为int型数组名,以下选项中,正确的赋值语句是(B).
A) i = i + 2 B) a[0] = 7; C) i++ - --j; D) a(0) = 66;
7. 若已定义byte[ ] x={11,22,33,-66};
其中0≤k≤3,则对x数组元素错误的引用是( C).
A) x[5-3] B) x[k] C) x[k+5] D) x[0]
8.设有定义 int[ ] a=new int[4]; ,a的所有数组元素是(B).
A) a0, a1, a2, a3 B) a[0], a[1], a[2], a[3]
C) a[1], a[2], a[2], a[4] D) a[0], a[1], a[2], a[3], a[4]
9.设有整型数组的定义:int a[ ]=new int[8]; ,则a.length的值为_____.(8)
10. 定义数组,需要完成以下三个步骤,即:________,_______和________ .(声明数组;创建数组空间;初始化)
11. 在Java语言中,所有的数组都有一个_________属性,这个属性存储了该数组的元素的个数(数组长度).(length)
12. 若有定义 int[ ] a=new int[8]; 则a的数组元素中第7个元素和第8个元素的下标分别是____和____.(6 7)
13.定义一个整型数组y,它有5个元素分别是1,2,3,4,5.用一个语句实现对数组y的声明,创建和赋值:__________________;.
(int y[]={1,2,3,4,5};)
14. 数组一定占用连续的内存空间吗 (是)
15.下面程序的功能为计算数组各元素的和,完成程序填空.
(iimport java.awt.Graphics;
import java.applet.Applet;
public class SumArray extends Applet
{
int a[] = { 1, 3, 5, 7, 9, 10 };
int total;
public void init()
{
total = 0;
for ( int i = 0; ___________; i++ )
total=______________;
}
public void paint( Graphics g )
{
g.drawString( "Total of array elements: " +total, 25, 25 );
}
}
16.下面程序的功能是输出数组各元素的和, 完成程序填空.(float sum)
import java.awt.Graphics;
import java.applet.Applet;
public class SumArray extends Applet
{
float[] a= new _______[6];
float sum=0.0f;
public void init( )
{ for ( int j = 0; j < a.length; j++ ) a[j] = j+1;
for ( int i = 0 ; i < a.length; i++ ) sum+= a[i];
}
public void paint( Graphics g )
{ g.drawString( "Total of array elements: " + ________ , 25, 25 ); }
}
17.下面程序的功能为计算数组下标为奇数的各元素的和, 完成程序填空.(extends i+=2)
import java.awt.Graphics;
import java.applet.Applet;
public class SumOfArray _______ Applet
{
public void paint( Graphics g )
{
int a[] = { 1, 3, 5, 7, 9, 10 };
int total=0;
for ( int i = 1; i < a.length; _______ )
total+=a[i];
g.drawString( "Total of array elements: " + total, 25, 25 );
}
}
18.下面程序的功能为计算数组各元素和的平均值,完成程序填空.(Graphics; (float)a.length)
import java.awt.Graphics;
import java.applet.Applet;
public class SumOfArray extends Applet
{
public void paint( ___________ g )
{
int a[] = { 1, 3, 5, 7, 9, 10 };
int total=0; float ave;
for ( int i = 0; i < a.length; i++ )
total+=a[i];
ave=total/_______;
g.drawString( "ave= " + ave, 25, 25 );
}
}
19.阅读程序,回答问题.
import java.awt.*;
import java.applet.*;
public class Test51 extends Applet
{
float[ ] x = {1.2f, 3.4f, 5.6f, 7.8f};
public void paint(Graphics g)
{
int s=0;
for( int i = 0; i y x:y;
max_value=temp1>z temp1:z;
return max_value;
}
}
21.下面是一个类的定义,请将其补充完整.(class static)
___________ A
{ String s;
_____ int a=666;
A(String s1) { s=s1; }
static int geta( ) { return a; }
}
22.阅读程序,回答问题.
public class Test52
{
String static str1="Hello, Java world! \t";
String static str2="Hello, students! ";
public static void main(String args[])
{ System.out.print(str1); System.out.println(str2); }
}
问题:1)这是哪种形式的 java 程序 (java应用程序)
2)程序的输出是什么 输出的结果在 Applet 窗口中吗
(Hello, Java world! Hello, students! 不在)
练习十四(继承:类,属性和方法的继承,属性隐藏和方法覆盖,构造函数的继承,父类对象和子类对象的关系)
1. Java语言的类间的继承关系是( B ).
A) 多重的 B) 单重的 C) 线程的 D) 不能继承
2. 以下关于Java语言继承的说法正确的是( C ).
A)Java中的类可以有多个直接父类 B)抽象类不能有子类
C)Java中的接口支持多继承 D)最终类可以作为其它类的父类
3. 下面是有关子类继承父类构造函数的描述,其中正确的是( B).
A) 如果子类没有定义构造函数,则子类无构造函数
B) 子类构造函数必须通过super关键字调用父类的构造函数
C)子类必须通过this关键字调用父类的构造函数
D)子类无法继承父类的构造函数
4. 现有两个类A,B,以下描述中表示B继承自A的是(D).
A) class A extends B B) class B implements A
C) class A implements B D) class B extends A
5. 子类可以继承父类的__________成员(非私有).构造函数也能被继承和重载.
6. 如果子类中的某个变量的变量名与它的父类中的某个变量完全一样,则称子类中的这个变量________了父类的同名变量.(隐藏)
7. 属性的隐藏是指子类重新定义从父类继承来的__________. (同名变量或属性)
8. 如果子类中的某个方法的名字,返回值类型和________与它的父类中的某个方法完全一样,则称子类中的这个方法覆盖了父类的同名方法.(参数列表)
9. 抽象,封装,_____和多态是Java语言的四大特性.(继承)
10. 在Java语言中,使用_____和多态等技术,实现软件重用.(封装)
11. Java 仅支持类间的____重继承.(单重)
12. 子类的成员变量能与其父类的成员变量同名吗 (能)
13. 什么是方法覆盖 (子类重新定义继承自父类的同名方法,使之实现与父类方法不同的功能;方法覆盖要求子类方法头定义必须与父类方法头定义完全一样.)
14. 一个子类可以重新定义从父类那里继承来的同名方法.但是,允许它们有不同类型的返回值吗 (不能)
15. 子类对象如何引用被它隐藏了的父类的属性和调用被它覆盖了的父类的方法 (使用super关键字做前缀)
16. 子类的对象能直接向其父类对象赋值吗 反之呢 子类对象一定是父类的对象吗 (能;不能;是;)
17. Java语言中定义接口的关键字是什么 接口的继承应如何实现 接口支持多继承吗(interface;使用关键字extends实现;支持)
18. java中,一个子类可以有多个父类吗 可以为一个(父)类定义多个子类吗 (不能;可以)
19. 保留字 this 代表什么 (this表示类当前对象本身)
20.下面是一个小程序的主类myprogram的定义, 其中A,B是该主类所在源程序中已定义的另两个类的类名,完成程序填空.(void new)
import java awt.*;
import java applet.*;
public class myprogram extends Applet //定义小程序的主类
{
A a; B b;
public ________ init( )
{ a=new A( ); b=_____ B( ); }
}
21.下面是一个类的定义,完成程序填空.(Youwrite this.x=x;)
public class Youwrite
{
int x;
_______( ) {x=0;}
Youwrite ( int x)
{ _____; }
}
22.现有类说明如下,请回答问题:
public class A
{
String str1=" Hello! \t";
String str2=" How are you ";
public String toString( )
{ return str1+str2; }
}
public class B extends A
{
String str1="\b\b,Bill.";
public String toString( )
{ return super.str1+str1; }
}
问题:
1)类A和类B是什么关系 (继承关系)
2)类A和类B都定义了str1属性和方法toString( ), 这种现象分别称为什么 (属性的隐藏;方法的覆盖)
3)若a是类A的对象,则a.toString( )的返回值是什么
(Hello! How are you )
4)若b是类B的对象,则b.toString( )的返回值是什么 (Hello,Bill.)
23.现有一个类定义如下,请回答问题:
class Employee
{
String name;
int age;
double wage;
static int No=0;
Employee(String a1,int a2,double a3)
{
name=a1; age=a2; wage=a3;
No++;
}
}
在使用该类时,已使用下面语句生成了该类的对象:
Employee e1,e2;
e1=new Employee("王劲",26,6300);
e2=new Employee("张山",30,3800);
问题:
1)e2.name,e2.age,e2.wage的值各是什么 (张山;30;3800.0)
2)生成对象e1,e2后,e1.No值为多少 能否通过类名做前缀引用属性No (2; 能)
24.有如下源程序,请回答问题:
import java.awt.*;
import java.applet.*;
public class Javaapplet extends Applet
{
B b;
public void init( )
{ b=new B( 'f', 87.6f, 69.1f); }
public void paint(Graphics g)
{
g.drawString("序号 "+"性别 "
+"成绩1 "+"成绩2 ",20,50);
b.print(g);
}
}
class A
{
static int n=100;
char ch;
A( ) { n++; }
A( char c){ this( ); ch=c; }
void print(Graphics g)
{ g.drawString(" "+n+" "+ch,20,70); }
}
class B extends A
{
float s1, s2;
B(float r1,float r2){ s1=r1; s2=r2; }
B( char c, float r1, float r2)
{ super(c); s1=r1; s2=r2; }
void print(Graphics g)
{
super.print(g);
g.drawString(" "+s1+" "+s2,40,70);
}
}
问题: 该程序的输出是什么
(序号 性别 成绩1 成绩2
101 f 87.6 69.1 )
25.阅读程序,回答问题.
public class InheritTest1
{
public static void main (String[] args)
{
A aa; B bb;
aa=new A( ); bb=new B( );
aa.show( ); bb.show();
}
}
class A
{
int a=1;
double d=2.0;
void show( )
{ System.out.println("Class A: "+"\ta="+a +"\td="+d); }
}
class B extends A
{
float a=3.0f;
String d="Java program.";
int b=4;
void show( )
{
System.out.println("Class A: "+"\ta="+super.a +"\td="+super.d);
super.show( );
System.out.println("Class B: "+"\ta="+a +"\td="+d+"\tb="+b);
}
}
问题:1)这是哪一类java程序 (java应用程序)
2)类A和类B是什么关系 (类B是类A的子类)
3)按程序输出的格式写出程序运行后的结果.
(程序运行结果如下:
Class A: a=1 d=2.0
Class A: a=1 d=2.0
Class A: a=1 d=2.0
Class B: a=3.0 d=Java program. b=4 )
26.现有类说明如下,请回答问题:
class A
{
int x=10;
int getA(){return x;}
}
class B extends A
{
int x=100;
int getB(){return x;}
}
问题:1)类B是否能继承类A的属性x (能)
2)若b是类B的对象,则b.getB()的返回值是什么 (100)
3)若b是类B的对象,则b.getA()的返回值是什么 (10)
4)类A和类B都定义了x属性,这种现象称为什么
(属性的隐藏)
27.有如下源程序,请回答问题:
class A
{ String s="class A"; }
class B extends A
{ String s="class B"; }
public class TypeConvert
{
public static void main(String args[])
{
B b1,b2=new B();
A a1,a2;
a1=(A)b2;
a2=b2;
System.out.println(a1.s);
System.out.println(a2.s);
b1=(B)a1;
System.out.println(b1.s);
System.out.println(b2.s);
}
}
问题: 该程序的四行输出各是什么
(class A
class A
class B
class B)
28.现有类说明如下,请回答问题:
public class A
{
int x=888;
String str="I like: ";
public String toString()
{ return str+x; }
}
public class B extends A
{
String x="java";
public String toString()
{ return str+x+" and "+super.x; }
}
问题:1)类A和类B是什么关系 (类B是类A的子类)
2)类A和类B都定义了x属性和方法toString(),这种现象分别称为什么 (属性的隐藏和方法的覆盖)
3)若a是类A的对象,则a.toString( )的返回值是什么 (I like: 888)
4)若b是类B的对象,则b.toString( )的返回值是什么
(I like: java and 888)
练习十五(多态:抽象类和抽象方法,最终类和最终方法,接口)
1. 下列选项中,用于定义接口的关键字是( A).
A)interface B) implements C) abstract D) class
2. 下列选项中,用于实现接口的关键字是( B).
A)interface B) implements C) abstract D) class
3. 抽象方法只有方法头,没有________. (方法体)
4. Java 语言的接口是特殊的类,其中包含______常量和_______方法.(static(静态) ; abstract(抽象))
5. 接口中所有属性均为_________,_________和________的.
(public,static,final)
6. 用那个关键字定义抽象类和抽象方法 (abstract)
7. 抽象类只能做为父类吗 (也可以包含抽象方法,做为抽象子类)
8. 可以定义抽象类的对象吗 (不能)
9. 抽象方法能被继承吗 (能)
10. 抽象方法只能存在于抽象类中吗 (是;也可以存在在接口中)
11. 声明为final的方法能在子类中重新定义吗 (不能)
12 用那个关键字定义最终类和最终方法 (final)
13. 最终类能做为父类吗 (不能)
14. 最终方法能被继承吗 (不能)
15. 最终方法只能存在于最终类中吗 (不一定)
16. 声明为 static和private 的方法是final的吗 (实际上是)
17. 接口中所有方法均为抽象方法吗 (是)
18. 接口中所有方法均为public的吗 (是)
19. abstract 和 final能同时修饰一个类吗 (不能)
20.下面是定义一个接口ITF的程序,完成程序填空.
(interface abstract )
public _______ ITF
{
public static final double PI=Math.PI;
public ______ double area(double a, double b);
}
21.下面是定义一个接口A的程序,完成程序填空.(final ";" )
public interface A
{
public static _______ double PI=3.14159;
public abstract double area(double a, double b)_____
}
22.阅读下面的程序,回答以下问题:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Applet1 extends Applet implements ActionListener
{
Label label;
TextField t1;
int i=0;
public void init()
{
label=new Label("请输入一个整数:");
add(label);
t1=new TextField(10);
add(t1);
t1.addActionListener(this);
}
public void paint(Graphics g)
{
int product=1;
for(int k=1;k<=i;k++)
product+=k;
g.drawString("product="+product,20,60);
}
public void actionPerformed(ActionEvent e)
{
i=Integer.parseInt(t1.getText());
repaint();
}
}
(1)ActionListener是类还是接口 程序中哪个方法是ActionListener中的方法,其功能为何
( ActionListener是接口;程序中actionPerformed()方法是ActionListener中的方法,它在程序中实现的功能是:在文本域中回车时,将文本域中输入的数字字符串转化为整数,并重新调用paint()方法输出结果.)
(2)若在文本域中输入3并回车,写出程序输出的结果
(在小程序界面坐标为20,60处输出:product=7)
第四章 算法基础
练习十六(算法)
1. 通常,我们把某一解题过程的准确完整的描述,称为解决该问题的________.(算法)
2. 一个完整的计算机算法必须满足_______,确定性,可行性,输入性,输出性等五个准则(标准).(有穷性)
3. 下面是求阶乘的递归算法,方法的返回值类型为long,完成程序填空.(long return n* Factorial(n-1))
______ Factorial(long n)
{
if(n1 时
下面定义的方法的功能是:用递归的方法求自然数1到n的和.完成程序填空.(n= =1 number +sum(number-1))
int sum(int number)
{
if( _________ )
return 1;
else
return _____________;
}
5.下面是用递归算法求阶乘的方法.完成程序填空.(number else)
public long factorial(long __________)
{
if(number<=1)
return 1;
_____
return factorial(number-1)* number;
}
6.下面程序的功能是从文本域中输入一个正整数作为方法fib( )的参数,并在小程序窗口中输出调用该方法后的结果.
(applet new TextField(6) this fib(i))
import java.awt.*;
import java.________.*;
import java.awt.event.*;
public class Applet1 extends Applet implements ActionListener
{
Label a;
TextField t1;
int i;
public void init()
{
a=new Label("请输入一个整数"); add(a);
t1=______________; add(t1);
t1.addActionListener(______);
}
public void paint(Graphics g)
{ g.drawString("Fibonacci["+i+"]="+________,20,60); }
public void actionPerformed(ActionEvent e)
{
i=Integer.parseInt(t1.getText());
repaint();
}
long fib(long n)
{ if(n==0||n==1) return n;
else return fib(n-1)+fib(n-2);
}
}
7.已知菲波那契数列的数学表达式为:
fibonacci(n)=n, n=0,1;
fibonacci(n)=fibonacci(n-1)+fibonacci(n-2), n≥2;
设 m 是 long 型变量,下面是用递归算法求菲波那契数列的方法:
long fibonacci(long n)
{
if(n==0||n==1) return n;
else return (fibonacci(n-1)+fibonacci(n-2));
}
问题: 当语句 m=fibonacci(3); 执行时,方法 fibonacci( )被调用了几次 (5次)
第五章 数据结构基础
练习十七(数据结构:堆栈,链表,队列,树)
1.队列操作的原则是(A).
A) 先进先出 B) 后进先出 C) 只能进 D) 只能出
2. 堆栈操作的原则是( B).
A) 先进先出 B) 后进先出 C) 只能进 D) 只能出
3.下面叙述正确的是( B ).
A)栈不能进行插入元素的操作,而队列可以
B)栈和队列都不能在中间位置进行插入操作
C)链表不能进行插入操作
D)数组不能进行插入操作
4.队列是先进_________的数据结构.(先出)
5.堆栈是后进_________的数据结构.(先出)
6.程序中经常用到堆栈,数组,______,链表等重要线性数据结构.
(队列)
7.堆栈只能在表的一端进行插入或删除操作,能进行插入或删除操作的一端称为栈顶,另一端称为________.(栈底)
8.队列可在表的两端进行插入或删除操作,能进行插入操作的一端称为队尾,能进行删除操作的一端称为________.(队头)
9.树是一种______(线性或非线性)的数据结构.(非线性)
10.队列常用哪两种存储结构 (线性和链式)
11.堆栈常用哪两种存储结构 (线性和链式)
12. 定义二叉树如图,则中序遍历的访问序列是_____________.(DBGEAFHC)
练习十八(排序)
1. 按照数据元素中关键字值增加的排序称为_________排列.(升序)
2. 下列算法中,不能用来排序的算法是(D).
A) 冒泡法 B) 插入排序 C) 选择排序 D) 对分法
3. 选择排序的思想是,将数据序列划分为两个子列,一个子列是排好序的,另一个是尚未排序的.现若想将数据序列由大到小排序,则每次放到有序子列尾部位置的元素,应从无序子列中选择( A ).
A)最大的 B)最小的 C)任意的 D)头上的
4. 选择排序的思想是,将数据序列划分为两个子列,一个子列是排好序的,另一个是尚未排序的.现若想将数据序列由小到大排序,则每次放到有序子列尾部位置的元素,应从无序子列中选择( B).
A)最大的 B)最小的 C)任意的 D)头上的
5. 若想将数据序列使用插入排序算法由小到大排序,则每次放到有序子列合适位置上的元素,应从无序子列中选择(D).
A)最大的 B)最小的 C)任意的 D)固定位置的
6. 简述冒泡排序的算法(设对有n个元素的数组做升序排列).(略)
7. 简述插入排序的算法 (设对有n个元素的数组做降序排列).(略)
8. 简述选择排序的算法(设对有n个元素的数组做升序排列).(略)
9. 下面是一个排序的程序:
public class TestSort
{
public static void main(String args[ ])
{
int[] a={42,99,5,63,95,36,2,69,200,96};
System.out.println("排序前的数据序列:");
ShowArray(a);
Sort(a);
System.out.println("排序后的数据序列:");
ShowArray(a);
}
public static void Sort(int[] x)
{
int w;
for(int i=1; i {
for(int j=0; jx[j+1]) { w=x[j]; x[j]=x[j+1]; x[j+1]=w; }
/* if(i==1||i==2) ShowArray(x);
if(i==2) break; */
}
}
public static void ShowArray(int b[])
{
for(int i=0; i printArray( a );
System.out.println( "插入排序各趟的结果 :" );
sortInsert( a );
System.out.println( "插入排序后的结果 :" );
printArray( a );
}
public static void sortInsert( int a[] )
{
int hold, pass, i;
for ( pass = 1; pass = 0; i-- )
if ( a[ i ] > hold )
a[ i + 1 ] = a[ i ];
else
break;
a[ i + 1 ] = hold;
printArray( a );
}
}
public static void printArray( int b[] )
{
for ( int i = 0; i =1&&change;pass--)
{ change=false;
for(int i=0;ia[i+1])
{ hold=a[i];
a[i]=a[i+1];
a[i+1]=hold;
change=true;
}
}
printArray(a);
}
}
public static void printArray(int b[])
{ for(int i=0; i System.out.print(" "+b[i]);
System.out.println(" ");
}
}
3.选择排序
请用JAVA应用程序形式编写选择排序程序,对整型数组:
int a[]={50, 88, 6, 93, 24, 18, 1, 128, 87, 66}
进行升序排序,并写出第二趟和第五趟的排列序列.
答案:
第二趟的序列是:
1 6 88 93 24 18 50 128 87 66
第五趟的序列是:
1 6 18 24 50 88 93 128 87 66
程序源代码:
public class SelectedSort
{ public static void main(String args[])
{ int a[]={50,88,6,93,24,18,1,128,87,66};
System.out.println("数组按下列过程被排序:");
sortSelect(a);
}
public static void sortSelect(int a[])
{
int hold,k;
for( int pass=0;pass {
k=pass;
for(int i=pass+1;i if(a[i] k=i;
if(k!=pass)
{
hold=a[pass];
a[pass]=a[k];
a[k]=hold;
}
printArray(a);
}
}
public static void printArray(int b[])
{ for(int i=0; i System.out.print(" "+b[i]);
System.out.println(" ");
}
}
没有评论:
发表评论