浙大JAVA 实验题答案07answer.docx
- 文档编号:9963123
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:18
- 大小:18.48KB
浙大JAVA 实验题答案07answer.docx
《浙大JAVA 实验题答案07answer.docx》由会员分享,可在线阅读,更多相关《浙大JAVA 实验题答案07answer.docx(18页珍藏版)》请在冰豆网上搜索。
浙大JAVA实验题答案07answer
实验7循环结构程序的设计
(二)
1.程序填空题,不要改变与输入输出有关的语句。
40004 求1-1/2+1/3-1/4+……
输入一个正整数repeat(0 读入1个正整数n(n<=100),计算并输出1-1/2+1/3-1/4+……的前n项和(四舍五入保留小数4位)。 例: 括号内是说明 输入 2(repeat=2) 10 3 输出 0.6456 0.8333 importjava.util.Scanner; publicclassTest40004{ publicstaticvoidmain(String[]args){ intri,repeat; inti,n,flag; floatsum; Scannerin=newScanner(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.); } } } 40006 求1-1/3+1/5-1/7+…… 输入一个正整数repeat(0 读入1个正实数eps,计算并输出1-1/3+1/5-1/7+……,直到最后一项的绝对值小于eps为止(要求每一项的绝对值均大于等于eps,并以float类型输出数据)。 例: 括号内是说明 输入 2(repeat=2) 1E-4 0.1 输出 0.7853 0.8349 importjava.util.Scanner; publicclassTest40006{ publicstaticvoidmain(String[]args){ intri,repeat; inttemp,flag; doubleeps,item,sum; Scannerin=newScanner(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.); } } } 40011求2/1+3/2+5/3+8/5+... 输入一个正整数repeat(0 输入一个正整数n,输出2/1+3/2+5/3+8/5+...的前n项之和,保留4位小数(不足4位时,不必用0填满4位)。 (该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子) 例: 括号内是说明 输入 3(repeat=3) 1520 输出 2.0(第1项是2.0) 8.3917(前5项的和是8.3917) 32.6603(前20项的和是32.6603) importjava.util.Scanner; publicclassTest40011{ publicstaticvoidmain(String[]args){ intri,repeat; inti,n; floata,b,s,t; Scannerin=newScanner(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;//分子是前一项分子与分母的和 } System.out.println((int)(s*10000+.5)/10000.); } } } 40012求a+aa+aaa+aa…a 输入一个正整数repeat(0 输入2个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。 例: 括号内是说明 输入 2(repeat=2) 23(a=2,n=3) 85(a=8,n=5) 输出 246(2+22+222) 98760(8+88+888+8888+88888) importjava.util.Scanner; publicclassTest40012{ publicstaticvoidmain(Stringargs[]){ intri,repeat; inti,n,a,sn,tn; Scannerin=newScanner(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;//迭代公式 } System.out.println(sn); } } } 40013判断素数(提示: 变量n未用到) 输入一个正整数repeat(0 输入一个正整数m,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。 例: 括号内是说明 输入 4(repeat=4) 12917 输出 NO(1不是素数) YES(2是素数) NO(9不是素数) YES(17是素数) importjava.util.Scanner; publicclassTest40013{ publicstaticvoidmain(Stringargs[]){ intri,repeat; inti,m,n; booleanflag; Scannerin=newScanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++){ m=in.nextInt(); /*--------------------*/ flag=true; if(m==1)flag=false; for(i=2;i<=m-1;i++) if(m%i==0){ flag=false; break; } if(flag)System.out.println("YES"); elseSystem.out.println("NO"); } } } 40014求最小公倍数和最大公约数 输入一个正整数repeat(0 输入两个正整数m和n,输出它们的最小公倍数和最大公约数。 输入输出示例: 括号内为说明 输入: 3(repeat=3) 37(m=3,n=7) 244(m=24,n=4) 2418(m=24,n=18) 输出: theleastcommonmultiple: 21,thegreatestcommondivisor: 1 theleastcommonmultiple: 24,thegreatestcommondivisor: 4 theleastcommonmultiple: 72,thegreatestcommondivisor: 6 importjava.util.*; publicclassTest40014{ publicstaticvoidmain(String[]args){ Scannerin=newScanner(System.in); intgcd,lcm,m,n,r; intrepeat,ri; repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++){ m=in.nextInt(); n=in.nextInt(); if(m<=0||n<=0) System.out.println("m<=0orn<=0"); else{ /*---------*/ lcm=m*n; if(m r=m%n; while(r! =0) {m=n;n=r;r=m%n;} gcd=n; lcm=lcm/gcd; System.out.println("theleastcommonmultiple: "+lcm +",thegreatestcommondivisor: "+gcd); } } } } 40021求1+1/2! +....+1/n! 输入一个正整数repeat(0 输入1个正整数n,计算s的前n项的和。 s=1+1/2! +....+1/n! 例: 括号内是说明 输入: 2(repeat=2) 2(n=2) 10(n=10) 输出: 1.5 1.7183 importjava.util.Scanner; publicclassTest40021{ publicstaticvoidmain(Stringargs[]){ intri,repeat; inti,n; floats,t; Scannerin=newScanner(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.); } } } 40022求各位数字的立方和等于它本身的数(提示: 被判断的数不一定是三位数) 输入一个正整数repeat(0 输入2个正整数m和n(1<=m,n<=1000),输出m和n之间所有满足各位数字的立方和等于它本身的数。 输出语句: System.out.println(i); 例: 括号内是说明 输入: 2(repeat=2) 100400(m=100,n=400) 1100(m=1,n=100) 输出: 153(1*1*1+5*5*5+3*3*3=153) 370(3*3*3+7*7*7=370) 371(3*3*3+7*7*7+1*1*1=371) 1 importjava.util.Scanner; publicclassTest40022{ publicstaticvoidmain(Stringargs[]){ intri,repeat; inti,digit,m,n,number,sum; Scannerin=newScanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++){ m=in.nextInt(); n=in.nextInt(); /*------------------*/ for(i=m;i<=n;i++){ number=i;//注意不能直接对i进行分解 sum=0; while(number>0){ digit=number%10; number=number/10; sum+=digit*digit*digit; } if(i==sum) System.out.println(i); } } } } 40023统计素数并求和 输入一个正整数repeat(0 输入2个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和。 例: 括号内是说明 输入: 3(repeat=2) 110(m=1,n=10) 2035(m=20,n=35) 1416(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之间没有素数) importjava.util.Scanner; publicclassTest40023{ publicstaticvoidmain(Stringargs[]){ intri,repeat; intcount,i,j,k,m,n,sum; Scannerin=newScanner(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; booleanflag; for(k=m;k<=n;k++){ if(k==1)flag=false;//1不是素数 elseflag=true; for(i=2;i<=k-1;i++){ if(k%i==0){flag=false;break;} } if(flag){sum+=i;count++;} } 2.编程题 40036编程: 输出距2016年元旦days天后的星期 编程,已知2016年元旦(1月1日)是星期五,运行程序后输入n,进行n次下列运算: 输入一个整数days(>=0),计算并输出2016元旦后经days天,是星期几。 具体星期用整数0~6表示,分别对应星期日、星期一至星期六。 说明: 1)源程序中不得出现package关键字; 2)程序中的第一个大括号“{”必须位于类名所在行。 3)类名与变量名由编程者自取。 4)指明为整数或整数的数据,不要用浮点类型。 输入输出示例: 括号内是说明 输入 3(n=3,表示后面要输入3次days) 36(第一个days) 100(第二个days) 1000(第三个days) 输出 6(2016年元旦后第36天是星期六) 0(2016年元旦后第100天是星期日) 4(2016年元旦后第1000天是星期四) importjava.util.Scanner; publicclassTest40036{ publicstaticvoidmain(Stringargs[]){ intri,n; intdays,week; Scannerin=newScanner(System.in); n=in.nextInt(); week=0; for(ri=1;ri<=n;ri++){ days=in.nextInt(); switch(days%7){ case0: week=5;break; case1: week=6;break; case2: week=0;break; case3: week=1;break; case4: week=2;break; case5: week=3;break; case6: week=4;break; } //或不用switch语句,直接计算: week=(days+5)%7 System.out.println(week); } } } 40037编程: 求平均成绩并统计不及格人数 编程: 输入一个正整数n(n>0),做n次下列运算: 从键盘输入一批学生的整数成绩(至少有1个成绩,以负数为结束标志),计算平均分(保留2位小数),并统计不及格成绩的个数。 假定平均分使用变量ave,则平均分输出使用格式: System.out.println("average="+Math.round(ave*100)/100.); 说明: 1)源程序中不得出现package关键字; 2)程序中的第一个大括号“{”必须位于类名所在行。 3)类名与变量名由编程者自取。 4)指明为整数或整数的数据,不要用浮点类型。 输入输出示例: 括号内是说明 输入 2(n=2,表示后面要输入二批成绩) 6788735482-1(第一批成绩) 789033596910092-1(第二批成绩) 输出 average=72.8(第一批成绩的平均分) count=1(第一批成绩的不及格人数) average=74.43(第二批成绩的平均分) count=2(第二批成绩的不及格人数) importjava.util.Scanner; publicclassTest40037{ publicstaticvoidmain(Stringargs[]){ intri,n; intscore,sum,count1,count; floatave; Scannerin=newScanner(System.in); n=in.nextInt(); for(ri=1;ri<=n;ri++){ sum=count1=count=0; score=in.nextInt(); while(score>=0){ sum+=score; count1++; if(score<60)count++; score=in.nextInt(); } ave=(float)sum/count1; System.out.println("average="+Math.round(ave*100)/100.); System.out.println("count="+count); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浙大JAVA 实验题答案07answer 浙大 JAVA 实验 答案 07 answer