浙大JAVA实验题答案07answer.docx

上传人:b****6 文档编号:4419628 上传时间:2022-12-01 格式:DOCX 页数:15 大小:18.73KB
下载 相关 举报
浙大JAVA实验题答案07answer.docx_第1页
第1页 / 共15页
浙大JAVA实验题答案07answer.docx_第2页
第2页 / 共15页
浙大JAVA实验题答案07answer.docx_第3页
第3页 / 共15页
浙大JAVA实验题答案07answer.docx_第4页
第4页 / 共15页
浙大JAVA实验题答案07answer.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

浙大JAVA实验题答案07answer.docx

《浙大JAVA实验题答案07answer.docx》由会员分享,可在线阅读,更多相关《浙大JAVA实验题答案07answer.docx(15页珍藏版)》请在冰豆网上搜索。

浙大JAVA实验题答案07answer.docx

浙大JAVA实验题答案07answer

浙大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);

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1