第二周测试总结分析
1、if关键字后面的小括号内,表达式的值可以为10。
A .true
B .false
答案:B
解析:表达式的值必须为boolean类型,即true/false。
2、表达式0xaa | 0x55的值为
A .FF
B .0
C .255
D .1
答案:C
解析:0xaa 用二进制表示为 10101010 ,0x55 用二进制表示为 01010101 ,按位或之后为 11111111 ,十进制数为255,十六进制数为 0xFF 。
3、表达式15&250的值为
A .FF
B .0
C .255
D .1
答案:B
解析:15 等于1111 ,240等于 11110000,15前面用0补齐为00001111 ,按位与之后为 00000000 ,即结果为0。
4、表达式10 ^ 12的值为
A .0x06
B .120
C .9
D .14
答案:A
解析:亦或(“ ^ ”)运算,相同取0,不同取1。1010 ^ 1100 =0110 , 十进制表示为6,十六进制表示为 0x06 。
5、表达式-2 >> 1的值为
A .2^31 – 1
B .2^15 – 1
C .1
D .-1
答案:D
解析:带符号右移(“ >> ”),即有符号位时,负数符号位补1,正数符号位补0, -2 的二进制求法是正数取反加1,因此 2 的二进制表示为0000 0000 0000 0000 0000 0000 0000 0010 ,取反加一为1111 1111 1111 1111 1111 1111 1111 1110 ,即 -2 的二进制表示。带符号右移之后为 1111 1111 1111 1111 1111 1111 1111 1111 ,除符号位之外,减一取反,得到带符号十进制数为-1。
6、表达式-2 >>> 1的值为
A .2^31 – 1
B .2^15 – 1
C .1
D .-1
答案:A
解析:无符号右移 (“>>>”) ,即无论正负数,右移之后符号位均补 0 。-2 的二进制无符号右移一位之后为 0111 1111 1111 1111 1111 1111 1111 1111,即 2^31 - 1。注意:>>、<<、>>>运算符只针对int型和long型,byte ,short ,char型需要转换成int型再进行操作。
7、下列与34的值相等的是
A .3/2
B .3<2
C .32^2
D .3<<2
答案:D
解析:3*4即3左移两位。C项:“^”在Java中表示按位异或。
8、观察以下方法的定义,则该方法的返回类型为
ReturnType method(byte x, double y) {
return (short)x/y*2;
}
A .double
B .short
C .int
D .byte
答案:A
解析:short将byte类型的x强制转化为short类型,但y的精度更高,所以返回类型为double。
9、在命令行输入“java demo 3”,下列程序的运行结果为
public class unsigned {
public static void main(String args[]) {
int i = Integer.parseInt(args[0]);
switch(i) {
case 1:System.out.println("Spring");break;
case 2:System.out.println("Summer");break;
case 3:System.out.println("Autumn");break;
case 4:System.out.println("Winter");break;
}
}
}
A .Spring
B .Summer
C .Autumn
D .Winter
答案:C
10、switch(i)中,i的类型可以为byte、char、short、int或long。
A .true
B .false
答案:B
11、下列程序的运行结果为:
int i=10;
do {
i/=2;
} while( i-- > 1 );
System.out.println(i);
A .1
B .5
C .2
D .-1
答案:D
12、下列程序的运行结果为:
int i=10;
do {
i/=2;
} while( --i > 1 );
System.out.println(i);
A .1
B .5
C .2
D .-1
答案:A
13、下列程序的运行结果为:
int b[][] = {{1},{2,2},{2,2,2}};
int sum = 0;
for(int i = 0; i < b.length; i++) {
for(int j = 0; j < b[i].length; j++) {
sum += b[i][j];
}
}
System.out.println(sum);
A .32
B .11
C .2
D .3
答案:B
14、定义i=2,则下面程序的运行结果为:
int i = 2;
switch(i) {
case 1:System.out.print(1);
case 2:case 3:System.out.print(3);
case 4:System.out.print(4);
}
A .3
B .34
C .4
D .无输出
答案:B
15、下列哪个叙述是正确的?
A .5.0/2+10的结果是double型数据。
B .(int)5.8+1.0的结果是int型数据。
C .苹'+ '果'的结果是char型数据。
D .(short)10+'a'的结果是short型数据。
答案:A
解析:精度由高到低排序为:double float long int char short byte
16、用下列哪个代码替换程序标注的【代码】会导致编译错误?
public class E {
public static void main (String args[ ]) {
int m=10,n=0;
while(【代码】) {
n++;
}
}
}
A .m-->0
B .m++>0
C .m = 0
D .m>100&&true
答案:C
17、假设有int x=1;以下哪个代码导致“可能损失精度,找到int需要char”这样的编译错误。
A .short t=12+'a';
B .char c ='a'+1;
C .char m ='a'+x;
D .byte n ='a'+1;
答案:C
18、下列程序的输出结果是什么?
public class E {
public static void main (String args[ ]) {
char x='你',y='e',z='吃';
if(x>'A'){
y='苹';
z='果';
}
else
y='酸';
z='甜';
System.out.println(x+","+y+","+z);
}
}
A .你,苹,果
B .你,苹,甜
C .你,酸,甜
D .你,酸,果
答案:B
19、下列程序的输出结果是什么?
public class E {
public static void main (String args[ ]) {
char c = '\0';
for(int i=1;i<=4;i++) {
switch(i) {
case 1: c = 'J';
System.out.print(c);
case 2: c = 'e';
System.out.print(c);
break;
case 3: c = 'p';
System.out.print(c);
default: System.out.print("好");
}
}
}
}
A .Jep好
B .Jeep好好
C .Jep好好
D .Jeep好
答案:B
20、下列程序的输出结果是什么?
public class E {
public static void main (String []args) {
int x = 1,y = 6;
while (y-->0) {
x--;
}
System.out.print("x="+x+",y="+y);
}
}
A .x=-5,y=-1
B .x=-4,y=0
C .x=6,y=0
D .x=7,y=-1
答案:A
21、下列关于标识符的说法,错误的是
A .标识符由字母、下划线、美元符号和数字组成。
B .2016_Java可以作为标识符。
C .标识符中的字母区分大小写。
D .catch不可以作为标识符。
答案:B
解析:P17。B项:标识符不能以数字字符开头。D项:catch是关键字。
22、下列关于Java中整数类型的说法,正确的是
A .一个byte型变量占4bit。
B .unsigned int a = 3是合法的声明。
C .使用关键字long声明long型变量:long minutes = 0x72AL。
D .short类型的变量的取值范围是-215~215-1.
答案:CD
解析:P18-19。A项:byte型变量分配1个字节内存,即8bit。B项:Java没有无符号的byte、short、int和long。
23、下列说法正确的是
A .Java语言有8种基本数据类型。
B .基本数据类型可分为逻辑类型、整数类型、字符类型、浮点类型。
C .short和Float都属于基本数据类型。
D .int a = 0144中的0144是十六进制表示法。
答案:AB
解析:C项:Float是float提供的封装类,不是基本数据类型。D项:以0开头是八进制表示法,十六进制以0x开头。
24、下列说法错误的是
A .“字符类型”中的“字符”指Unicode表中的一个字符。
B .使用System.out.println(“\”)输出反斜线。
C .short类型与char类型均分配2个字节内存,两者取值范围一致。
D .使用(int)’A’观察一个字符在Unicode表中排序位置。
答案:BC
解析:B项:“\”本身在Java中有特殊含义,表示转义字符,因此输出时需要再次转义。C项:char类型是无符号的,与short类型不一致。
25、定义float x = 0.5f; double y = 0.5,则x==y结果为false。
A .true
B .false
答案:B
解析:0.5在float和double的范围内都可以使用二进制精确表示,因此两者相等。
26、下列说法正确的是
A .float a = 3.5;会导致编译错误。
B .byte b = (byte)(-150);则b的值为106。
C .byte c = 10;int d = (int)c;会导致精度的损失。
D .精度由高到低排序为:double float long int char short byte
答案:ABD
解析:2.2节。A项:必须有后缀f或F。B项:超出byte变量的取值范围,b的值为106。C项:int精度比byte高,不会导致精度的损失。
27、关于课本P23示例程序的说法,正确的是
A .程序等待用户在命令行输入数据时,是在Scanner reader = new Scanner(System.in);一句发生阻塞。
B .在命令行运行该程序时,使用ctrl+c可以结束阻塞。
C .输入0.00也可以结束程序的执行,输出sum的值。
D .当用户输入0.3并回车后,程序再次阻塞,该阻塞是由于执行了x = reader.nextDouble();一句。
答案:BCD
解析:A项:执行nextDouble()方法时发生阻塞。C项:观察循环条件发现,x=0时结束循环程序。
28、以下哪些项是正确的char型变量的声明?
A .char ch = "R";
B .char ch = '\'
C .char ch = 'ABCD';
D .char ch = "ABCD";
E .char ch = '\ucafe';
F .char ch = '\u10100'
答案:BE
解析:不可以使用双引号;不可以将多个字符赋给char型变量;\u前缀表示时,必须为十六进制。
29、下列程序中哪些【代码】是错误的?
public class E {
public static void main(String args[]) {
int x = 8;
byte b = 127; //【代码1】
b = x; //【代码2】
x = 12L; //【代码3】
long y=8.0; //【代码4】
float z=6.89 ; //【代码5】
}
}
A .代码1
B .代码2
C .代码3
D .代码4
E .代码5
答案:BCDE
30、数组索引越界,编译可以通过,但运行时会发生ArrayIndexOutOfBoundsException异常。
A .true
B .false
答案:A
31、下列说法错误的是
A .Java中数组的下标的数据类型是整型。
B .浮点型数组的默认值是0
C .数组创建后其大小不能改变。
D .向方法传递数组参数时,传递的是数组的引用。
答案:B
解析:浮点型数组的默认值是0.0f。
32、对于int a[] = new int[3];下列哪个叙述是错误的?
A .a.length的值是3。
B .a[1]的值是1。
C .a[0]的值是0。
D .a[a.length-1]的值等于a[2]的值。
答案:B
解析:a[1]的值是0。
33、下列错误的初始化语句是
A .char str[]="hello";
B .char str[100]="hello";
C .char str[]={'h','e','l','l','o'};
D .char str[]={'hello'};
答案:ABD
34、下面程序的运行结果是:
public static void main(String args[]) {
int x=30;
int[] numbers=new int[x];
x=60;
System.out.println(numbers.length);
}
A .60
B .20
C .30
D .50
答案:C
35、下面程序的运行结果是
public static void main(String args[]) {
char s1[]="ABCDEF\0".toCharArray();
int i=0;
while(s1[i++]!='\0')
System.out.println(s1[i++]);
}
A .ABCDEF
B .BDF
C .ABCDE
D .BCDE
答案:B
36、下列复制数组的方法,错误的是
A .用循环语句逐个复制数组元素。
B .用arraycopy()方法。
C .用“=”复制。
D .用clone方法。
答案:C
37、下列哪一个选项可以将数组a复制到b?
A .arraycopy(a,0,b,0,a.length)
B .arraycopy(a,0,b,0,b.length)
C .arraycopy(b,0,a,0,a.length)
D .arraycopy(a,1,b,1,a.length)
答案:A
38、下列关于课本P29示例程序的说法,正确的是
A .如果注释掉第一行“import java.util.*;”,则“System.out.println(Arrays. toString(a));”和“Scanner scanner = new Scanner(System.in);”两句会报错。
B .折半查找时,必须保证数组是有序的。
C .该程序所示的排序方法为冒泡排序法。
D .count>N/2说明查找结束,没有找到该数字。
答案:ABCD
39、下列是正确的Java字符串的为
A .""""
B ."Oxzabc"
C ."""
D ."\t\t\r\n"
E ."boolean"5
答案:ABD
40、为一个boolean类型的变量赋值,下列方式正确的是
A .boolean = 1;
B .boolean a = (9>=10);
C .boolean a = “true”;
D .boolean a == false;
答案:B
(说明:P是书上页码,详情请看书)