资源描述
C. i++ ——j; D. a(0) = 66;
C.线程的 D.不能继承
C.2 D.33
7.
设有定义float x=3.5f,
y=4.6f,
z=5.7f;
则以下的表达式中,值为true的是C
A. x > y || x > z
B. z >
) C.x != y
D. x < y & ! ( x
《面向对象程序设计JAVA语言程序设计》期末复习试题及部分答案
一、单选题
1. 在下列概念中,Java语言只保留了 D
A. 运算符重载 B.结构和联合 C.指针D.方法重载
2. 下列类定义中,不正确的是B
A. class x { .... }B. static class x implements y1,y2
{ .... }
C. public class x extends Applet { .... } D. class x extends y { .... }
3. 下列语句序列执行后,k的值是B
int m=3, n=6, k=0;
while( (m++) < (n) ) ++k;
i++
先把i的初值赋给表达式(i++),作为表达式(i++)的值,然后i自增1作为i的值。
如i=1,则表达式(i++)的值等于1,而i的值变为2。
++i
1先自增1,再把自增后的值赋给表达式(++i)。
如i=1,则表达式(++i)的值等于2,i的值也为2,
A. 0B.1C.2D.3
4. 设i、j为int型变量名,a为int型数组名,以下选项中,正确的赋值语句是A
A. a[0] = 7;B. i = i + 2
5. Java语言的类间的继承关系是B
A.多重的B.单重的
6. 下列语句序列执行后,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.31B.3
< z )
8. 下列修饰符中,定义类头时能使用的修饰符是C
A. private B. static
C. abstract
D. protected
9. 设i、j、k为类x中定义的int型变量名,下列类x的构造函数中不正确的是B
A. x( int m)( ... }
C. x( int m, int n)( ... }
B. void x( int m)( ... }
D. x( int h,int m,int n)( ... }
10. 下列对封装性的描述中,错误的是D
A•封装体包含了属性和行为
B. 封装使得抽象的数据类型提高了可重用性
C. 被封装的某些信息在封装体外是不可见的
D. 封装体中的属性和行为的访问权限是相同的
11. 下列关于包的描述中,错误的是B
A.包是若干个类的集合B.包是一种特殊的类型
C. 包是使用package语句创建的 D.包有有名包和无名包两种
12. 下列关于Applet程序的描述中,错误的是 C
A. Applet程序的主类必须是Applet类得子类
B. Applet不是完整的独立程序
C. Applet程序的主类中应有一个main ()方法
D. Applet的字节码文件必须嵌套在一个HTML文件中
13. 下列界面元素中,不是容器的是 C
A. Dialog B. FrameC. ListD. Panel
14. 下列关于异常处理的描述中,错误的是D
A. 程序运行时异常由Java虚拟机自动进行处理
B. 使用try-catch-finally语句捕获异常
C. 使用throw语句抛出异常
D. 捕获到的异常只能在当前方法中处理,不能在其他方法中处理
15. 以下方法不属于迭代器(Iterator)接所定义的方法的是D
A. hasNext () B. next ()C. remove ()D. nextElement ()
16. 主线程属于(C )
A.守护线程B. Thread线程C.用户线程 D. Runnable线程
、填空题
1. 三目运算符的3个操作数中,第一个操作数的类型必须是逻辑.犁的。
2. 在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码占用 2字 节内存空间,这样,无论是中文字符还是英文字符,都是占用—字节内存空间。
3. 假设x=13, y=4,则表达式x%y != 0的值是true,其数据类型是布尔型。
4. Java语言中,多态性主要表现在两个方面:方法重载和成员覆盖。
5. 定义类的关键字是.class,定义接的关键字是interface。
6. 在Java语言中,通过类的定义只能实现单 重继承,但通过接的定义可以实现
多重继承关系。
7. 在Java中字符串包括字符串常量和字符串变量,分别由类String和类StringBuffer来 创建对象。
8. Java源程序文件编译后产生的文件称为• class文件,其扩展.名为• java。
9. 在多线程程序设计中,若要启动一个线程需要调用的函数是start。
10. 在Java语言中,系统规定:表示当前类的构诰方法用this,表示直接父类的构诰方法 用 super。
17. Java语言规定标识符是由字母、下划线、数字和 美元符号组成的字符序列,长 度不限;又规定第一个字符不能是数字,并区分字母的大小写。
18. Java中实现多线程一般使用两种方法,一是Thread,二是Runnable。
19. Java中变量有三要素: 类型、 变量名 和变量值。
20. Java语言中,说明或声明数组时 内存大小,创建数组时 内存大小。
21. 集合框架提供的Map接的实现类中,在Map中插入、删除和定位元素,使用HasMap是 最好的选择;需要按顺序遍历键,需选择ThereMap。
22. Outputstream类和 Inputstream类是所有字节流输入输出类的父类。
23. 导入my.package包中的所类的命令是import。
24. 构造方法是一种特殊的成员方法,构造方法名与 相同,并且此方法无 有返 回值。
25. 图形用户界面的设计中有事件处理模型处理事件,在该模型中主要包括事件源、
事件对象和事件监听者。
三、判断题
1. Java语言具有较好的安全性和可移植性及与平台无关等特性。T
2. Java语言的基本数据类型有4种:整型、浮点型、字符型和布尔型。T
3. 组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方法main。T
4. 数据由高类型转换到低类型时候,采用强制转换,数据精度要受到损失。T
5. 子类所继承父类的成员都可以在子类中访问。
6. 静态方法只能处理静态变量。T
7. 抽象方法是一种只有说明而无具体实现的方法。
8. Java语言规定在嵌套的程序块中不允许定义同名的成员变量。
9. Throwable类有两个子类:Error类和Exception类。前者由系统保留,后者供应用程序 使用。
10. 运行Applet程序是使用AppletViewer命令运行嵌入了字节码文件的html文件,从而获 得运行结果。
11. 成员方法的重载和覆盖是同一回事。
12. 集合Set是通过键-值对的方式来存储对象的。
13. Java语言是一种强类型语言,数据类型转换有两种:隐含转换和强制转换。
14. Java语言中,数组在静态和动态赋值时都判越界。
15. Frame容器是有边框的容器,它也是一种独立窗,只能作为最外层容器。
16. 死锁的产生是因为多个线程间存在资源竞争。
1. 组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方法main。()
2. 数据由高类型转换到低类型时候,采用强制转换,数据精度要受到损失。()
3. 成员方法的重载和覆盖是同一回事。()
4. 抽象方法是一种只有说明而无具体实现的方法。()
5. Java2的事件处理方法是采用委托事件处理模型。()
6. Throwable类有两个子类:Error类和Exception类。前者由系统保留,后者供应用程序使用。
( )
7. 运行Applet程序是使用AppletViewer命令运行嵌入了字节码文件的html文件,从而获得运 行结果。
8. Java语言具有较好的安全性和可移植性及与平台无关等特性。()
9. Java语言的基本数据类型有4种:整型、浮点型、字符型和布尔型。()
10. 子类所继承父类的成员都可以在子类中访问。()
11. Java语言规定在嵌套的程序块中不允许定义同名的成员变量。()
12. Java语言采用16位颜色标准。Java的调色板保证128色。
13. 静态方法只能处理静态变量。()
14. 画布(Canvas)是一种可容纳多个组件的容器。()
15. Java语言是一种强类型语言,数据类型转换有两种:隐含转换和强制转换。()
16. Java语言中,数组在静态和动态赋值时都判越界。()
17. Frame容器是有边框的容器,它也是一种独立窗,只能作为最外层容器。 ()
18. 集合Set是通过键-值对的方式来存储对象的。
19. 异常处理是在编译时进行的。()
20. 死锁的产生是因为多个线程间存在资源竞争。()
四、阅读下列程序,请写出程序的输出结果
1.
class B {
int b;
B(int x) {
b = x;
System. out.println("b=" + b);
}
}
class A extends B {
int a;
A(int x, int y) {
super(x);
a = y;
System.out.println("b=" + b + ",a=" + a);
}
}
public class Test {
public static void main(String[] args) {
A obj = new A(13, 23);
}
}
答案
b=13
b=13,a=23
2.
public class Testi {
public static void main(String[] agrs) {
AB s = new AB("Hello!", "I love JAVA.");
System. out.println(s.toString());
}
}
class AB {
String si;
String s2;
AB(String stri, String str2) {
si = stri;
s2 = str2;
}
public String toString() {
return si + s2;
}
}
答案 Hello!I love JAVA.
3. public class Test {
public static void main(String[] args) { int[][] numi = new int[2][3];
num1[0][0] = 3;
numi[0][1] = 9;
num1[0][2] = 60;
numi[I][0] = 78;
numi[i][i] = 79;
for (int i = 0; i <= i; i++) {
for (int j = 0; j < numi[i].length; j++) System. out.print(numi[i][j] + "\t");
System.out.println();
答案
3960
78 79 0
4. public class Test {
public static void main(String[] agrs) {
int i, s = 0;
int a[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 };
for (i = 0; i < a.length; i++)
if (a[i] % 3 == 0) {
s += a[i];
System. out.println(ns=" + s);
}
}
}
答案
s=30
s=90
s=180
5. public class Test3 {
public static void main(String[] agrs) {
A a = new A(2);A b = new A(3);
System. out.println(a.isEqualTo(b));
}
}
class A {
private int privateVar;
public A(int -privateVar) {privateVar = -privateVar; }
boolean isEqualTo(A anotherA) {
if (this.privateVar == anotherA.privateVar)return true;
elsereturn false;
}
答案
false
6. public class Test {
public static void main(String[] args) { int[][] num1 = new int[2][3];
num1[0][0] = 3;
num1[0][1] = 9; num1[0][2] = 45;
num1[1][0] = 78;
num1[1][1] = 79;
for (int i = 0; i <= 1; i++) {
for (int j = 0; j < num1[i].length; j++)
System. out.print(num1[i][j] + "\t");
System.out.println();
}
int[][] num2 = new int[][] { { 1, 2, 3 }, { 7, 8 } ,{ 9 } };
for (int i = 0; i <num2.length; i++) {
for (int j = 0; j < num2[i].length; j++)
System. out.print(num2[i][j] + "\t");
System.out.println();
答案
79
45
0
3
3
78
1
7
9
7.
public class Test2
public static void main(String[] agrs)
int i, s = 0;
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (i = 0; i < a.length; i++)
if (a[i] % 3 == 0) {
s += a[i];
System. out.println(ns=" + s);
}
}
}
答案
s=3
s=9
s=18
8. class B {
int b;
B(int x) {
b = x;
System. out.println(nb=" + b);
}
}
class A extends B {
int a;
A(int x, int y) {
super(x);
a = y;
System. out.println(nb=" + b + ", a=" + a);
}
}
public class Test {
public static void main(String[] args) {
A obj = new A(5, 10);
}
}
答案
b=5
b=5, a=10
9. public class Test4 {
public static void main(String[] agrs) {
try {
method();
} catch (Exception e) {
System. out.println("A");
} finally {
System. out.println("B");
}
}
static void method() {
try {
wrench();
System. out.println("C");
} catch (ArithmeticException e) {
System. out.println("D");
} finally {
System. out.println("E");
}
System. out.println("F");
}
static void wrench() {
throw new NullPointerException();
}
}
答案
E
A
B
五、程序设计题
1. 设计一个Calculator类,并完成下列的各方法的程序设计并测试:
(1) 定义add ()方法,用来计算两数(a,b)之和。
(2) 定义sub ()方法,用来计算两数(a,b)之差。
(3) 定义mul()方法,用来计算两数(a,b)之积。
(4) 定义div ()方法,用来计算a/b。
public class kk {
int a, b
int add() {
return (a + b);
}
int sub() {
return (a - b);
}
int mul() {
return (a * b);
}
int div() {
if (b != 0)
return (a / b); else
return 0;
}
public kk
static void main(String[] args) { rect = new kk();
rect.a = 10;
rect. b = 6;
System. out.println("add="
System. out.println("sub="
System. out.println("mul="
System. out.println("div="
+
+
+
+
rect.add());
rect.sub());
rect.mul());
rect.div());
} } 2.
定义一个ArrayList集合对象,
往其中添加随机产生的0-10之间的float类型数据,共添
加10个,并打印输出该集合对象中每个元素的值。
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
public static void main(String[] args) { ArrayList list = new ArrayList();
for (int i = 0; i < 10; i++)
list.add(i, (float) Math.random()*10);
for(int j=0;j<list.size();j++)
System.out.println(list.get(j));
Iterator it=list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
3.试利用do while循环,计算10!。
public class Sum {
public static void main(String[] args) { int s = 1;
for (int i=1;i<=10;i++)
{
s*=i;
}
System. out.println(s);
}
}
其他问题:
1、用输入流读、并统计用户输入信息中的字母、数字
import java.io.*;
public class Test11 {
public static void main(String[] args) throws IOException {
int nDig=0,nChar=0,nOther=0;
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(in);
System.out.println("请输入:");
String str=br.readLine();
for(int i=0;i<str.length();i++){
if(str.charAt(i)>='0'&&str.charAt(i)<='9'){
nDig++;
}else
if(str.charAt(i)>='a'&&str.charAt(i)<='z'||str.charAt(i)>='A'&&str.charAt(i)<='Z'){ nChar++;
}else
nOther++;
}
System.out.println("字母:"+nChar);
System.out.println("数字:"+nDig);
System.out.println("其它字符:"+nOther);
}
}
2、循环语句的使用
《C语言程序设计》模拟试卷A-带答案
一、单项选择题(每题2分,共20分)
1、下列有关C语言的叙述中错误的是(D)
A) C语句必须以分号结束
B) 任何一个C程序中有且只有一个主函数
C) 复合语句在语法上可被看作一条语句
D) C程序中对数据的任何操作都可由运算符实现
2、以下不能定义为用户标识符的是(C)。
A) MAINB) _HJC) 2ongD)
LINE1
3、以下能正确定义一维数组的是(C)。
A) int a[5] = {0,1,2,3,4,5}; B) int a[5] =” 012345”;
C) char a[ ]=” 012345”;D) char a[5] = {0, 1, 2, 3, 4, 5};
4、执行下列程序段后输出的结果是(C)。
x = 9;
while (x > 7)
{ printf(“*” ); x; }
A) **** B) ***C) **D) *
5、设 char str1[10] = "ABCDE”, str2[10] = "xyz”;
则执行语句printf("%d”,strlen (strcpy (str1, str2)));后的输出结果是
(D)。
解析:
strcpy(str1,str2后;,str1[]里是"XYZ", Z后面有字符串结束符
strcpy(str1,str2执行后,函数返回的是str1, 因为str1[]里是新值"XYZ",而
strlen(strcpy(str1,st 就是 strlen(st的新值),所以得 3。
strlen统计到字符串结束符以前,即,不计入字符串结束符。
A) 9 B) 8C) 5 D) 3
6、若用数组名作为函数调用的实参,则传递给形参的是(A)。
A)数组的首地址B)数组第一个元素的值
C)数组中全部元素的值D)数组元素的个数
7、在C程序中,若未在函数定义时说明函数类型,则函数默认的类型为(C)。
A)voidB)double C)int D)char
8、下面不能正确进行字符串赋值操作的语句是(C)。
A) char s[5] = {"ABCD"};B) char s[5]; s="ABCD";
C) char *s; s="ABCDEF";D) char *s="ABCD";
解析:这样理论上的没错的把s指针指向字符串可以改变s指针但不能改变其指向的值正确的应该是这样 char s[] = "ABCDEF";
或 char s[8];strcpy(s, "ABCDEF");
9、设有说明int s[5] = {1,3,5,7,9}; int *p=s;则下列表达式中值为3的是(C)。
A)++pB)++(*p) C) *(++p) D) *(p+=2)
解析:
A是把p得地址后移一个int单位长度,即使p指向数组的第二个元素。
B是取得p当前指向的元素值然后加1,即1+1=2 ;
C是先移动p,使其指向第二个元素,然后取得当前指针指向的元素值,即3.
D是先使p指向数组的第三个元素,然后去的当前指针指向的元素的值,即5。
10、下面程序的输出结果是(B)。
int m=13;
int fun( int x, int y)
{ int m=3;
return( x*y-m); }
main()
{ int a=7,b=5;
printf(“%d\n”,fun(a,b)/m); }
A) 1B) 2C) 3D) 10
二、填空题。(每空2分,共30分)
1. 设有变量说明语句:
int x=1,y=2;
则执行下述printf语句的输出结果是__1. _
printf ("%f\n", 1. 0+x/y);
2. 执行下述程序:
#include <stdio.h>
main()
{
int x, y;
scanf("%2d%*2s%1d",&x,&y);
printf("%d\n",x+y);
}
若从键盘输入:
12345671
则程序的输出结果是__17__。
解析:x,y为int类型,x的长度为2,y的长度为1,即x为12,y为5,故x+y=17
3. 以下程序的功能是:从键盘上输入若干名学生的成绩(百分制,可带小数,以输入 负数或0为结束标志),统计并输出最高成绩和最低成绩。请填空。
#include <stdio.h>
main()
{
float x,amax,amin;
scanf("%f",&x);
amax=x;
amin=x;
while (x>0)
{
if (x>amax)
amax=x;
else if (x<amin)
amin=x;
scanf("%f',&x);
}
printf("\namax=%f\namin=%f\n",amax,amin);
}
4. 设n是整型变量,且已具有某正整数值。根据下述数学式
1111111
— —— ——
2 2 3 3 4n n 1
求s的值并输出。可编写如下之程序段来实现。请填空。
int k;
double s,d;
s=0.0;
d=1.0;
k=0;
do
{
s=s+d;
__k++_;
d=1.0/(k*(k+1));
} while (k<=n);
printf("%f\n",s);
5. 执行下述程序的输出结果是——4 0 4 4 3-
#include <stdio.h>
main()
{
int a[6],i;
for (i=0;i<6;i++)
{
a[i]=9*(i-2+4*(i>3))%5;
printf("%3d",a[i]);
}
printf("\n");
}
解析:(i>3)为真时值为1,反之为0,
6. 执行下述程序的输出结果是一一一6___。
#include <stdio.h>
main()
{
int a[] = {2,4,6,},*ptr=&a[0],x=8,y,z;
for (y=0;y<3;y++)
z=(*(ptr+y)<x)?*(ptr+y):x;
printf("%d\n",z);
}
7. 执行下述程序的输出结果是60…
#include <stdio.h>
main()
{
int a[][2] = {10,20,30,40,50,60},(*p)[2];
p=a;
printf("%d\n",*(*(p+2)+1));
}
8. 执行以下程序的输出结果是__其_。
#include <stdio.h>
main()
{
int s,i,sum();
for (i=1;i<=10;i++)
s=sum(i);
printf("s=%d\n”,s);
}
sum(int k)
{
int x=0;
return (x+=k);
}
9. 下述函数定义用来求出两个整数之各,并通过函数的模拟传地址调用,传回两整 数相加之和值,请填空。
void add(int x,int y,—int *z—)
{
*z=x+y;
}
10. 函数func的功能是将整型变量x的值转换成二进制数,并将该二进制数的每一 位存入由整型指针b所指向的一维数组a,最低位存放于a[0]中,次低位存放于a[1] 中,依此类推。请填空。
void func(int x,int *b)
int r;
do
{
r=x%2;
二=r;
x/=2;
} while (x);
}
11. 以下程序中函数invert实现将数组内所有数组元素的值逆置。比如,执行本程 序将输出:
10987654321
请填空。
#include <stdio.h>
main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10},i,n=10;
invert(a,n-1);
for (i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
}
invert(int *s,int num)
{
int *t,k;
t=s+num;
while (—t>s)
{
k=*s;
*s=*t;
*t=k;
s++;
t--;
}
}
12. 若有以下定义和说明,则结构体变量w在内存中所占的字节数是
union aa
{
float x;
float y;
char c[6];
};
struct st
{
union aa v;
float w[5];
double ave;
} w;
13. 执行下述程序的输出结果是——-。
#include <stdio.h>
struct str
{
float x;
char *y;
} *m;
struct str group[3] = {
95.0,"Li”,
82.5, "Wang”,
73.5, "Sun”
};
main()
{
m=group;
printf("%.lf,%s\n",m->x,m->y);
}
14. 下面的程序用来统计某文件中字符的个数。请填空。
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *fp;
long num=0;
if ((fp=fopen("fnam.dat","r"))==NULL)
{
printf("Can't open this file!\n");
exit(0);
while (― )
{
fgetc(fp);
num++;
}
printf("num=%d\n",num);
fclose(fp);
}
15. 执行下述程序后,输出结果为。
#include <stdio.h>
#define FUN1(a,b) a+b
#define FUN2(a,b) a-b
#define CAL(a,b) a*b+a+3
main()
{
printf("%d\n”,CAL(FUN1(3,5),FUN2(4,5)));
}
三、修改程序(在程序出错的语句下划横线并标号,把修改后的语句写在程序 之后的横线上。每小题5分,共10分)
I. 下列给定程序的功能是:读入一个整数(2<=k< = 1),打印它的所有质因 子(即所有为素数的因子)。例如,若输入整数2310,则应输出2、3、5、7、
II。
#include <conio.h>
#include <stdio.h>
IsPrime(int n);
{ int i,m;
m=1;
for ( i=2; i<n; i++)
if !(n%i)
{ m=0; continue; }
return (m);
}
main()
{ int j,k;
printf(“\nPlease enter an integer number between 2 and 1:”);scanf("%d”,k);
printf(“\nThe prime factor(s) of %d is (are):”,k);
for (j=2;j<=k;j++)
if ((!(k%j))&(IsPrime(j)) printf("\n%4d”,j);
printf("\n”);
}
2. 下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中 的字符,把ASCII值大或等于的字符一次存放到c数组中,形成一个新的字符串。 例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串为: aBcdeFgh。
#include <stdio.h>
#include <string.h>
void fun(char *p,char *q,char *c);
{ int k=1;
while(*p!=*q)
{ if (*p<*q) c[k]=*q;
else c[k]=*p;
if (*p) p++;
if (*q) q++;
k++;
}
main()
{ char a[10]=“aBCDeFgh”,b[10]=“ABcd”,c[80] = {"”};
fun(a,b,c);
printf(“The string a:”); puts(a);
printf(“The string b:”); puts (b);
printf(“The result:”); puts(c);
}
四、阅读下列程序,在程序后面的横线上,写出该程序的功能或给出运行结果。
(每小题5分,共20分)
1. #include <stdio.h>
void main()
{ char ch; int k=0;
for(ch=’ A’ ;ch<’ H’ ; ch++, k++)
if (k%2==0) printf(“%c”,ch);
printf("\n” );
}
输出结果:
2. #include <stdio.h>
void main( )
{ int k=0;
char c=’A’;
do {
switch (c++)
(case ‘A’: k++; break;
case‘B’:k--;
case‘C’:k+=2;break;
case‘D’:k=k%2;break;
case‘E’:k=k*10;break;
default: k=k/3;
}
k++;
} while(c<’G’);
printf( "k=%d\n”, k);
}
输出结果:
3. #include <stdio.h>
voi
展开阅读全文