50道JAVA基础编程练习题【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....publicclassProg1{publicstaticvoidmain(String[]args){intn=10;System.out.println(第+n+个月兔子总数为+fun(n));}privatestaticintfun(intn){if(n==1||n==2)return1;elsereturnfun(n-1)+fun(n-2);}}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。publicclassProg2{publicstaticvoidmain(String[]args){intm=1;intn=1000;intcount=0;//统计素数个数for(inti=m;in;i++){if(isPrime(i)){count++;System.out.print(i+);if(count%10==0){System.out.println();}}}System.out.println();System.out.println(在+m+和+n+之间共有+count+个素数);}//判断素数privatestaticbooleanisPrime(intn){booleanflag=true;if(n==1)flag=false;else{for(inti=2;i=Math.sqrt(n);i++){if((n%i)==0||n==1){flag=false;break;}elseflag=true;}}returnflag;}}【程序3】题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方。程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。publicclassProg3{publicstaticvoidmain(String[]args){for(inti=100;i1000;i++){if(isLotus(i))System.out.print(i+);}System.out.println();}//判断水仙花数privatestaticbooleanisLotus(intlotus){intm=0;intn=lotus;intsum=0;m=n/100;n-=m*100;sum=m*m*m;m=n/10;n-=m*10;sum+=m*m*m+n*n*n;if(sum==lotus)returntrue;elsereturnfalse;}}【程序4】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。publicclassProg4{publicstaticvoidmain(String[]args){intn=13;decompose(n);}privatestaticvoiddecompose(intn){System.out.print(n+=);for(inti=2;in+1;i++){while(n%i==0&&n!=i){n/=i;System.out.print(i+*);}if(n==i){System.out.println(i);break;}}}}【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。程序分析:(ab)?a:b这是条件运算符的基本例子。publicclassProg5{publicstaticvoidmain(String[]args){intn=-1;try{n=Integer.parseInt(args[0]);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println(请输入成绩);return;}grade(n);}//成绩等级计算privatestaticvoidgrade(intn){if(n100||n0)System.out.println(输入无效);else{Stringstr=(n=90)?分,属于A等:((n60)?分,属于B等:分,属于C等);System.out.println(n+str);}}}【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。程序分析:利用辗除法。publicclassProg6{publicstaticvoidmain(String[]args){intm,n;try{m=Integer.parseInt(args[0]);n=Integer.parseInt(args[1]);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println(输入有误);return;}max_min(m,n);}//求最大公约数和最小公倍数privatestaticvoidmax_min(intm,intn){inttemp=1;intyshu=1;intbshu=m*n;if(nm){temp=n;n=m;m=temp;}while(m!=0){temp=n%m;n=m;m=temp;}yshu=n;bshu/=n;System.out.println(m+和+n+的最大公约数为+yshu);System.out.println(m+和+n+的最小公倍数为+bshu);}}【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。程序分析:利用while语句,条件为输入的字符不为'\n'.importjava.util.Scanner;publicclassProg7_1{publicstaticvoidmain(String[]args){System.out.print(请输入一串字符:);Scannerscan=newScanner(System.in);Stringstr=scan.nextLine();//将一行字符转化为字符串scan.close();count(str);}//统计输入的字符数privatestaticvoidcount(Stringstr){StringE1=[\u4e00-\u9fa5];//汉字StringE2=[a-zA-Z];StringE3=[0-9];StringE4=\\s;//空格intcountChinese=0;intcountLetter=0;intcountNumber=0;intcountSpace=0;intcountOther=0;char[]array_Char=str.toCharArray();//将字符串转化为字符数组String[]array_String=newString[array_Char.length];//汉字只能作为字符串处理for(inti=0;iarray_Char.length;i++)array_String[i]=String.valueOf(array_Char[i]);//遍历字符串数组中的元素for(Strings:array_String){if(s.matches(E1))countChinese++;elseif(s.matches(E2))countLetter++;elseif(s.matches(E3))countNumber++;elseif(s.matches(E4))countSpace++;elsecountOther++;}System.out.println(输入的汉字个数:+countChinese);System.out.println(输入的字母个数:+countLetter);System.out.println(输入的数字个数:+countNumber);System.out.println(输入的空格个数:+countSpace);System.out.println(输入的其它字符个数:+countSpace);}}importjava.util.*;publicclassProg7_2{publicstaticvoidmain(String[]args){System.out.println(请输入一行字符:);Scannerscan=newScanner(System.in);Stringstr=scan.nextLine();scan.close();count(str);}//统计输入的字符privatestaticvoidcount(Stringstr){ListStringlist=newArrayListString();char[]array_Char=str.toCharArray();for(charc:array_Char)list.add(String.valueOf(c));//将字符作为字符串添加到list表中Collections.sort(list);//排序for(Strings:list){intbegin=list.indexOf(s);intend=list.lastIndexOf(s);//索引结束统计字符数if(list.get(end)==s)System.out.println(字符‘+s+’有+(end-begin+1)+个);}}}【程序8】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。程序分析:关键是计算出每一项的值。importjava.util.Scanner;publicclassProg8{publicstaticvoidmain(String[]args){System.out.print(求s=a+aa+aaa+aaaa+...的值,请输入a的值:);Scannerscan=newScanner(System.in).useDelimiter(\\s*);//以空格作为分隔符inta=scan.nextInt();intn=scan.nextInt();scan.close();//关闭扫描器System.out.println(expressed(2,5)+add(2,5));}//求和表达式privatestaticStringexpressed(inta,intn){StringBuffersb=newStringBuffer();StringBuffersubSB=newStringBuffer();for(inti=1;in+1;i++){subSB=subSB.append(a);sb=sb.append(subSB);if(in)sb=sb.append(+);}sb.append(=);returnsb.toString();}//求和privatestaticlongadd(inta,intn){longsum=0;longsubSUM=0;for(inti=1;in+1;i++){subSUM=subSUM*10+a;sum=sum+subSUM;}return