第一次作业

题量: 10 满分: 100

作答时间:09-17 19:26至09-19 20:26

智能分析 80分

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

1. (单选题)下列哪个是JDK提供的编译器?

  • A. java.exe

  • B. javac.exe

  • C. javap.exe

  • D.javaw.exe

我的答案: B:javac.exe;正确答案: B:javac.exe;

解析:

  • javac.exe 是java语言编译器,用来将java源文件编译成java字节码。

  • java.exe 是java解释器,用来解释java字节码。

  • javap.exe 是java反汇编器,用来反汇编java字节码。

  • javaw.exe 是java无窗口执行器,用来运行java字节码。

2. (单选题)下列哪个是Java应用程序主类中正确的main方法?

  • A. public void main (String args[ ])

  • B. static void main (String args[ ])

  • C. public static void Main (String args[ ])

  • D. public static void main (String args[ ])

我的答案: D:public static void main (String args[ ]);正确答案: D:public static void main (String args[ ]);

解析:Java应用程序的入口点是主类中的main方法。main方法必须具有特定的签名,才能被Java虚拟机识别并执行。正确的main方法签名应该包括以下几个部分:

  • 访问修饰符:必须是public,表示该方法可以被任何类访问。

  • 静态修饰符:必须是static,表示该方法属于类,而不属于对象。

  • 返回类型:必须是void,表示该方法没有返回值。

  • 方法名称:必须是main,且大小写敏感。

  • 参数列表:必须包含一个String类型的数组参数,用于接收命令行参数。

3. (单选题)下列哪项字符序列可以做为标识符?

  • A.  true

  • B. default

  • C. int

  • D. good—class

我的答案: C:int;正确答案: D:good—class;

解析:本题考查的是标识符相关知识。标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”、美元$符号组成,并且首字符不能是数字,但可以是字母或者下划线。在C语言中,标识符是区分大小写的。

选项A、B、C中true、default、int是C语言中的关键字,不能作为用户标识符;严谨来说,选项D中good—class中“—”(中文短破折号)不能用于字符串的界定,因此good—class是个不合法的字符串,不能作为标识符。

4. (单选题)下列哪项是不正确的float变量的声明?

  • A. float foo = -1; 

  • B. float foo = 1.0; 

  • C. float foo = 42e1; 

  • D. float foo = 3.03d; 

我的答案: D:float foo = 3.03d; ;正确答案: A:float foo = -1; ;

解析:本题考查的是float类型数据的声明。float(单精度浮点数)的赋值可以为小数形式,也可以为指数形式,但是e后面的数字要求是整数。在Java中,小数会被默认为double类型的值。

故本题:A选项是正确的float变量声明,因为-1是一个整数(整型),可以自动转换为float。B选项错误,没有f或F后缀,此时JVM会默认浮点数为double类型的浮点数。C选项错误,因为float foo=42e1为错误写法,系统会认为你输入的是42.0e1,而不是整型,而加了小数点的系统又会认为是双精度浮点,等价于42×101=420.0,还是double类型,如果转换成float想转就要强制转换(float)42e1或者 float x=42e1f都可以。D选项错误,d或D后缀表示双精度double类型。

5. (单选题)下列哪一项叙述是正确的?

  • A. char型字符在Unicode表中的位置范围是0至32767

  • B. char型字符在Unicode表中的位置范围是0至65535

  • C. char型字符在Unicode表中的位置范围是0至65536

  • D. char型字符在Unicode表中的位置范围是-32768至32767

我的答案: B:char型字符在Unicode表中的位置范围是0至65535;正确答案: B:char型字符在Unicode表中的位置范围是0至65535;

解析:本题考查C语言的字符数据类型。char型字符使用1个字节存储,在Unicode表中的位置范围是0至65535。ASCII字符则为0至127。

6. (单选题)以下哪项是正确的char型变量的声明?

  • A. char ch = "R";

  • B. char ch = '\\'

  • C. char ch = 'ABCD';

  • D. char ch = "ABCD";

我的答案: B:char ch = '\\';正确答案: B:char ch = '\\';

解析:本题考查字符变量的声明。char ch="R",字符串赋值给字符变量,所以A选项错误;char ch='\',字符变量赋值给字符常量,B选项正确。char型变量用于存储单个字符,占两个字节,通常使用单引号来表示字符常量。

7. (单选题)对于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]的值是1。;正确答案: B:a[1]的值是1。;

解析:本题考查Java数组相关知识。数组的长度可以通过数组名后面加上.length来获取,得知数组a的长度是3,索引范围是从0到2,即a[0],a[1],a[2],在定义初始化后,a[0]的值是0,a[1]的值是0,a[2]的值是0,a.length的值是3。

//用程序来验证:
public class OutputData {
 
	public static void main(String[] args) {
	
		int a[] = new int[3];
		System.out.println("a[0]="+a[0]);
		System.out.println("a[1]="+a[1]);
		System.out.println("a[2]="+a[2]);
	}
 
}
//运行输出结果:
            a[0]=0
            a[1]=0
            a[2]=0

由上可知对于没有赋值的数组,默认数组的值都是“0”

8. (单选题)下列哪个叙述是正确的?

  • 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型数据。;

解析:本题考查了Java语言中表达式计算的基础知识。

在A选项中,表达式5.0/2+10的结果是double型数据。其中,5.0是一个double型字面量,2是一个int型字面量。根据Java语言中的类型提升规则,当两个不同类型的操作数进行运算时,较小类型的操作数会被提升为较大类型。因此,在计算5.0/2时,int型字面量2会被提升为double型,然后在与5.0进行除法运算。除法运算的结果是一个double型数据2.5,接着,2.5与int型字面量10进行加法运算,同样根据类型提升规则,10会被提升为double型,然后再与2.5进行加法运算。最终得到的结果是12.5,它是一个double型数据。

在B选项中,(int)5.8表示将double型字面量5.8强制转换为int型。强制转换会截断小数部分,因此(int)5.8的结果是5。接着,int型数据5与double型字面量1.0进行加法运算,根据类型提升规则,5会被提升为double型5.0,再与1.0进行加法运算。最终得到的结果是6.0,它是一个double型数据。

在C选项中,表达式'苹'+'果'并不是一个合法的Java表达式。在Java语言中,字符字面量必须用单引号括起来,并且只能包含一个字符。因此,“苹”和“果”都不是合法的字符字面量。

在D选项中,表达式[(short)10+'a']的结果不一定是short型数据。在这个表达式中,(short)10表示将int型字面量10强制转换为short型。强制转换不会改变数值,因此(short)10的结果仍然是10。但由于表达式中包含字符字面量'a',而字符字面量在参与运算时会被转换为其对应的ASCII值(即97),因此表达式[(short)10+'a']相当于[(short)10+97],其结果为107,并且结果类型为int。

9. (单选题)用下列哪个代码替换程序标注的【代码】会导致编译错误?

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 ;

解析:本题考查while循环条件的知识。while循环条件可以是任意表达式,当表达式为真时,则执行循环,如果为假,则退出循环。while循环条件也可以是布尔表达式boolean类型,当布尔表达式为真时,执行循环体,否则退出循环,而C是赋值语句,所以会编译错误,要注意=是赋值,==才是等于

10. (单选题)下列程序的输出结果是什么?

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. 甜

我的答案: A:你,苹,甜;正确答案: A:你,苹,甜;

解析:根据程序中的条件语句和字符比较,分析如下:

x的值为'你',对应的Unicode编码大于'A',所以条件 x > 'A' 成立,进入if分支。在if分支中,y被赋值为'草',z被赋值为'果',程序继续执行,到达else分支。然而,由于在if分支中已经改变了y和z的值,else分支的代码不会执行。最后,z被赋值为'甜'。