电子科技大学示范性软件学院
标 准 实 验 报 告
课程名称《JAVA 编程语言》课程实验
电子科技大学教务处制表
电 子 科 技 大 学
实 验 报 告(一)
学生姓名: 学 号: 指导教师:
一、实验室名称:
JAVA 语言面向对象基础实验室 (主楼 A2 409)
二、实验项目名称:
JAVA 语言面向对象基础实验
三、实验原理:
费波那锲数列(Fibonacci Sequence), 又称为黄金分割数列。
在数学上,费波那西数列是以递归的方法来定义:
F0 = 0
F1 = 1
Fn = Fn - 1 + Fn - 2
用文字来说,就是费波那西数列由 0 和 1 开始,之后的费波那西系数就由之前
的两数相加。首几个费波那西系数是(OEIS A000045):
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597,
2584, 4181, 6765, 10946,………………
特别指出:0不是第一项,而是第零项。
矩阵知识:通常的矩阵加法被定义在两个相同大小的矩阵。两个 m×n 矩阵 A 和
B 的和,标记为 A+B,一样是个 m×n 矩阵,其内的各元素为其相对应元素相加
后的值。例如:
也可以做矩阵的减法,只要其大小相同的话。A-B 内的各元素为其相对应元素相
减后的值,且此矩阵会和 A、B 有相同大小。例如:
给定两个相同维度的矩阵,我们有阿达马乘积,或称做分素乘积(entrywise
product)。两个 m×n矩阵 A、B的阿达马乘积标记为
,为一定义为
的 m×n矩阵。例如:
四、实验目的:
通过编程和上机实验了解 JAVA 语言基础知识,循环、分支语句的使用、
数组的使用。
任务:
(1)使用 JAVA 语言编写矩阵操作类库。
(2)求 Fibonacci 数列值
五、实验内容:
(1)编写一个矩阵操作类库,具体实现要求如下:
实现构造函数动态创建不同大小的二维矩阵 m*n;
实现函数完成两个矩阵的相加、求差与矩阵各个元素相乘运算;
实现函数可以得到矩阵中指定元素数值。
(2)Fibonacci 数列是一个自然数数列,第 1 项和第 2 项均为 1,从第 3 项开
始,F(n)= F(n-1)+ F(n-2).定义一个数组,前两个元素初始化为 Fibonacci
数列的第 1,2 项,求出数列的前 20 项。
六、实验器材(设备、元器件):
WINDOWS xp
七、实验步骤:
JDK1.6
ECLIPSE3.2
1.分析题目,查看java书籍相关知识。
2.思考出大概的代码架构和编程思想。
3.在Eclipse上撰写代码,编译运行,查错,撰写实验报告。
代码如下:
代码A:
import java.util.*;
public class Matrix {
private int m,n,array[][];//m,n为矩阵的行数,列数
public Matrix(int m,int n){
this.m=m;
this.n=n;
array=new int [m][n];
}
型
");
private void print(){ //输出结果,该函数只是一个中间函数,故设为私有类
for(int i=0;i
System.out.println("\n矩阵相减结果为:");
MatrixSub.print();
}
public void Muilt(Matrix tmp){ //矩阵的点乘,而非差乘
Matrix MatrixMuilt=new Matrix(m,n);
for(int i=0;i
代码B:
public class Fibonacci {
static long Fib(int n){ //注意本行的static
if(n<=2) return 1;
else return Fib(n-1)+Fib(n-2);
}
public static void main(String []argv){
System.out.println("斐波那契额数列(1~20)");
for(int i=1;i<=20;i++){
System.out.print(Fib(i)+" ");
if(0==i%5) System.out.println(); //换行操作
}
}
}
八、实验数据及结果分析:
九、实验结论:
代码正确无误,运行结果如上。 Scanner s=new Scanner(System.in); int
M=s.nextInt();可以以空格或者 enter 结尾,不是只能以 enter 结尾。递归次数
较少时,效率还是可以。
十、总结及心得体会:
我本想加入输入不匹配异常,但是时富军同学告诉我这类异常系统自动会处
理,必须加入系统异常是因为线程有被中断的危险。递归普遍效率不高,而且递
归都可转化为非递归,故有下面的非递归版的斐波那契额数列。
public class Fibonacci{
public static void main(String[] args){
int x=1,y=1;
for(int i=1;i<=20;i++){
System.out.print(y+" ");
if(i%5==0)System.out.println();
y=x+y;x=y-x;
}
}
}
十一、对本实验过程及方法、手段的改进建议:
无
报告评分:
指导教师签字: