浙大 Java语言程序设计编程答.docx
浙大 Java语言程序设计编程答实验9-1 Method的使用(二) 1. 将一个整数逆序输出 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入一个整数,将它逆序输出。 要求定义并调用函数reverse(number),它的功能是返回number的逆序数。例如reverse(12345)的返回值是54321。 例:括号内是说明 输入 4 (repeat=4) 123456 -100 -2 99 输出 654321 -1 -2 99 import java.util.Scanner; public class Test50009 public static void main(String args) int ri,repeat; long n, res; Scanner in=new Scanner(System.in); repeat=in.nextInt; for(ri=1;ri<=repeat;ri+) n=in.nextInt; /*-*/ res=reverse(n); System.out.println(res); /*-*/ static long reverse(long number) int flag=1; long a=0,digit; if(number<0) flag=-1; number=-number; while(number>0) digit=number%10; /分离出个位数字 a=a*10+digit; /形成当前的逆序数 number=number/10; return flag*a; 2. 十进制转换二进制 输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算: 输入1 个正整数n,将其转换为二进制后输出。 要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。 输出语句:System.out.print(t); /t为某位二进制数 例:括号内是说明 输入: 3 (repeat=3) 15 100 0 输出: 1111 1100100 0 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)的输出虽然与要求有所出入,但上传是正确的。 3. 用函数求三个数的最大值 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入三个整数a、b和c,输出其中较大的数。要求定义和调用函数max(a, b, c)找出a、b、c中较大的数,函数形参a、b和c的类型是int。 输入输出示例:括号内是说明 输入 3 (repeat=3) 输入: 5 8 9 (a=5, b=8) -1 -10 -5 (a=-1, b=-10) 1 1 1 (a=1, b=1) 输出: max(5,8,9)=9 max(-1,-10,-5)=-1 max(1,1,1)=1 import java.util.Scanner; public class Test50011 public static void main(String args) int ri, repeat; int a,b,c,maximun; Scanner in=new Scanner(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); /*-*/ static int maximun(int a,int b,int c) int max; max=a; if(max<b)max=b; if(max<c)max=c; return max; 实验9-2 一维数组的使用 4. 求平均值 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入一个正整数n (1<n10),再输入n个整数,输出平均值。 例:括号内是说明 输入 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 intn; for(i=0; i<n; i+) ai=in.nextInt; /这个循环输入数组各元素 /*-*/ sum=0; for(i=0; i<n; i+) /这个循环实现累加 sum+=ai; aver=(float)sum/n; /求平均值,注意要先把sum转换成float,再计算 System.out.println("aver="+aver); 5. 求最大值及其下标 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入一个正整数n (1<n10),再输入n个整数,输出最大值极其下标。 例:括号内是说明 输入 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 intn ; for(i=0; i<n; i+) ai=in.nextInt; /*-*/ index=0; /用index保存最大数的下标,开始假设a0是最大数 for(i=1; i<n; i+) if(aindex<ai) index=i; /ai与当前最大数aindex比较,若ai更大,index变为i System.out.println("max="+aindex+",index="+index); 6. 逆序输出 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入一个正整数n (1<n10),再输入n个整数,按逆序输出这些数。 例:括号内是说明 输入 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 intn; for(i=0; i<n; i+) ai=in.nextInt; /*-*/ for(i=0; i<n/2; i+) /ai与an-1-i交换,注意交换次数 temp=ai; ai=an-1-i; an-1-i=temp; for(i=0; i<n; i+) System.out.print(ai+" "); System.out.println; 7. 交换最小值和最大值 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入一个正整数n,再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。 例:括号内是说明 输入 3 (repeat=3) 5 4 3 5 1 2 4 1 5 6 7 5 5 4 3 2 1 输出 1 3 2 4 5 1 5 6 7 1 4 3 2 5 import java.util.Scanner; public class Test60004 public static void main(String args) int ri, repeat; int i, index, n, t,a; Scanner in=new Scanner(System.in); repeat=in.nextInt; for(ri=1; ri<=repeat; ri+) n=in.nextInt; a=new intn; for(i=0; i<n; i+) ai=in.nextInt; /*-*/ index=0; /找最小数 for(i=0; i<n; i+) if(aindex>ai) index=i; t=aindex; aindex=a0;a0=t; /交换 index=0; /找最大数 for(i=0; i<n; i+) if(aindex<ai) index=i; t=aindex; aindex=an-1;an-1=t; /交换 for(i=0; i<n; i+) /输出 System.out.print(ai+" "); System.out.println; 说明:不能把两个循环合成一个,否则当数组元素为“5 4 3 2 1”时出错。