浙江大学Java语言程序设计实验答案全集.docx
《浙江大学Java语言程序设计实验答案全集.docx》由会员分享,可在线阅读,更多相关《浙江大学Java语言程序设计实验答案全集.docx(36页珍藏版)》请在冰点文库上搜索。
浙江大学Java语言程序设计实验答案全集
Revisedasof23November2020
浙江大学Java语言程序设计实验答案全集
Java答案全集实验汇总。
实验2数据类型和变量的使用
一、程序填空,在屏幕上显示一个短句“ProgramminginJavaisfun!
”
import.*;
publicclassTest10001{
publicstaticvoidmain(Stringargs[]){
/*------------------------*/
}
}
二、程序填空,在屏幕上显示如下网格。
+---+---+
|||
|||
+---+---+
import.*;
publicclassTest10002{
publicstaticvoidmain(Stringargs[]){
/*------------------------*/
}
}
三、编写程序,在屏幕上显示如下图案。
(要求:
第1行行首无空格,每行行尾无空格)
****
***
**
*
publicclassTest10003{
publicstaticvoidmain(Stringargs[]){
/*------------------------*/
}
}
实验3运算符和表达式的使用
1、
运行结果:
m=2k=1
x=y=z=
ch1=-Ach2=A
ch1=-Ach2=a
Hello,WelcometocoreJava!
思考题:
(1)字符'A'的Unicode码比字符'a'的Unicode码小32。
(2)假设字符型变量ch中保存一个大写字母,执行ch+=('a'-'A');后,ch中是相应的小写字母。
例:
若ch='B',执行后ch='b'。
2、
运行结果:
m=3n=2.m大于n吗true
m=2n=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是十六进制数,化为二进制为00011111;
m是八进制数,化为二进制为00001111;
所以n&m为00001111(二进制),就是十进制数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=
思考题:
(1)因为temp=(--m+n++),等价于依次执行以下命令:
--m;
temp=(m+n);
n++;
所以,temp=2,m=0,n=3,k=3
(2)因为是double类型,不能赋给float类型的变量x
在后面加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/=
5、
源程序如下:
publicclassBall{
publicstaticvoidmain(String[]args){
floatr=,PI=,V;
V=4f/3f*PI*r*r*r;
}
}
运行结果:
球的半径为
球的体积为
实验4顺序结构程序的设计
程序填空,不要改变与输入输出有关的语句。
一、。
输入整数a和b,计算并输出a、b的和与差。
例:
输入
2-8
输出
Thesumis-6
Thedifferenceis10
import.*;
publicclassTest20001{
publicstaticvoidmain(Stringargs[]){
inta,b,sum,diff;
Scannerin=newScanner;
a=();
b=();
/*------------------*/
sum=a+b;
diff=a-b;
}
}
二、。
输入1个实数x,计算并输出其平方根。
例:
输入
输出
Thesquarerootofis
import.*;
publicclassTest20002{
publicstaticvoidmain(Stringargs[]){
doublex,root;
Scannerin=newScanner;
x=();
/*------------------*/
root=(x);
}
}
三、。
输入华氏温度f,计算并输出相应的摄氏温度c。
c=5/9(f-32).
例:
括号内是说明
输入
(华氏温度)
输出
publicclassTest20003{
publicstaticvoidmain(String[]args){
Scannerin=newScanner;
doublef,c;
f=();
/*------------------*/
c=9*(f-32);
publicclassTest20004{
publicstaticvoidmain(String[]args){
Scannerin=newScanner;
inttime1,time2,hours,mins;
time1=();
time2=();
/*------------------*/
/*计算两个时间之间的小时数和分钟数*/
hours=time2/100-time1/100;
mins=time2%100-time1%100;
/*当计算得到的分钟数为负数时进行如下处理*/
hours=mins>0hours:
hours-1;
mins=mins>0mins:
mins+60;
}
}
五、。
输入1个四位数,将其加密后输出。
方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。
例:
括号内是说明输入1257输出Theencryptednumberis4601(每一位上的数字加9除以10取余后,得0146,交换后得到4601)
publicclassTest20005{
publicstaticvoidmain(String[]args){
Scannerin=newScanner;
intnumber,digit1,digit2,digit3,digit4,newnum;
number=();
/*------------------*/
/*先分离出各位上的数字*/
digit1=number/1000;
digit2=number/100%10;;
publicclassTest20006{
publicstaticvoidmain(String[]args)throwsIOException{
charch;
/*------------------*/
ch+=32;";perimeter="+(int)(perimeter*100+/100.);
}
else
"Thesesidesdonotcorrespondtoavalidtriangle");
}
}
}
四、判断数的符号
输入整数x,若x大于0,y=1;若x等于0,y=0;否则,y=-1,最后输出y。
例:
括号内是说明
输入
3(repeat=3)
2-80
输出
1(x=2时y=1)
-1(x=-8时y=-1)
0(x=0时y=0)
publicclassTest30004{
publicstaticvoidmain(String[]args){
intri,repeat;
intx,y;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
x=();
/*------------------*/
if(x>0)y=1;
elseif(x==0)y=0;;
publicclassTest30007{
publicstaticvoidmain(String[]args)throwsIOException{
charch;
while(ch!
=''){
/*------------------*/
if('A'<=ch&&ch<='Z')
ch+=32;
elseif('a'<=ch&&ch<='z')
}
}
}
说明:
对正数y保留两位小数的表达式 (int)(y*100+/
或(x)*100)/
九、显示五级记分制成绩对应的百分制区间
输入一个正整数repeat(0输入五级制成绩(A-E),输出相应的百分制成绩(0-100)区间,要求使用switch语句。
五级制成绩对应的百分制成绩区间为:
A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59),如果输入不正确的成绩,显示"Invalidinput"。
输入输出示例:
括号内是说明
输入
6
ABCDEj(repeat=6,输入的五级成绩分别为A、B、C、D、E和无效的字符j)
输出
90-100
80-89
70-79
60-69
0-59
Invalidinput
publicclassTest30010{
publicstaticvoidmain(Stringargs[]){
intrepeat,ri;
charch;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
ch=()).charAt(0);/*输入1个字符*/
/*---------*/
switch(ch){
case'A':
"90-100");break;
case'B':
"80-89");break;
case'C':
"70-79");break;
case'D':
"60-69");break;
case'E':
"0-59");break;
default:
"Invalidinput");
}
}
}
实验6循环结构程序的设计
(一)
程序填空,不要改变与输入输出有关的语句。
1.
输入一个正整数repeat(0读入1个正整数n(n<=100),计算并输出1+1/2+1/3+……+1/n。
例:
括号内是说明
输入
2(repeat=1)
2
10
输出
publicclassTest40001{
publicstaticvoidmain(String[]args){
intri,repeat;
inti,n;
floatsum;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
n=();
/*--------------------*/
1.sum=0;
输入一个正整数repeat(0输入一个正整数n,输出2/1+3/2+5/3+8/5+...的前n项之和,保留4位小数(不足4位时,不必用0填满4位)。
(该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)
例:
括号内是说明
输入
3(repeat=3)
1520
输出
(第1项是
(前5项的和是
(前20项的和是
publicclassTest40011{
publicstaticvoidmain(String[]args){
intri,repeat;
inti,n;
floata,b,s,t;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
n=();
/*--------------------*/
a=1;;
publicclassTest40014{
publicstaticvoidmain(String[]args){
Scannerin=newScanner;
intgcd,lcm,m,n,r;
intrepeat,ri;
repeat=();
for(ri=1;ri<=repeat;ri++){
m=();
n=();
if(m<=0||n<=0)
else{
/*---------*/
lcm=m*n;
if(mr=m%n;
while(r!
=0)
{m=n;n=r;r=m%n;}
gcd=n;
lcm=lcm/gcd;
+",thegreatestcommondivisor:
"+gcd);
}
}
}
}
2.
输入一个正整数repeat(0输入1个正整数n,计算s的前n项的和。
s=1+1/2!
+....+1/n!
例:
括号内是说明
输入:
2(repeat=2)
2(n=2)
10(n=10)
输出:
publicclassTest40021{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
inti,n;
floats,t;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
n=();
/*--------------------*/
s=0;
t=1;
for(i=1;i<=n;i++){
t*=i;
1.s+=1/t;..+1/n!
输入一个正整数repeat(0输入1个正整数n,计算s的前n项的和(保留4位小数)。
s=1+1/2!
+....+1/n!
要求定义并调用函数fact(n)计算n的阶乘。
例:
括号内是说明
输入:
2(repeat=2)
2(n=2)
10(n=10)
输出:
publicclassTest50001{
publicstaticvoidmain(String[]args){
intri,repeat;
inti,n;
doubles;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
n=();
/*-----------*/
s=0;
for(i=1;i<=n;i++)
s+=fact(i);
}
}
/*---------------*/
staticdoublefact(intn){
inti;
doublef=1;
for(i=1;i<=n;i++)
f*=i;
returnf;
}
}
/*方法fact(n)也可以用以下递归算法设计
staticdoublefact(intn){
if(n==1)
return1;
else
returnn*fact(n-1);
}
*/
2.求a+aa+aaa+aa…a
输入一个正整数repeat(0输入2个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。
要求定义并调用函数fn(a,n),它的功能是返回aa…a(n个a)。
例如,fn(3,2)的返回值是33。
例:
括号内是说明
输入
2(repeat=2)
23(a=2,n=3)
85(a=8,n=5)
输出
246(2+22+222)
98760(8+88+888+8888+88888)
publicclassTest50002{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
inti,n,a;
longsn;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
a=();
n=();
/*------------*/
sn=0;
for(i=1;i<=n;i++)
sn+=fn(a,i);
}
}
/*------------*/
staticintfn(inta,intn){
ints=0;
for(inti=1;i<=n;i++)
s=s*10+a;
returns;
}
}
/*方法fn()也可以用以下递归算法设计
staticintfn(inta,intn){
if(n==1)
returna;
else
returnfn(a,n-1)*10+a;
}
*/
3.统计一个整数中数字的个数
输入一个正整数repeat(0读入1个整数,统计并输出该数中2的个数。
要求定义并调用函数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)
publicclassTest50003{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
intcount;
longn;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
n=();
/*---------*/
n=(n);
count=countdigit(n,2);
}
}
/*------------*/
staticintcountdigit(longnumber,intdigit){
....
要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。
例如,fib(7)的返回值是13。
例:
括号内是说明
输入:
3(repeat=3)
110(m=1,n=10)
20100(m=20,n=100)
10006000(m=1000,n=6000)
输出:
112358(1到10之间的Fibonacci数)
21345589(20到100之间的Fibonacci数)
159725844181(1000到6000之间的Fibonacci数)
publicclassTest50006{
publicstaticvoidmain(Stringargs[]){
intri,repeat;
inti,m,n;
longf;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
m=();
n=();
/*---------*/
i=1;
f=1;
while(f<=n){
i++;
f=fib(i);
}
}
}
/*------------*/
staticlongfib(intn){
inti;
longa=1,b=1,f=1;
for(i=3;i<=n;i++){副对角线为从矩阵的右上角至左下角的连线)
例:
括号内是说明
输入:
1(repeat=1)
4(n=4)
2341
5611
7181
1111
sum=35(2+3+4+5+6+7+8=35)
publicclassTest60011{
publicstaticvoidmain(String[]args){
intri,repeat;
inta[][],i,j,n,sum;
Scannerin=newScanner;
repeat=();
for(ri=1;ri<=repeat;ri++){
n=();
a=newint[n][n];
for(i=0;ifor(j=0;ja[i][j]=();
/*---------*/
sum=0;
for(i=0;i例:
括号内是说明
输入:
1(repea