1、实验二数组面向对象程序设计入门学号:_姓名:_分数:_ 实验二 数组,面向对象程序设计入门一、实验目的: 1、掌握数组定义域赋值方法。2、掌握条件分支程序、循环程序设计方法。3、了解this的意义与使用方法,重构的概念与设计方法。4、掌握对象的表示方法。5、掌握作用域的概念,学习静态变量与非静态变量的概念与定义、使用方法。6、学习内部类、抽象类、接口等的概念与应用方法。7、学习求素数、冒泡法排序、选择法排序、插入法排序、使用日历类、矩阵乘法等程序设计方法,了解递归程序设计方法。二、实验内容: 1、执行下述程序,说明各程序功能,如果题后有问题,按问题进行设计并总结。将每题运行结果复制粘贴到一个W
2、ord文件中。1)判断从100到500之间的数那些是素数,那些不是素数。如果*是素数,就显示*是素数,否则显示*不是素数。 import java.util.*; public class a1 static long Primenumber(int n) long s1=0,i=2,m=(long)Math.sqrt(n); while (i=m & s1=0) if (n % i) = 0) s1=1; else i=i+1; return s1; public static void main(String args) for (int i=100;iy?x:y; class B ext
3、ends A /建立抽象类的子类 int min(int x, int y) /在A中min被声明为abstract,且因此未有实现语句,在子类中必须实现 return xy?x:y; public class Ex4_11 public static void main(String args) B b1=new B(); /由抽象类的子类派生对象 System.out.println(b1.max(3,19);/调用该子类继承的抽象类的方法 2、参考上面的程序,编写程序使完成下列题目要求的功能并上机实现。将程序代码集中存放到一个WORD文件中,同时将运行结果的显示内容复制粘贴附在程序代码后
4、面。1)求100以内的所有素数。要求只显示所有素数,每行显示10个素数整齐排列。以下是程序核心部分,请补充完整后调试并运行。 for (int n=2;n=50;n+) int i=0; long m=(long)Math.sqrt(n); for (i=2;i(int)m) System.out.print(+n+ ); 2)下面是选择法排序的主要部分,求编写程序随机生成100个整型数据,再用选择法排序。以下是程序核心部分,请补充完整后调试并运行。 for (int i=0;in.length-1;i+) int k=i; for (int j=i+1;jnk) /选择i之后最大的 int
5、temp=nk; nk=nj; nj=temp; 3)将本程序修改为直接选择法排序的程序。写出实现程序。4)下面是插入法排序的主要部分,求编写程序随机生成100个整型数据,再用插入法排序。 int arr =new int100; arr0=n0; for (int j = 1; j 0; i-) if (arri arri-1) break; int a=arri; arri = arri-1; arri-1 = a; 5)Calendar类是有关日历数据的类。参考3-11题(包括题后说明),利用Calendar类设计一个程序,显示程序当前执行时间的时、分、秒值。3、执行以下程序,总结其算法
6、与程序设计方法。将每题运行结果复制粘贴到同一个Word文件中。1)编程求满足下列不等式的最小自然数n的值。import java.util.*;public class Ex2_14 public static void main(String args) double s=0; int n=1;String str; do s=s+1.0/n; n+; while(s=5); str = 和数s = +Double.toString(s) + nn; str = str + 循环次数n = + Integer.toString(n); System.out.println(str); 2)随
7、机生成一组整型数据,再用冒泡法将数组排序显示。public class Ex3_2 public static void main(String args) int n =new int100; for(int i=0;in.length;i+) ni=(int)(Math.random()*90)+10; /产生随机数并强制转为二位整型数 for (int i=0;in.length;i+) /排序 for (int j=0;jnj+1) int k=nj; /次序不对交换位置 nj=nj+1; nj+1=k; for (int i=0;in.length;i+) /显示 if (i+1)%
8、10 != 0) System.out.print(+ni+ ); else System.out.println(ni); 3)随机生成两个矩阵,然后将两个矩阵相乘。矩阵乘法:设A=aijmn , B=bijns ;其中,mn中m表示a行数,n表示列数;ns中n表示b行数,s表示列数;那么,AB的积为:C=cijms其中,Cij=ai1b1j+ai2b2j+ainbnj (i=1,2, ,m ; j=1,2,s)例如, C11=a11b11+a12b21+a1nbn1又例如,C12=a11b12+a12b22+a1nbn2 C21=a21b11+a22b21+a2nbn1如果改为从0开始计数
9、,那么: C00=a00b00+a01b10+a0nbn0 C01=a00b01+a01b11+a0nbn1 C10=a10b00+a11b10+a1nbn0首先看懂上面算法,再思考程序应当如何设计,之后上机操作,最后看懂程序设计方法。public class a1 public static void main(String args) int a=new int34; /动态初始化一个二维数组 int b=new int43; /动态初始化一个二维数组 int c=new int33; /动态初始化一个二维数组 for (int i=0;i3;i+) for (int j=0;j4;j+)
10、 /随机生成矩阵数据 aij=(int)(Math.random()*90)+10; for (int i=0;i4;i+) for (int j=0;j3;j+) bij=(int)(Math.random()*90)+10; System.out.println(第一个矩阵数据:); for (int i=0;i3;i+) for (int j=0;j4;j+) System.out.print(+aij+ ); System.out.println(); System.out.println(第二个矩阵数据:); for (int i=0;i4;i+) for (int j=0;j3;j
11、+) System.out.print(+bij+ ); System.out.println(); for (int i1=0;i13;i1+) /0到m-1; for (int j=0;j3;j+) /0到s-1; ci1j=0; /计算乘积 for (int k=0;k4;k+) ci1j=ci1j+ai1k*bkj; System.out.println(二个矩阵之积:); /显示结果 for (int i1=0;i13;i1+) for (int j=0;j3;j+) System.out.print(+ci1j+ ); System.out.println(); 4)创建杨辉三角形
12、。 分析:杨辉三角形中的各行是二项式(a + b)n展开式中各项的系数。注意到 注意到第一列全1 如果用i表示行,j表示列,那么每行从第2列起有:aij=a(i-1)(j-1)+a(i-1)jimport java.util.Scanner;public class Ex3_ 5 public static void main(String args) int a=new int99; /假设打印9行,各元素自动初始化为0 a00=1; /最上面第一个数 for(int i=1;i9;i+) /从第2行开始递推 ai0=1; /第i行的数据个数等于i for(int j=1;ji;j+) ai
13、j=ai-1j-1+ai-1j; for(int i=0;i9;i+) for(int j=0;ji;j+) System.out.print(+aij+ ); System.out.println(); 5)将上面程序改由递归求解,分析递归的可能性及程序实现方法import java.util.Scanner;public class Ex3_5_1 /非主方法必须声明静态 static long c(int n,int k) if (k=n) return 1; return (c(n-1,k)+c(n-1,k-1); public static void main(String args
14、) / 主方法,可以不加public static for(int i=0;i=9;i+) for(int j=0;j=i;j+) System.out.print(c(i,j)+t); System.out.print(n); 6)将上题中方法c设计为内部类的方法public class Ex3_5_4 /主类 static class c0 /类Ex3_5_4的内部类,加static static long c0(int n,int k) /构造方法,也可改为非构造方法 if (k=n) return 1; return (c0(n-1,k)+c0(n-1,k-1); public sta
15、tic void main(String args) for(int i=0;i=9;i+) for(int j=0;j=i;j+) System.out.print(c0.c0(i,j)+t); System.out.print(n); /上面引用c0(i,j)要求c0(i,j)为静态 /将方法c改为内部类c0的方法c0(静态方法),类c0的前面也要加static。编译时生成 Ex3_5_1$c0.class。7)将内部类改为外部类class c0_1 /外部类,不加static static long c0_1(int n,int k) if (k=n) return 1; return
16、(c0_1(n-1,k)+c0_1(n-1,k-1); public class Ex3_5_5 /主类 public static void main(String args) for(int i=0;i=9;i+) for(int j=0;j=i;j+) System.out.print(c0_1.c0_1(i,j)+t); System.out.print(n); /上面引用c0(i,j)要求c0(i,j)为静态 /将内部类c0改外部类c0_1,方法c0_1设计为静态方法。8)同一目录下建二个类文件,调用静态方法(类方法)递归。源程序文件Ex3_5_2.java:public class
17、 Ex3_5_2 public static void main(String args) for(int i=0;i=9;i+) for(int j=0;j=i;j+) System.out.print(c.c(i,j)+t); System.out.print(n); /上面引用c(i,j)要求c(i,j)为静态 源程序文件c.javaclass cstatic long c(int n,int k) if (k=n) return 1; return (c(n-1,k)+c(n-1,k-1); 对Ex3_5_1.java编译,生成Ex3_5_1.class和c.class二个类文件9)实
18、例化class cClass long c1(int n,int k) if (k=n) return 1; return (c1(n-1,k)+c1(n-1,k-1); public class Ex3_5_3 public static void main(String args) cClass cObject=new cClass(); /实例化:建立类cClass的对象 for(int i=0;i=9;i+) for(int j=0;j=i;j+) System.out.print(cObject.c1(i,j)+t); System.out.print(“n”); /上面引用c(i,
19、j)不再要求c(i,j)为静态 10)改为接口实现interface cface /定义接口long c(int n,int k); /方法不许实现,即不能有方法体,用分号结束public class Ex3_5_6 implements cface/调用接口/必须实现接口中所有方法,且方法的名字、类型、参数个数及类型必须与接口中的完全一致 public long c(int n,int k) /不要忘了public if (k=n) return 1; return (c(n-1,k)+c(n-1,k-1); public static void main(String args) for(
20、int i=0;i=9;i+) for(int j=0;j=i;j+) System.out.print(c.c(i,j)+t);/上面引用接口中c(n,k)要求c(n,k)为public System.out.print(n); 比较以上各题,全面了解面向对象的程序设计主要的语言元素,学习各概念的意义、应用方法,特别注意其区别与设计要点。11)画出实验当天所在月的日历表。import java.util.Calendar;public class Ex4_27 /* * param args */ public static void main(String args) System.out
21、.println( 日 一 二 三 四 五 六); Calendar calendar = Calendar.getInstance(); int m = 9; calendar.set(2012, m-1, 1); /设置日历表起始年月日的值 /在表中该日期算作该月1日在列出日历 int day_of_week = calendar.get(Calendar.DAY_OF_WEEK)-1; System.out.print(day_of_week); /该日期是星期几? String a = new Stringday_of_week + 31; for(int i=0; iday_of_w
22、eek; i+) ai = * ; for(int i=day_of_week, n=1; iday_of_week+31; i+) if (n = 9) ai = String.valueOf(n) + ; else ai = String.valueOf(n); n+; for (int i=0; ia.length; i+) if (i % 7 = 0) System.out.println(); System.out.print( + ai); /返回当前时间小时数:calendar.get(Calendar.HOUR_OF_DAY )/例如显示当前小时数语句:System.out.println(calendar.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1