姓名 学号 级 专业 学院 软件学院 … … … … … … … … … … … … … … … … … … 密 … … … … … … … … … … … … 封 … … … … … … … … … … … … 线 … … … … … … … … … … … … … … … … … 山东大学 2020-2021 学年 一 学期 高级程序设计语言 课程试卷 B 题号 一 二 三 四 五 六 七 八 九 十 总分 阅卷人 得分 得分 阅卷人 单项选择题(15 题,共 30 分) 请注意:将答案写在如下的列表中,写在其他位置无效 一、 1 2 3 4 5 11 12 13 14 15 6 7 8 9 10 1. 以下说法哪个是正确的( ) A. 程序执行结束后,应该输出 200,实际输出 100,该程序错误的类型是运行时错误。 B. Java 是大小写敏感的,Java 程序开发过程中需要区分大小写字母。 C. Java 的集成开发环境(IDE),如 Eclipse,是开发 Java 语言必需的软件工具。 D. Java 语言编写的程序源代码可以不需要编译直接在硬件上运行。 2. 下列可以作为 java 语言标识符的是( ) A. &sdu B. #sdu C. $sdu D. 2sdu 3. 编译 Java 源程序文件产生的字节码文件的扩展名为( ) A. java B. class C. html D. exe 4. 下面语句在编译时会出现语法错误的是( ) A. float f=4.67; B. Double d=3.0; C. Boolean b=null; D. String s = new String("java"); 5. 以下语句的输出结果是( ) System.out.println(3 + 6 + "" + 3 + 6); A. 3636 B. 936 C. 369 D. 99 6. 下列程序片段输出结果是( ) int a = 6, b = -6, c = 20; if ((c < 30) || (b-- < -6) && (a++ < 6)); System.out.println(“a=”+ a +“ b=”+ b ); a=6 b=-6 B. a=7 b=-7 C. a=6 b=-7 D. a=7 b=-6 7. 下面关于变量及其范围的陈述哪个是正确的( ) A. 使用 static 关键字定义的成员变量独立于该类的任何对象,被类的所有实例共享。 B. 实例变量用关键字 static 声明。 C. 静态变量在类实例化对象时候创建,在对象销毁的时候销毁。 D. 局部变量具有默认初始值,使用前可以不用初始化。 8. 下面哪个语句的语法是正确的: ( ) A. int stu[3][2] = {{1,2},{3,4},{5,6}} ; B. int stu[][]=new int[3][]; C. int[][] stu=new int[][3]; D. int[][] stu=new int[][]; 9. 下列关于 break、continue 和 return 的说法中,错误的是( ) A. 在循环中执行 return 语句,将跳出所有循环。 B. 在循环语句中,continue 语句和 break 语句作用相同。 C. 在循环语句中,break 语句会立刻跳出循环体,执行循环结构后面的语句。 D. 在循环语句中,continue 语句跳出本次循环的后续执行,从循环的开始重新迭代。 10. 下列有关抽象类的说法错误的是( ) A. 抽象类中可以没有抽象方法 B. 只要有抽象方法的类,必须用 abstract 声明为抽象类 C. 抽象类中可以有具体的实现方法 D. 抽象类中不能有 final 修饰的方法 11. 将以下哪种方法插入行 3 是不合法的( ) 1. public class Test1{ 2. public void m(double a, double b) {} 3. 4. } A. public void m(double a, double b, double c){} B. public float m(double c, double d) {return 0;} C. public void m(int a, int b){} D. public void m(int a, int b, int c){} 12. 以下有关构造方法描述错误的是( ) A. 构造方法的返回值类型只能是 void 类型 B. 构造方法是类的一种特殊函数,它的方法名必须与类同名 C. 一般在创建新对象时,系统会自动调用构造方法 D. 定义类时未定义构造方法,Java 会补充缺省构造方法 13.下列有关多态描述正确的是( ) A. 在 Java 中允许定义一个子类的引用,指向父类的对象。 B. 在 Java 中允许定义一个父类的引用,指向子类的对象。 C. 如果使用父类的引用指向子类的对象,那么可以直接使用该引用调用子类的所有方法。 D. 如果使用子类的引用指向父类的对象,那么可以直接使用该引用调用父类的所有方法。 14. 关于 Java 中的接口和继承,下面说法正确的是( ) A. 在 Java 中允许继承多个类,在 extends 关键字之后分别列出。 B. 接口中的方法默认都是静态的. C. 在 Java 中一个类不能同时继承一个类和实现一个接口。 D. 如果接口 A 继承接口 B,那么用 extends 关键字标明,如“Interface A extends B”。 15. 下列关于 Object 类的说法,正确的是 ( ) A. Java 中所有的类都直接或间接继承自 Object,无论是否明确的指明,无论其是否是抽象类。 B. 利用“==”比较两个对象时,Java 调用继承自 Object 的 equals 方法,判断是否相等。 C. 如果一个类是从 Object 类派生出来的,那么必须重写 toString()和 equals()方法。 D. 如果一个类显示地继承了其他类,则该类不再继承 Object 类。 第 1 页 共 5 页 姓名 学号 级 专业 学院 … … … … … … … … … … … … … … … … … … 密 … … … … … … … … … … … … 封 … … … … … … … … … … … … 线 … … … … … … … … … … … … … … … … … 山东大学 2020-2021 学年 一 学期 高级程序设计语言 课程试卷 B 得分 阅卷人 System.out.println("没有代码可供解析了"); break; } catch (Exception e) { 二.2 答题区 二. 阅读程序,在指定的答题区写出代码的执行结果,注意输出格式(40 分,每题 10 分) System.out.println("未知异常"); } System.out.println("----------"); 1. public class T21B { public static void main(String[] args){ int[] a = {1024,520,502}; printList(a); printList(m(a,a[0],a[1])); printList(a); } public static void printList(int[] a){ for (int i:a) System.out.print(i + " "); System.out.print("\n"); 二.1 答题区 } public static int f(int x){ int y = 0; while (x != 0){ int l = x % 100; y = y * 100 + l; x = x / 100; } return y; } public static int[] m(int[] a,int ...b){ for (int i = 0;i<a.length && i<b.length;i++){ a[i]=f(a[i]); b[i]=f(b[i]); } return b; } } 2. public class T22B { public static void main(String[] args) { String[] codes = { "SD2020", null, "SD1015","SD202a" }; for (int i = 0; i <= 4; i++) { try { System.out.println("解析编码"+ i+ "。。。" + codes[i]); analyseCode(codes[i]); } catch (IndexOutOfBoundsException e) { } System.out.println("全部解析完毕 "); } public static void analyseCode(String code) throws Exception { int syear=0; try { syear = Integer.parseInt( code.substring(2, 6)); if (syear > 2100 || syear < 1901) throw new Exception(); System.out.println("该编码正确"); } catch (NullPointerException e) { System.out.println("编码为空" ); } catch (NumberFormatException e) { System.out.println("年份格式解析错误 "); } finally { System.out.println("解析完毕。。 。"+code); } } } 3. public class T23B {//汉诺塔 static String[] s = {null, "S disk","M disk","L disk"}; public static void main(String[] args) { h(3, 'a', 'b', 'c', 3); } static void m(int diskN, char src, char dst) { if (diskN == s.length-1) System.out.println("****"); System.out.println(s[diskN] + " from " + src + " to " + dst); } static void h(int n, char s, char t, char d, int diskN) { if (n == 1) m(diskN, s, d); else { h(n - 1, s, d, t, diskN - 1); 第 2页 共 5 页 姓名 学号 级 专业 学院 … … … … … … … … … … … … … … … … … … 密 … … … … … … … … … … … … 封 … … … … … … … … … … … … 线 … … … … … … … … … … … … … … … … … 山东大学 2020-2021 学年 一 学期 高级程序设计语言 课程试卷 B m(diskN, s, d); h(n - 1, t, s, d, diskN - 1); } public class E24B { } } } public static void main(String[] args){ FClass obj1=new SubClass(1); 二.3 答题区 System.out.println("******"); ((SubClass)obj1).m2(4); obj1.m2(2); ((SubClass)obj1).m1(3); obj1.m1(1); } } 4. class FClass{ public FClass(){ System.out.println("基类构造方法"); m1(1); 得分 二.4 答题区 阅卷人 三.写程序(30 分) 1. 写一个完整的程序,要求输入一个字符串,提取一个字符串中的所有数字 字符('0'……'9'),将其转换为一个整数输出。 (保证输出不超过长整型范 围)。如输入为 abc1d23r4!,输出为 1234。 (6 分) } public void m1(double d){ System.out.println("基类 m1(double)"+d); m2(d); } public void m2(int i){ System.out.println("基类 m2(int)" + i); } public void m2(double d){ System.out.println("基类 m2(double)" + d); } } class SubClass extends FClass { public SubClass(int i){ System.out.println("子类构造方法"); m1(i); } public void m1(int i){ System.out.println("子类 m1(int)" + i); m2(i); } public void m2(double d){ System.out.println("子类 m2(double)" + d); } 第 3 页 共 5 页 姓名 学号 级 专业 学院 … … … … … … … … … … … … … … … … … … 密 … … … … … … … … … … … … 封 … … … … … … … … … … … … 线 … … … … … … … … … … … … … … … … … 山东大学 2020-2021 学年 一 学期 高级程序设计语言 课程试卷 B 2. 请在给定的位置书写合适的代码,完成此程序。程序填写完整后运行结果如下(12分): program: 新闻联播 type: News start:1900; end:1930 program: 焦点访谈 type: News start:1940; end:2000 title: 开国大典 type: StoryFilm start:2020; end:2215 public News(String start,String end,String program) { } // 5)根据题初给出的运行结果完成程序,需要利用TVProgram的toString()方法 public String toString() { } abstract class TVProgram{ protected String type,start,end; //1)请在此处完成构造器设计,进行类中相关属性的初始化 public TVProgram(String type,String start,String end) { } public class Three { //6)完成下列方法代码,完成对tv按节目结束时间从早到晚排序。start,end 格式为"小时分钟 ",// end晚于start,而且都在同一天内。 // 不允许直接使用现成的排序方法 public static void sortByEnd(TVProgram[] tv) { } public String toString() { return "type: "+type+"\nstart:"+start+"; end:"+end; } } class StoryFilm extends TVProgram{ private String title; //2)请在此书写代码,将继承自父类的type属性赋值为“StoryFilm” public StoryFilm(String start,String end,String title) { } // 3)根据题初给出的运行结果完成程序,需要利用TVProgram的toString()方法 public String toString() { } public static void main(String[] args) { TVProgram[] tv=new TVProgram[3]; tv[0]=new StoryFilm1("2020","2215","开国大典"); tv[1]=new News("1900","1930", "新闻联播"); tv[2]=new News("1940","2000", "焦点访谈"); sortByEnd(tv); for (TVProgram o:tv) System.out.println(o); } } class News extends TVProgram{ private String program; } //4)请在此完成方法体代码,将继承自父类的type属性赋值为“News” 第 4 页 共 5 页 姓名 学号 级 专业 学院 … … … … … … … … … … … … … … … … … … 密 … … … … … … … … … … … … 封 … … … … … … … … … … … … 线 … … … … … … … … … … … … … … … … … 山东大学 2020-2021 学年 一 学期 高级程序设计语言 课程试卷 B 3. 请根据整数链表节点(ListNode)的定义,完成下列链表(List)程序(12 分)。 public class ListNode{ public int data; //为考试简便,定义属性为 public,不是好的定义方式 public ListNode link; public ListNode(int newData,ListNode newLink){ data=newData; link=newLink; }} public class List{ private ListNode head; //(1)插入一个节点到链表尾部。 public void insertToEnd(int newData){ //(3) 反转链表,额外空间要求不超过一个节点的大小。如原链表为 1->2->3->null,反转之后链表为 3->2->1->null。 public void reverseList( ){ } //(2)删除链表中的倒数第 K 个节点,如果不存在倒数第 K 个节点,原链表不变。 public void removeLastKthNode( int lastKth){ } } } 第 5 页 共 5 页