浙江大学Java语言程序设计实验答案全集

更新时间:2024-06-03 06:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、程序填空,在屏幕上显示一个短句“Programming in Java is fun!” import java.io.*;

public class Test10001{

public static void main(String args[]){ /*------------------------*/

System.out.println(\in Java is fun!\

} }

二、程序填空,在屏幕上显示如下网格。 +---+---+ | | | | | | +---+---+

import java.io.*;

public class Test10002{

public static void main(String args[]){ /*------------------------*/ System.out.println(\

System.out.println(\ System.out.println(\ System.out.println(\

} }

三、编写程序,在屏幕上显示如下图案。(要求:第1行行首无空格,每行行尾无空格)

* * * * * * * * * *

public class Test10003{

public static void main(String args[]){ /*------------------------*/

System.out.println(\ System.out.println(\ System.out.println(\ System.out.println(\ } }

实验3 运算符和表达式的使用

1、

运行结果: m=2 k=1

x=1.0 y=2.0 z=-3.0 ch1=-A ch2=A

- 1 -

ch1=-A ch2=a

Hello,Welcome to core Java! 思考题:

(1) 字符'A'的Unicode码比字符'a'的Unicode码小32。

(2) 假设字符型变量ch中保存一个大写字母,执行ch+=('a'-'A' );后,ch中是相应的小写字母。例:若ch='B',执行后ch='b'。 2、

运行结果:

m=3 n=2. m大于n吗?true m=2 n=2. m大于n吗?false str1=Hello;str2=Hello! s1和s2相等吗?false

思考题:

(1)s2比s1多一个字符“!”,所以不相同。 (2)s2比s1多一个字符,所以s2比s1大。 3、

运行结果:

逻辑变量b1=true、b2=false b1^b2(异或运算)的结果是:true

b1^!b2(b2取反后与b1异或运算)的结果是:false n=31,m=15; m与n的位与运算结果是:15 m、n的位与后左移2位的结果:60

思考题: (1)若给b1赋值2,则程序出错。因为类型不匹配:不能从int转换为boolean (2)n是十六进制数,化为二进制为0001 1111;

m是八进制数,化为二进制为0000 1111;

所以n&m为0000 1111(二进制),就是十进制数15。 (3)120

(4)左移运算就是乘法运算,左移n位就相当于乘以2^n 4、

运行结果:

(m+n>k)?(m++):(--m+n++)的运算结果:2 float型变量强制转换为int型的结果是:3 int型变量运算:(m+2*n)/k的结果是:2

- 2 -

(m+2*n)/k的结果赋值给float型变量后x=2.0

思考题:

(1)因为temp=(--m+n++),等价于依次执行以下命令:

--m;

temp=(m+n); n++;

所以,temp=2,m=0,n=3,k=3

(2)因为3.14是double类型,不能赋给float类型的变量x

在3.14后面加F或f,将其转换成float类型,就可以赋值了 (3)此时m=1,n=3,k=3,所以(m+2*n)/k=7/3=2 (4)x=(m+2*n)/(float)k=7/3.0=2.3333333 5、

源程序如下:

public class Ball { public static void main (String[] args){ float r=6.5f, PI=3.14f,V; V=4f/3f*PI*r*r*r; System.out.println(\球的半径为\ System.out.println(\球的体积为\ } }

运行结果: 球的半径为6.5

球的体积为1149.7634

实验4 顺序结构程序的设计

程序填空,不要改变与输入输出有关的语句。 一、求两个数的和与差。

输入整数a和b,计算并输出a、b的和与差。 例: 输入 2 -8 输出

The sum is -6

The difference is 10 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();

- 3 -

b=in.nextInt();

/*------------------*/ sum=a+b; diff=a-b;

System.out.println(\

System.out.println(\ } }

二、求平方根。

输入1个实数x,计算并输出其平方根。 例: 输入 1.21 输出

The square root of 1.21 is 1.1 import 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(\ } }

三、华氏温度转换为摄氏温度。

输入华氏温度f,计算并输出相应的摄氏温度c。c = 5/9(f-32). 例:括号内是说明 输入

17.2 (华氏温度) 输出

The temprature is -8.222222222222223 import 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); //注意:5/9结果是0

System.out.println(\

- 4 -

} }

四、计算旅途时间。

输入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=time20-time10;

/*当计算得到的分钟数为负数时进行如下处理*/ hours=mins>0?hours:hours-1; mins=mins>0?mins:mins+60;

System.out.println(\mins.\ } }

五、数字加密。

输入1个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。 例:括号内是说明 输入 1257 输出

The encrypted number is 4601(每一位上的数字加9除以10取余后,得0146,交换后得到

- 5 -

int repeat, ri,x; double y;

Scanner in=new Scanner(System.in); repeat=in.nextInt();

for(ri = 1; ri <= repeat; ri++){ x=in.nextInt(); /*---------*/

} }

}

if(x==0) y=0; else

y=(int)((1.0/x)*100+0.5)/100.;

//或 y=Math.rint((1.0/x)*100)/100.;

System.out.println(\

说明:对正数y保留两位小数的表达式 (int)(y*100+0.5)/100.0

或 Math.rint((1.0/x)*100)/100.0

九、显示五级记分制成绩对应的百分制区间

输入一个正整数 repeat (0

输入五级制成绩(A-E),输出相应的百分制成绩(0-100)区间,要求使用switch语句。 五级制成绩对应的百分制成绩区间为:A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59),如果输入不正确的成绩,显示\。

输入输出示例:括号内是说明 输入 6

A B C D E j (repeat=6,输入的五级成绩分别为A、B、C、D、E和无效的字符j) 输出 90-100 80-89 70-79 60-69 0-59

Invalid input

import java.util.Scanner; public class Test30010{

public static void main(String args[]){ int repeat, ri; char ch;

- 16 -

Scanner in=new Scanner(System.in); repeat=in.nextInt();

for(ri = 1; ri <= repeat; ri++){ ch=(in.next()).charAt(0); /*输入1个字符*/ /*---------*/

switch(ch) { case

'A':System.out.println(\);break;

input\);

} }

case 'B':System.out.println(\);break; case 'C':System.out.println(\);break; case 'D':System.out.println(\);break; case 'E':System.out.println(\);break; default: System.out.println(\ }

- 17 -

实验6 循环结构程序的设计(一)

程序填空,不要改变与输入输出有关的语句。

1. 求1+1/2+1/3+……+1/n

输入一个正整数repeat (0

读入1 个正整数 n(n<=100),计算并输出1+1/2+1/3+??+1/n 。 例:括号内是说明 输入

2 (repeat=1) 2 10 输出 1.5

2.9289684

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(); /*--------------------*/

}

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

3 (repeat=2)

- 18 -

1 10 5 输出 1.0

3628800.0 120.0

import java.util.Scanner; public class Test40002 { public static void main(String[] args) { int ri, repeat; int i, n; double fact; 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

2 (repeat=2) 1.5 2 2.0 10 输出 2.25 1024.0

import java.util.Scanner; public class Test40003 { public static void main(String[] args) { int ri, repeat; int i, n;

- 19 -

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

读入1 个正整数 n(n<=100),计算并输出1+1/3+1/5+1/7+??的前n项和。 例:括号内是说明 输入

2 (repeat=2) 10 3 输出 2.133256 1.5333334

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++) { sum+=1.0f/temp; temp+=2; }

- 20 -

读入1 个正实数eps,计算并输出1-1/3+1/5-1/7+??,直到最后一项的绝对值小于eps为止(要求每一项的绝对值均大于等于eps,并以float类型输出数据)。

例:括号内是说明 输入

2 (repeat=2) 1E-4 0.1 输出 0.7853 0.8349

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.);

} }

3. 求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项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)

- 26 -

例:括号内是说明 输入

3 (repeat=3) 1 5 20 输出

2.0 (第1项是2.0)

8.3917 (前5项的和是8.3917) 32.6603 (前20项的和是32.6603)

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; //分子是前一项分子与分母的和 }

System.out.println((int)(s*10000+.5)/10000.); } } }

4. 求a+aa+aaa+aa…a

输入一个正整数repeat (0

例:括号内是说明 输入

2 (repeat=2) 2 3 (a=2, n=3) 8 5 (a=8, n=5)

- 27 -

输出

246 (2+22+222)

98760 (8+88+888+8888+88888)

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; //迭代公式 }

System.out.println(sn); } } }

5. 判断素数

输入一个正整数repeat (0

输入一个正整数m,如果它是素数,输出\,否则,输出\(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。

例:括号内是说明 输入

4 (repeat=4) 1 2 9 17 输出

NO (1不是素数) YES (2是素数) NO (9不是素数) YES (17是素数)

import java.util.Scanner; public class Test40013{

public static void main(String args[]){

- 28 -

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; for(i=2;i<=m-1;i++) if(m%i==0){ flag=false; break; }

if(flag) System.out.println(\ else System.out.println(\ } } }

说明:变量n未用到

6. 求最小公倍数和最大公约数

输入一个正整数 repeat (0

输入输出示例:括号内为说明 输入:

3 (repeat=3) 3 7 (m=3,n=7) 24 4 (m=24,n=4) 24 18 (m=24,n=18)

输出:

the least common multiple:21, the greatest common divisor:1 the least common multiple:24, the greatest common divisor:4 the least common multiple:72, the greatest common divisor:6

import java.util.*;

public class Test40014 {

public static void main(String []args){ Scanner in=new Scanner(System.in); int gcd, lcm, m, n,r;

- 29 -

int repeat, ri;

repeat=in.nextInt();

for(ri=1; ri<=repeat; ri++){ m=in.nextInt(); n=in.nextInt(); if(m<= 0||n<= 0) System.out.println(\ else { /*---------*/

divisor:\ } } }

lcm=m*n;

if(m

while(r!=0)

{m=n; n=r; r=m%n;} gcd=n;

lcm=lcm/gcd;

System.out.println(\ +\

}

7. 求1 + 1/2! +....+ 1/n!

输入一个正整数repeat (0

例:括号内是说明 输入:

2 (repeat=2) 2 (n=2) 10 (n=10) 输出: 1.5 1.7183

import java.util.Scanner; public class Test40021{

public static void main(String args[]){ int ri, repeat;

- 30 -

/*------------*/

static int fn(int a,int n){ int s=0;

for(int i=1;i<=n;i++) s=s*10+a; return s; }

}

/* 方法fn()也可以用以下递归算法设计 static int fn(int a,int n){ if (n==1) return a; else

return fn(a,n-1)*10+a; } */

3. 统计一个整数中数字的个数

输入一个正整数repeat (0

要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。例如,countdigit(10090,0)的返回值是3。

例:括号内是说明 输入:

3 (repeat=3) -21902 2

345543 输出:

count=2 (-21902中有2个2) count=1 (有1个2)

count=0 (345543中没有2)

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++){

- 36 -

n=in.nextInt(); /*---------*/

n=Math.abs(n);

count=countdigit(n,2);

System.out.println(\ } }

/*------------*/

static int countdigit(long number,int digit){

//统计整数number中数字digit的个数

int a,c=0;

while(number>0){

a=(int)(number); if(a==digit)c++; number=number/10; }

return c; }

}

4. 判断素数

输入一个正整数repeat (0

输入一个正整数n,如果它是素数,输出\,否则,输出\(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。 要求定义并调用函数prime(m)判断m是否为素数。

例:括号内是说明 输入

4 (repeat=4) 1 2 9 17 输出

NO (1不是素数) YES (2是素数) NO (9不是素数) YES (17是素数)

import java.util.Scanner; public class Test50004{

public static void main(String args[]){ int ri, repeat,n; boolean flag;

- 37 -

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(\ else System.out.println(\ } }

/*------------*/

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; }

}

5. 统计素数并求和

输入一个正整数repeat (0

输入2 个正整数m和n(1<=m,n<=500),统计并输出m 和n之间的素数的个数以及这些素数的和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。 要求定义并调用函数prime(m)判断m是否为素数。

例:括号内是说明 输入:

3 (repeat=3) 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 Test50005{

public static void main(String args[]){ int ri, repeat;

- 38 -

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(\ } }

/*------------*/

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; }

}

6. 输出 Fibonacci 序列

输入一个正整数repeat (0

输入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+\

例:括号内是说明 输入:

3 (repeat=3) 1 10 (m=1, n=10) 20 100 (m=20, n=100)

1000 6000 (m=1000, n=6000) 输出:

1 1 2 3 5 8 (1到10之间的Fibonacci数) 21 34 55 89 (20到100之间的Fibonacci数)

- 39 -

1597 2584 4181 (1000到6000之间的Fibonacci数)

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); }

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; }

} /* 方法fib(n)用递归实现 static long fib(int n){

if(n==1||n==2) return 1;

else return fib(n-1)+fib(n-2); }

- 40 -

本文来源:https://www.bwwdw.com/article/qwe6.html

Top