文档库 最新最全的文档下载
当前位置:文档库 › 浙大JAVA 实验题答案09answer

浙大JAVA 实验题答案09answer

浙大JAVA 实验题答案09answer
浙大JAVA 实验题答案09answer

实验9-1 Method的使用(二)

1.程序填空题,不要改变与输入输出有关的语句。

50010 十进制转换二进制

输入一个正整数 repeat (0

输入1 个正整数n,将其转换为二进制后输出。

要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。

输出语句:System.out.print(t); //t为某位二进制数

例:括号是说明

输入:

3 (repeat=3)

15

100

输出:

1111

1100100

import java.util.Scanner;

public class Test50010{

public static void main(String args[]){

int ri,repeat;

int i,n;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1;ri<=repeat;ri++){

n=in.nextInt();

/*---------*/

dectobin(n);

System.out.println();

}

}

/*---------*/

static void dectobin(int n){

String t=""; //保存二进制数

do {

t=n%2+t; //n除2后的余数拼接到t的前面

n=n/2; //获得除2后的商

}while(n>0);

System.out.print(t); //本方法无返回值,需要在方法体中输出结果 }

}

说明:本题中方法dectobin(n)的输出虽然与要求有所出入,但上传是正确的。

以下用递归算法实现方法的设计:

50001 求1 + 1/2! +....+ 1/n!

输入一个正整数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

import java.util.Scanner;

public class Test50001 {

public static void main(String[] args) {

int ri,repeat;

int i,n;

double s;

Scanner in=new Scanner(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.);

}

}

/*---------------*/

static double fact(int n) {//递归方法

if(n==1)return 1;

else return n*fact(n-1);

}

}

50002 求a+aa+aaa+aa…a

输入一个正整数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)

2 3 (a=2, n=3)

8 5 (a=8, n=5)

输出

246 (2+22+222)

98760 (8+88+888+8888+88888)

import java.util.Scanner;

public class Test50002{

public static void main(String args[]){

int ri, repeat;

int i, n,a;

long sn;

Scanner in=new Scanner(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);

}

}

/*------------*/

static int fn(int a,int n){ //递归方法

if (n==1)return a;

else return fn(a,n-1)*10+a;

}

}

50006 输出 Fibonacci 序列

输入一个正整数repeat (0

输入2 个正整数m和n(1<=m,n<=10000),输出m 和n之间所有的Fibonacci数。

Fibonacci 序列(第1项起):1 1 2 3 5 8 13 21 ......

要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。例如,fib(7)的返回值是13。输出语句:System.out.print(f+" ");

例:括号是说明

输入:

3 (repeat=3)

1 10 (m=1, n=10)

20 100 (m=20, n=100)

1000 6000 (m=1000, n=6000)

输出:

1 1

2

3 5 8 (1到10之间的Fibonacci数)

21 34 55 89 (20到100之间的Fibonacci数)

1597 2584 4181 (1000到6000之间的Fibonacci数)

import java.util.Scanner;

public class Test50006{

public static void main(String args[]){

int ri,repeat;

int i, m, n;

long f;

Scanner in=new Scanner(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();

}

}

/*------------*/

static long fib(int n){ //递归方法

if(n==1||n==2) return 1;

else return fib(n-1)+fib(n-2);

}

}

实验9-2 一维数组的使用

1.求平均值

输入一个正整数repeat (0

输入一个正整数n (1

例:括号是说明

输入

2 (repeat=2)

3 1 2 -6

5 12 2 5 4 0

输出

aver=-1.0

aver=4.6

import java.util.Scanner;

public class Test60001{

public static void main(String []args){

int ri, repeat;

int i, n, sum,a[];

float aver;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1; ri<=repeat; ri++){

n=in.nextInt();

a=new int[n];

for(i=0; i

a[i]=in.nextInt();//这个循环输入数组各元素

/*--------------*/

sum=0;

for(i=0; i

sum+=a[i];

aver=(float)sum/n; //求平均值,注意要先把sum转换成float,再计算

System.out.println("aver="+aver);

}

}

}

2.求最大值及其下标

输入一个正整数repeat (0

输入一个正整数n (1

例:括号是说明

输入

3 (repeat=3)

3 1 6 4

3 10 8 1

5 1 2 5 4 0

输出

max=6,index=1 (最大值6的下标是1)

max=10,index=0 (最大值10的下标是0)

max=5,index=2 (最大值5的下标是2)

import java.util.Scanner;

public class Test60002{

public static void main(String []args){

int ri, repeat;

int i, index, n, a[];

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1; ri<=repeat; ri++){

n=in.nextInt();

a=new int[n] ;

for(i=0; i

a[i]=in.nextInt();

/*--------------*/

index=0; //用index保存最大数的下标,开始假设a[0]是最大数

for(i=1; i

if(a[index]

//a[i]与当前最大数a[index]比较,若a[i]更大,index变为i

System.out.println("max="+a[index]+",index="+index);

}

}

}

3.逆序输出

输入一个正整数repeat (0

输入一个正整数n (1

例:括号是说明

输入

2 (repeat=2)

4 10 8 1 2

5 1 2 5 4 0

输出

2 1 8 10

0 4 5 2 1

import java.util.Scanner;

public class Test60003{

public static void main(String []args){

int ri, repeat;

int i, n, temp,a[];

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1; ri<=repeat; ri++){

n=in.nextInt();

a=new int[n];

for(i=0; i

a[i]=in.nextInt();

/*--------------*/

for(i=0; i

a[i]=a[n-1-i];

a[n-1-i]=temp;

}

for(i=0; i

System.out.print(a[i]+" ");

System.out.println();

}

}

}

4.交换最小值和最大值

输入一个正整数repeat (0

相关文档