J a v a编程练习题
一、简单问题:
1. 编程求下列式子的值,
y=1-1/2+1/3-1/4+…+1/99-1/100
并将结果输出,格式为: 1-1/2+1/3-1/4+…+1/99-1/100 = 表达式的值
public class Prog1 {
public static void main(String[] args) {
double sum=0;
for(double i=1;i<=100;i++)
{
sum=sum+ (Math.pow(-1, i+1))*(1/i);
}
System.out.print("1-1/2+1/3-1/4+…+1/99-1/100="+sum);
}
}
运行结果:
2. 请编程实现:由键盘输入的任意一组字符,统计其中大写字母的个数m和小写字母的个数n,并输出m、n中的较大者。
import java.util.Scanner;
public class Prog1 {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in );
String Str =cin.nextLine();
int m=0,n=0;
for(int i=0;i { char c=Str.charAt(i); if(c>='a'&&c<='z') n++; else if(c>='A'&&c<='Z') m++; } if(n>m) System.out.print(n); else System.out.print(m); } } 运行结果: 3. 编程,求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如:153 = 13 + 53+ 33。 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { int b=0,c=0,d=0; for(int i=100;i<1000;i++) { d=i%10; c=(i/10)%10; b=(i/100)%10; if(i==b*b*b+c*c*c+d*d*d) { System.out.println(i); } } } } 4. 请编制程序判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes;否则输出no。 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); System.out.println("请输入一个正整数:"); int a=cin.nextInt(); if(a%7==0&&a%5==0) { System.out.println("YES"); } else System.out.println("NO"); } } 5. 请编程实现:对于给定的一个百分制成绩,输出相应的五分制成绩。设:90分以上为‘A’,80—89分为‘B’,70—79分为‘C’,60—69分为‘D’,60分以下为‘E’。 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); System.out.println("请输入成绩:"); int a=cin.nextInt(); if(a>=90) {System.out.println("A");} else if(a>=80) {System.out.println("B");} else if(a>=70) {System.out.println("C");} else if(a>=60) {System.out.println("D");} else {System.out.println("E");} } } 6. 输入一行字符,将其中的字母变成其后续的第3个字母,输出。例:a→d,x →a;y →b;编程实现。 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); String str=cin.nextLine(); char[] c=new char[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t', 'u','v','w','x','y','z','a','b','c'}; for(int i=0;i { char[] c1=new char[str.length()]; c1[i]=str.charAt(i); for(int j=0;j<26;j++) { if(c1[i]==c[j]) {char zc=c[j+3]; System.out.print(zc);} } } } } 7. 编写程序,输入任意一个1~7之间的整数,将他们转换成对应的英文单词. 例如:1转换成Monday,7转换成Sunday. import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); System.out.println("输入任意一个1~7之间的整数:"); int s=cin.nextInt(); switch(s) { case 1:{ System.out.print("Monday"); break; } case 2:{ System.out.print("Tuesday"); break; } case 3:{ System.out.print("Wednesday"); break; } case 4:{ System.out.print("Thursday"); break; } case 5:{ System.out.print("Friday"); break; } case 6:{ System.out.print("Saturday"); break; } case 7:{ System.out.print("Sunday"); break; } default :{ } } } } 连续输出: import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); while(true) {System.out.println("输入任意一个1~7之间的整数:"); int s=cin.nextInt(); switch(s) { case 1:{ System.out.println("Monday"); break; } case 2:{ System.out.println("Tuesday"); break; } case 3:{ System.out.print("Wednesday"); break; } case 4:{ System.out.println("Thursday"); break; } case 5:{ System.out.println("Friday"); break; } case 6:{ System.out.println("Saturday"); break; } case 7:{ System.out.println("Sunday"); break; } default :{ } } } } } 8. 输入三角形的三边a, b, c,判断能否构成三角形. 若能,计算周长. import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); int a=cin.nextInt(); int b=cin.nextInt(); int c=cin.nextInt(); int l=0; if(a+b>c&&a+c>b) {l=a+b+c; System.out.print(l);} else { System.out.print("不能构成三角形"); } } } 9. 编程序,输入a,b,c,求方程ax2+bx+c=0 的解。 import java.util.Scanner; public class Prog1{ public static void main(String[] args) { Scanner cin=new Scanner(System.in); System.out.println("请输入a,b,c的值:"); double a=cin.nextInt(); double b=cin.nextInt(); double c=cin.nextInt(); double t=0; t=b*b-4*a*c; double x1=0,x2=0; int a1=(int)a; int b1=(int)b; int c1=(int)c; System.out.println("方程"+a1+"*x*x+"+b1+"*x+"+c1+"=0的解:"); if(t<0) System.out.println("无解"); else if(t>=0) { x1=(-b+Math.pow(t,0.5))/(2*a); x2=(-b-Math.pow(t,0.5))/(2*a); System.out.println("x1="+x1+" "+"x2="+x2); } }} 运行结果: 请输入a,b,c的值: 1 5 6 方程1*x*x+5*x+6=0的解: x1=-2.0 x2=-3.0 10.计算出前20项fibonacci 数列, 要求一行打印5个数. 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子? 我们不妨拿新出生的一对小兔子分析一下: 第一个月小兔子没有繁殖能力,所以还是一对; 数列输出: public class Prog1{ public static void main(String[] args) { int a=0,b=1,c=1; for(int i=1;i<=20;i++) { a=b;b=c;c=a+b; System.out.println("经过"+i+"天,"+"幼仔对数:"+a+","+"成兔对数:"+b+","+"总体对数:"+c); } } } 运行结果: 经过1天,幼仔对数:1,成兔对数:1,总体对数:2 经过2天,幼仔对数:1,成兔对数:2,总体对数:3 经过3天,幼仔对数:2,成兔对数:3,总体对数:5 经过4天,幼仔对数:3,成兔对数:5,总体对数:8 经过5天,幼仔对数:5,成兔对数:8,总体对数:13 经过6天,幼仔对数:8,成兔对数:13,总体对数:21 经过7天,幼仔对数:13,成兔对数:21,总体对数:34 经过8天,幼仔对数:21,成兔对数:34,总体对数:55 经过9天,幼仔对数:34,成兔对数:55,总体对数:89 经过10天,幼仔对数:55,成兔对数:89,总体对数:144 经过11天,幼仔对数:89,成兔对数:144,总体对数:233 经过12天,幼仔对数:144,成兔对数:233,总体对数:377 经过13天,幼仔对数:233,成兔对数:377,总体对数:610 经过14天,幼仔对数:377,成兔对数:610,总体对数:987 经过15天,幼仔对数:610,成兔对数:987,总体对数:1597 经过16天,幼仔对数:987,成兔对数:1597,总体对数:2584 经过17天,幼仔对数:1597,成兔对数:2584,总体对数:4181 经过18天,幼仔对数:2584,成兔对数:4181,总体对数:6765 经过19天,幼仔对数:4181,成兔对数:6765,总体对数:10946 经过20天,幼仔对数:6765,成兔对数:10946,总体对数:17711 11.输出100~10000之间个位数为3的所有素数。 public class Prog1 { public static void main(String[] args) { boolean flag=false; for(int i=103;i<10000;i=i+10) { for(int j=2;j if(i%j!=0) { flag=true; } if(flag) { System.out.println(i); } } } } 12. 百钱买百鸡问题:公鸡每只5 元,母鸡每只3 元,小鸡3 只一元,问一百元买一百只鸡有几种买法. public class Prog1 { public static void main(String[] args) { int a=0; int b=0; double c=0; int g=0; for(a=1;a<=20;a++) { for(b=1;b<=33;b++) { for(c=1;c<=100;c++) { if(5*a+3*b+c/3==100&&a+b+c==100) {g++; int c1=(int)c; System.out.print("第"+g+"种方法:公鸡:"+a+"只,母鸡:"+b+"只,小鸡:"+c1+"只"); System.out.println(); } } } } } } 13. 请编制程序要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。 /*------------------------------------------------------- 【程序设计】 --------------------------------------------------------- 题目:请编制程序要求输入整数a和b,若a2+b2大于100, 输出a2+b2百位以上的数字, 否则输出两数之和。 建立的类名为Prog1 -------------------------------------------------------*/ /**********Program**********/ import java.util.Scanner; public class Prog1 { public static void main(String args[]) { Scanner cin=new Scanner(System.in); System.out.println("请输入a,b的值:"); int a =cin.nextInt(); int b =cin.nextInt(); int c=0; if(a*a+b*b>100) { c= (a*a+b*b)/100; S ystem.out.println(c); } else S ystem.out.println(a+b); } }/********** End **********/ 运行结果: 请输入a,b的值: 10 2 1 14. 编程实现:对键盘输入的任意一个四位正整数,计算各位数字平方和。如:2345 ,则:计算22+32+42+52 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in); System.out.println("请输入一个四位正整数:"); int n=cin.nextInt(); int a,b,c,d; d=n%10; c=(n-d)%100/10; b=(n-d-c*10)%1000/100; int m=0; m=a*a+b*b+c*c+d*d; System.out.println(m); } } 运行结果: 请输入一个四位正整数: 3333 36 15. 有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完,请编程. public class Prog1 { public static void main(String[] args) { int last=0; last=1020/2+2; int i=0; for(i=1;last>=0;i++) { last=last-(last/2+2); } System.out.print("需要的天数:"+i); } }运行结果: 需要的天数:9 16. 编程,输出200以内所有完全平方数C(满足C2=A2+B2)及其个数。 public class Prog1 { public static void main(String[] args) { int a=0,b=0,n=0; for(int c=0;c<=200;c++) for( a=0;a<=200;a++) for(b=0;b<=200;b++) { if(c*c==a*a+b*b) {System.out.println(c); n++; } } n=(n-1)/2+1; System.out.println(n); } } 17. 设N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),编程,输出所有满足条件的N。 public class Prog1 { public static void main(String[] args) { for(int i=1000;i*9<10000;i++) { String c=""; String str=String.valueOf(i); for(int j=str.length()-1;j>=0;j--) { c=c+str.charAt(j); } int a=Integer.parseInt(c); if(a==i*9) System.out.println(i); } } } 18. 编程,输出555555的约数中最大的三位数。 public class Prog1 { public static void main(String[] args) { int max=100; for(int i=100;i<=999;i++) { if(555555%i==0) { if(i>max) max=i; } } System.out.println(max); } } 19. 编程,输出所有个位数为6且能被31整除的五位数及其个数。 public class Prog1 { public static void main(String[] args) { int n=0; for(int i=10006;i<100000;i=i+10) { if(i%31==0) {System.out.println(i); n++;} } System.out.print(n); } } 20. 编写程序,输入两个整数,和+、-、*、/ 、%之中的任意一个运算符,输出计算结果. import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); int a=cin.nextInt(); int b=cin.nextInt(); String str1=cin.nextLine(); String str=cin.nextLine(); char c=str.charAt(0); switch(c) { case'+':{ System.out.print(a+"+"+b+"="+(a+b)); break; } case'-':{ System.out.print(a+"-"+b+"="+(a-b)); break; } case'*':{ System.out.print(a+"*"+b+"="+(a*b)); break; } case'/':{ System.out.print(a+"/"+b+"="+(a/b)); break; } case'%':{ System.out.print(a+"%"+b+"="+(a%b)); break; } } } } 运算结果: 233 100 % 233%100=33 21. 计算:1+1/(1+2)+1/(1+2+3)+…+ 1/(1+2+…+n), n由键盘输入。import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); double n=cin.nextDouble(); double sum=0; double s=0; for(double i=1;i<=n;i++) { s=s+i; sum=sum+1/s; } System.out.print(sum); } } 22. 编程计算: 1*2*3+3*4*5+…+99*100*101 的值. public class Prog1 { public static void main(String[] args) { int a=1,b=2,c=3; int sum=0; do { sum=sum+(a*b*c); a=c; b=c+1; c=c+2; }while(c<=101); System.out.println(sum); } } 二、比较简单问题: 1. 编一个函数GCD,求两个无符号整数的最大公约数。主函数输入两个正整数m 和 n, 调用GCD,求出m和n的最大公约数和最小公倍数.并输出。 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); int a=cin.nextInt(); int b=cin.nextInt(); int gys=GCD(a,b); int gbs=a*b/gys; System.out.print("最大公约数:"+gys+" "+"最小公倍数:"+gbs); } public static int GCD(int a,int b) { int g=0; int min=a; if(a>b) min=b; for(int i=min-1;i>0;i--) { if(a%i==0&&b%i==0) {g=i; break;} } return g; } } 2. 请编程实现:建立一个4*4的二维整型数组,求对角线元素的和。 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { int sum=0; Scanner cin=new Scanner(System.in ); int[][] sz=new int[4][4]; for(int i=0;i<4;i++) {for(int j=0;j<4;j++) {sz[i][j]=cin.nextInt();} } for(int i=0;i<4;i++) {for(int j=i;j<=i;j++) sum=sum+sz[i][j]; } System.out.print(sum);} } 3. 写一个判断素数的函数prime,在主函数中输入10个整数,调用prime,输出这10个整数中的素数的累加和。 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { int[] sz=new int[10]; int sum=0; Scanner cin=new Scanner(System.in ); System.out.print("请输入10个整数:"); for(int i=0;i<10;i++) { sz[i]=cin.nextInt(); } for(int j=0;j { sum=sum+prime(sz[j]); } System.out.print(sum); } public static int prime(int q) { if(q==0||q==1) return 0; else if(q==2) return 2; else {for(int i=2;i {if(q%i==0) { return 0; } }} } } 运行结果: 请输入10个整数: 1 2 3 6 6 6 6 6 6 5 4.从键盘上输入若干学生的一门课成绩,存入一个数组中,当输入负数时结束输入. 输出最高成绩和最低成绩及相应的序号。 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { Scanner cin=new Scanner(System.in ); int s=0; int[] sz=new int[10000]; int n=0; for(int i=0;i<10000;i++) { s=cin.nextInt(); if(s<0) { n=i; break; } sz[i]=s; } int max=sz[0]; int xba=0,xbi=0; for(int j=1;j { if(sz[j]>max) { max=sz[j]; } } int min=sz[0]; for(int j=1;j { if(sz[j] { min=sz[j]; xbi=j; } } xba++; xbi++; System.out.print("最高成绩:"+max+",序号:"+xba+"\n"+"最低成绩:"+min+",序号:"+xbi); } } 5. 编程计算:1!+2!+3!+…+20!,并将结果输出.输出格式: 1!+2!+3!+…+20!= 表达式的值 public class Prog1 { public static void main(String[] args) { long sum=1; long s=1; for(int i=2;i<=20;i++) {for(int j=i;j>1;j--) { s=s*j*(--j); } sum=sum+s; s=1; } System.out.print("1!+2!+3!+…+20!="+sum); } } 运行结果: 1!+2!+3!+…+20!=2561327494111820313 6. 有一个3* 4 的矩阵,编程实现:找出该矩阵中每行元素的最大值,存入一个一维数组中。输出原始矩阵和结果矩阵。 import java.util.Scanner; public class Prog1 { public static void main(String[] args) { int[][] ew=new int[3][4]; Scanner cin=new Scanner(System.in ); for(int i=0;i<3;i++) { for(int j=0;j<4;j++) ew[i][j]=cin.nextInt(); } int[] yw=new int[3]; int max=0; for(int i=0;i<3;i++) { for(int j=0;j<4;j++) { if(max max=ew[i][j]; } yw[i]=max; max=0; } System.out.println("原始矩阵:"); for(int i=0;i<3;i++) {for(int j=0;j<4;j++) System.out.print(ew[i][j]); System.out.print("\n");} System.out.println("结果:"); for(int i=0;i<3;i++) { System.out.print(yw[i]+" "); } }} 运行结果: 1 2 6 1 2 4 1 2 9 原始矩阵: 0126 0124 0129