当前位置:文档之家› 浙大JAVA-实验题答案09answer

浙大JAVA-实验题答案09answer

实验9-1 Method的使用(二)1.程序填空题,不要改变与输入输出有关的语句。

50010 十进制转换二进制输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:输入1 个正整数n,将其转换为二进制后输出。

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

例如,调用dectobin(10),输出1010。

输出语句:System.out.print(t); //t为某位二进制数例:括号是说明输入:3 (repeat=3)15100输出:11111100100import 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<repeat<10),做repeat次下列运算:输入1 个正整数n,计算 s 的前n项的和(保留 4 位小数)。

s = 1 + 1/2! +....+ 1/n!要求定义并调用函数fact(n)计算n的阶乘。

例:括号是说明输入:2 (repeat=2)2 (n=2)10 (n=10)输出:1.51.7183import 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<repeat<10),做repeat次下列运算:输入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<repeat<10),做repeat次下列运算:输入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 123 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<repeat<10),做repeat次下列运算:输入一个正整数n (1<n≤10),再输入n个整数,输出平均值。

例:括号是说明输入2 (repeat=2)3 1 2 -65 12 2 5 4 0输出aver=-1.0aver=4.6import 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<n; i++)a[i]=in.nextInt();//这个循环输入数组各元素/*--------------*/sum=0;for(i=0; i<n; i++) //这个循环实现累加sum+=a[i];aver=(float)sum/n; //求平均值,注意要先把sum转换成float,再计算System.out.println("aver="+aver);}}}2.求最大值及其下标输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n (1<n≤10),再输入n个整数,输出最大值极其下标(设最大值惟一,下标从0开始)。

例:括号是说明输入3 (repeat=3)3 1 6 43 10 8 15 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<n; i++)a[i]=in.nextInt();/*--------------*/index=0; //用index保存最大数的下标,开始假设a[0]是最大数for(i=1; i<n; i++)if(a[index]<a[i]) index=i;//a[i]与当前最大数a[index]比较,若a[i]更大,index变为iSystem.out.println("max="+a[index]+",index="+index);}}}3.逆序输出输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n (1<n≤10),再输入n个整数,按逆序输出这些数。

例:括号是说明输入2 (repeat=2)4 10 8 1 25 1 2 5 4 0输出2 1 8 100 4 5 2 1import 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<n; i++)a[i]=in.nextInt();/*--------------*/for(i=0; i<n/2; i++){ //a[i]与a[n-1-i]交换,注意交换次数 temp=a[i];a[i]=a[n-1-i];a[n-1-i]=temp;}for(i=0; i<n; i++)//输出一个数组System.out.print(a[i]+" ");System.out.println();}}}4.交换最小值和最大值输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n,再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。

相关主题