1、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 { ....
2、}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=
3、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. 下列修饰符中,定义
4、类头时能使用的修饰符是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. 被封装的某些信息在封装体外是不可见的
5、 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
6、 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个操作数中,第
7、一个操作数的类型必须是逻辑.犁的。 2. 在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码占用 2字 节内存空间,这样,无论是中文字符还是英文字符,都是占用—字节内存空间。 3. 假设x=13, y=4,则表达式x%y != 0的值是true,其数据类型是布尔型。 4. Java语言中,多态性主要表现在两个方面:方法重载和成员覆盖。 5. 定义类的关键字是.class,定义接的关键字是interface。 6. 在Java语言中,通过类的定义只能实现单 重继承,但通过接的定义可以实现 多重继承关系。 7. 在Java中字符串包括字符串常量和字
8、符串变量,分别由类String和类StringBuffer来 创建对象。 8. Java源程序文件编译后产生的文件称为• class文件,其扩展.名为• java。 9. 在多线程程序设计中,若要启动一个线程需要调用的函数是start。 10. 在Java语言中,系统规定:表示当前类的构诰方法用this,表示直接父类的构诰方法 用 super。 17. Java语言规定标识符是由字母、下划线、数字和 美元符号组成的字符序列,长 度不限;又规定第一个字符不能是数字,并区分字母的大小写。 18. Java中实现多线程一般使用两种方法,一是Thread,二是Runnable。 19. J
9、ava中变量有三要素: 类型、 变量名 和变量值。 20. Java语言中,说明或声明数组时 内存大小,创建数组时 内存大小。 21. 集合框架提供的Map接的实现类中,在Map中插入、删除和定位元素,使用HasMap是 最好的选择;需要按顺序遍历键,需选择ThereMap。 22. Outputstream类和 Inputstream类是所有字节流输入输出类的父类。 23. 导入my.package包中的所类的命令是import。 24. 构造方法是一种特殊的成员方法,构造方法名与 相同,并且此方法无 有返 回值。 25. 图形用户界面的设计中有事件处理模型处理事件,在该模型中主
10、要包括事件源、 事件对象和事件监听者。 三、判断题 1. Java语言具有较好的安全性和可移植性及与平台无关等特性。T 2. Java语言的基本数据类型有4种:整型、浮点型、字符型和布尔型。T 3. 组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方法main。T 4. 数据由高类型转换到低类型时候,采用强制转换,数据精度要受到损失。T 5. 子类所继承父类的成员都可以在子类中访问。 6. 静态方法只能处理静态变量。T 7. 抽象方法是一种只有说明而无具体实现的方法。 8. Java语言规定在嵌套的程序块中不允许定义同名的成员变量。 9.
11、 Throwable类有两个子类:Error类和Exception类。前者由系统保留,后者供应用程序 使用。 10. 运行Applet程序是使用AppletViewer命令运行嵌入了字节码文件的html文件,从而获 得运行结果。 11. 成员方法的重载和覆盖是同一回事。 12. 集合Set是通过键-值对的方式来存储对象的。 13. Java语言是一种强类型语言,数据类型转换有两种:隐含转换和强制转换。 14. Java语言中,数组在静态和动态赋值时都判越界。 15. Frame容器是有边框的容器,它也是一种独立窗,只能作为最外层容器。 16. 死锁的产生是因为多个线程间存在资源竞
12、争。 1. 组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方法main。() 2. 数据由高类型转换到低类型时候,采用强制转换,数据精度要受到损失。() 3. 成员方法的重载和覆盖是同一回事。() 4. 抽象方法是一种只有说明而无具体实现的方法。() 5. Java2的事件处理方法是采用委托事件处理模型。() 6. Throwable类有两个子类:Error类和Exception类。前者由系统保留,后者供应用程序使用。 ( ) 7. 运行Applet程序是使用AppletViewer命令运行嵌入了字节码文件的html文件,从而获得运 行
13、结果。 8. Java语言具有较好的安全性和可移植性及与平台无关等特性。() 9. Java语言的基本数据类型有4种:整型、浮点型、字符型和布尔型。() 10. 子类所继承父类的成员都可以在子类中访问。() 11. Java语言规定在嵌套的程序块中不允许定义同名的成员变量。() 12. Java语言采用16位颜色标准。Java的调色板保证128色。 13. 静态方法只能处理静态变量。() 14. 画布(Canvas)是一种可容纳多个组件的容器。() 15. Java语言是一种强类型语言,数据类型转换有两种:隐含转换和强制转换。() 16. Java语言中,数组在静态和动态赋
14、值时都判越界。() 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;
15、 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.toSt
16、ring()); } } 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; nu
17、mi[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 =
18、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.prin
19、tln(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[]
20、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[
21、][] { { 1, 2, 3 }, { 7, 8 } ,{ 9 } };
for (int i = 0; i 22、t 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 23、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.p 24、rintln("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 Nu 25、llPointerException();
}
}
答案
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);
} 26、
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 27、"
+
+
+
+
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) { 28、 ArrayList list = new ArrayList();
for (int i = 0; i < 10; i++)
list.add(i, (float) Math.random()*10);
for(int j=0;j 29、s 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;
Inp 30、utStreamReader in=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(in);
System.out.println("请输入:");
String str=br.readLine();
for(int i=0;i 31、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) 复合语句在语法上可被看作一条语 32、句
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) * 33、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统计到字符串结束符以前,即,不计入字符串结束符。
34、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指针指向字符 35、串可以改变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指向数组的第三个元素,然后去 36、的当前指针指向的元素的值,即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 < 37、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 38、x);
amax=x;
amin=x;
while (x>0)
{
if (x>amax)
amax=x;
else if (x 39、d;
__k++_;
d=1.0/(k*(k+1));
} while (k<=n);
printf("%f\n",s);
5. 执行下述程序的输出结果是——4 0 4 4 3-
#include 40、n()
{
int a[] = {2,4,6,},*ptr=&a[0],x=8,y,z;
for (y=0;y<3;y++)
z=(*(ptr+y) 41、
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] 42、中,依此类推。请填空。
void func(int x,int *b)
int r;
do
{
r=x%2;
二=r;
x/=2;
} while (x);
}
11. 以下程序中函数invert实现将数组内所有数组元素的值逆置。比如,执行本程 序将输出:
10987654321
请填空。
#include 43、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 44、ruct 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 45、NULL)
{
printf("Can't open this file!\n");
exit(0);
while (― )
{
fgetc(fp);
num++;
}
printf("num=%d\n",num);
fclose(fp);
}
15. 执行下述程序后,输出结果为。
#include 46、
}
三、修改程序(在程序出错的语句下划横线并标号,把修改后的语句写在程序 之后的横线上。每小题5分,共10分)
I. 下列给定程序的功能是:读入一个整数(2<=k< = 1),打印它的所有质因 子(即所有为素数的因子)。例如,若输入整数2310,则应输出2、3、5、7、
II。
#include 47、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数组中,形成一个新的字符串。 48、例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串为: aBcdeFgh。
#include 49、c);
printf(“The string a:”); puts(a);
printf(“The string b:”); puts (b);
printf(“The result:”); puts(c);
}
四、阅读下列程序,在程序后面的横线上,写出该程序的功能或给出运行结果。
(每小题5分,共20分)
1. #include 50、
}
输出结果:
2. #include
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818