Java程序设计基础(微课版)(第2版)第3章习题与答案_第1页
Java程序设计基础(微课版)(第2版)第3章习题与答案_第2页
Java程序设计基础(微课版)(第2版)第3章习题与答案_第3页
Java程序设计基础(微课版)(第2版)第3章习题与答案_第4页
Java程序设计基础(微课版)(第2版)第3章习题与答案_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

第3章习题练习与参考答案第一部分:习题原题一、选择题1.在下列语句中,初始化数组不正确的是()。A.intkey[]={1,2,3,4,5};B.intkey[]=newint[5];C.intkey[]={{1,2,3},{4,5,6}};D.intkey[][]={{1,2,3},{4,5,6}};2.以下定义一维数组的语句中,正确的是()。A.inta[]=newint[10];B.inta[]=new[10];C.inta[]=newint[5]{1,2,3,4,5};D.inta[]={1,2,3,4,5};3.关于java中的数组,下面的一些描述,哪些描述是准确的()。A.数组是一个对象,不同类型的数组具有不同的类B.数组长度是可以动态调整的C.两个数组用Object里equals方法比较时,会逐个遍历其中的元素,对每个元素进行比较D.一个固定长度的数组可类似这样定义:intarray[100]4.下面说法不正确的是()。A.switch语句的功能可以由if...else语句来实现B.若比较的数据类型为double,则不可以用switch语句来实现C.if...else语句的执行效率总是比switch语句高D.case子句中可以有多个语句,并且不需要大括号{}括起来5.以下程序的输出结果是()。A.输出结果为valueis99.9B.输出结果为valueis9C.输出结果为valueis9.0D.编译错误6.如下程序代码段,若a的值为3,则执行后c的值为()。A.1B.2C.3D.47.会导致死循环的语句是()。A.for(intk=0;k<0;k++)B.for(intk=10;k>0;k--)C.for(intk=0;k<10;k--)D.for(intk=0;k>0;k++)8.以下程序执行后,正确的结果是()。A.true,true,trueB.true,false,falseC.false,true,falseD.false,true,true9.关于String、StringBuffer、StringBuilder以下说法错误的是()。A.StringBuilder运行速度最快B.StringBuffer是线程安全的C.String的值是可变的D.StringBuffer运行速度比String快10.下列关于while循环、do-while循环和for循环说法错误的是()。A.while循环先执行条件判断,do-while循环执行循环体B.do-while循环结束的条件是关键字while后的条件表达式成立C.for循环结构中的3个表达式可以都不写D.while循环能够实现的操作,for循环也能实现第5题代码:publicclassTest{

publicstaticvoidmain(String[]args){

intx=4;

System.out.println("valueis"+(x>4)?99.9:9);

}

}第6题代码:if(a>0)

if(a>3)

c=2;

elsec=3;

elsec=4;第8题代码:publicclassTest{

privateStringname="abc";

publicstaticvoidmain(String[]args){

Testtest=newTest();

TesttestB=newTest();

Stringresult=test.equals(testB)+",";

result+=.equals(testB.name)+",";

result+===testB.name;

System.out.println(result);

}

}二、编程题1.某班有10位同学,请顺序输入10位同学的学号,保存在数组中,并输出所有同学的学号,输入字母n则提前退出输入。2.输入一个数组,输出所有奇数下标元素。3.已知一个数组A,将奇数位置元素存到B数组中,偶数元素存到C数组中。4.把1~36分别放入6×6的数组中,计算数组对角元素之和。5.有一个长度是10的数组,数组内有10个随机数字,要求按从小到大排序。6.通过Random类生成0~9之间的随机数10个,保存在数组中,分别统计0~9这10个数字分别出现了多少次。7.在排序好的数组中添加一个数字,将添加后的数字插入到数组合适的位置。8.现在定义如下的一个数组:intoldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5},要求将以上数组中值为0的去掉,将不为0的值存入一个新的数组,生成的新数组为:intnewArr[]={1,3,4,5,6,6,5,4,7,6,7,5}9.计算1/1+1/2+1/3+........+1/100的值。

第二部分:参考答案一、选择题答案与解析1.答案:C解析:C选项声明的是一维数组但初始化用了二维数组格式,错误。A是一维数组静态初始化;B是动态初始化;D是二维数组正确初始化。2.答案:D解析:A错误(Java中[]应在类型后或变量名后,但newint[10]是对的,不过D更标准);B语法错误;C不能同时指定长度和初始化;D是正确的静态初始化方式。3.答案:A解析:A正确,数组是对象,不同类型数组属于不同类;B错误(数组长度固定);C错误(Object的equals比较引用地址);D错误(Java声明数组不能在方括号中写长度)。4.答案:C解析:switch在多分支时效率更高,因为使用跳转表。if-else是顺序判断,不一定总是比switch效率高。5.答案:C解析:运算符优先级问题:+高于?:,所以实际执行的是("valueis"+(x>4))?99.9:9。字符串拼接后非空为true,返回99.9,但因为三元运算符类型一致,结果为99.9,输出valueis99.9。注意:这题有争议,实际运行结果因JDK版本可能不同,正确答案应为valueis9.0(C),因为x>4为false,返回9,但99.9是double,所以9被提升为9.0。6.答案:C解析:a=3时,a>0为true进入外层if;a>3为false(3不大于3),所以执行elsec=3。注意Java的else匹配最近的if。7.答案:C解析:k从0开始,k<10永远为true,k--使k越来越小,条件永远满足,死循环。A初始k=0,k<0不成立,不执行;B正常递减;D初始k=0,k>0不成立。8.答案:C解析:test.equals(testB):不同对象,返回false;.equals(testB.name):字符串内容比较,"abc"等于"abc",返回true;==testB.name:字符串常量池,"abc"是同一个对象引用,返回true。所以结果是false,true,true。但注意:实际上因为字符串驻留,==也为true,所以正确答案是D。9.答案:C解析:String是不可变的,一旦创建值不能改变。StringBuffer和StringBuilder是可变的。StringBuffer线程安全,StringBuilder速度最快。10.答案:B解析:do-while循环结束的条件是while后的条件表达式为false(不成立),而不是成立。A正确(while先判断);C正确(for(;;)是死循环);D正确(三种循环可互相转换)。二、编程题参考答案第1题参考答案程序代码:importjava.util.Scanner;

