《Java语言程序设计(基础篇)》(原书第11版)第一章复习题和编程练习题
复习题
1.2.1 什么是硬件和软件?
硬件包括计算机中可以看得见的物理部分,软件是看不见的指令,这些指令可以控制硬件并且使得硬件完成特定的任务。
1.2.2 列举计算机的5个主要硬件组件。
cpu,内存,硬盘,显示器,键盘,鼠标等等。
1.2.3 缩写“CPU”代表什么含义?
中央处理器,计算机的大脑。
1.2.4 衡量CPU速度的单位是什么?
赫兹。
1.2.5 什么是比特?什么是字节?
比特(bit)是二进制数,0和1。
字节(byte)是计算机中最小的存储单元,每个字节由8个比特构成。
1.2.6 内存是用来做什么的?RAM代表什么?为什么内存称为RAM?
内存由一个有序的字节序列组成,用于存储程序及程序需要的数据。
RAM是随机访问存储器的缩写(Random-Access Memory)。
因为内存可以按任意顺序存取字节,所以被称为RAM。
1.2.7 用于衡量内存大小的单位是什么?
千字节。
1.2.8 用户衡量磁盘大小的单位是什么?
兆字节。
1.9 内存和永久存储设备的主要不同是什么?
断电后是否能继续保存数据。内存不能,永久存储设备能。
1.3.1 CPU能理解什么语言。
机器语言。
1.3.2 什么是汇编语言?什么是汇编器?
汇编语言能用短的描述性单词来表示每一条机器语言指令,是一种低级语言。
汇编器可以将汇编语言转换成机器语言。
1.3.3 什么是高级编程语言?什么是源程序?
很像英语,易于学习和使用的编程语言称为高级编程语言。
使用高级编程语言编写的程序称为源程序。
1.3.4 什么是解释器?什么是编译器?
解释器会逐条读取源代码中的语言,并立刻翻译成机器代码或者虚拟机器代码,然后立刻运行。
编译器是先将整个源代码翻译为机器代码文件,然后再执行该机器代码文件。
1.3.5 解释语言和编译语言之间的区别是什么?
解释语言是在运行的时候将程序翻译成机器语言,效率比较低,但是夸平台性好,比如java和python。
编译语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言就不再进行翻译了,效率高,比如C和C++。
1.4.1 什么是操作系统?列出一些流行的操作系统。
操作系统(Operating System, OS)是运行在计算机上最重要的程序,它可以管理和控制计算机的活动。
比较流行的有windows,linux,macos
1.4.2 操作系统的主要任务是什么?
控制和监控系统的活动
分配和调配系统资源
调度操作
1.4.3 什么是多道程序设计、多线程以及多处理。
多道程序设计允许多个程序通过共享CPU同时运行
多线程运行单个程序同时执行多个任务
多处理(多进程)也成为并行处理(parallel processing),是指使用两个或多个处理器共同并行执行子任务,然后将子任务的结果合并以得到整个任务的结果。
1.5.1 Java是由谁发明的?哪个公司现在拥有Java?
Java是由James Grosling在Sun公司领导的小组开发的。
Oracle拥有Java。
1.5.2 什么是Java applet?
能在Web浏览器中运行的Java程序称为Java applet。
1.5.3 安卓使用的是什么编程语言?
java,kotlin
1.6.1 什么是Java语言规范?
Java语言规范(Java language specification)是对语言的技术定义,包括Java程序设计语言的语法和语义。
1.6.2 JDK代表什么?JRE代表什么?
Java开发工具包(Java Development Toolkit),是由一套独立程序构成的集合,每个程序都是从命令行调用的,用于开发和测试java程序。
JRE(java Runtime Environment),运行Java的程序。
1.6.3 IDE代表什么?
集成开发环境(Integrated Development Environment)。
1.6.4诸如NetBeans和Eclipse的工具是和Java是不同的语言吗?或者它们是Java的方言或者扩充?
不是
这些是方便进行java开发的开发工具,IDE。
1.7.1 什么是关键字?列举一些java关键字。
java本身有特殊含义的单词,不能再程序中用于其他目的。
class, static, void
1.7.2 java是大小写敏感的吗?java关键字是大写还是小写?
大小写敏感
小写
1.7.3 什么是注释? 编译器会忽略注释吗?如何标识一行注释以及一段注释?
主要用于说明程序是干什么的
会忽略
// 以及 /* */
1.7.4 在控制台显示一个字符串的语句是什么?
System.out.println()
1.7.5 给出以下代码的输出
public class Test {
public static void main(String[] args) {
System.out.println("3.5 * 4 / 2 - 2.5 is ");
System.out.println(3.5 * 4 / 2 - 2.5);
}
}
输出:
3.5 * 4 / 2 - 2.5 is
4.5
1.8.1 什么是java源程序的文件扩展名,什么是java字节码文件后缀?
.java
.class
1.8.2 java编译器的输入和输出是什么?
源代码
字节码
1.8.3 编译java程序的命令是什么?
javac ****.java
1.8.4 运行java程序的命令是什么?
java ****
1.8.5 什么是JVM?
java虚拟机,可以解释java字节码的程序
1.8.6 java可以运行在任何机器上吗?在一台计算机上运行java需要什么?
可以,只要装有java虚拟机
需要java虚拟机
1.8.7 如果运行程序的时候出现NoClassDefFoundError错误,是什么原因导致了这个错误?
执行不存在的类方法
1.8.8 如果运行程序的时候出现NoSuchMethodError错误,是什么原因导致了这个错误?
没有main方法或者敲错了main方法
1.9.1 使用行尾括号风格,将下面的程序根据程序设计风格和文档指南进行重新格式化。
public class Test
{
// Main method
public static void main(String[] args) {
/** Display output */
System.out.println(“Welcome to Java”);
}
}
/** Display output */
public class Test {
// Main method
public static void main(String[] args) {
System.out.println(“Welcome to Java”);
}
}
1.10.1 什么是语法错误(编译错误)、运行时错误以及逻辑错误?
在编译过程中出现的错误称为语法错误(syntax error)或编译错误(compile error)。
引起程序非正常中断的错误叫运行时错误(runtime error)。
当程序没有按预期的方式执行时就会产生逻辑错误(logic error)。
1.10.2 给出语法错误、运行时错误以及逻辑错误的示例。
少关键字
1除以0的场景
小数点计算中给的都是整形数字导致计算结果不正确
1.10.3 如果忘记为字符串加引号了,将产生哪类错误?
语法错误
1.10.4 如果程序需要读取整数,而用户输入了字符串,运行该程序的时候将产生什么错误?这是哪类错误?
数据类型错误。
运行时错误。
1.10.5 假设编写一个计算矩形周长的程序,但是错误地写成了计算矩形面积的程序。这属于哪类错误?
逻辑错误。
1.10.6 指出和修改下面代码中的错误:
public class Welcome {
public void Main(String[] args) {
System.out.println("Welcome to Java!);
}
}
错误有缺少关键字static,main首字母不应该大写,缺少双引号。
修改后:
public class Welcome {
public static void main(String[] args) {
System.out.println(“Welcome to Java!”);
}
}
编程练习题
分为容易(没有星号)、适中(一颗星)、难(两颗星)以及具有挑战性(三颗星)
1.1 (显示三条消息)编写程序,显示Welcome to Java、Welcome to Computer Science 和 Programming is fun。
package com.levelksk.chapter_1.training;
public class Training1_1 {
public static void main(String[] args) {
System.out.println(“Welcome to Java”);
System.out.println(“Welcome to Computer Science”);
System.out.println(“Programming is fun”);
}
}
1.2 (显示五条信息)编写程序,显示Welcome to Java 五次。
package com.levelksk.chapter_1.training;
public class Training1_2 {
public static void main(String[] args) {
System.out.println(“Welcome to Java”);
System.out.println(“Welcome to Java”);
System.out.println(“Welcome to Java”);
System.out.println(“Welcome to Java”);
System.out.println(“Welcome to Java”);
}
}
*1.3 (显示图案)编写一个程序,显示下面的图案:
J A V V A
J A A V V A A
J J AAAAA V V AAAAA
J J A A V A A
package com.levelksk.chapter_1.training;
public class Training1_3 {
public static void main(String[] args) {
System.out.println(" J A V V A");
System.out.println(" J A A V V A A");
System.out.println(“J J AAAAA V V AAAAA”);
System.out.println(" J J A A V A A");
}
}
1.4 (打印表格)编写程序,显示以下表格:
a a^2 a^3
1 1 1
2 4 4
3 9 27
4 16 64
package com.levelksk.chapter_1.training;
public class Training1_4 {
public static void main(String[] args) {
System.out.println(“a a^2 a^3”);
System.out.println(1 + " " + (1 * 1) + " " + (1 * 1 * 1));
System.out.println(2 + " " + (2 * 2) + " " + (2 * 2 * 2));
System.out.println(3 + " " + (3 * 3) + " " + (3 * 3 * 3));
System.out.println(4 + " " + (4 * 4) + " " + (4 * 4 * 4));
}
}
1.5 (计算表达式)编写程序,显示以下公式的结果。
(9.5 x 4.5 - 2.5 x 3)÷(45.5 - 3.5)
package com.levelksk.chapter_1.training;
public class Training1_5 {
public static void main(String[] args) {
System.out.println((9.5 * 4.5 - 2.5 * 3) / (45.5 - 3.5));
}
}
0.8392857142857143
1.6 (数列求和)编写程序,显示1+2+3+4+5+6+7+8+9的结果。
package com.levelksk.chapter_1.training;
public class Training1_6 {
public static void main(String[] args) {
System.out.println(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9);
}
}
45
1.7 (近似求p)可以使用以下公式计算p:π=4(1-1/3+1/5-1/7+1/9-1/11+…),编写程序,显示4(1-1/3+1/5-1/7+1/9-1/11)和4x(1-1/3+1/5-1/7+1/9-1/11+1/13)的结果。在程序中用1.0代替1。
package com.levelksk.chapter_1.training;
public class Training1_7 {
public static void main(String[] args) {
System.out.println(4 * (1.0 - 1.0 / 3 + 1.0 / 5 - 1.0 / 7 + 1.0 / 9 - 1.0 / 11));
System.out.println(4 * (1.0 - 1.0 / 3 + 1.0 / 5 - 1.0 / 7 + 1.0 / 9 - 1.0 / 11 + 1.0 / 13));
}
}
2.9760461760461765
3.2837384837384844
1.8 (圆的面积和周长)编写程序,使用以下公式计算并显示半径为5.5的圆的面积和周长。
周长 = 2 x 半径 x π
面积 = 半径 x 半径 x π
package com.levelksk.chapter_1.training;
public class Training1_8 {
public static void main(String[] args) {
System.out.println("周长 = " + (2 * 5.5 * 3.14));
System.out.println("面积 = " + (5.5 * 5.5 * 3.14));
}
}
周长 = 34.54
面积 = 94.985
1.9 (矩形的面积和周长)编写程序,使用以下公式计算并显示宽度为4.5,高度为7.9的矩形的面积和周长。
面积 = 宽 x 高
package com.levelksk.chapter_1.training;
public class Training1_9 {
public static void main(String[] args) {
System.out.println("面积 = " + (4.5 * 7.9));
System.out.println("周长 = " + (4.5 * 2 + 7.9 * 2));
}
}
面积 = 35.550000000000004
周长 = 24.8
1.10 (以英里计的平均速度)假设一个跑步者45分钟30秒内跑了14公里。便携仪个程序显示以每小时多少英里为单位的平均速度值。(注意,1英里等于1.6公里)。
package com.levelksk.chapter_1.training;
public class Training1_10 {
public static void main(String[] args) {
System.out.println(“平均速度值为” + (14.0 / 1.6) / ((45.0 * 60 + 30) / (60 * 60)) + “英里每小时”);
}
}
平均速度值为11.538461538461538英里每小时
*1.11 (人口估算)美国人口调查局基于以下假设进行人口估算:
每7秒有一个人诞生
每13秒有一个人死亡
每45秒有一个移民迁入
编写一个程序,显示未来5年的每年的人口数。假设当前的人口是312032486,每年有365天。提示:java中,两个证书相除,结果还是整数,小树部分被去掉。例如,5/4等于1(而不是1.25),10/4等于2(而不是2.5)。如果想得到有小树部分的精确结果,进行处罚运算的两个值之一必须是一个具有小数点的数值。例如,5.0/4等于1.25,10/4.0等于2.5。
package com.levelksk.chapter_1.training;
public class Training1_11 {
public static void main(String[] args) {
System.out.println(312032486 + (5 * 365 * 24 * 60 * 60 / 7) - (5 * 365 * 24 * 60 * 60 / 13) + (5 * 365 * 24 * 60 * 60 / 45));
}
}
325932970
1.12 (以公里计的平均速度)假设一个跑步者1小时40分钟35秒内跑了24英里。编写一个程序显示以每小时多少公里为单位的平均速度值。(注意,1英里等于1.6公里)。
package com.levelksk.chapter_1.training;
public class Training1_12 {
public static void main(String[] args) {
System.out.println(“平均速度值为” + (24 * 1.6) * (60 * 60) / (60 * 60 + 40 * 60 + 35) + “公里每小时”);
}
}
平均速度值为22.906379453189732公里每小时
*1.13 (代数:求解2 x 2线性方程)可以使用Cramer规则解下面的2 x 2线性方程组:
ax + by =e
cx + dy = f
x = (ed-bf)/(ad-bc)
y = (af-ef)/(ad-bc)
编写程序,求解以下方程组并显示x和y的值。
3.4x + 50.2y = 44.5
21.x + 0.55y = 5.9
package com.levelksk.chapter_1.training;
public class Training1_13 {
public static void main(String[] args) {
double a = 3.4;
double b = 50.2;
double e = 44.5;
double c = 2.1;
double d = 0.55;
double f = 5.9;
System.out.println("x = " + (e * d - b * f) / (a * d - b * c));
System.out.println("y = " + (a * f - e * c) / (a * d - b * c));
}
}
x = 2.623901496861419
y = 0.7087397392563978