第二次作业

题量: 5 满分: 100

作答时间:10-10 13:43至10-17 13:43

智能分析100分

一. 单选题(共5题,100分)

1. (单选题, 20分)下列哪个叙述是正确的?

  • A. 5.0/2+10的结果是double型数据。

  • B. (int)5.8+1.0的结果是int型数据。

  • C. '苹'+ '果'的结果是char型数据。

  • D. (short)10+'a'的结果是short型数据。

我的答案: A:5.0/2+10的结果是double型数据。;正确答案: A:5.0/2+10的结果是double型数据。;

解析:见第一次作业

2. (单选题, 20分)用下列哪个代码替换程序标注的【代码】会导致编译错误? 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:m=0;正确答案: C:m=0;

解析:见第一次作业

3. (单选题, 20分)假设有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:char m ='a'+x;;正确答案: C:char m ='a'+x;;

解析:精度从“低”到“高”的排列的顺序是:

byte->short->char->int->long->float->double

Java在计算算术表达式的值时,使用下列运算精度规则:

(1)如果表达式中有double,则按double进行运算。

(2)如果表达式中最高精度是float,则按float进行运算

(3)如果表达式中最高精度是long,则按long进行运算

(4)如果表达式中最高精度低于int,则按int进行计算

Java允许把不超出byte、short、char的取值范围的算术表达式的值赋给byte、short、char。

a的ASCII码值是97,所以A选项97+12可以赋值给short。

这道题关键在于B和C的区别,有人会说x不是等于1吗,那么’a’+x不就是’a’+1吗,为什么c是错的?

原因在于char c=’a’+1中’a’是字符型常量,1是数字常量。在编译器编译的时候,会自动合并,不会做类型转换。在编译阶段就完成。

char m=’a’+x中’a’是字符型常量,但x是变量,在编译阶段无法合并,只能在运行时编译,运行时发现x是整型,’a’+x自动转换成整型,无法直接赋值给char型。需要进行强转(char)(‘a’+x)。

4. (单选题, 20分)对于"int n=6789;",表达式的值为7的是

  • A. n%10

  • B. n/10%10

  • C. n/100%10

  • D. n/1000%10

我的答案: C:n/100%10;正确答案: C:n/100%10;

解析:对于整数6789,取模10得到的余数是9,A选项错误;

B选项先整除10得到商的结果为678,再取模10得到的余数是8;

C选项先整除100得到商的结果为67,再取模10得到的余数是7;

D选项先整除1000得到商的结果为6,再取模10得到的余数是6。

5. (单选题, 20分)表达式10>20-17的结果是

  • A. 1

  • B. 0

我的答案: A:1;正确答案: A:1;