浙大JAVA实验题答案13answerWord格式.docx
《浙大JAVA实验题答案13answerWord格式.docx》由会员分享,可在线阅读,更多相关《浙大JAVA实验题答案13answerWord格式.docx(16页珍藏版)》请在冰豆网上搜索。
i++){
sum+=(s.charAt(i)-'
0'
);
//求各位数字和
}
System.out.println("
number="
+number+"
sum="
+sum);
}
}
50003统计一个整数中数字的个数
读入1个整数,统计并输出该数中2的个数。
要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。
例如,countdigit(10090,0)的返回值是3。
输入:
3(repeat=3)
-21902
2
345543
输出:
count=2(-21902中有2个2)
count=1(有1个2)
count=0(345543中没有2)
publicclassTest50003{
publicstaticvoidmain(Stringargs[]){
intcount;
longn;
n=in.nextInt();
/*---------*/
n=Math.abs(n);
count=countdigit(n,2);
System.out.println("
count="
+count);
/*------------*/
//统计正整数number中数字digit的个数
staticintcountdigit(longnumber,intdigit){
intc=0;
Strings=String.valueOf(number);
//把长整数number转换成字符串
//以下循环实现:
依次取出number的每个数字与指定数字digit比较,若相等则个数加1
s.length();
i++)
if(s.charAt(i)-'
==digit)c++;
returnc;
}
50009将一个整数逆序输出
输入一个整数,将它逆序输出。
要求定义并调用函数reverse(number),它的功能是返回number的逆序数。
例如reverse(12345)的返回值是54321。
123456-100-299
654321
-1
-2
99
publicclassTest50009{
intri,repeat;
longn,res;
ri<
ri++){
res=reverse(n);
System.out.println(res);
/*---------*/
staticlongreverse(longnumber){//返回number的逆序数
longa;
intflag=1;
//保存符号
if(number<
0){
flag=-1;
number=-number;
//负数变成正数
Strings1=String.valueOf(number);
Strings2="
"
;
s1.length();
i++)
s2=s1.charAt(i)+s2;
//字符串逆序
a=Long.parseLong(s2);
//转换成数值
returnflag*a;
//加上符号
}
2.编程题
70001定义一个能计算圆面积和周长的类
输入n,输入n个圆半径,分别计算圆面积和周长。
要求在main()方法所在类的后面定义一个Circle类,该类包含以下成员:
成员变量r:
单精度浮点型
成员方法setR():
设置半径
成员方法area():
计算面积,返回双精度浮点数
成员方法perimeter():
计算周长,返回双精度浮点数
输入输出示例(括号内是说明)
2(n=2,后面要输入2个圆半径)
12.3100.12(第1个半径是12.3,第2个半径是100.12)
475(第1个圆面积)
77(第1个圆周长)
31491(第2个圆面积)
629(第2个圆周长)
importjava.util.*;
publicclassTest70001{
intn,i;
floatr;
for(i=1;
=n;
r=in.nextFloat();
Circlecir=newCircle();
cir.setR(r);
System.out.println(Math.round(cir.area()));
System.out.println(Math.round(cir.perimeter()));
/*--------------------------*/
classCircle{
floatr;
publicvoidsetR(floatx){
r=x;
publicdoublearea(){
returnMath.PI*r*r;
publicdoubleperimeter(){
return2*Math.PI*r;
70002设计一个立方体类
输入一个立方体边长,分别计算表面积和体积。
要求在main()方法所在类的后面定义一个Cube类,该类包含以下成员:
成员变量length:
双精度浮点型,建议用私有变量
成员方法setLength():
设置边长
成员方法getLength():
返回边长
成员方法calcArea():
计算表面积,返回双精度浮点数
成员方法calcV():
计算体积,返回双精度浮点数
1.25(边长等于1.25)
publicclassTest70002{
publicstaticvoidmain(String[]args){
Scannerin=newScanner(System.in);
doublen;
n=in.nextDouble();
//输入边长
/*-------------------*/
Cubecube1=newCube();
cube1.setLength(n);
Length="
+cube1.getLength());
Surfacearea="
+cube1.calcArea());
Volume="
+cube1.calcV());
/*----------------------------*/
classCube{
privatedoublelength;
publicvoidsetLength(doublen){
length=n;
publicdoublegetLength(){
returnlength;
publicdoublecalcArea(){
return6*length*length;
publicdoublecalcV(){
returnlength*length*length;
实验14类的设计和实验题库中未做的题
3.程序填空题,不要改变与输入输出有关的语句。
30009求一元二次方程的根(选做)
输入参数a,b,c,求一元二次方程a*x*x+b*x+c=0的根,结果保留2位小数(如果答案为3.50,则直接显示为3.5)。
按情况分别输出以下内容(文字中的标点为西文标点,无空格。
括号内为说明):
(1)a=b=c=0,meaningless
(2)a=b=0,c!
=0,error
(3)x=值(值为-c/b)
(4)x1=值1(值1为(-b+Math.sqrt(d))/(2*a))
x2=值2(值2为(-b-Math.sqrt(d))/(2*a))
(5)x1=值1+值2i
x2=值1-值2i(值1为-b/(2*a),值2为Math.sqrt(-d)/(2*a))
输入输出示例:
括号内为说明
5(repeat=5)
000(a=0,b=0,c=0)
001(a=0,b=0,c=1)
025(a=0,b=2,c=5)
218935(a=21,b=89,c=35)
223(a=2,b=2,c=3)
a=b=c=0,meaningless
a=b=0,c!
publicclassTest30009{
intrepeat,ri;
inta,b,c,d;
doublex1,x2;
repeat=in.nextInt();
for(ri=1;
ri<
=repeat;
a=in.nextInt();
b=in.nextInt();
c=in.nextInt();
/*---------*/
if(a==0&
&
b==0&
c==0)
System.out.println("
a=b=c=0,meaningless"
elseif(a==0&
c!
=0)
System.out.println("
=0,error"
b!
=0){
x1=-(double)c/b;
x="
+Math.round(x1*100)/100.0);
}
else{
d=b*b-4*a*c;
if(d>
=0){
x1=(-b+Math.sqrt(d))/(2*a);
x2=(-b-Math.sqrt(d))/(2*a);
x1="
x2="
+Math.round(x2*100)/100.0);
else{
x1=-(double)b/(2*a);
x2=Math.sqrt(-d)/(2*a);
+Math.round(x1*100)/100.0+"
+"
+Math.round(x2*100)/100.0+"
i"
-"
说明:
为防止出错,在编程前应考虑周全
✧当a=b=c=0时,方程有无数解;
✧当a=b=0,c!
=0时,方程无解;
✧当a=0,b!
=0时,方程解为x=-c/b;
✧当a!
=0时,求:
d=b*b-4*a*c
若d>
=0,有两个不同实根:
x=(-b±
Math.sqrt(d))/(2*a)
若d<
0,有两个不同复根:
x=-b/(2*a)±
t(-d)/(2*a)i
或:
if(a==0){
if(b==0){
if(c==0)
System.out.println("
else
else{
}
40033 简单计算器
程序模拟简单运算器的工作:
输入一个算式,遇等号"
="
说明输入结束,输出结果。
假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。
2(repeat=2)
15+2/3=(数字与运算符之间有一空格)
1+2*10-10/2=(数字与运算符之间有一空格)
5
10
publicclassT40033{
publicstaticvoidmain(Stringargs[]){
intop1,op2,res;
charoperator;
op1=in.nextInt();
operator=(in.next()).charAt(0);
//先读入一个单词(字符串类型),再从中取出第0个字符,作为运算符
res=op1;
while(operator!
='
){
op2=in.nextInt();
switch(operator){
case'
+'
:
res+=op2;
break;
-'
res-=op2;
*'
res*=op2;
/'
res/=op2;
operator=(in.next()).charAt(0);
System.out.println(res);
以下题目练习类的设计:
70011设计一个Circle的子类——圆柱体Cylinder
输入一个圆柱体底圆的圆心坐标、圆半径、高度,分别计算并输出圆柱体的体积和表面积。
要求在Circle类的后面定义一个它的子类Cylinder类(圆柱体),该类包含以下成员:
成员变量h:
高度,双精度浮点型
构造方法
计算圆柱体表面积,返回双精度浮点数
计算圆柱体体积,返回双精度浮点数
成员方法getH():
获得高度,返回双精度浮点数
2345(圆心坐标x=2,y=3;
半径r=4;
高度h=5)
V=251.33(圆柱体体积)
S=226.19(圆柱体表面积)
publicclassTest70011{
doublex,y,r,h;
x=in.nextDouble();
y=in.nextDouble();
r=in.nextDouble();
h=in.nextDouble();
Cylindercy=newCylinder(x,y,r,h);
r="
+cy.getR());
h="
+cy.getH());
V="
+Math.round(cy.calcV()*100)/100.);
S="
+Math.round(cy.calcArea()*100)/100.);
privatedoublex,y,r;
publicCircle(doublex,doubley,doubler){
this.x=x;
this.y=y;
this.r=r;
publicdoubleperimeter(){//计算圆周长
return2*Math.PI*r;
publicdoublearea(){//计算圆面积
returnMath.PI*r*r;
publicdoublegetR(){
returnr;
/*-----------------------------------*/
classCylinderextendsCircle{
publicdoubleh;
publicCylinder(doublex,doubley,doubler,doubleh){
super(x,y,r);
this.h=h;
publicdoublecalcArea(){
returnperimeter()*h+2*area();
publicdoublecalcV(){
returnarea()*h;
publicdoublegetH(){
returnh;
70012编写重载方法,求二个数或三个数的最大值
输入一个正整数n(n>
0),做n次下列运算:
输入a、b、c三个整数,分别算出前2个数的最大值,和3个数的最大值。
要求在main()方法所在类的下方,定义一个Compare类,该类中定义两个类成员方法max(a,b)和max(a,b,c),用来分别获得两个数的最大值、三个数的最大值。
输入输出示例(括号内是说明):
2(n=2)
43466(第一批3个数)
3234(第二批3个数)
max(a,b)=34(第一批中前两个数的最大值)
max(a,b,c)=66(第一批中的最大值)
max(a