Java程序设计竞赛试题(含详细答案解析)_第1页
Java程序设计竞赛试题(含详细答案解析)_第2页
Java程序设计竞赛试题(含详细答案解析)_第3页
Java程序设计竞赛试题(含详细答案解析)_第4页
Java程序设计竞赛试题(含详细答案解析)_第5页
已阅读5页,还剩6页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java程序设计竞赛试题(含详细答案解析)考试说明:本试卷满分100分,考试时间120分钟;包含选择题、填空题、程序阅读题、编程大题四大题型;所有代码基于JDK8环境,语法规范遵循Java官方标准。一、单项选择题(共10题,每题3分,共30分)每题只有一个正确答案,多选、错选、不选均不得分1.下列关于Java基本数据类型的说法,正确的是()A.byte类型占用2个字节,取值范围-128~127B.float类型数值必须以f/F结尾,double类型可省略后缀C.boolean类型可以赋值为0和1D.char类型只能存储单个英文字符2.下列关于Java继承与重写的描述,错误的是()A.子类重写父类方法,访问权限不能严于父类B.Java支持单继承,可通过接口实现多继承效果C.静态方法可以被子类重写D.子类构造方法默认会调用父类无参构造3.以下代码的运行结果是()PlainText

publicclassTest{

publicstaticvoidmain(String[]args){

inta=5;

a=a+++++a;

System.out.println(a);

}

}A.10B.11C.12D.134.下列集合中,线程安全、有序可重复的是()A.ArrayListB.VectorC.HashSetD.HashMap5.关于Java异常处理,说法错误的是()A.finally代码块无论是否触发异常,都会执行(除程序强制退出)B.Error属于运行时异常,可通过try-catch捕获C.子类抛出的异常范围不能大于父类方法异常D.throw用于手动抛出异常,throws用于声明异常6.以下关于String、StringBuilder、StringBuffer的说法,正确的是()A.StringBuilder是线程安全的B.String类型对象创建后不可修改,拼接字符串会生成新对象C.StringBuffer效率高于StringBuilderD.三者均属于基本数据类型包装类7.下列运算符中,优先级最高的是()A.逻辑与&&B.赋值=C.自增++D.加法+8.接口中不能包含的内容是()A.常量B.抽象方法C.静态方法D.成员变量9.下列关于泛型的描述,正确的是()A.泛型可用于基本数据类型B.泛型在编译期做类型校验,无类型转换异常C.泛型数组可以直接创建D.泛型方法必须在泛型类中定义10.以下代码运行结果为()PlainText

publicclassTest{

publicstaticvoidmain(String[]args){

Integera=100;

Integerb=100;

Integerc=200;

Integerd=200;

System.out.println(a==b);

System.out.println(c==d);

}

}A.true、trueB.true、falseC.false、trueD.false、false二、填空题(共5题,每题3分,共15分)1.Java中实现接口的关键字是________,继承类的关键字是________。2.数组下标越界会抛出________异常,空指针访问会抛出________异常。3.多线程中,________关键字可以保证方法或代码块同一时间只被一个线程执行。4.Java中________类是所有类的顶层父类,位于java.lang包下。5.遍历List集合的三种常用方式:普通for循环、________、________。三、程序阅读题(共3题,每题5分,共15分)写出下列代码的最终运行结果1.代码片段:PlainText

publicclassDemo1{

publicstaticvoidmain(String[]args){

intnum=0;

for(inti=1;i<=5;i++){

if(i%2==0){

continue;

}

num+=i;

}

System.out.println(num);

}

}2.代码片段:PlainText

publicclassDemo2{

publicstaticvoidmain(String[]args){

Stringstr1="abc";

Stringstr2=newString("abc");

System.out.println(str1.equals(str2));

System.out.println(str1==str2);

}

}3.代码片段:PlainText

classFather{

publicvoidshow(){

System.out.println("父类方法");

}

}

classSonextendsFather{

@Override

publicvoidshow(){

System.out.println("子类方法");

}

}

