实验二数组面向对象程序设计入门Word文件下载.docx
《实验二数组面向对象程序设计入门Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验二数组面向对象程序设计入门Word文件下载.docx(26页珍藏版)》请在冰点文库上搜索。
i++)
if(Primenumber(i)==0)System.out.println("
"
+i+"
是一个素数"
);
elseSystem.out.println("
不是素数"
}
//掌握静态方法的基本结构及是如何调用的。
将判断素数的程序改写为方法,再在主程序中调用完成本题
2)对如下程序进行实验,试去掉this.运行,再改用cClass1.,看报错的情况,总结this.的使用方法,什么时候不加前缀?
什么时候加类名.或对象名.?
什么时候必须用this.?
classcClass1{
publicstaticintx;
//类变量
voidcClass1(intn){//构造方法
this.x=0;
//this.x表示类变量x,如果成员方法非static,就要用this.
staticlongcClass1(intn,intk){//重构构造方法
x=n;
returnx*3;
publicstaticvoidsetPoint(intx,inty){
x=x;
//setPoint被申明为static,就不能用this.
//左、右面x都是形式参数,若局部变量与类的成员变量同名,则类的成员变量被隐藏。
System.out.println("
x1="
+x+"
cClass1.x="
+cClass1.x);
setPoint(100,200);
x2="
+cClass1.x+"
x="
+x);
cClass1.cClass1(50,30);
//调用重构构造方法
x3="
cClass1.cClass1(50,30)="
+cClass1.cClass1(50,30));
//前面如果有cClass1.x=x,显示100,否则显示0
}}
3)关于作用域的实验。
将第一句的protected改为private或private,总结各自影响范围。
classPoint0{
protectedintx;
privateinty;
publicvoidsetPoint(intx,inty){
this.x=x;
//x为非静态变量,不能用Point.x
this.y=y;
Point0Point1=newPoint0();
//新建对象,尚未调用setPoint
System.out.println(“Point1.x=“+Point1.x);
publicclassEx4_6_1{
Point0point2=newPoint0();
//新生成对象,该对象下面调用setPoint
point2.x=200;
//在Point中如果x被定义为private,将报错
//Point.y=100;
//错误
point2.setPoint(100,100);
//如果point2改为point将报错
System.out.println(“Point2.x=“+point2.x);
}}//结果显示Point1.x=0Point2.x=100
4)执行下列程序,总结抽象类的定义方法,使用要点。
abstractclassA{//抽象类,不能实例化
abstractintmin(intx,inty);
//抽象类可以有抽象方法,不能定义方法体
intmax(intx,inty){
returnx>
y?
x:
y;
classBextendsA{//建立抽象类的子类
intmin(intx,inty){
//在A中min被声明为abstract,且因此未有实现语句,在子类中必须实现
publicclassEx4_11{
publicstaticvoidmain(String[]args){
Bb1=newB();
//由抽象类的子类派生对象
System.out.println(b1.max(3,19));
//调用该子类继承的抽象类的方法
2、参考上面的程序,编写程序使完成下列题目要求的功能并上机实现。
将程序代码集中存放到一个WORD文件中,同时将运行结果的显示内容复制粘贴附在程序代码后面。
1)求100以内的所有素数。
要求只显示所有素数,每行显示10个素数整齐排列。
以下是程序核心部分,请补充完整后调试并运行。
for(intn=2;
n<
=50;
n++){
inti=0;
longm=(long)Math.sqrt(n);
for(i=2;
=(int)m;
i++)if((n%i)==0)break;
if(i>
(int)m)System.out.print("
+n+"
"
2)下面是选择法排序的主要部分,求编写程序随机生成100个整型数据,再用选择法排序。
for(inti=0;
n.length-1;
{
intk=i;
for(intj=i+1;
j<
n.length;
j++)
{
if(n[j]>
n[k])//选择i之后最大的
inttemp=n[k];
n[k]=n[j];
n[j]=temp;
}
3)将本程序修改为直接选择法排序的程序。
写出实现程序。
4)下面是插入法排序的主要部分,求编写程序随机生成100个整型数据,再用插入法排序。
int[]arr=newint[100];
arr[0]=n[0];
for(intj=1;
j<
n.length;
j++){
arr[j]=n[j];
for(inti=j;
i>
0;
i--)
if(arr[i]>
arr[i-1])break;
inta=arr[i];
arr[i]=arr[i-1];
arr[i-1]=a;
5)Calendar类是有关日历数据的类。
参考3-11题(包括题后说明),利用Calendar类设计一个程序,显示程序当前执行时间的时、分、秒值。
3、执行以下程序,总结其算法与程序设计方法。
将每题运行结果复制粘贴到同一个Word文件中。
1)编程求满足下列不等式的最小自然数n的值。
importjava.util.*;
publicclassEx2_14{
publicstaticvoidmain(String[]args){
doubles=0;
intn=1;
Stringstr;
do{
s=s+1.0/n;
n++;
}while(s<
=5);
str="
和数s="
+Double.toString(s)+"
\n\n"
;
str=str+"
循环次数n="
+Integer.toString(n);
System.out.println(str);
2)随机生成一组整型数据,再用冒泡法将数组排序显示。
publicclassEx3_2{
publicstaticvoidmain(Stringargs[])
{
int[]n=newint[100];
for(inti=0;
i++)
n[i]=(int)(Math.random()*90)+10;
//产生随机数并强制转为二位整型数
for(inti=0;
i++){//排序
for(intj=0;
(n.length-i-1);
j++)
if(n[j]>
n[j+1]){
intk=n[j];
//次序不对交换位置
n[j]=n[j+1];
n[j+1]=k;
i++){//显示
if((i+1)%10!
=0)
System.out.print("
+n[i]+"
elseSystem.out.println(n[i]);
3)随机生成两个矩阵,然后将两个矩阵相乘。
矩阵乘法:
设A=[aij]m×
n,B=[bij]n×
s;
其中,m×
n中m表示a行数,n表示列数;
n×
s中n表示b行数,s表示列数;
那么,A×
B的积为:
C=[cij]m×
s
其中,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开始计数,那么:
C00=a00b00+a01b10+……+a0nbn0
C01=a00b01+a01b11+……+a0nbn1
C10=a10b00+a11b10+……+a1nbn0
首先看懂上面算法,再思考程序应当如何设计,之后上机操作,最后看懂程序设计方法。
publicclassa1
{
inta[][]=newint[3][4];
//动态初始化一个二维数组
intb[][]=newint[4][3];
intc[][]=newint[3][3];
3;
4;
j++){//随机生成矩阵数据
a[i][j]=(int)(Math.random()*90)+10;
j++){
b[i][j]=(int)(Math.random()*90)+10;
第一个矩阵数据:
i++){
+a[i][j]+"
第二个矩阵数据:
+b[i][j]+"
for(inti1=0;
i1<
i1++)//0到m-1;
j++){//0到s-1;
c[i1][j]=0;
//计算乘积
for(intk=0;
k<
k++)c[i1][j]=c[i1][j]+a[i1][k]*b[k][j];
二个矩阵之积:
//显示结果
i1++){
j++)System.out.print("
+c[i1][j]+"
4)创建杨辉三角形。
分析:
杨辉三角形中的各行是二项式(a+b)n展开式中各项的系数。
注意到
注意到第一列全1
如果用i表示行,j表示列,那么每行从第2列起有:
aij=a(i-1)(j-1)+a(i-1)j
importjava.util.Scanner;
publicclassEx3_5{
int[][]a=newint[9][9];
//假设打印9行,各元素自动初始化为0
a[0][0]=1;
//最上面第一个数
for(inti=1;
9;
i++){//从第2行开始递推
a[i][0]=1;
//第i行的数据个数等于i
for(intj=1;
i;
j++)a[i][j]=a[i-1][j-1]+a[i-1][j];
i++){
for(intj=0;
5)将上面程序改由递归求解,分析递归的可能性及程序实现方法
publicclassEx3_5_1{//非主方法必须声明静态
staticlongc(intn,intk){
if(k<
=0||k>
=n)return1;
return(c(n-1,k)+c(n-1,k-1));
publicstaticvoidmain(String[]args){//主方法,可以不加publicstatic
=9;
=i;
j++)System.out.print(c(i,j)+"
\t"
\n"
}}}
6)将上题中方法c设计为内部类的方法
publicclassEx3_5_4{//主类
staticclassc0{//类Ex3_5_4的内部类,加static
staticlongc0(intn,intk){//构造方法,也可改为非构造方法
return(c0(n-1,k)+c0(n-1,k-1));
j++)System.out.print(c0.c0(i,j)+"
//上面引用c0(i,j)要求c0(i,j)为静态
//将方法c改为内部类c0的方法c0(静态方法),类c0的前面也要加static。
编译时生成Ex3_5_1$c0.class。
7)将内部类改为外部类
classc0_1{//外部类,不加static
staticlongc0_1(intn,intk){
return(c0_1(n-1,k)+c0_1(n-1,k-1));
publicclassEx3_5_5{//主类
j++)System.out.print(c0_1.c0_1(i,j)+"
//将内部类c0改外部类c0_1,方法c0_1设计为静态方法。
8)同一目录下建二个类文件,调用静态方法(类方法)递归。
源程序文件Ex3_5_2.java:
publicclassEx3_5_2{
j++)System.out.print(c.c(i,j)+"
//上面引用c(i,j)要求c(i,j)为静态
}}}
源程序文件c.java
classc{
staticlongc(intn,intk){
}}
对Ex3_5_1.java编译,生成Ex3_5_1.class和c.class二个类文件
9)实例化
classcClass{
longc1(intn,intk){
return(c1(n-1,k)+c1(n-1,k-1));
publicclassEx3_5_3{
cClasscObject=newcClass();
//实例化:
建立类cClass的对象
j++)System.out.print(cObject.c1(i,j)+"
System.out.print(“\n”);
//上面引用c(i,j)不再要求c(i,j)为静态
10)改为接口实现
interfacecface{//定义接口
longc(intn,intk);
//方法不许实现,即不能有方法体,用分号结束
publicclassEx3_5_6implementscface{//调用接口
//必须实现接口中所有方法,且方法的名字、类型、参数个数及类型必须与接口中的完全一致
publiclongc(intn,intk){//不要忘了public
}
System.out.print(c.c(i,j)+"
//上面引用接口中c(n,k)要求c(n,k)为public
比较以上各题,全面了解面向对象的程序设计主要的语言元素,学习各概念的意义、应用方法,特别注意其区别与设计要点。
11)画出实验当天所在月的日历表。
importjava.util.Calendar;
publicclassEx4_27{
/**
*@paramargs
*/
System.out.println("
日一二三四五六"
Calendarcalendar=Calendar.getInstance();
intm=9;
calendar.set(2012,m-1,1);
//设置日历表起始年月日的值
//在表中该日期算作该月1日在列出日历
intday_of_week=calendar.get(Calendar.DAY_OF_WEEK)-1;
System.out.print(day_of_week);
//该日期是星期几?
Stringa[]=newString[day_of_week+31];
for(inti=0;
i<
day_of_week;
i++){
a[i]="
*"
for(inti=day_of_week,n=1;
day_of_week+31;
i++){
if(n<
=9)
a[i]=String.valueOf(n)+"
else
a[i]=String.valueOf(n);
a.length;
if(i%7==0)
System.out.println("
System.out.print("
+a[i]);
//返回当前时间小时数:
calendar.get(Calendar.HOUR_OF_DAY)
//例如显示当前小时数语句:
System.out.println(calendar.get(