JAVA 皮常德27章答案演示教学.docx
《JAVA 皮常德27章答案演示教学.docx》由会员分享,可在线阅读,更多相关《JAVA 皮常德27章答案演示教学.docx(27页珍藏版)》请在冰豆网上搜索。
JAVA皮常德27章答案演示教学
JAVA皮常德2-7章答案
二
1.角谷猜想:
任何一个正整数n,如果它是偶数则除以二,如果是奇数则乘以3再加上1,这样得到一个新的整数,如此继续进行上述处理,则最后得到的数一定是1,编写应用程序和小程序分别验证:
3~10000之间任何正整数都满足上述规则。
2.编写一个程序模拟同时掷2个骰子。
程序要用Math.random( )模拟产生第一个骰子, 然后再产生第二个骰子,将2个结果相加。
和等于7的可能性最大,等于2和12的可能性最小。
下图表示了出现36种情况组合。
程序模拟掷3600次骰子,判断求和结果是否合理,共有6种情况的和是7, 故在3600次掷骰子的结果中应当有1/6的可能性是7。
1
2
3
4
5
6
1
2
3
4
5
6
7
2
3
4
5
6
7
8
3
4
5
6
7
8
9
4
5
6
7
8
9
10
5
6
7
8
9
10
11
6
7
8
9
10
11
12
一、实验步骤:
1.
应用程序:
packagecp2;
publicclassa4{
publicstaticvoidmain(String[]args){
booleana=true;
intj;
for(inti=3;i<=10000;i++){
for(j=i;j>1;){
if(j%2==0){
j=j/2;
}
else{
j=j*3+1;
}
}
if(j!
=1){
a=false;break;
}
}
System.out.println(a);
}
}
运行结果:
true
小程序:
packagecp2;
importjava.awt.*;
importjava.applet.*;
publicclassa5extendsApplet{
Labellab1;
TextFieldinput1;
intnum1=1;
publicvoidinit(){
lab1=newLabel("任意输入3~10000的一个整数");
input1=newTextField(10);
add(lab1);
add(input1);
}
publicbooleanaction(Evente,Objecto){
num1=Integer.parseInt(input1.getText());
showStatus("");
input1.setText("");
repaint();
showStatus("这个数是"+num1);
returntrue;
}
publicvoidpaint(Graphicsg){
intxpos=50,ypos=50,i=0;
intxpos1=xpos;
while(num1!
=1)
{
if(num1%2==0){
num1=num1/2;
g.drawString(Integer.toString(num1),xpos,ypos);
}
else{
num1=num1*3+1;
g.drawString(Integer.toString(num1),xpos,ypos);
}
xpos=xpos+50;
i++;
if(i%5==0)
{
ypos=ypos+10;
xpos=xpos1;
}
}
}
}
运行结果:
2.
程序:
packagecp2;
importjava.awt.*;
importjava.applet.*;
publicclassa6extendsApplet{
Labellab;
TextFieldinput;
inta,b,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12;
doublei2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12;
publicvoidinit(){
lab=newLabel("输入次数");
input=newTextField(10);
add(lab);
add(input);
}
publicbooleanaction(Evente,Objecto){
inttime=Integer.parseInt(input.getText());
showStatus("");
input.setText("");
showStatus("模拟次数"+time);
t2=t3=t4=t5=t6=t7=t8=t9=t10=t11=t12=0;
for(inti=1;i<=time;i++){
a=(int)(Math.random()*6+1);
b=(int)(Math.random()*6+1);
switch(a+b){
case12:
t12++;break;
case11:
t11++;break;
case10:
t10++;break;
case9:
t9++;break;
case8:
t8++;break;
case7:
t7++;break;
case6:
t6++;break;
case5:
t5++;break;
case4:
t4++;break;
case3:
t3++;break;
case2:
t2++;break;
}
i12=(double)t12/i;
i11=(double)t11/i;
i10=(double)t10/i;
i9=(double)t9/i;
i8=(double)t8/i;
i7=(double)t7/i;
i6=(double)t6/i;
i5=(double)t5/i;
i4=(double)t4/i;
i3=(double)t3/i;
i2=(double)t2/i;
repaint();
}
//repaint();
returntrue;
}
publicvoidpaint(Graphicsg){
g.drawString("各种和的概率:
",25,40);
g.drawString("12:
"+i12,25,55);
g.drawString("11:
"+i11,25,70);
g.drawString("10:
"+i10,25,85);
g.drawString("9:
"+i9,25,100);
g.drawString("8:
"+i8,25,115);
g.drawString("7:
"+i7,25,130);
g.drawString("6:
"+i6,25,145);
g.drawString("5:
"+i5,25,160);
g.drawString("4:
"+i4,25,175);
g.drawString("3:
"+i3,25,190);
g.drawString("2:
"+i2,25,205);
}
}
运行结果:
三
一、实验内容:
1.采用循环语句打印如下图形:
**
****
******
********
2.编写一个applet,采用公式:
ex=1+x1/1!
+x2/2!
+……..+xn/n!
.
三、实验步骤:
1.程序:
packagecp3;
importjava.awt.*;
importjava.applet.*;
publicclassa1extendsApplet{
Labellab;
TextFieldinput;
inta,b[]=newint[20],i,j;
publicvoidinit(){
lab=newLabel("输入数字");
input=newTextField(10);
add(lab);
add(input);
}
publicbooleanaction(Evente,Objecto){
a=Integer.parseInt(input.getText());
input.setText("");
repaint();
returntrue;
}
publicvoidpaint(Graphicsg){
for(inti=0;a!
=0;i++){
b[i]=a%10;
a/=10;
}
for(j=0;b[j]!
=0;j++);
for(intt=--j;t>=0;t--){
g.drawString(Integer.toString(b[t]),j*20-t*20,55);
}
for(i=0;ib[i]=0;
}
}
}
运行结果:
**
****
******
********
**********
2:
程序:
packagecp3;
importjava.awt.*;
importjava.applet.*;
publicclassa6extendsApplet{
Labellab1,lab2;
TextFieldinput1,input2;
inta,b,i;
doublesum=0;
publicclassaa{
intmult(intn){
ints=1;
for(intj=1;j<=n;j++)
s*=j;
returns;
}
}
publicvoidinit(){
lab1=newLabel("输入x大小");
input1=newTextField(10);
lab2=newLabel("输入n值");
input2=newTextField(10);
add(lab1);
add(input1);
add(lab2);
add(input2);
}
publicbooleanaction(Evente,Objecto){
a=Integer.parseInt(input1.getText());
b=Integer.parseInt(input2.getText());
input1.setText("");
input2.setText("");
showStatus("");
sum=0;
aac=newaa();
for(i=0;i<=b;i++){
sum+=(double)(Math.pow(a,i))/(double)c.mult(i);
}
showStatus("结果为"+sum);
returntrue;
}
}
输入x=1,n=30时的运行结果:
四
二、实验内容:
1.定义一个类,它包含了一个int类型的变量x、若干个构造函数(根据你的需要)和一个输出方法show( )。
编程:
从键盘输入一个数,将这个数传递给这个类的x,采用方法show( )逆序输出这个数。
2.定义一个整形集合类integerSet。
这种类型的对象可以存储10个20至80之间的整数,即它的内部有一个整形数组存储数据。
编程:
(1) 判断两个integerSet类对象S1和S2是否相等。
提示:
集合相等的前提是所有元素相等。
(2) 输出两个集合对象的交集。
(3) 输出两个集合对象的并集。
(4) 将一个整形数据插入到一个集合对象中。
(5) 从一个集合中删除某一个元素。
三、实验步骤:
1.
程序
packagecp4;
classaa{
intx;
aa(intn){
x=n;
}
voidshow(){
intb=0;
for(;x!
=0;){
b=b*10+x%10;
x/=10;
}
System.out.println(b);
}
}
publicclassa1{
publicstaticvoidmain(String[]args){
intvalue=CP4.readInt();
aaa1=newaa(value);
a1.show();
}
}
运行结果:
12345
54321
成功构建(总时间:
3秒)
2.
packagecp4;
classinteger{
inta[]=newint[10];
publicvoidinput(){
inti;
for(i=0;i<=9;i++){
a[i]=CP4.readInt();
if(a[i]==0)
break;
}
}
publicvoidoutput(){
inti;
for(i=0;i<=9;i++){
System.out.print(a[i]);
System.out.print('');}
System.out.println();
}
}
classuninteger{
inta[]=newint[20];
publicvoidoutput(){
inti;
for(i=0;i<=19;i++){
System.out.print(a[i]);
System.out.print('');}
System.out.println();
}
}
classmeans{
inti,j;
publicbooleaneq(integera1,integera2){
for(i=0;i<=9;i++){
if(a1.a[i]==0)
break;
}
for(j=0;j<=9;j++){
if(a2.a[j]==0)
break;
}
if(i!
=j){
returnfalse;
}
else{
for(i=0;i<=9;i++){
if(a1.a[i]!
=a2.a[i])
returnfalse;
}
}
returntrue;
}
publicvoidmix(integera1,integera2,integermix){
intt=0;
for(i=0;i<=9;i++)
for(j=0;j<=9;j++){
if(a1.a[i]==a2.a[j])
mix.a[t++]=a1.a[i];
elseif(a1.a[i]break;
}
}
publicvoidunion(integera1,integera2,unintegerunion){
intt,s;
i=0;
for(s=0,t=0;s<=9&&t<=9&&a1.a[s]!
=0&&a2.a[t]!
=0;){
if(a1.a[s]union.a[i++]=a1.a[s];
s++;
}
elseif(a1.a[s]>a2.a[t]){
union.a[i++]=a2.a[t];
t++;
}
else{
union.a[i++]=a1.a[s];
s++;t++;
}
}
if((a1.a[s]==0||s>9)&&(t<=9&&a2.a[t]!
=0)){
for(;t<=9;)
union.a[i++]=a2.a[t++];
}
elseif((a2.a[t]==0||t>9)&&(s<=9&&a1.a[s]!
=0)){
for(;s<=9;)
union.a[i++]=a1.a[s++];
}
}
publicvoidinsert(integera1,inta){
for(i=0;i<=9;i++){
if(a1.a[i]==0)
break;}
if(i==10)
System.out.println("此表已满不能插入");
else{
if(a<=a1.a[0]){
for(;i>=1;i--){
a1.a[i]=a1.a[i-1];
}
a1.a[0]=a;
}
elseif(a>=a1.a[i-1])
a1.a[i]=a;
else{
for(j=0;;j++)
if(a>=a1.a[j]&&a<=a1.a[j+1])
break;
for(;i>j+1;i--){
a1.a[i]=a1.a[i-1];
}
a1.a[j+1]=a;
}
System.out.print("插入后的表一变为:
");a1.output();
}
}
publicvoiddelete(integera2,inta){
for(i=0;i<=9;i++){
if(a2.a[i]==0)
break;}
if(a2.a[a]==0)
System.out.println("所删位置无元素");
else{
for(j=a;j
a2.a[j]=a2.a[j+1];
}
System.out.print("删除后的表二变为:
");a2.output();
}
}
}
publicclassa5{
publicstaticvoidmain(String[]args){
booleanf;
inta,b;
integermix=newinteger();
unintegerunion=newuninteger();
integera1=newinteger();
integera2=newinteger();
System.out.println("请以从小到大顺序输入两组(每组个数小于11个)20~80之间的整数,分别以0,0结束");
a1.input();
a2.input();
System.out.print("表一为:
");a1.output();
System.out.print("表二为:
");a2.output();
meansm1=newmeans();
f=m1.eq(a1,a2);
if(f)
System.out.println("两个集合相等");
else
System.out.println("两个集合不相等");
m1.mix(a1,a2,mix);
m1.union(a1,a2,union);
System.out.print("两个集合的交为:
");mix.output();
System.out.print("两个集合的并为:
");union.output();
System.out.print("请输入要插入表一的整数:
");a=CP4.readInt();
m1.insert(a1,a);
System.out.print("请输入要删除表二元素的下标:
");b=CP4.readInt();
m1.delete(a2,b);
}
}
**********************
运行结果:
请以从小到大顺序输入两组(每组个数小于11个)20~80之间的整数,分别以0,0结束
21
32
44
56
78
80
0
31
46
56
80
0
表一为:
2132445678800000
表二为:
31465680000000
两个集合不相等
两个集合的交为:
568000000000
两个集合的并为:
2131324446567880000000000000
请输入要插入表一的整数:
46
插入后的表一变为:
21324446567880000
请输入要删除表二元素的下标:
6
所删位置无元素
成功构建(总时间:
1分钟38秒)
五
三、实验内容
1.写一个类,它具有一个protected数据成员。
在同一个文件内再写第二个类,在这个类内编写一个方法, 以操作第一类内的protected数据;
2.采用public、private、protected以及友员等成员创建一个类,然后定义这个类的一个对象。
观察在访问所有类成员时会出现哪种类型的编译错误。
三、实验步骤
1.程序
/*a4.java*/
packagecp5;
publicclassa4{
publicstaticvoidmain(String[]args){
a4_2b=newa4_2();
b.datause();
}
}
/*a4_1.java*/
packagecp5;
publicclassa4_1{
inta1=1;
publicinta2=1;
privateinta3=1;
protectedinta4=1;
}
/*a4_2.java*/
packagecp5;
publicclassa4_2{
a4_1a=newa4_1();
publicvoiddatause()
{
System.out.println("data="+a.a1);
System.out.println("publicdata="+a.a2);
//System.out.println("privitedata="+a.a3);//拒绝访问
System.out.println("protecteddata="+a.a4);
}
}
运行结果;
data=1
publicdata=1
protecteddata=1
成功构建(总时间:
0秒)
2.程序:
packagecp5;
classTest{
publicStringpub;
privateStringpri;
protectedStringprot;
Stringfri;
Test(){
this.pub="public";
this.pri="private";
this.prot="protected";
this.fri="friendly";
}
}
publicclassa5{
publicstaticvoidmain(String[]