publicclassStudentIDs{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

String[]ids=newString[10];

intcount=0;

for(inti=0;i<10;i++){

System.out.print("请输入第"+(i+1)+"位同学的学号(输入n退出):");

Stringinput=sc.next();

if(input.equalsIgnoreCase("n")){

break;

}

ids[i]=input;

count++;

}

System.out.println("

已输入的学号:");

for(inti=0;i<count;i++){

System.out.println(ids[i]);

}

}

}第2题参考答案程序代码:publicclassOddIndex{

publicstaticvoidmain(String[]args){

int[]arr={1,2,3,4,5,6,7,8,9,10};

System.out.println("奇数下标元素:");

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

System.out.print(arr[i]+"");

}

}

}说明:数组下标从0开始,奇数下标就是1,3,5...第3题参考答案程序代码:publicclassSplitArray{

publicstaticvoidmain(String[]args){

int[]A={1,2,3,4,5,6,7,8,9,10};

//计算B、C数组长度

intlenB=(A.length+1)/2;//奇数位置

intlenC=A.length/2;//偶数位置

int[]B=newint[lenB];

int[]C=newint[lenC];

intidxB=0,idxC=0;

for(inti=0;i<A.length;i++){

if(i%2==0){//奇数位置(下标0,2,4...)

B[idxB++]=A[i];

}else{//偶数位置(下标1,3,5...)

C[idxC++]=A[i];

}

}

System.out.print("B数组(奇数位置):");

for(intn:B)System.out.print(n+"");

System.out.print("

C数组(偶数位置):");

for(intn:C)System.out.print(n+"");

}

}第4题参考答案程序代码:publicclassMatrixSum{

publicstaticvoidmain(String[]args){

int[][]matrix=newint[6][6];

intnum=1;

//填充数组

for(inti=0;i<6;i++){

for(intj=0;j<6;j++){

matrix[i][j]=num++;

}

}

//计算主对角线和

intsum=0;

for(inti=0;i<6;i++){

sum+=matrix[i][i];//主对角线:i==j

}

System.out.println("主对角线元素之和:"+sum);

//验证:1+8+15+22+29+36=111

}

}运行结果:主对角线元素之和=111第5题参考答案程序代码(冒泡排序):importjava.util.Random;

publicclassArraySort{

publicstaticvoidmain(String[]args){

Randomrand=newRandom();

int[]arr=newint[10];

//生成随机数

for(inti=0;i<10;i++){

arr[i]=rand.nextInt(100);//0-99

}

System.out.print("排序前:");

for(intn:arr)System.out.print(n+"");

//冒泡排序

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

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;

}

}

}

System.out.print("

排序后:");

for(intn:arr)System.out.print(n+"");

}

}第6题参考答案程序代码:importjava.util.Random;

publicclassCountNumbers{

publicstaticvoidmain(String[]args){

Randomrand=newRandom();

int[]arr=newint[10];

int[]count=newint[10];//统计0-9出现次数

//生成随机数并统计

for(inti=0;i<10;i++){

arr[i]=rand.nextInt(10);//0-9

count[arr[i]]++;

}

System.out.print("生成的随机数:");

for(intn:arr)System.out.print(n+"");

System.out.println("

各数字出现次数:");

for(inti=0;i<10;i++){

System.out.println(i+"出现了"+count[i]+"次");

}

}

}第7题参考答案程序代码:publicclassInsertNumber{

publicstaticvoidmain(String[]args){

int[]arr={1,3,5,7,9,11,13};

intnum=8;//要插入的数字

int[]newArr=newint[arr.length+1];

inti=0;

//找到插入位置

while(i<arr.length&&arr[i]<num){

newArr[i]=arr[i];

i++;

}

newArr[i]=num;//插入新数字

//复制剩余元素

while(i<arr.length){

newArr[i+1]=arr[i];

i++;

}

System.out.print("插入后数组:");

for(intn:newArr)System.out.print(n+"");

}

}运行结果:插入后数组:1357891113第8题参考答案程序代码:publicclassRemoveZero{

publicstatic

温馨提示

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

评论

0/150

提交评论