一、求两个数的和与差。程序填空,不要改变与输入输出有关的语句。输入整数a和b,计算并输出a、b的和与差。import java.io.*;import java.util.Scanner;public class Test20001{ public static void main(String args[]){ int a, b, sum, diff; Scanner in=new Scanner(System.in); a=in.nextInt(); b=in.nextInt(); sum=a+b;diff=a-b; System.out.println("The sum is "+sum); System.out.println("The difference is "+diff); }}二、求平方根。程序填空,不要改变与输入输出有关的语句。输入1个实数x,计算并输出其平方根。例:输入1.21输出The square root of 1.21 is 1.1import java.io.*;import java.util.Scanner;public class Test20002{ public static void main(String args[]){ double x, root; Scanner in=new Scanner(System.in); x=in.nextDouble(); root=Math.sqrt(x); System.out.println("The square root of "+x+" is "+root); }}三、华氏温度转换为摄氏温度。程序填空,不要改变与输入输出有关的语句。输入华氏温度f,计算并输出相应的摄氏温度c。c = 5/9(f-32).例:括号内是说明:输入17.2 (华氏温度)输出The temprature is -8.222222222222223import java.util.Scanner;public class Test20003 { public static void main(String[] args) { Scanner in=new Scanner(System.in); double f, c; f=in.nextDouble(); c=5.0/9*(f-32); System.out.println("The temprature is "+c); }}四、计算旅途时间。程序填空,不要改变与输入输出有关的语句。输入2个整数time1和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。有效的时间范围是0000到2359,不需要考虑出发时间晚于到达时间的情况。例:括号内是说明:输入712 1411(出发时间是7:12,到达时间是14:11)输出The train journey time is 6 hrs 59 mins.import java.util.Scanner;public class Test20004 { public static void main(String[] args) { Scanner in=new Scanner(System.in); int time1, time2, hours, mins; time1=in.nextInt(); time2=in.nextInt(); hours=time2/100-time1/100; mins=time2%100-time1%100; hours=mins>0?hours:hours-1; mins=mins>0?mins:mins+60;System.out.println("The train journey time is "+hours+" hrs "+ mins+" mins."); }} 五、数字加密。程序填空,不要改变与输入输出有关的语句。输入1个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。例:括号内是说明:输入1257输出The encrypted number is 4601(每一位上的数字加9除以10取余后,得0146,交换后得到4601)import java.util.Scanner;public class Test20005 { public static void main(String[] args) { Scanner in=new Scanner(System.in); int number, digit1, digit2, digit3, digit4, newnum; number=in.nextInt(); digit1=number/1000;(是这样来取得位数的) digit2=number/100%10; //或 digit2=(number-digit1*1000)/100; digit3=number/10%10; //或 digit3=(number-digit1*1000-digit2*100)/10; digit4=number%10; digit1=(digit1+9)%10; digit2=(digit2+9)%10; digit3=(digit3+9)%10; digit4=(digit4+9)%10; newnum=digit3*1000+digit4*100+digit1*10+digit2;(注意这里是这样来实现交换的) System.out.println("The encrypted number is "+newnum); }} 六、大写字母转换成小写字母。程序填空,不要改变与输入输出有关的语句。输入一个大写英文字母,输出相应的小写字母。例:输入G输出gimport java.io.*;public class Test20006 { public static void main(String[] args) throws IOException { char ch; ch=(char)System.in.read(); ch=(char)(ch+32); System.out.println(ch); }}七、计算三门课程的平均成绩。程序填空,不要改变与输入输出有关的语句。已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。本题无输入。输出示例:math = 87, eng = 72, comp = 93 ,average = 84public class test20007 { public static void main(String[] args) { int math, eng, comp, average; math=87;eng=72;comp=93;average=(math+eng+comp)/3; System.out.println("math = "+math+", eng = "+eng+", comp = "+comp); System.out.println("average = "+ average); }}八、计算存款利息。程序填空,不要改变与输入输出有关的语句。输入存款金额 money、存期 year 和年利率 rate,根据下列公式计算存款到期时的利息 interest(税前),输出时保留2位小数。interest = money(1+rate)^year - money输入输出示例:括号内为说明输入1000 3 0.025(money = 1000, year = 3, rate = 0.025)输出interest = 76.89import java.util.Scanner;public class test20008 { public static void main(String[] args) { int money, year; double interest, rate; Scanner in=new Scanner(System.in); money=in.nextInt();year=in.nextInt();rate=in.nextDouble();interest=money*Math.pow((1+rate), year )- money;表示的是1+rate的year方幂 System.out.println("interest = "+ (int)(interest*100+0.5)/100.0); //保留两位小数 }}实验5 分支结构程序的设计一、显示两级成绩,程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个学生的数学成绩,如果它低于60,输出“Fail”,否则,输出“Pass”。输出使用System.out.println("Pass");及System.out.println("Fail");例:括号内是说明:输入2 (repeat=2) 60 59输出Pass Failimport java.util.Scanner;public class Test30001{ public static void main(String[] args){ int ri, repeat; int mark; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ mark=in.nextInt(); if (mark<60) System.out.println("Fail"); else System.out.println("Pass"); } }}二、找最小值,程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入四个整数,输出其中的最小值。例:括号内是说明输入3 (repeat=3) 12 6 1 9010 40 30 20-1 -3 -4 -5输出min is 1 (12 6 1 90 中的最小值是1)min is 10 (10 40 30 20 中的最小值是10)min is -5 (-1 -3 -4 -5中的最小值是-5)import java.util.Scanner;public class Test30002 { public static void main(String[] args){ int ri, repeat; int a, b, c, d, min; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ a=in.nextInt(); b=in.nextInt(); c=in.nextInt(); d=in.nextInt(); min=a; if(min>b) min=b; if(min>c) min=c; if(min>d) min=d; System.out.println("min is "+min); } }}三、求三角形的面积和周长,程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入三角形的三条边a, b, c,如果能构成一个三角形,输出面积area和周长perimeter;否则,输出“These sides do not correspond to a valid triangle”。在一个三角形中,任意两边之和大于第三边。三角形的面积计算公式:aere*area = s(s-a)(s-b)(s-c)其中:s = (a+b+c)/2输出代码:System.out.println("area="+(int)(area*100+0.5)/100.+";perimeter="+(int)(perimeter*100+0.5)/100.);System.out.println("These sides do not correspond to a valid triangle"); 例:括号内是说明输入2 (repeat=2) 5 5 31 1 4输出area=7.15;perimeter=13.0These sides do not correspond to a valid triangleimport java.util.Scanner;public class Test30003 { public static void main(String[] args){ int ri, repeat; float a, b, c, area, perimeter, s;Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ a=in.nextFloat(); b=in.nextFloat(); c=in.nextFloat();if (a+b>c&&a+c>b&&b+c>a) { s=(a+b+c)/2; area=(float)Math.sqrt(s*(s-a)*(s-b)*(s-c)); perimeter=a+b+c; System.out.println("area="+(int)(area*100+0.5)/100.+";perimeter="+(int)(perimeter*100+0.5)/100.); } else System.out.println("These sides do not correspond to a valid triangle"); } }}四、判断数的符号,程序填空,不要改变与输入输出有关的语句。输入整数x,若x大于0,y=1;若x等于0,y=0;否则,y=-1,最后输出y。import java.util.Scanner;public class Test30004{ public static void main(String[] args){ int ri, repeat; int x, y; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ x=in.nextInt(); if (x>0)y=1; else if(x==0)y=0;else y=-1; System.out.println(y); } }}if(x>0) y=1;if(x<0)y=-1;else y=0;(这样是错的。。这是为什么?) 五、计算个人所得税,程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个职工的月薪salary,输出应交的个人所得税tax。tax = rate * (salary-850)当 salary <= 850 时,rate = 0%;当 850 < salary <= 1350 时,rate = 5%;当 1350 < salary <= 2850 时,rate = 10%;当 2850 < salary <= 5850 时,rate = 15%;当 5850 < salary 时,rate = 20%;例:括号内是说明输入5 (repeat=5)1010.8732098.7680040102850输出tax=8.04tax=6249.75tax=0.0tax=474.0tax=200.0import java.util.Scanner;public class Test30005 { public static void main(String[] args){ int ri, repeat; float rate, salary, tax;Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ salary=in.nextFloat(); if(salary<=850) rate=0; else if(salary<=1350) rate=0.05f; else if(salary<=2850) rate=0.1f; else if(salary<=5850) rate=0.15f; else rate=0.2f; tax=rate*(salary-850); System.out.println("tax="+(int)(tax*100+0.5)/100.0); } }} 六、显示水果的价格,程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:以下4种水果的单价分别是3.00元/公斤,2.50元/公斤,4.10元/公斤,10.20元/公斤。[1] apples[2] pears[3] oranges[4] grapes输入水果的编号,输出该水果的单价。如果输入不正确的编号,显示单价为0。例:括号内是说明输入1 (repeat=1) 3 (oranges的编号) 输出[1] apples[2] pears[3] oranges[4] grapesprice=4.1import java.util.Scanner;public class Test30006{ public static void main(String[] args){ int ri, repeat; int choice; float price; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ System.out.println("[1] apples"); System.out.println("[2] pears"); System.out.println("[3] oranges"); System.out.println("[4] grapes");choice=in.nextInt(); switch(choice){ case 1:price=3.0f;break; case 2:price=2.5f;break; case 3:price=4.1f;break; case 4:price=10.2f;break; default: price=0; }System.out.println("price="+price); } }}七、字母转换,程序填空,不要改变与输入输出有关的语句。输入一批以问号“?”结束的字符,对“?”以前的每一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。import java.io.*;public class Test30007 { public static void main(String[] args)throws IOException{ char ch; ch=(char)System.in.read(); while(ch!='?'){ if('A'<=ch&&ch<='Z') ch+=32; else if('a'<=ch&&ch<='z') //此处必须使用if结构的嵌套 ch-=32; System.out.print(ch); ch=(char)System.in.read(); } }}循环结构程序的设计(一)1.求1+1/2+1/3+……+1/n 程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入1 个正整数 n(n<=100),计算并输出1+1/2+1/3+……+1/n 。i=1; i<=n; sum=0; do { i=i+1; sum=sum+1/i; } while(n<=100); System.out.println((int)(sum*1000+0.5)/1000.); }}}import java.util.Scanner;public class Test40001 {public static void main(String[] args) { int ri, repeat; int i, n; float sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); //以下if语句用于检查输入数据的正确性,可以不写if(n<=0||n>100){ //输入0、负数或大于100的数时结束程序的运行System.out.println("输入数据出错,程序退出");System.exit(0); }sum=0; //注意这条赋初值语句的位置for(i=1;i<=n;i++){sum+=1.0f/i; } System.out.println((int)(sum*1000+0.5)/1000.); }}}2.求n! 程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入1 个正整数 n(n<=50),计算并输出n! 。import java.util.Scanner;public class Test40002 {public static void main(String[] args) { int ri, repeat; int i, n; double fact;/// 这里的double在编写中是用不到的吧~~ Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); fact=1; for(i=1;i<=n;i++) fact*=i; System.out.println(fact); }}}3.求x的n次幂 程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入1 个正实数x和1个正整数 n(n<=50),计算并输出x的n次幂。import java.util.Scanner;public class Test40003 {public static void main(String[] args) { int ri, repeat; int i, n; double x, mypow; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ x=in.nextDouble(); n=in.nextInt(); mypow=1; for(i=1;i<=n;i++) mypow*=x; System.out.println(mypow); } //这个,怎么感觉有些不对??}}4.求1+1/3+1/5+1/7+…… 程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入1 个正整数 n(n<=100),计算并输出1+1/3+1/5+1/7+……的前n项和。import java.util.Scanner;public class Test40005 { public static void main(String[] args) {int ri, repeat;int i, n, temp;float sum;Scanner in=new Scanner(System.in);repeat=in.nextInt();for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); temp=1;sum=0;for(i=1;i<=n;i++) //那这里i是什么用的么??循环N次!!{ sum+=1.0f/temp; temp+=2; } System.out.println(sum);} }}解法二:temp=2*n-1; sum=0; for(i=1;i<=temp;i+=2) sum+=1.0f/i;5.摄氏温度和华氏温度转换表。程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2个整数begin和end,分别代表摄氏温度的起止值,输出该范围内摄氏温度C和华氏温度F的转换表。F = 32 + C * 9 / 5输出语句:System.out.println(c+"t"+f);import java.util.Scanner;public class Test40007 { public static void main(String[] args){ int ri, repeat; int begin, c, end, f; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ begin=in.nextInt(); end=in.nextInt(); System.out.println("Celsius Fahrenheit");//这一条在最后他是自会输出的!! for(c=begin;c<=end;c++) { //这样显然也是可以的~~ f=32+c*9/5; System.out.println(c+"t"+f); //就算是空格也不要忘了加引号!! } } }}6.求奇数和。程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入一批正整数(以零或负数为结束标志),求其中的奇数和。import java.util.Scanner;public class Test40008 { public static void main(String[] args){ int ri, repeat; int x, sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ x=in.nextInt(); sum=0; while(x>0){ if(x%2!=0)sum+=x; x=in.nextInt(); 为什么把他放前面顺序就不一样了呢? } System.out.println(sum); } }}sum=0; if(x%2!=0) sum+=x; //if 和 while之间的区别要分清楚了!!7.求最大值。程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n, 再输入n个整数,输出最大值。import java.util.Scanner;public class Test40009 { public static void main(String[] args){ int ri, repeat; int i , max, n, x; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); max=in.nextInt();for(i=1;i<=n-1;i++){ x=in.nextInt(); if(x>max)max=x; } System.out.println(max); } }}8.求整数的位数以及各位数之和。程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个整数,输出它的位数以及各位数之和。import java.util.Scanner;public class Test40010 { public static void main(String[] args){ int ri, repeat; int number, sum,n; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); n=Math.abs(n); number=sum=0; do{sum=sum+(n%10);number++;n=n/10; //这样一直除的话到后来sum一直是加0.但number不是还是一直在加上去么? }while(n>0); //这个不是很显然的么?为什么还要写? System.out.println("number="+number+", sum="+sum); } }}import java.util.*;public class grade { public static void main(String []args){ Scanner in =new Scanner(System.in); int gcd, lcm, m, n,r; int repeat, ri; repeat=in.nextInt(); for(ri = 1; ri <= repeat; ri++){ m=in.nextInt(); n=in.nextInt(); r=m; if(m <= 0 || n <= 0) System.out.println("m <= 0 or n <= 0"); else{lcm=m*n; do{ if(m<n){r=m;m=n;n=r; } r=m%n ; m=n; n=r; }while(r!=0); gcd=m; lcm=lcm/m; System.out.println("the least common multiple:"+lcm+", the greatest common divisor:"+gcd); }} }}循环结构程序的设计(二)9.求1-1/2+1/3-1/4+…… 程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入1 个正整数 n(n<=100),计算并输出1-1/2+1/3-1/4+……的前n项和(四舍五入保留小数4位)。import java.util.Scanner;public class Test40004 { public static void main(String[] args) {int ri, repeat;int i, n, flag;float sum;Scanner in=new Scanner(System.in);repeat=in.nextInt();for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); sum=0;flag=1;for(i=1;i<=n;i++) {sum+=flag*1.0f/i;flag=-flag;} System.out.println((long)(sum*10000+0.5)/10000.);} }}10.求1-1/3+1/5-1/7+…… 程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入1 个正实数eps,计算并输出1-1/3+1/5-1/7+……,直到最后一项的绝对值小于eps为止(要求每一项的绝对值均大于等于eps,并以float类型输出数据)。import java.util.Scanner;public class Test40006 {public static void main(String[] args) { int ri, repeat; int temp, flag; double eps, item, sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ eps=in.nextDouble(); item=1; sum=0; temp=flag=1; while(Math.abs(item)>=eps){ sum+=item; flag=-flag; temp+=2; item=flag*1.0/temp; } System.out.println((int)(sum*10000+0.5)/10000.); }}}11.求2/1+3/2+5/3+8/5+... 程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n,输出 2/1+3/2+5/3+8/5 +...的前n项之和,保留4位小数(不足4位时,不必用0填满4位)。(该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)import java.util.Scanner;public class Test40011 { public static void main(String[] args) { int ri, repeat; int i,n; float a,b,s,t; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); a=1; //分母 //这样的题目像兔子数列一样,开始时都定好一些值就好了。b=2; //分子s=0;for(i=1;i<=n;i++) {s+=b/a;t=a;a=b; //分母是前一项的分子b=t+b; //分子是前一项分子与分母的和}s=s+b/a; a=b; b=a+b; //为什么直接这样做他就错了呢? System.out.println((int)(s*10000+.5)/10000.); } }}12.求a+aa+aaa+aa…a 程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2个正整数a和n, 求a+aa+aaa+aa…a(n个a)之和。import java.util.Scanner;public class Test40012{ public static void main(String args[]){ int ri, repeat; int i, n, a, sn, tn; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ a=in.nextInt(); n=in.nextInt(); tn=a;sn=0;for(i=1;i<=n;i++){sn+=tn;tn=tn*10+a; //迭代公式} sn=0; tn=0; for(i=1;i<=n;i++){ tn=tn*10+a; sn=sn+tn; } System.out.println(sn); } }}13.判断素数。程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数m,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。import java.util.Scanner;public class Test40013{ public static void main(String args[]){ int ri, repeat; int i, m, n; boolean flag; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ m=in.nextInt(); flag=true; if(m==1)flag=false;///true和false输进去是会变红的!! for(i=2;i<=m-1;i++) if(m%i==0){ flag=false; break; //有些时候确实需要你确认一下是不是大括号方面出错了!! } flag=true;if(m==1)flag=false; for(i=2;i<=m-1;i++){ if(m%i==0)flag=false; } if(flag) System.out.println("YES"); else System.out.println("NO"); } }}14.求1 + 1/2! +....+ 1/n! 程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入1 个正整数n,计算 s 的前n项的和。 s = 1 + 1/2! +....+ 1/n! import java.util.Scanner;public class Test40021{ public static void main(String args[]){ int ri, repeat; int i,n; float s,t; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); s=0;t=1;for(i=1;i<=n;i++){t*=i;s+=1/t; //如果这两条语句交换位置,则i=1要改成i=2 } System.out.println((int)(s*10000+0.5)/10000.); } }}15.求各位数字的立方和等于它本身的数。程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2 个正整数m和n(1<=m,n<=1000),输出m 和n之间所有满足各位数字的立方和等于它本身的数。输出语句:System.out.println(i);import java.util.Scanner;public class Test40022{ public static void main(String args[]){ int ri, repeat; int i, digit, m, n, number, sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ m=in.nextInt(); n=in.nextInt(); for(i=m;i<=n;i++){ //不能从值上来看i所代表的循环次数啊!!! number=i; sum=0; //为什么总有number大于0这个显然的东西? while(number>0){ digit=number%10; number=number/10; sum+=digit*digit*digit; } if(i==sum) System.out.println(i); } } }}Method的使用16.统计素数并求和。程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2 个正整数m和n(1<=m,n<=500),统计并输出m 和n之间的素数的个数以及这些素数的和。例:括号内是说明输入:3 (repeat=2)1 10 (m=1, n=10)20 35 (m=20, n=35)14 16 (m=14, n=16)输出:count=4, sum=17 (1到10之间有4个素数:2,3,5,7)count=3, sum=83 (20到35之间有3个素数:23, 29, 31)count=0, sum=0 (14到16之间没有素数)import java.util.Scanner;public class Test40023 {public static void main(String args[]){ int ri, repeat; int count, digit, i, j, k , m, n, sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++) { m=in.nextInt(); n=in.nextInt(); count=sum=0; for(k=m;k<=n;k++){ for(i=2;i<=k-1;i++)if(k%i==0)break;if(i==k){count++;sum+=k;} }System.out.println("count="+count+", sum="+sum); }} }import java.util.Scanner;public class Test40023_2 {public static void main(String args[]){ int ri, repeat; int count, i, j, k , m, n, sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++) { m=in.nextInt(); n=in.nextInt(); count=sum=0; boolean flag; for(k=m;k<=n;k++) { if(k==1)flag=false; //1不是素数 else flag=true; for(i=2;i<=k-1;i++) { if(k%i==0){ flag=false; break; } } if(flag){ sum+=i; count++; } } System.out.println("count="+count+", sum="+sum); }} }import java.util.Scanner;public class a{ public static void main(String args[]){ int ri, repeat; int count, i, j, k, m, n, sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ m=in.nextInt(); n=in.nextInt(); count=sum=0; for(i=m;i<=n;i++) { if(isprime(i)) {count++; sum+=i;} } System.out.println("count="+count+", sum="+sum); } } public static boolean isprime(int n) { int i; if(n<2) return false; for(i=2;i<n;i++) if(n%i==0) break; if(i==n) return true; else return false; }}顺序结构程序的设计17.求1 + 1/2! +....+ 1/n!输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入1 个正整数n,计算 s 的前n项的和(保留 4 位小数)。 s = 1 + 1/2! +....+ 1/n! 要求定义并调用函数fact(n)计算n的阶乘。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) {int i;double f=1; //把两个变量先定义一下!!for(i=1;i<=n;i++)f*=i;return f;} }18.求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。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){ int s=0; for(int i=1;i<=n;i++) s=s*10+a; f(a,n)=a+10*f(a,n-1); 错的原因是?return s; }}19.统计一个整数中数字的个数输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入1 个整数,统计并输出该数中2的个数。要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。例如,countdigit(10090,0)的返回值是3。import java.util.Scanner;public class Test50003{ public static void main(String args[]){ int ri, repeat; int count; long n; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); n=Math.abs(n); count = countdigit(n,2); System.out.println("count="+count); } } static int countdigit(long number,int digit){int a,c=0;while(number>0){a=(int)(number%10);if(a==digit)c++ //当a不等于digit的情况下?是不是默认就进行下一个的循环了?number=number/10;}return c; }}20.判断素数输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。要求定义并调用函数prime(m)判断m是否为素数。import java.util.Scanner;public class Test50004{ public static void main(String args[]){ int ri, repeat,n; boolean flag; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); flag=prime(n); if(flag) System.out.println("YES"); else System.out.println("NO"); } } static boolean prime(int m){ boolean flag=true; if(m==1)flag=false; for(int i=2;i<=m-1;i++) if(m%i==0) { flag=false; break; } return flag; }}21.统计素数并求和输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2 个正整数m和n(1<=m,n<=500),统计并输出m 和n之间的素数的个数以及这些素数的和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。要求定义并调用函数prime(m)判断m是否为素数。import java.util.Scanner;public class Test50005{ public static void main(String args[]){ int ri, repeat; int count, i, m, n, sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ m=in.nextInt(); n=in.nextInt(); count=0; sum=0; for(i=m;i<=n;i++) if(prime(i)){count++; sum+=i;} System.out.println("count="+count+", sum="+sum);} } static boolean prime(int m){ boolean flag=true; if(m==1)flag=false; for(int i=2;i<=m-1;i++) if(m%i==0) { flag=false; break; } return flag; }}22.输出 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+" ");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); //是要输出的数在mn之间,而不是要循环这么多次啊! } System.out.println();} } static long fib(int n){ int i; long a=1,b=1,f=1; for(i=3;i<=n;i++){ //从第3项开始计算 f=a+b; a=b; b=f; } return f; }} 23.求完数输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2 个正整数m和n(1<=m,n<=1000),输出m 到n之间的所有完数(完数就是因子和与它本身相等的数)。要求定义并调用函数factorsum(number),它的功能是返回number的因子和。例如,factorsum(12)的返回值是16(1+2+3+4+6)。输出语句:System.out.print(i+" ");import java.util.Scanner;public class Test50007{ public static void main(String args[]){ int ri,repeat; int i, m, n; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++){ m=in.nextInt(); n=in.nextInt(); for(i=m;i<=n;i++) if(i==factorsum(i)) System.out.print(i+" "); System.out.println(); } } static int factorsum(int number){ int sum=0; if(number==1)sum=1; for(int i=1;i<=number-1;i++) if(number%i==0)sum+=i; return sum; }}static int factorsum(int number){ int s=0,a=0; while(number>0){ a=number%10; s=s+a; number=number/10; } return s; } 哎呀!!!你这样定义的不是因子和啊!!24.}求各位数字的立方和等于它本身的数输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2 个正整数m和n(1<=m,n<=1000),输出m 到n之间的所有满足各位数字的立方和等于它本身的数。要求定义并调用函数is(number)判断number的各位数字之立方和是否等于它本身。输出语句:System.out.print(i+" ");import java.util.Scanner;public class Test50008{ public static void main(String args[]){ int ri,repeat; int i, m, n; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++){ m=in.nextInt(); n=in.nextInt(); for(i=m;i<=n;i++) if(is(i)) System.out.print(i+" "); System.out.println(); } } static boolean is(int number) { int sum=0,n,digit; n=number; while(n>0){ digit=n%10; n=n/10; sum+=digit*digit*digit; } if(number==sum) return true; else return false; }}Method的使用(二)25.将一个整数逆序输出输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个整数,将它逆序输出。要求定义并调用函数reverse(number),它的功能是返回number的逆序数。例如reverse(12345)的返回值是54321。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; } }26.十进制转换二进制输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:输入1 个正整数n,将其转换为二进制后输出。要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。输出语句:System.out.print(t); //t为某位二进制数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){ int t; //保存某位二进制 String s=""; //保存二进制数 do { t=n%2; //获得除2后的余数 s=t+s; //拼接 n=n/2; //获得除2后的商 }while(n>0); System.out.print(s); //本方法无返回值,需要在方法体中输出结果 }}一维数组的使用27.求平均值输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n (1<n≤10),再输入n个整数,输出平均值。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<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);}}}28.求最大值及其下标输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n (1<n≤10),再输入n个整数,输出最大值极其下标(设最大值惟一,下标从0开始)。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变为i System.out.println("max="+a[index]+",index="+index); } }}29.逆序输出输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n (1<n≤10),再输入n个整数,按逆序输出这些数。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 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(); } }}30.交换最小值和最大值输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n,再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。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 int[n]; for(i=0; i<n; i++) a[i]=in.nextInt(); index=0; //找最大数 for(i=0; i<n; i++) if(a[index]<a[i]) index=i;t=a[index]; a[index]=a[n-1];a[n-1]=t; //交换 index=0; //找最小数 for(i=0; i<n; i++) if(a[index]>a[i]) index=i; t=a[index]; a[index]=a[0];a[0]=t; //交换 for(i=0; i<n; i++) //输出 System.out.print(a[i]+" "); System.out.println(); } }}二维数组的使用31.排序输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n,再输入n个整数,将它们从大到小排序后输出。import java.util.Scanner;public class Test60005{ public static void main(String []args){ int ri, repeat; int i, index, k, 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-1;i++) { //选择法递减排序 index=i; for(k=i+1;k<n;k++) if(a[k]>a[index]) index=k; temp=a[i]; a[i]=a[index]; a[index]=temp; }for(i=0; i<n; i++) System.out.print(a[i]+" "); System.out.println(); } }}32.矩阵运算输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入 1 个正整数 n(1≤n≤6), 再读入 n 阶方阵 a , 计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和.(副对角线为从矩阵的右上角至左下角的连线)import java.util.Scanner;public class Test60011{ public static void main(String []args){ int ri, repeat; int a[][],i,j,n,sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); a=new int[n][n]; for(i=0; i<n; i++) for(j=0;j<n;j++) a[i][j]=in.nextInt(); sum=0; for(i=0; i<n-1; i++) //i<n-1 排除最后一行 for(j=0;j<n-1;j++){ //j<n-1 排除最后一列 if((i+j)!=(n-1)) sum+=a[i][j]; //非副对角线元素才加入 } System.out.println("sum="+sum); } }}33.加法口诀表输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入 1 个正整数 n(1≤n≤10), 输出一张 20 以内的加法口诀表. 加数与被加数都不大于 n, 分列第一行和第一列.(将加数、被加数、和放入一个二维数组中, 再输出该数组)import java.util.Scanner;public class Test60012{ public static void main(String []args){ int ri, repeat; int i,j,n,a[][]=new int[10][10]; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); for(i=1;i<=n;i++) { //给第1行和第1列所有元素赋值,a[0][0]不用赋值 a[0][i]=i; //第1行为被加数,从第2列开始赋值1,2,...,n a[i][0]=i; //第1列为加数,从第2行元素开始赋值1,2,...,n } for(i=1;i<=n;i++) //计算和,从第2行第2列开始 for(j=1;j<=n;j++){ a[i][j]=i+j; //或 a[i][j]=a[0][j]+a[i][0]; //所在列第1行元素+所在行第1列元素 } for( i=0; i<=n; i++ ){ for( j=0; j<=n; j++ ) if(i==0&&j==0) System.out.print( "+ ");//在第1行第1列上输出"+ " else if(i==0||j<=i) System.out.print(a[i][j]+" "); //输出下三角阵和第1行元素 System.out.println(); } } }}34.判断上三角矩阵输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入1 个正整数 n (1≤n≤6)和n 阶方阵a中的元素,如果a是上三角矩阵, 输出"YES", 否则, 输出"NO"。(上三角矩阵,即主对角线以下的元素都为0, 主对角线为从矩阵的左上角至右下角的连线)import java.util.Scanner;public class Test60013{ public static void main(String []args){ int ri, repeat; int a[][],i,j,n; boolean flag; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); a=new int[n][n] for (i=0;i<n;i++) for (j=0;j<n;j++) a[i][j]=in.nextInt(); flag=true; for(i=1;i<n;i++) //上三角矩阵中值为0的元素位置:行1~n-1,列0~i-1 for(j=0;j<i;j++) if(a[i][j]!=0) flag=false;//若有一个元素非0,则不是上三角矩阵 if(flag) System.out.println("YES"); else System.out.println("NO"); } }}35.求矩阵每行元素之和输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2 个正整数 m 和 n (1≤m, n),然后输入该m 行 n 列矩阵a中的元素,分别求出各行元素之和, 并存入一维数组row中, 再输出row.import java.util.Scanner;public class Test60014{ public static void main(String []args){ int ri, repeat; int i,j,m,n,a[][],row[]; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ m=in.nextInt(); n=in.nextInt(); a=new int[m][n]; row=new int[m]; //这里定义的时候row也是定义在行那里的!!! for (i=0;i<m;i++) for (j=0;j<n;j++) a[i][j]=in.nextInt(); for (i=0;i<m;i++) for (j=0;j<n;j++)//表示的是那一个矩阵 row[i]+=a[i][j]; //计算数组a的第i+1行元素之和, 存入数组row的第i+1个元素for(i=0;i<m;i++) System.out.println("sum of row "+i+" is "+row[i]); } }}字符串处理36.求字符串长度连续输入一批以 # 结束的多串字符(不包含空格)。。统计并输出每串字符的长度。输出使用:System.out.println(len);import java.util.Scanner;public class Test60021{ public static void main(String []args){ int len,count,i,k; //变量count,k未用到 char ch; String str; Scanner in=new Scanner(System.in); //话说这里就是一个数组了么? str=in.next(); //对5月7日前建立的练习用in.nextLine(); len=0; //保存当前字符串的长度// count=0; //保存字符串个数,可以不写 for(i=0;i<str.length();i++) { ch=str.charAt(i); //从字符串中逐个取出字符 if(ch=='#'){ //当前字符串结束了 System.out.println(len);//输出长度// count++; //字符串增加1个,可以不写 len=0; //新的字符串要开始了 } else len++; //当前字符串长度加1 } //以上程序段可以换成以下的程序段:// String[] s=str.split("#"); //字符串数组// for(i=0;i<s.length;i++) //System.out.println(s[i].length()); 输出的是第i串字符的长度 }}37.统计大写辅音字母输入一个正整数n (0<n<10),做n次下列运算:输入一行字符串,统计并输出字符串中大写辅音字母的个数(大写辅音字母:除“A”,“E”,“I”,“O”,“U”以外的大写字母)。import java.util.Scanner;public class Test60022{ public static void main(String []args){ int count,i,j,n; char ch; String str; Scanner in=new Scanner(System.in); n=(in.nextLine()).charAt(0)-'0'; //读取输入的第1行的第1个字符,转换成数字 for(i=1;i<=n;i++){ str=in.nextLine(); //读取输入的下一行 count=0; //保存大写辅音字母的个数 for(j=0;j<str.length();j++){ ch=str.charAt(j); //从字符串中逐个取出字符 if((ch>='B'&&ch<='Z')&&(ch!='E'&&ch!='I'&&ch!='O'&&ch!='U'))//判断 //大写字母'B'~'Z'中去掉'E','I','O','U' count++; } System.out.println(count); } }}38.查找字符先输入一个字符ch。然后输入一个正整数n (0<n<10),做n次下列运算:输入一行字符串,在字符串中查找该字符(ch),如果找到,则输出该字符在字符串中最后出现的位置(从0开始);否则输出“Not Found”。import java.util.Scanner;public class Test60023{ public static void main(String []args){ int index,i,n,j; char ch; String str; Scanner in=new Scanner(System.in); ch=(in.nextLine()).charAt(0); //读取输入的第1行的第1个字符,就是要查找的字符 n=(in.nextLine()).charAt(0)-'0'; //读取输入的第2行的第1个字符,转换成数字 for(i=1;i<=n;i++){ str=in.nextLine(); //读取输入的下一行 index=-1; //先假设找到 for(j=0;j<str.length();j++) if(str.charAt(j)==ch) index=j; //从当前字符串中找字符ch,找到时记住它的位置,继续找下一个 //循环结束后,index中的值就是最后出现的位置 if(index>=0) System.out.println(index); else System.out.println("Not Found"); } }}//解法2:从字符串末尾开始找字符ch,第1次找到时记住它的位置,终止循环。 index=-1; for(j=str.length()-1;j>=0;j--){ if(str.charAt(j)==ch) {index=j;break; } }39.字符串替换输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一行字符串,生成一个新的字符串,将原字符串中的大写字母用下面列出的对应大写字母替换, 其余字符不变, 输出新字符串. 原字母 对应字母 A ──→ Z B ──→ Y C ──→ X D ──→ W …… X ──→ C Y ──→ B Z ──→ Aimport java.util.Scanner;public class Test60024{ public static void main(String []args){ int ri, repeat, i; char ch; String str1,str2; Scanner in=new Scanner(System.in); repeat=(in.nextLine()).charAt(0)-'0'; for(ri=1; ri<=repeat; ri++){ str1=in.nextLine(); str2=""; //保存转换后的新字符串 for(i=0;i<str1.length();i++) { ch=str1.charAt(i); //从字符串中逐个取出字符 if((ch>='A'&&ch<='Z')) //对该字符进行转换 ch=(char)('Z'-ch+'A'); str2=str2+ch; //转换后字符添加到结果中 } System.out.println(str2); } }}字符串处理(二)40010 40031 40032 50003 50009 50010 60025说明:本次实验中的题目请采用字符串处理来实现。40.求整数的位数以及各位数之和。40010输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个整数,输出它的位数以及各位数之和。import java.util.Scanner;public class Test40010 { public static void main(String[] args){ int ri, repeat; int number, sum,n; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); n=Math.abs(n);String s=String.valueOf(n); //把整数n转换成字符串number=s.length(); //得到整数的位数sum=0;for(int i=0;i<number;i++){sum+=(s.charAt(i)-'0'); //求各位数字和} System.out.println("number="+number+", sum="+sum); } }}41.统计单词(选做) 40031输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一行字符,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。import java.util.Scanner;public class Test40031{ public static void main(String []args ){ int ri, repeat,count, word,i; String line; char c; Scanner in=new Scanner(System.in);repeat=(in.nextLine()).charAt(0)-'0'; for(ri=1; ri<=repeat; ri++){ line=in.nextLine(); count=word=0; for(i=0;i<line.length();i++){c=line.charAt(i); //从字符串line中取出第i个字符,放入变量cif(c==32) word=0; //当前字符是空格,表示不是单词 else if(word==0){ //当前字符不是空格,同时word=0,表示新单词开始 word=1; count++; }} System.out.println( count); } }}42.输出一个整数的各位数字(选做) 40032输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个整数,从高位开始逐位输出它的各位数字。输出语句:System.out.print(digit+" ");例:括号内是说明import java.util.Scanner;public class Test40032{ public static void main(String []args ){ int ri, repeat; int digit; long n, temp, pow; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextLong(); n=Math.abs(n); String s=String.valueOf(n); //把整数n转换成字符串 for(int i=0;i<s.length();i++){ digit=s.charAt(i)-'0'; //从高位到低位依次得到一位数字 System.out.print(digit+" "); //输出该位数字,再加一个空格 } System.out.println(); } }}另一种编法:n=Math.abs(n); char[] cs=String.valueOf(n).toCharArray(); //把整数n转换成字符串后存入字符数组cs,cs的元素就是n的每位数字 for(int i=0;i<cs.length;i++) System.out.print(cs[i]+" "); //依次输出字符数组cs的各个元素43.统计一个整数中数字的个数 50003输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入1 个整数,统计并输出该数中2的个数。要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。例如,countdigit(10090,0)的返回值是3。import java.util.Scanner;public class Test50003{ public static void main(String args[]){ int ri, repeat; int count; long n; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); n=Math.abs(n); count=countdigit(n,2); System.out.println("count="+count); } } static int countdigit(long number,int digit){//统计整数number中数字digit的个数 int c=0; String s=String.valueOf(number); //把长整数number转换成字符串 //以下循环实现:依次取出number的每个数字与指定数字digit比较,若相等则个数加1 for(int i=0;i<s.length();i++) if(s.charAt(i)-'0'==digit)c++; return c; }}44.将一个整数逆序输出 50009输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个整数,将它逆序输出。要求定义并调用函数reverse(number),它的功能是返回number的逆序数。例如reverse(12345)的返回值是54321。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){//返回number的逆序数long a;int flag=1; //保存符号if(number<0) {flag=-1;number=-number; //负数变成正数}String s1=String.valueOf(number);String s2=""; for(int i=0;i<s1.length();i++) s2=s1.charAt(i)+s2; //字符串逆序 a=Long.parseLong(s2); //转换成数值 return flag*a; //加上符号 } }45.十进制转换二进制50010输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:输入1 个正整数n,将其转换为二进制后输出。要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。输出语句:System.out.print(t); //t为某位二进制数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){ int t; //保存某位二进制 String s=""; //保存二进制数,这是字符串 do { t=n%2; //获得除2后的余数 s=t+s; //拼接 n=n/2; //获得除2后的商 }while(n>0); System.out.print(s); //本方法无返回值,需要在方法体中输出结果 }}46.十六进制转换十进制 60025输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一行字符串,对字符串做如下处理:滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。import java.util.Scanner;public class Test60025{ public static void main(String []args){ int ri, repeat, i,number; char ch; String str; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ str=in.next(); number=0; for(i=0;i<str.length();i++){ //从左往右依次取出字符 ch=str.charAt(i); if(ch>='0'&&ch<='9') //合法字符转换成相应数值后计算十进制数 number=number*16+(ch-'0'); else if(ch>='A'&&ch<='F') number=number*16+(ch-'A'+10); else if(ch>='a'&&ch<='f') number=number*16+(ch-'a'+10); }//说明:要滤去所有的非十六进制字符,实际上只要对这些字符不进行任何操作就行了(当它不存在!)。 System.out.println(number); } }}或: number=0; str=str.toLowerCase(); //所有字母转换成小写字母 for(i=0;i<str.length();i++){ //从左往右依次取出字符 ch=str.charAt(i); if(ch>='0'&&ch<='9') //合法字符转换成相应数值后计算十进制数 number=number*16+(ch-'0'); else if(ch>='a'&&ch<='f') number=number*16+(ch-'a'+10); }或: number=0; str=str.toUpperCase(); //所有字母转换成大写字母 for(i=0;i<str.length();i++){ //从左往右依次取出字符 ch=str.charAt(i); if(ch>='0'&&ch<='9') //合法字符转换成相应数值后计算十进制数 number=number*16+(ch-'0'); else if(ch>='A'&&ch<='F') number=number*16+(ch-'A'+10); }实验13 数组作为方法的参数(4-6题) 40023 40033(选做) 60019(选做) 60030 60031 6003247.统计素数并求和。 40023输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2 个正整数m和n(1<=m,n<=500),统计并输出m 和n之间的素数的个数以及这些素数的和。import java.util.Scanner;public class Test40023{ public static void main(String args[]){ int ri, repeat; int count, i, j, k, m, n, sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ m=in.nextInt(); n=in.nextInt(); count=sum=0; for(k=m;k<=n;k++){ for(i=2;i<=k-1;i++)if(k%i==0)break;if(i==k){count++;sum+=k;} } System.out.println("count="+count+", sum="+sum); } }}另一种编法: count=sum=0; boolean flag; for(k=m;k<=n;k++) { if(k==1)flag=false; //1不是素数 else flag=true; for(i=2;i<=k-1;i++) { if(k%i==0){flag=false; break;} } if(flag){sum+=i; count++;} }48.简单计算器(选做) 40033输入一个正整数repeat (0<repeat<10),做repeat次下列运算:程序模拟简单运算器的工作:输入一个算式,遇等号"="说明输入结束,输出结果。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。import java.util.Scanner;public class T40033{ public static void main(String args[]) { int ri, repeat; int op1, op2, res; char operator; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ op1=in.nextInt(); operator=(in.next()).charAt(0); res=op1;while(operator!='=') { op2=in.nextInt();switch(operator) {case '+': res+=op2;break;case '-': res-=op2;break;case '*': res*=op2;break;case '/': res/=op2;break;}operator=(in.next()).charAt(0);} System.out.println(res); } }}49.找鞍点(选做)输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入 1 个正整数 n和n 阶方阵a中的元素,如果找到a 的鞍点(鞍点的元素值在该行上最大, 在该列上最小), 就输出它的下标, 否则,输出"NO"(设a最多有1个鞍点)。import java.util.Scanner;public class Test60019{ public static void main(String []args){ int ri, repeat; int i,j,k,row,col,n,a[][]; boolean flag; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); a=new int[n][n]; for (i=0;i<n;i++) for (j=0;j<n;j++) a[i][j]=in.nextInt(); flag=true; row=0; col=0;//不写这些,就通不过编译 for(i=0;i<n;i++){ //先在第i行中找出该行的最大值 row=i; //row保存最大值的行坐标 col=0; //col保存最大值的列坐标,假设第i行第0列元素为最大 for(j=1;j<n;j++) if(a[row][j]>a[row][col]) col=j; //再判断a[row][col]是否是第col列中的最小值 flag=true; for(k=0;k<n;k++) if(a[k][col]<a[row][col]){ flag=false; break; //若有比a[row][col]小的,可知它不是鞍点,可结束循环 } if(flag)break; //找到1个鞍点后就不用再找了} if(flag) System.out.println("a["+row+"]["+col+"]="+a[row][col]); else System.out.println("NO"); } }}50.编写排序函数(方法) 60030输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n,再输入n个整数,将它们从小到大排序后输出。要求将排序编写为一个sort()方法。import java.util.Scanner;public class Test60030{ public static void main(String []args){ int ri, repeat; int i, 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(); sort(a); for(i=0; i<n; i++) System.out.print(a[i]+" "); System.out.println(); } } //说明:数组作参数时,传递的是地址,形参数组和实参数组共用同一块内存,//方法sort()中对形参数组b排序,实际上就是对实参数组a排序,//所以不需要返回值。 static void sort(int b[]){ int i,j,k,temp; for(i=0;i<b.length-1;i++) { //选择法递增排序 k=i; for(j=i+1;j<b.length;j++) if(b[k]>b[j]) k=j; if(i!=k){ temp=b[i];b[i]=b[k]; b[k]=temp; } } }}51.编写矩阵加法和输出函数(方法) 60031输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入 1 个正整数 n(1≤n≤6), 再读入2个 n 阶方阵 a和b , 计算矩阵的和。要求:(1)编写计算矩阵和的函数(方法)add()。(2)编写输出矩阵的方法prt()。矩阵元素输出使用:System.out.print(a[i][j]+"");import java.util.Scanner;public class Test60031{ public static void main(String []args){ int ri, repeat; int a[][],b[][],c[][],i,j,n; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); a=new int[n][n]; b=new int[n][n];c=new int[n][n]; for(i=0; i<n; i++) for(j=0;j<n;j++) a[i][j]=in.nextInt(); for(i=0; i<n; i++) for(j=0;j<n;j++) b[i][j]=in.nextInt(); add(a,b,c); prt("A矩阵",a); prt("B矩阵",b); prt("A+B矩阵",c); } } static void add(int x[][],int y[][],int z[][]){ for(int i=0;i<x.length;i++) { for(int j=0;j<x[i].length;j++) { z[i][j]=x[i][j]+y[i][j]; } } } static void prt(String s,int a[][]){ System.out.println(s); for(int i=0; i<a.length; i++){for(int j=0;j<a[i].length;j++)System.out.print(a[i][j]+""); System.out.println(); } }}52. 编写函数求矩阵最大值 60032输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入 2 个正整数 m和n(1≤m,n≤6), 再读入1个 m×n 阶矩阵 a , 计算该矩阵元素的最大值。要求:编写max(),返回矩阵元素的最大值。import java.util.Scanner;public class Test60032{ public static void main(String []args){ int ri, repeat; int a[][],i,j,m,n; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ m=in.nextInt(); n=in.nextInt(); a=new int[m][n]; for(i=0; i<m; i++) for(j=0;j<n;j++) a[i][j]=in.nextInt(); System.out.println("max="+max(a)); } }static int max(int b[][]){int max=b[0][0]; 先设第一个元素是最大的for(int i=0;i<b.length;i++)for(int j=0;j<b[i].length;j++)if(max<b[i][j]) max=b[i][j];return max;}}程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10)并换行,然后做repeat次下列运算:输入一行字符,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。说明:1)使用c=line.charAt(i);表示从line中获得第i个字符,i从0开始。2)line中的字符个数为:line.length()例:括号内是说明输入2 Reold building room 123 Programming is fun输出43 import java.util.Scanner;public class Test40031{ public static void main(String []args ){ int ri, repeat,count, word,i; String line; char c; Scanner in=new Scanner(System.in); repeat=(in.nextLine()).charAt(0)-'0'; //输入repeat for(ri=1; ri<=repeat; ri++){ line=in.nextLine(); //输入一行字符 System.out.println( count); } }}程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个整数,从高位开始逐位输出它的各位数字。输出语句:System.out.print(digit+" ");例:括号内是说明输入3 123456-6008输出1 2 3 4 5 66 0 08import java.util.Scanner;public class Test40032{ public static void main(String []args ){ int ri, repeat; int digit; long n, temp, pow; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextLong(); System.out.println(); } }}import java.util.Scanner;public class a { public static void main(String[] args) { int ri, repeat; int digit; long n, temp, pow; Scanner in = new Scanner(System.in); repeat = in.nextInt(); for (ri = 1; ri <= repeat; ri++) { n = in.nextLong(); if(n<0){ n = -n; } temp = n; digit = 0; while(temp>0){ digit++; temp /= 10; } while(digit>0){ pow = (long) Math.pow(10, digit-1); System.out.print(n/pow%10+" "); digit--; } System.out.println(); } }}程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:程序模拟简单运算器的工作:输入一个算式,遇等号"="说明输入结束,输出结果。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。例:括号内是说明输入2 15 + 2 / 3 = 1 + 2 * 10 - 10 / 2 = 输出510 import java.util.Scanner;public class T40033{ public static void main(String args[]) { int ri, repeat; int op1, op2, res; char operator; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ op1=in.nextInt(); operator =(in.next()).charAt(0); System.out.println(res); } }}import java.util.Scanner;public class a{ public static void main(String args[]) { int ri, repeat; int op1, op2, res; char operator; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ op1=in.nextInt(); operator =(in.next()).charAt(0); while(operator!='=') {op2=in.nextInt(); switch(operator){ case '+':op1+=op2;break; case '-':op1-=op2;break; case '*':op1*=op2;break; case '/':op1/=op2;break; } operator=(in.next()).charAt(0); } res=op1; System.out.println(res); } }}输出m~n之间的所有闰年程序填空,不要改变与输入输出有关的语句。输入一个repeat(1<repeat<10)),做repeat次下列运算:输入正整数m和n(1900<=m<=n<=2100),分别代表年份的起止值,输出该范围内所有的闰年。判断闰年的条件是:能被 4 整除但不能被 100 整除,或者能被 400 整除。输出使用语句 System.out.println(year);输入输出示例:括号内是说明输入:22000 20172030 2040输出20002004200820122016203220362040import java.util.Scanner;public class T{ public static void main(String []args){ int year,m,n,repeat,ri; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++){ m=in.nextInt(); n=in.nextInt(); } }}import java.util.Scanner;public class a{ public static void main(String []args){ int year,m,n,repeat,ri; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++){ m=in.nextInt(); n=in.nextInt(); for(year=m;year<=n;year++){ if((year%4==0&&year%100!=0)||year%400==0){ System.out.println(year); }} } } }import java.util.Scanner;public class Test30009{public static void main(String args[]){int repeat, ri;int a,b,c,d;double x1,x2;Scanner in=new Scanner(System.in);repeat=in.nextInt();for(ri = 1; ri <= repeat; ri++){a=in.nextInt();b=in.nextInt();c=in.nextInt();if(a==0&&b==0&&c==0)System.out.println("a=b=c=0,meaningless");else if(a==0&&b==0&&c!=0)System.out.println("a=b=0,c!=0,error"); else if(a==0)System.out.println("x="+Math.round(-(float)c/b*100)/100.0); else //满足一元二次方程a*x*x+b*x+c=0条件{d=b*b-4*a*c;if(d>=0)//前面三种情况排除了就是最后一种情况,所以就不用写出来了!{ x1=(-b+Math.sqrt(d))/(2*a);x2=(-b-Math.sqrt(d))/(2*a);System.out.println("x1="+Math.round(x1*100)/100.0); System.out.println("x2="+Math.round(x2*100)/100.0); }else{System.out.println("x1="+Math.round((float)(-b)/(2*a)*100)/100.0+"+"+Math.round(Math.sqrt(-d)/(2*a)*100)/100.0+"i");System.out.println("x2="+Math.round((float)(-b)/(2*a)*100)/100.0+"-"+Math.round(Math.sqrt(-d)/(2*a)*100)/100.0+"i");} }}}}import java.util.Scanner;public class Test30010{ public static void main(String args[]){ int repeat, ri; char ch; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri = 1; ri <= repeat; ri++){ ch=(in.next()).charAt(0); switch(ch) {注意。。。这里的A是要加单引号的!!! case 'A':System.out.println("90-100");break;// case 'B':System.out.println("80-89");break; case 'C':System.out.println("70-79");break; case 'D':System.out.println("60-69");break; case 'E':System.out.println("0-59");break; default:System.out.println("Invalid input"); } } }}