实验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]是最大数