浙江大学Java语言程序设计实验答案全集
更新时间:2024-06-03 06:04:01 阅读量: 综合文库 文档下载
- C语言程序设计浙江大学推荐度:
- 相关推荐
一、程序填空,在屏幕上显示一个短句“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 -
正在阅读:
浙江大学Java语言程序设计实验答案全集06-03
2017年小学二年级语文下册教学工作总结04-23
600万犹太人“统治”美国04-15
莫道克大学研究型项目如何01-01
金融市场学及答案(题库)04-30
你是一个文静善良的女孩08-13
中国经济发展方式转变的前景及现状10-02
执业药师报考附件05-22
电梯维保资格考试04-23
关于加强高速公路政工队伍建设的几点建议05-12
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 浙江大学
- 程序设计
- 全集
- 答案
- 语言
- 实验
- Java
- 新概念英语(青少版)1A L1-L16 试卷
- 充电工岗位责任制
- 2016-2022年中国仲丁醇行业全景调研及投资战略报告 - 图文
- 华宁县甸尾小学义务教育均衡发展目标管理制度
- 银行都有什么岗位 - 银行什么岗位比较好
- 往来款项询证函-英文版
- 2017新版人教版二年级上册语文教学计划
- 让好书陪伴你一生
- 工程项目成本控制方法研究
- 论中国革命为什么必须走“农村包围城市”的道路
- 最新北师大版八年级英语上册Unit2 Teams同步练习含答案
- 复杂曲面的测量技术研究
- 毕业设计(论文) 单层双跨工业厂房结构设计
- 3ds+max常用命令英汉互译 doc
- 1978年开始的风景 山西历年高考状元近况
- 炼铁单元重点岗位安全培训试题
- 基于SAP NetWeaver EP的单点登录(SSO)
- 试论网络参与的失序问题及其治理
- 高中研究性学习课题参考
- XX三年级英语下册第2单元集体备课教案