publicclassDemo3{

publicstaticvoidmain(String[]args){

Fatherf=newSon();

f.show();

}

}四、编程大题(共3题,1-2题10分,3题20分,共40分)1.(10分)编写Java程序,实现功能:输入一个正整数n,计算1~n之间所有素数的总和。要求:封装素数判断方法,输入合法性校验(n>0)。2.(10分)定义一个学生类Student,包含属性:学号、姓名、成绩;提供构造方法、get/set方法、打印学生信息方法。创建3个学生对象,存入数组,遍历输出所有学生信息,并统计全班平均分。3.(20分)编写程序实现冒泡排序和二分查找功能:①对int数组进行升序冒泡排序;②在有序数组中通过二分查找定位指定元素下标,找到返回下标,未找到返回-1;③测试代码:自定义随机数组,排序后查找目标元素,输出排序后数组和查找结果。参考答案及详细解析一、单项选择题答案及解析1.答案:B解析:A选项byte占1个字节;C选项boolean仅有true/false两个值;D选项char可存储汉字、符号等任意单个Unicode字符。float必须加后缀f/F,double可省略。2.答案:C解析:静态方法属于类,不属于对象,无法被重写,子类定义同名静态方法只会隐藏父类方法,并非重写。其余选项均为Java继承基本规则。3.答案:C解析:后置自增先取值后运算,前置自增先运算后取值。原式拆解:a++先取出5参与运算,之后a变为6;++a先自增为7,最终5+7=12。4.答案:B解析:ArrayList线程不安全;HashSet、HashMap无序、不可重复;Vector是List接口实现类,有序可重复,方法加锁保证线程安全。5.答案:B解析:Error是系统级严重错误,如内存溢出、栈溢出,无法通过try-catch捕获,无需处理;运行时异常为RuntimeException及其子类。6.答案:B解析:A选项无StringBuilder类,应为StringBuffer;C选项StringBuilder无锁,效率高于StringBuffer;D选项三者均为引用类型,非包装类。String为不可变字符序列,拼接会生成新对象。7.答案:C解析:运算符优先级:自增(单目运算符)>算术运算>逻辑运算>赋值运算。8.答案:D解析:接口中变量默认被publicstaticfinal修饰,属于常量,不能定义普通成员变量;JDK8后接口支持静态方法、默认方法,包含抽象方法和常量。9.答案:B解析:泛型仅支持引用类型,不支持基本类型;无法直接创建泛型数组;泛型方法可独立于泛型类存在。泛型核心作用是编译期类型校验,避免类型转换异常。10.答案:B解析:Integer存在缓存机制,缓存范围-128~127,该范围内对象直接复用缓存地址,==比较地址相等;200超出缓存范围,会新建对象,地址不同,故结果为true、false。二、填空题答案及解析1.implements、extends2.ArrayIndexOutOfBoundsException、NullPointerException3.synchronized4.Object5.增强for循环、迭代器Iterator遍历三、程序阅读题答案及解析1.运行结果:9解析:循环遍历1-5,遇到偶数执行continue跳过本次循环,累加奇数1、3、5,总和为9。2.运行结果:true、false解析:equals比较字符串内容,内容一致返回true;==对于引用类型比较内存地址,str1指向常量池,str2是new的堆内存对象,地址不同。3.运行结果:子类方法解析:向上转型场景,编译看父类,运行看子类,执行子类重写后的方法,体现多态特性。四、编程大题参考答案(完整可运行代码)1.素数求和程序PlainText

importjava.util.Scanner;

publicclassPrimeSum{

//素数判断方法

publicstaticbooleanisPrime(intnum){

//小于2的数不是素数

if(num<2){

returnfalse;

}

//遍历判断因数

for(inti=2;i<=Math.sqrt(num);i++){

if(num%i==0){

returnfalse;

}

}

returntrue;

}

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

System.out.print("请输入正整数n:");

intn=sc.nextInt();

//输入合法性校验

if(n<=0){

System.out.println("输入数据不合法,请输入正整数!");

return;

}

intsum=0;

for(inti=1;i<=n;i++){

if(isPrime(i)){

sum+=i;

}

}

System.out.println("1~"+n+"之间所有素数的总和为:"+sum);

sc.close();

}

}评分标准:输入校验(3分)、素数方法封装(4分)、求和逻辑与输出(3分)2.学生类与平均分统计程序PlainText

//学生实体类

classStudent{

//成员属性

privateStringid;

privateStringname;

privatedoublescore;

//构造方法

publicStudent(Stringid,Stringname,doublescore){

this.id=id;

=name;

this.score=score;

}

//get/set方法

publicStringgetId(){

returnid;

}

publicvoidsetId(Stringid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

=name;

}

publicdoublegetScore(){

returnscore;

}

publicvoidsetScore(doublescore){

this.score=score;

}

//打印学生信息

publicvoidshowInfo(){

System.out.println("学号:"+id+",姓名:"+name+",成绩:"+score);

}

}

//测试类

publicclassStudentTest{

publicstaticvoidmain(String[]args){

//创建学生数组

Student[]students=newStudent[3];

students[0]=newStudent("001","张三",88.5);

students[1]=newStudent("002","李四",92.0);

students[2]=newStudent("003","王五",79.0);

//遍历输出学生信息

doublesumScore=0;

for(Students:students){

s.showInfo();

sumScore+=s.getScore();

}

//计算平均分

doubleavg=sumScore/students.length;

System.out.println("全班平均分:"+avg);

}

}评分标准:实体类属性、构造、get/set(4分)、信息打印方法(2分)、数组创建遍历(2分)、平均分统计(2分)3.冒泡排序+二分查找完整程序PlainText

publicclassSortAndSearch{

//冒泡排序:升序

publicstaticvoidbubbleSort(int[]arr){

if(arr==null||arr.length<=1){

return;

}

for(inti=0;i<arr.length-1;i++){

//标记本轮是否交换,优化排序效率

booleanflag=false;

for(intj=0;j<arr.length-1-i;j++){

if(arr[j]>arr[j+1]){

//交换元素

inttemp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

flag=true;

}

}

//无交换说明已有序,直接退出

if(!flag){

break;

}

}

}

//二分查找(有序数组)

publicstaticintbinarySearch(int[]arr,inttarget){

if(arr==null||arr.length==0){

return-1;

}

intleft=0;

intright=arr.length-1;

while(left<=right){

intmid=(left+right)/2;

if(arr[mid]==target){

returnmid;

}elseif(arr[mid]>target){

right=mid-1;

}else{

left=mid+1;

}

}

//未找到目标元素

return-1;

}

//遍历打印数组

public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论