浙大JAVA实验题答案answer.docx
《浙大JAVA实验题答案answer.docx》由会员分享,可在线阅读,更多相关《浙大JAVA实验题答案answer.docx(17页珍藏版)》请在冰豆网上搜索。
浙大JAVA实验题答案answer
CKBOODwasrevisedintheearlymorningofDecember17,2020.
浙大JAVA实验题答案answer
实验8Method的使用
1.程序填空题,不要改变与输入输出有关的语句。
50001
输入一个正整数repeat(0输入1个正整数n,计算s的前n项的和(保留4位小数)。
s=1+1/2!
+....+1/n!
要求定义并调用函数fact(n)计算n的阶乘。
例:
括号内是说明
输入:
2(repeat=2)
2(n=2)
10(n=10)
输出:
1.5
1.7183
importjava.util.Scanner;
publicclassTest50001{
publicstaticvoidmain(String[]args){
intri,repeat;
inti,n;
doubles;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
n=in.nextInt();
/*-----------*/
s=0;
for(i=1;i<=n;i++)
s+=1.0/fact(i);
System.out.println((long)(s*10000+0.5)/10000.);
}
}
/*---------------*/
staticdoublefact(intn){
inti;
doublef=1;
for(i=1;i<=n;i++)
f*=i;
returnf;
}
}
50002
输入一个正整数repeat(0输入2个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。
要求定义并调用函数fn(a,n),它的功能是返回aa…a(n个a)。
例如,fn(3,2)的返回值是33。
例:
括号内是说明
输入
2(repeat=2)
23(a=2,n=3)
85(a=8,n=5)
输出
246(2+22+222)
98760(8+88+888+8888+88888)
importjava.util.Scanner;
publicclassTest50002{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
inti,n,a;
longsn;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
a=in.nextInt();
n=in.nextInt();
/*------------*/
sn=0;
for(i=1;i<=n;i++)
sn+=fn(a,i);
System.out.println(sn);
}
}
/*------------*/
staticintfn(inta,intn){
ints=0;
for(inti=1;i<=n;i++)
s=s*10+a;
returns;
}
}
50003
输入一个正整数repeat(0读入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)
importjava.util.Scanner;
publicclassTest50003{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
intcount;
longn;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
n=in.nextInt();
/*---------*/
n=Math.abs(n);
count=countdigit(n,2);
System.out.println("count="+count);
}
}
/*------------*/
staticintcountdigit(longnumber,intdigit){
//统计整数number中数字digit的个数
inta,c=0;
while(number>0){
a=(int)(number%10);
if(a==digit)c++;
number=number/10;
}
returnc;
}
}
50004
输入一个正整数repeat(0输入一个正整数n,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。
要求定义并调用函数prime(m)判断m是否为素数。
例:
括号内是说明
输入
4(repeat=4)
12917
输出
NO(1不是素数)
YES(2是素数)
NO(9不是素数)
YES(17是素数)
importjava.util.Scanner;
publicclassTest50004{
publicstaticvoidmain(Stringargs[]){
intri,repeat,n;
booleanflag;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
n=in.nextInt();
/*---------*/
flag=prime(n);
if(flag)System.out.println("YES");
elseSystem.out.println("NO");
}
}
/*------------*/
staticbooleanprime(intm){
booleanflag=true;
if(m==1)flag=false;
for(inti=2;i<=m-1;i++)
if(m%i==0)
{flag=false;break;}
returnflag;
}
}
50005
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。
要求定义并调用函数prime(m)判断m是否为素数。
例:
括号内是说明
输入:
3(repeat=3)
110(m=1,n=10)
2035(m=20,n=35)
1416(m=14,n=16)
输出:
count=4,sum=17(1到10之间有4个素数:
2,3,5,7)
count=3,sum=83(20到35之间有3个素数:
23,29,31)
count=0,sum=0(14到16之间没有素数)
importjava.util.Scanner;
publicclassTest50005{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
intcount,i,m,n,sum;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
m=in.nextInt();
n=in.nextInt();
/*---------*/
count=0;
sum=0;
for(i=m;i<=n;i++)
if(prime(i)){count++;sum+=i;}
System.out.println("count="+count+",sum="+sum);
}
}
/*------------*/
staticbooleanprime(intm){
booleanflag=true;
if(m==1)flag=false;
for(inti=2;i<=m-1;i++)
if(m%i==0)
{flag=false;break;}
returnflag;
}
}
50006
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=10000),输出m和n之间所有的Fibonacci数。
Fibonacci序列(第1项起):
1123581321......
要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。
例如,fib(7)的返回值是13。
输出语句:
System.out.print(f+"");
例:
括号内是说明
输入:
3(repeat=3)
110(m=1,n=10)
20100(m=20,n=100)
10006000(m=1000,n=6000)
输出:
112358(1到10之间的Fibonacci数)
21345589(20到100之间的Fibonacci数)
159725844181(1000到6000之间的Fibonacci数)
importjava.util.Scanner;
publicclassTest50006{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
inti,m,n;
longf;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
m=in.nextInt();
n=in.nextInt();
/*---------*/
i=1;
f=1;
while(f<=n){
if(f>=m)System.out.print(f+"");
i++;
f=fib(i);
}
System.out.println();
}
}
/*------------*/
staticlongfib(intn){//返回第n项Fibonacci数
inti;
longa=1,b=1,f=1;
for(i=3;i<=n;i++){//从第3项开始计算
f=a+b;
a=b;
b=f;
}
returnf;
}
}
50007
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=10000),输出m到n之间的所有完数(完数就是因子和与它本身相等的数)。
要求定义并调用函数factorsum(number),它的功能是返回number的因子和。
例如,factorsum(12)的返回值是16(1+2+3+4+6)。
输出语句:
System.out.print(i+"");
例:
括号内是说明
输入:
2(repeat=2)
20500(m=100,n=400)
1100(m=1,n=100)
输出:
28496
1628
importjava.util.Scanner;
publicclassTest50007{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
inti,m,n;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
m=in.nextInt();
n=in.nextInt();
/*---------*/
for(i=m;i<=n;i++)
if(i==factorsum(i))
System.out.print(i+"");
System.out.println();
}
}
/*---------*/
staticintfactorsum(intnumber){//返回number的因子和
intsum=0;
if(number==1)sum=1;
for(inti=1;i<=number-1;i++)
if(number%i==0)sum+=i;
returnsum;
}
}
50008
输入一个正整数repeat(0输入2个正整数m和n(1<=m,n<=1000),输出m到n之间的所有满足各位数字的立方和等于它本身的数。
要求定义并调用函数is(number)判断number的各位数字之立方和是否等于它本身。
输出语句:
System.out.print(i+"");
例:
括号内是说明
输入:
2(repeat=2)
100400(m=100,n=400)
1100(m=1,n=100)
输出:
153370371(1*1*1+5*5*5+3*3*3=153;3*3*3+7*7*7=370;3*3*3+7*7*7+1*1*1=371)
1
importjava.util.Scanner;
publicclassTest50008{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
inti,m,n;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
m=in.nextInt();
n=in.nextInt();
/*---------*/
for(i=m;i<=n;i++)
if(is(i))System.out.print(i+"");
System.out.println();
}
}
/*---------*/
//判断number的各位数字之立方和是否等于它本身
staticbooleanis(intnumber){
intsum=0,n,digit;
n=number;
while(n>0){
digit=n%10;
n=n/10;
sum+=digit*digit*digit;
}
if(number==sum)returntrue;
elsereturnfalse;
}
}
50009
输入一个正整数repeat(0输入一个整数,将它逆序输出。
要求定义并调用函数reverse(number),它的功能是返回number的逆序数。
例如reverse(12345)的返回值是54321。
例:
括号内是说明
输入
4(repeat=4)
123456-100-299
输出
654321
-1
-2
99
importjava.util.Scanner;
publicclassTest50009{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
longn,res;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
n=in.nextInt();
/*---------*/
res=reverse(n);
System.out.println(res);
}
}
/*---------*/
staticlongreverse(longnumber){//返回number的逆序数
intflag=1;
longa=0,digit;
if(number<0){
flag=-1;
number=-number;
}
while(number>0){
digit=number%10;//分离出个位数字
a=a*10+digit;//形成当前的逆序数
number=number/10;
}
returnflag*a;
}
}
50011
输入一个正整数repeat(0输入三个整数a、b和c,输出其中较大的数。
要求定义和调用函数max(a,b,c)找出a、b中较大的数,函数形参a、b和c的类型是int。
输入输出示例:
括号内是说明
输入
3(repeat=3)
输入:
589(a=5,b=8)
-1-10-5(a=-1,b=-10)
111(a=1,b=1)
输出:
max(5,8,9)=9
max(-1,-10,-5)=-1
max(1,1,1)=1
importjava.util.Scanner;
publicclassTest50011{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
inta,b,c,maximun;
Scannerin=newScanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
a=in.nextInt();
b=in.nextInt();
c=in.nextInt();
/*-----------------*/
maximun=maximun(a,b,c);
System.out.println("max("+a+","+b+","+c+")="+maximun);
}
}
/*-------------------*/
staticintmaximun(inta,intb,intc){
intmax=a;
if(max
if(maxreturnmax;
}
}