【编程分析】本例主要考查利用for循环求一个数列的和的编程方法。数列的项数和每一项的值都已知,因此直接利用for循环和数学类中的相应方法即可实现。 【参考程序】
public class X3_4_3 {
public static void main(String[] args) { int i, sum=0;
for(i=1; i<21; i++) sum += Math.pow(2,i) - 1; System.out.println(\ } }
【运行结果】
sum = 2097130 4.已知S?1?11111??????,利用while循环编程求解n=100时的S234n?1n值。
【编程分析】本例主要考查利用while循环实现对一个数列进行加、减运算的编程方法。由于项数已经确定,因此数列的首项和末项已知,但是由于加减交替出现,可以利用一个变量sign来确定符号,设sign初始值为1,循环一次让它变一次符号,从而实现符号的交替变化。 【参考程序】
public class X3_4_4 {
public static void main(String[] args) { int i=1, n = 100;
double sign = 1, sum = 0; while(i<=n){ double k = sign/i; sum += k; i++; sign = -sign; }
System.out.println(\ } }
【运行结果】
S = 0.688172179310195
5.利用do…while循环,计算1!+2!+3! +??+100!的和。
【编程分析】本例主要考查利用do…while循环实现数列相加的程序设计方法。由于每一项都是一个阶乘,所以在循环过程中先求阶乘,然后再相加。 【参考程序】
public class X3_4_5 {
public static void main(String[] args) { int i=1;
long fact = 1, sum = 0;
13
do{ fact *= i; sum += fact; i++;
} while(i<=100) ;
System.out.println(\ } }
【运行结果】
sum = 1005876315485501977
9.水仙花数是指其个位、十位和百位三个数的立方和等于这个三位数本身,求出所有的水仙花数。
【编程分析】本例主要考查如何利用循环结构将一个多位整数拆分成多个个位数的程序设计方法。在求“水仙花数”过程中,需要将这个百位的数拆分成3个个位数。 【参考程序】
public class X3_4_9 {
public static void main(String[] args) { for(int i=100;i<=999;i++){ int k = i; int gw = k % 10; k /= 10; int sw = k % 10; k /= 10; int bw = k; int sum = (int)(Math.pow(gw,3)+Math.pow(sw,3)+Math.pow(bw,3)); if(i == sum) System.out.print(i+ \ } } }
【运行结果】
153 370 371 407
第4章
一、选择题
1.下列哪种类成员修饰符修饰的变量只能在本类中被访问?( D ) (A)protected (B)public (C)default (D)private 【解析】只有私有访问权限修饰符才能限制变量只能在本类中被访问。 2.在Java语言中,哪一个包中的类是自动导入的?( A ) A)java.lang B)java.awt C)java.io D)java.applet 【解析】只有java.lang包中的类能够被自动导入。 3.给出下面的程序代码:
public class X4_1_3 {
14
private float a; public static void m ( ){ }
}
如何使成员变量a被方法m( )访问( C ) (A)将private float a改为protected float a(B)将private float a改为public float a
(C)将private float a改为static float a (D)将private float a改为float a 【解析】static类型的方法只能访问static类型的数据成员。 4.有一个类B,下面为其构造方法的声明,正确的是( B )。 (A)void B(int x) {} (B)B(int x) {} (C)b(int x) {} (D)void b(int x) {} 【解析】构造方法没有类型,且方法名与类名相同。 5.下面关于类的说法,不正确的是( C )。 (A)类是同种对象的集合和抽象 (B)类属于Java语言中的复合数据类(C)类就是对象
(D)对象是Java语言中的基本结构单
型
位
【解析】类是对象的抽象,对象是类的实例,因此类和对象是有区别的。
6.下面关于方法的说法,不正确的是( C )。 (A)Java中的构造方法名必须和类名相同
(B)方法体是对方法的实现,包括变量声明和合法语句
(C)如果一个类定义了构造方法,也可以用该类的默认构造方法 (D)类的私有方法不能被其他类直接访问
【解析】类中一旦用户定义了构造方法,该类默认的构造方法就不存在了,除非用户再自定义该类的默认构造方法。
7.关于内部类,下列说法不正确的是( A )。 (A)内部类不能有自己的成员方法和成员变量 (B)内部类可用private或protected修饰符修饰
(C)内部类可以作为其他类的成员,而且可访问它所在的类的成员 (D)除static内部类外,不能在类内声明static成员
【解析】内部类也可以有自己的成员方法和变量。
8.定义外部类时不能用到的关键字是( C )。 (A)final (B)public (C)protected (D)abstract 【解析】定义外部类不能使用protected修饰符。
9.为AB类定义一个无返回值的方法f,使得使用类名就可以访问该方法,该方法头的形式为( D ) (A)abstract void f() (B)public void f() (C)final void f() (D)static void f()
【解析】只有static类型的方法才可以直接使用类名来引用。
10.定义一个公有double型常量PI,哪一条语句最好?( B )
(A)public final double PI; (B)public final static double PI=3.14; (C)public final static double PI; (D)public static double PI=3.14;
【解析】用public final static来定义常量,既可以节省存储空间,又可以保证数值不会被改变。
15
二、填空题
1. 对象 是对事物的抽象,而 类 是对对象的抽象和归纳。
2.从用户的角度看,Java源程序中的类分为两种: 系统定义的类 和 用户自己定义的类 。
3.一个类主要包含两个要素: 数据成员 和 成员方法 。 4.创建包时需要使用关键字 package 。
5.类中的 构造 方法是一个特殊的方法,该方法的方法名和类名相同。
6.如果用户在一个自定义类中未定义该类的构造方法,系统将为这个类定义一个默认构造方法。这个方法没有 形式参数 ,也没有任何 具体语句 ,不能完成任何操作。
7.静态数据成员被保存在类的内存区的 公共存储 单元中,而不是保存在某个对象的内存区中。因此,一个类的任何对象访问它时,存取到的都是 相同 (相同/不同)的数值。
8.静态数据成员既可以通过 对象名 来访问,也可以通过 类名 直接访问它。 9.定义常量时要用关键字 final ,同时需要说明常量的 数据类型 并指出常量的 具体值 。
10.方法体内定义变量时,变量前不能加 修饰符 ;局部变量在使用前必须 明确赋值 ,否则编译时会出错;而类变量在使用前可以不用赋值,它们都有一个 默认 的值。
11.static方法中只能引用 static 类型的数据成员和 static 类型的成员方法;而非static类型的方法中既可以引用 static 类型的数据成员和成员方法,也可以引用非static 类型的数据成员和成员方法。
12.引用static类型的方法时,可以使用 类名 做前缀,也可以使用 对象名 做前缀。
13.当程序中需要引用java.awt.event包中的类时,导入该包中类的语句为 import java.awt.event.*。
14.定义类时需要 class 关键字,继承类时需要 extends 关键字,实现接口时需要关键字 implements 。 三、编程题
1、一个学生类(Student),包含:
属性:学号s_No,姓名s_Name,性别s_Sex,年龄s_Age。
方法:构造方法,显示学号方法showNo(),显示姓名方法showName(),显示性别方法showSex(),显示年龄方法showAge(),修改年龄方法modifyAge()。
主类(X4_3_2),包含:
主方法main(),在其中创建两个学生对象s1和s2并初始化,两个对象的属性自行确定,然后分别显示这两个学生的学号、姓名、性别、年龄,然后修改s1的年龄并显示修改后的结果。
【编程分析】按照要求首先编写Student类,其中的属性和方法根据实际情况选择相应的类型和权限修饰符,要通过方法来修改年龄,因此s_Age属性应该为private类型,否则可以直接在主类中进行修改,就没有必要使用方法了。 【参考答案】
public class X4_3_2 {
public static void main(String[] args) {
16