Java语言程序设计(第2版)第1-6章课后习题答案解析.docx
选择题第1章 Java 语言概述1-1 在以下概念中,Java 语言只保存了BA. 运算符重载B. 方法重载C. 指针D. 构造和联合1-2 以下关于Java 语言特性的描述中,错误的选项是DA. 支持多线程操作B. Java 程序与平台无关C. Java 和程序可以直接访问Internet 上的对象D. 支持单继承和多继承1-3 以下关于Java Application 程序在构造上的特点的中,错误的选项是CA. Java 程序是由一个或多个类组成的B. 组成Java 程序的假设干个类可以放在一个文件中,也可以放在多个文件中C. Java 程序的文件名要与某个类名一样D. 组成Java 程序的多个 类中,有且仅有一个主类1-4 Java 程序经过编译后生成 的文件的后缀是CA. .objB. .exeC. .classD. .java1-5 以下关于运行字节码文件的命令行参数的描述中,正确的选项是AA. 第一个命令行参数紧跟命令字的参数被存放在args0中B. 第一个命令行参数被存放在args1中C. 命令行的命令字被存放在args0中D. 数组args的大小与命令行参数的个数无关推断题1-1 JavaC+的语言之前问世的。错1-2 Java 语言具有较好的安全性和可移植性及与平台无关等特性。对1-3 Java 语言中取消了联合的概念,保存了构造概念。错1-4 Java 语言中数据类型占内在字节数与平台无关。对1-5 Java 语言中可用下标和指针两种方式表示数组元素。错1-6 Java 语言的源程序不是编译型的,而是编译解释型的。对1-7 操作系统中进程和线程两个概念是没有区分的。错1-8 Java 语言既是面对对象的又是面对网络的高级语言。对1-9 Java 程序分为两大类:一类是 Application 程序,另一类是 Applet 程序。前者又称Java 应用程序,后者又称为Java 小应用程序。对1-10 Java Application 程序是由多个文件组成的,其中可以有也可以没有主文件。错1-11 组成 Java Application 的假设干类中,有且仅有一个主类,只有主类中含有主方法main。对1-12 Java Application 程序中,必有一个主方法 main,该方法有没有参数都可以。对 1-13 Java 程序中是不区分大小写字母的。错1-14 下述两个命令:javac 和 java 是不同的,编译时用前者,运行时用后者。对1-15 Java 程序编译后生成的是字节码文件,其后缀是.exe。错1-16 字节码文件机器是不能直接识别的,它要经过解释器,边解释边执行。对1-17 在Java 程序中,使用import 语句引入类是在解释器中实现的。对1-18 在运行字节码文件时,使用 java 命令,确定要给出字节码文件的扩展名.class。错1-19 Java 程序中有多个类,编译后只生成一个字节码文件,其名字同主类名。错1-20 Java 程序中消灭的输出方法println和 print是完全全都的。错 分析程序的输出结果题1-1 程序 Exerl_1.java import java.io.*; public class Exerl_1public static void main (String args )System.out.print(“This is a “); System.out.println(“strint.“)该程序的输出结果如下:This is a string.1-2 程序 Exerl_2.java Import java.io.*; Public class Exerl_2Public static void mian(String args )Char ch=“ “;System.out.println(“Input a character:“); Trych=(char)System.in.read;Catch(IOException e)System.out.println(“The character is ”“+ch+“”“);该程序的输出结果如下Input a character:kThe character is k 1-3 程序 Exerl_3.java import java.io.*;public class Exerl_3Public static void main(String args )String str= “ System.out.println(“Input a string:“); TryBufferedReader in =new BufferedReader(new InputStreamReader(System.in); str=in.readLine;Catch(IOException e )System.out.println(“The string is ”“+str+ “ “ “);1-4 程序 Exerl_4.java import java.io.*public class Exerl_4public static void main(String args )A a=new A; a.i=8; a.d=1.25;a.meth(“该程序输出结果如下所示“);System.out.println(“ti=“+a.i+“,d=“+a.d);class Aint i; double d;void meth(string str)System.out.println(str);该程序输出结果如下所示i=8,d=1.25编程题1-1 编写一个Java Application 程序,使该程序运行后输出字符串“Hello!How are you.“。参考程序内容如下import java.io.*; public class prol_1public static void main(String args )System.out.println(“Hello!How are you.“);1-2 编写一个Java Application 程序,使该程序输出显示如下结果: Var1=10,var2=19.5Ok!参考程序内容如下: import java.io.*; public class prol_2public static void main(String args )int var1=10; double var2=19.5;System.out.println(“var1=“+var1+“,var2=“+var2); System.out.println(“ok!“);第 2 章 Java 语言语法根底选择题2-1Java 语言所用的字符集中字符是 B 位。A. 8B. 16C. 32D. 642-2以下关于标识符的描述中,正确的选项是 A 。A. 标识符中可以使用下划线和美元符B. 标识符中可以使用连接符和井号符C. 标识符中大小写字母是无区分的D. 标识符可选用关键字2-3Java 语言和各种分隔符中,非法的是 D 。A. 空白符B. 分号C. 逗号D. 问号2-4以下是Java 语言中可用的注释,其中错误的选项是C 。A. /2-5B. /*/C. /*/D. /*/Java 语言中字符型数据的长度是 B 位。A. 8B. 16C. 32D. 642-6以下描述的两种数据类型的长度不相等的是 A。A. 字符型和布尔型B. 字节型和布尔型C. 短整型和字符型D. 整型和单精度浮点型2-7 以下是Java 语言中的复合数据类型,其中错误的选项是 C 。A. 数组B. 接口C. 枚举D. 类2-8 下面是关于Java 语言中数据类型的强制转换的描述,其中错误的选项是 C,D 。A. 当数据类型从高转换为低时需强制转换B. 强制转换时使用强制转换去处符,形如<类型>C. 浮点型数据强制转换为整型时,小数局部四舍五入D. 赋值操作中都要承受强制类型转换2-9 以下关于常量的描述中,错误的选项是 B,D 。A. Java 语言的常量有 5 种B. 浮点型数 12.456 是单精度的C. 布尔型常量只有两个可选值:true 和 falseD. 字符串常量含有完毕符”0 ”2-10 以下关于定义符号常量的描述中,错误的选项是 A,C 。A. 定义符号常量使用关键字constB. 定义符号常量时要赋初值C. 符号常量既可以定义为类成员,又可在方法中定义D. 定义符号常量时必需给出数据类型2-11 以下关于变量的默认值的描述,其中错误的选项是 B,C 。A. 定义变量而没有进展初始化时,该变量具有默认值B. 字符型变量的默认值为换行符C. 布尔型变量的默认值是trueD. 变量的默认值是可以被转变的2-12 以下关于变量定义的描述中,正确的选项是 A,C 。A. 定义变量时至少应指出变量名字和类型B. 定义变量时没有给出初值该变量可能是无意义值C. 定义变量时,同一个类型多个变量间可用逗号分隔D. 定义变量时必需要给变量初始化2-13 以下关于变量作用域的描述,错误的选项是 D 。A. 在某个作用域定义的变量,仅在该作用域内是可见的,而在该作用域外是不行见的B. 在类中定义的变量的作用域在该类中的方法内可以使用C. 在方法中定义 的变量的作用域仅在该方法体内D. 在方法中作用域可嵌套,在嵌套的作用域中可以定义同名变量2-14 以下关于增 1+减 1-1 运算符的描述中,正确的选项是 A,B 。A. 增 1 减 1 运算符都是单目运算符B. 增 1 减 1 运算符都具有前缀运算和后缀运算C. 增 1 减 1 运算符不会转变变量的值D. 增 1 减 1 运算符前缀运算和后缀运算后表达式值是一样的2-15关于运算符优先级的描述中,错误的选项是 D 。A. 在表达式中,优先级高的运算符先进展计算B. 赋值运算符优先级最高C. 单目运算符优先级高于双目和三目运算符D. 规律运算符优先级高于规律位运算符2-16 以下关于表达式的描述中,正确的选项是 A,C 。A. 任何表达式都有确定的值和类型B. 算数表达式的类型由第一个操作数的类型打算C. 规律表达式的操作数是规律型的D. 赋值表达式的类型取决于右值表达式的类型2-17 以下表达式中,非法的是 B,C 。int a=5,b=6;double c=1.1,d=2.2A. a+c+dB. (a+c)- -C. c<<bD. a!=b?c:d2-18 以下关于条件语句的描述中,错误的选项是 A,C 。A. If 语句可以有多个else 子句和else if 子句B. If 语句中可以没有else 子句和else if 子句C. If 语句中的条件可以使用任何表达式D. If 语句的 if 体、else 体内可以有循环语句2-19 以下关于开关语句的描述中,错误的选项是 B,C,D 。A. 开关语句中,default 子句可以省略B. 开关语句中,case 子句的语句序列中确定含有break 语句C. 开关语句中,case 子句和default 子句都可以有多个D. 退出开关语句的唯一条件是执行break 语句2-20以下关于循环语句的描述中,错误的选项是 B,D 。A. 任何一种循环体内都可以包含一种循环语句B. 循环体可以是空语句,也可以是空C. 循环体内可以消灭多个break 语句D. 循环语句中,循环体至少被执行一次2-21 以下循环语句的循环次数是 D 。int i=5; doSystem.out.println(i-); i-;while(i!=0);A. 0B. 1C. 5D. 无限2-22 以下循环语句中,循环体被执行的次数为 D 。for (int i=0,j=0;(j!=18)|(i<4);i+)A. 3B. 4C. 不确定D. 无限2-23 以下关于Java 语言的数组描述中,错误的选项是 D 。A. 数组的长度通常用length 来表示B. 数组下标从 0 开头C. 数组元素是按挨次存放在内在的D. 数组在赋初值和赋值时都不判界2-24 以下关于数组的定义形式,错误的选项是 A,C,D 。A. inta;a=new int;B. char b;b=new char80C. intc=new char10D. intd3=new int22-25 以下关于字符串的描述中,错误的选项是 B 。A. Java 语言中,字符串分为字符串常量和字符串变量两种B. 两种不同的字符串都String 类的对象C. Java 语言中不再使用字符数组存放字符串D. Java Application 程序的main和参数args是一个String 类的对象数组,用它可存放假设干个命令行参数推断题2-1 Java 语言标识符中可以使用美元符。对2-2 Java 语言标识符中大小写字母是没有区分的。错2-3 分号;、逗号,和冒号:都可作为 Java 语言中的分隔符。对2-4 文档注释符/*/是 Java 语言特有的注释符。对2-5 Java 语言的根底数据类型有 4 种:整型、浮点型、字符型和布尔型。对2-6 Java 语言的复合数据类型有 3 种:数组、类和包。错2-7 Java 语言中,字节型与字符型是一样的。错2-8 Java 语言是一种强类型语言,数据类型转换有两种:隐含转换和强制转换对2-9 数据由高类型转换到低类型时,承受强制转换,数据精度要受到损失。对2-10 布尔型常量可以自动转换为短整型常量 。错2-11 Java 语言使用的是Unicode 字符集,每个字符在内在中占 8 位。错2-12 Java 语言的字符串中不隐含完毕符。对2-13 Java 语言中定义符号常量使用final 关键字。对2-14 Java 语言中不同数据类型的长度是固定的,不随机器硬件不同而转变。对2-15 Java 语言中只有无符号的字符型。对2-16 字符型变量中只存放一个字符。对2-17 定义变量时必需进展初始化,否则变量具有无意义的值。错2-18 假设定义变量时不进展初始化,则该变量确定具有默认值。错2-19 Java 语言中,变量消灭的位置只有一种,即为类体内定义的成员变量。错2-20 Java 语言规定在的程序块中不允许定义同名变量。对2-21 求余运算符%可用于整数和浮点数。错2-22 关系运算符组成的表达式是规律表达式。错2-23 规律运算符&和&&是没有区分的,都具有规律与的功能。错2-24 运算符& 是规律与运算符还是按位与运算符取决于操作数的类型。对2-25 运算符“>>”和“>>>”都是右移运算符,其区分在于对向右移出的位是舍弃还是保存。错2-26 赋值运算符组成的赋值表达式中,通常将右边表达式的类型转换为左边变量的类型后再赋值。对2-27 三目运算符的 3 个操作数中,第一个操作数的类型必需是规律型的对2-28 强制类型转换运算符的功能是将一个表达式的类型转换为所指定的类型。对2-29 对象运算符instanceof 是一个单目运算符,其表达式的值的类的对象。错2-30 内存安排运算符 new 可以为创立的数组安排内存空间,但不能为创立的变量安排空间。2-31 运算符的优先级中,最低的是三目运算符。错2-32 运算符的结合性中,除了三目运算符是自右向左外,其余都是自左向右。错2-33 关系表达式和规律表达式的值都是布尔型的。对2-34 赋值表达式的值不能是规律型的。错2-35 条件表达式的类型总是“?”和“:”之间的操作数的类型。错2-36 块语句可能嵌套,外层块语句定义的变量在内层块语句中是可见的对2-37 条件自勉中的<条件>表达式可以是任何表达式。错2-38 在条件语句的嵌套构造中,一个if 子句最多有一个else 子句与它配对,而且确定是距离它最近的。对2-39 开关语句中,case 子句后面的<语句序列>可以是块语句。对、2-40 循环语句中,<条件>表达式必需是规律型表达式。对2-41 在Java 语言中,break 语句不能作用在<标号名>的左边。错2-42 Java 语言中,数组在静态和动态赋值时都判越界。对2-43 说明或声明数组时担忧排内存大小,创立数组时安排内存大小。对2-44 根本数据类型的数组在创立时系统将指定默认值。对2-45 数组在定义时可以进展初始化,使用初始值表。对2-46 Java 语言中数组元素只有下标表示,没有指针表示。对2-47 创立数组时,系统自动将数组元素个数存放在 length 变量中,可供用户对数组操作时使用。对2-48 字符串可分为字符串常量和字符串变量两种,它们都是对象。对2-49 Java 语言中不使用字符数组存放字符串对2-50 以下创立字符串s 的方法是错误的。对char ch=”m”,m”,”n”,”n”; char s=new char(ch);计算表达式的值,上机验证其结果题2-1:int a=3,b=5;求以下表达式的值:1a+b%b2b>>a3-b>>>a4A&b5+a-b+答案:1320 2-1:double x=1.5,y=2.8;求以下表达式的值:1x+>y2x+4/532*x=y4y/6*65y+=x-=1353670911415-1答案1false(2)1.5(3)false 2-3:Boolean b1=true, b2=false; int a=6;求值:1b1&b22!b1&&b2|b23b2&b1|!b24b1!=b25!(a>6)&a6|b2=true)(4)2.8(5)3.3答案:1false2false 2-4:int a=3,5,7,9;3true4false5true求值:12345a0+a1 a3=6a2*a3>4*a3(a0+=a1)+ +a2for(int i=1;i<4;i+) a0+=ai;答案:18263true416分析程序输出结果题2-1 Exer2_1.java 程序public class Exer2_1524public static void main(String args)int i=3; char c=”p”; float f=3.5f;double d=32.56; short s=25; booleab=true; string st=“new“;System.out.println(“i+s=“+(i+s); System.out.println(“d+f=“=(d+f); System.out.println(“st+“year“=“+st+“year“); System.out.println(“!b|b=“+(!b|b); System.out.println(“b?i:d=“+(b?i:d);输出结果如下: i+s=28 d+f=36.06st+“year“=new year c+2=r!b|b=true b?i:d=3.02-2 Exer2_2.java 程序public class Exer2_2public static void main(String args)int suma=0,sumb=0;for(int a=0,b=0;a<5;a+,b+)suma+=a;sumb+=b;System.out.println(“suma=“+suma+“,sumb=“+sumb)输出结果如下:suma=10,sumb=60 2-3Exer2_3.java 程序public class Exer2_3public static void main(String args)int i,j; First_Loop: for(i=1;i<50;i+)for(j=2;j<i;j+)if(i%j)=0continue First_Loop; System.out.println(i);输出结果如下:1235711131719232931374143472-4 Exer2_4.java 程序public class Exer2_4public static void main(String args)char ch=”B”; switch(ch)case”A”:System.out.println(“5“):break; case”B”:System.out.println(“4“):break; case”C”:System.out.println(“3“):break; default:System.out.println(“0“);输出结果如下:42-5 Exer2_5.java 程序public class Exer2_5public static void main(String args)int a=3,b=5; if(a=3)if(b=1)a+;elseb+;System.out.println(a+“,“+b); int x=1,y=4;if(x=2)elseif(y=4) x+;y+;System.out.println(x+“,“+y);输出结果如下:3,51,52-6 Exer2_6.java 程序public class Exer2_6public static void main(String args)int i; for(i=1;i<10;i+)if(i>2)System.out.println(“AB“);elseSystem.out.println(“BA“);if(i=5)break;System.out.println(“i=“+i);输出结果如下:BA BA AB AB ABi=52-7 Exer2_7.java 程序public class Exer2_7public static void main(String args)long j1=1,j2=1; for(int i=5;i>=1;i-)j1*=i;for(int i=4;i>=1;i-) j2*=i;System.out.println(“5!+4!“+(j1+j2);输出结果如下:5!4!=1442-8 Exer2_8.java 程序public class Exer2_8public static void main(String args)String s1=“123456“;char ch=”4”,”5”,”6”,”7”,”8”;double d;d=new double5; d0=1.2f;d1=2.3f;d2=3.4f;d3=4.5f;d4=5.6f;String s2=“ab“,“cd“,“ef“; inta=1,2,3,4,5,6,7,8,9;System.out.println(“s1=“+s1); for(ing i=0;i<5;i+)System.out.print(chi+“,“); System.out.println; for(i=0;i<5;i+)d0+=di;System.out.println(“d0=“+d0); System.out.println(s20+“;“+s21+“;“+s22); for(i=0;i<3;i+)System.out.println; for(int j=0;j<3;j+)System.out.print(aij)+“ “;输出结果如下: s1=123456 4,5,6.7.8d0=18.202300047683716ab;cd;ef1 2 34 5 67 8 92-9 Exer2_9.java 程序运行时命令行带有参数。运行格式如下:C:Exer2_951100程序Exer2_9.java 内容如下: public class Exer2_8public static void main(String args)int sum=0;ing i=Integer.parseInt(args0); int n=Integer.parseInt(args1); for(;i<=n;i+)sum=+=i; System.out.println(“sum=“+sum);输出结果如下:sum=37752-10 Exer2_10.java 程序public class Exer2_8public static void main(String args)A:for(int i=0;i<5;i+)for(ing j=0;j<8;j+)System.out.print(“*“); System.out.println; continue A;输出结果如下:*编程题2-11 按以下要求写出Java 语言的语句。(1) 定义一个double 型变量d,并赋初值为 2.5。该语句如下:Double d=2.5;(2) 在屏幕上输出显示1中所定义的变量d 的值。该语句如下:System.out.println(“d=“+d);(3) 定义一个字符型一维数组ch 它的大小为 10。该语句如下:char ch=new char10;(4) 定义一个字符串常量s1,其字符串为“abc” String s1=“abc“;(5) 定义一个boolean 型变量b,赋初值为true。boolean b=true(6) 在屏幕上输出显示 26 个大写字母。实现该功能的程序段如下:for(char ch=”a”;ch<=”z”;ch+) System.out.print(ch)System.out.println;(7) 将代数式s=a2+2ab+b2 写成一个赋值表达式语句。该语句如下:s=a*a+2*a*b+b*b(8) a,b 和c 是 3 个 int 型变量,用条件表达式写出 a>b 时,c 值为a,否则 c 值为b。int a,b,c;if(a>b)c=a;elsec=b;(9) 用 for 循环语句实现下述循环:循环变量 m 为 100,每次 m 循环减 10;当 m等于 50 时退出循环,循环体为空语句。for(int m=100;m=50;m-=10)(10) 使用带标号名的 break 语句,在双重 for 循环自勉构造中,一次从内层循环跳出外层循环。该功能程序段如下:F:for(ing i=)for(ing j=)break F;2-12 编程求出一个一维int 型数组的元素最大值、最小值、平均值和全部元素之和。程序内容如下:import java.io.*; public class pro2_1public static void main(String args)int a=23,76,45,21,63,90,46,83;int max,min,sum; max=min=a0; for(int i=1;i<8;i+)if(max<ai)max=ai; for(int i=1;i<8;i+)if(min>ai)min=ai; for(int i=1;i<8;i+)sum+=ai; System.out.println(“max=“+max+“,min=“+min+“,ave=“+sum/8+“,sum=“+su m);运行该程序后,输出结果如下:Max=90,min=21,ave=53,sum=4242-3 编程将一个浮点型数的整数局部和小数分别输出显示。import java.io.*; public class pro2_2public static void main(String args)double d=23.56dl; d1=d;int n=0; while(true)d-;if(d<0)break;n+System.out.println(“integer=“+n+“,decimal=“+(d1-n);运行该程序后,输出结果请读者自己分析2-4 编程生成Fibonacci 数列,该数列定义为:f1=f2=1,fn=fn-1+fn-2(n3)程序内容如下: import java.io.*; public class pro2_3public static void main(String args)int f1,f2; f1=f2=1for(int i=1;i<=5;i+)System.out.print(f1+“ “+f2+“ “); f1+=f2;f2+=f1;System.out.println这里假定生成Fiblnacci 数列的前 20 项,可依据需要生成假设干项。运行该程序后的输出结果如下:112358132134552-5 编程求出自然数 101205 中的全部素数。程序内容如下import java.io.*; public class pro2_4public static void main(String args)int n=0;boolean prime=false; for(int i=101;i<=205;i+=2)prime=true;for(int j=2;j<i;j+) if(j%j=0)if(prime)prime=false; break;System.out.print(i+“ “); n+;if(n%8=0)System.out.println;2-6 使用 switch 语句依据考试成绩等级输出百分制的分数段。规定如下: A.85100B.7084C.6069D.<60假定 85100 分为A,7084 为B,6069 分为C,<60 分为D。程序内容如下:import java.io.*;public class pro2_5public static void main(String args)int a=Interger.valueOf(args0.intValue); int n=a/5;if(a<60)n=11;switch(n)case 20:case 19:case 18:case 17: System.out.println(“A“);break;case 16:case 15:case 14: System.out.println(“B“);break;case 13:case 12: System.out.println(“C“);break;case 11:System.out.println(“D“);输入的分数是通过命令行参数来实现的。假定命令参数为73 时,运行该程序输出结果如下:B2-7 百鸡百钱问题。公鸡每只 3 无,母鸡每只 5 无,小鸡 3 只一元,用 100 元买 100只鸡,公鸡、母鸡、小鸡应各买多少? 程序内容如下:import java.io.*; public class pro2_6public static void main(String args)for(int a=