浙江大学Java语言程序设计实验答案全集
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江大学Java语言程序设计实验答案全集
Java答案全集实验汇总。
实验2 数据类型和变量的使用
一、程序填空,在屏幕上显示一个短句“Programming in Java is fun!”
import java.io.*;
public class Test10001{
public static void main(String args[]){
/*------------------------*/
System.out.println("Programming 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
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
(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("球的半径为"+r);
System.out.println("球的体积为"+V);
}
}
运行结果:
球的半径为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();
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.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("The square root of "+x+" is "+root);
}
}
三、华氏温度转换为摄氏温度。
输入华氏温度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("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
输出
g
import java.io.*;
public class Test20006 {
public static void main(String[] args) throws IOException {
char ch;
ch=(char)System.in.read();
/*------------------*/
ch+=32; //或ch=(char)(ch+32);
System.out.println(ch);
}
}
七、计算三门课程的平均成绩。
已知某位学生的数学、英语和计算机课程的
成绩分别是87分、72分和93分,求该生3
门课程的平均分。
本题无输入。
输出示例:
math = 87, eng = 72, comp = 93
average = 84
public 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.89
import java.util.Scanner;
public class Test20008 {
public static void main(String[] args) {
int money, year;
double interest, rate;
Scanner in=new
Scanner(System.in);
/*使用in.nextDouble()和
in.nextInt()输入double和int型数据*/ /**********/
money=in.nextInt();
year=in.nextInt();
rate=in.nextDouble();
interest=money*Math.pow((1+rate), year )- money;
//注意:指数运算没有运算符,应使用数学
类的方法pow
System.out.println("interest =
"+ (int)(interest*100+0.5)/100.0);
//正数保留两位小数
}
}
九、计算两个数的和、差、积、商与余数。
输入2个整数 num1 和 num2,计算并输出
它们的和、差、积、商与余数。
输入输出示例:括号内是说明
输入
5 3 (num1=5,num2=3)
输出
5+3=8
5-3=2
5*3=15
5/3=1
5%3=2
import java.util.Scanner;
public class Test20010{
public static void main(String
args[]){
int num1,num2;
Scanner in=new
Scanner(System.in);
num1=in.nextInt();
num2=in.nextInt();
/*------------------------*/ System.out.println(num1+"+"+num2+"="+(num1+num2));
System.out.println(num1+"-"+num2+"="+(num1-num2));
System.out.println(num1+"*"+num2+"="+(num1*num2));
System.out.println(num1+"/"+num2+"="+(num1/num2));
System.out.println(num1+"%"+num2+"="+(num1%num2));
}
}
十、计算一个3位数的各位数字。
输入一个3位数n,分别求出 n 的个位数字
(c)、十位数字(b)和百位数字(a)的值。
输入输出示例:
输入:
152
输出:
number152:digit1=2,digit2=5,digit3=1
import java.util.Scanner;
public class Test20011{
public static void main(String
args[]){
int a,b,c,n;
Scanner in=new
Scanner(System.in);
n=in.nextInt();
/*------------------------*/
c=n%10;
b=(n/10)%10;
a=(n/100)%10;
System.out.println("number"+n+":digit 1="+c+",digit2="+b+",digit3="+a);
}
}
十一、计算x的平方。
输入x,计算x的平方y。
并分别以"y=x*x"和"x*x=y"的形式输出 x 和 y 的值。
输入输出示例:
输入:
3
输出:(输出中不能出现空格)
9=3*3
3*3=9
import java.util.Scanner;
import java.util.Scanner;
public class Test20012 {
public static void main(String
[]args){
int x,y;
Scanner in=new
Scanner(System.in);
x=in.nextInt();
/*--------------*/
y=x*x;
System.out.println(y+"="+x+"*"+x);
System.out.println(x+"*"+x+"="+y);
} }
实验5 分支结构程序的设计
程序填空,不要改变与输入输出有关的语句。
一、显示两级成绩
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个学生的数学成绩,如果它低于60,输出“Fail”,否则,输出“Pass”。
输出使用System.out.println("Pass");及System.out.println("Fail");
例:括号内是说明
输入
2 (repeat=2)
60 59
输出
Pass
Fail
import 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 90
10 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”。
在一个三角形中,任意两边之和大于第三边。
三角形的面积计算公式:
area*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 3
1 1 4
输出
area=7.15;perimeter=13.0
These sides do not correspond to a valid triangle
import 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。
例:括号内是说明
输入
3 (repeat=3)
2 -8 0
输出
1 (x=2时y=1)
-1 (x=-8时y=-1)
0 (x=0时y=0)
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);
}
}
}
五、计算个人所得税
输入一个正整数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.87
32098.76
800
4010
2850
输出
tax=8.04
tax=6249.75
tax=0.0
tax=474.0
tax=200.0
import 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] grapes
price=4.1
import 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);
}
}
}
七、字母转换
输入一批以问号“?”结束的字符,对“?”以前的每一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。
例:
输入
F=y?
输出
f=Y
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();
}
}
}
八、计算函数的值
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入整数 x,计算并输出下列函数 f(x) 的值(保留2位小数,如果答案为3.50,则直接显示为3.5)。
当 x 等于0时,f(x) = 0,当 x 不等于0时,f(x) = 1/x 。
输入输出示例:括号内是说明
输入
3 (repeat=3)
6 (x=6)
10 (x=10)
0 (x=0)
输出
f(6)=0.17
f(10)=0.1
f(0)=0.0
import java.util.Scanner;
public class Test30008{
public static void main(String
args[]){
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("f("+x+")="+y);
}
}
}
说明:对正数y保留两位小数的表达式(int)(y*100+0.5)/100.0
或
Math.rint((1.0/x)*100)/100.0
九、显示五级记分制成绩对应的百分制区间
输入一个正整数 repeat (0<repeat<10),做repeat 次下列运算:
输入五级制成绩(A-E),输出相应的百分制成绩(0-100)区间,要求使用switch语句。
五级制成绩对应的百分制成绩区间为:
A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59),如果输入不正确的成绩,显示"Invalid input"。
输入输出示例:括号内是说明
输入
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;
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("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");
}
}
}
实验6 循环结构程序的设计(一)
程序填空,不要改变与输入输出有关的语句。
1. 求1+1/2+1/3+……+1/n
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入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<repeat<10),做repeat次下列运算:
读入1 个正整数 n(n<=50),计算并输出
n! 。
例:括号内是说明
输入
3 (repeat=2)
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<repeat<10),做
repeat次下列运算:
读入1 个正实数x和1个正整数 n(n<=50),计算并输出x的n次幂。
例:括号内是说明
输入
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;
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项和。
例:括号内是说明
输入
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;
}
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。