Java课程设计_第1页
Java课程设计_第2页
Java课程设计_第3页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学号202110159308武汉科技大学城市学院课程设计报告课程设计名称JAVA 程序设计课程设计题 目 A C M信息工程学部专业软件工程班级姓名指导教师2021年 6 月 23 日课程设计评分表评分标准:占 30%1. 学生是否严格遵守课程设计纪律,按照规定时间完成设计任务2. 程序设计的质量与标准:(占40%)(1) 任务书上的题目是否完成,并选做了ACM题目(2) 成功提交的ACM题目的数题及难度(3) 是否采用了良好的设计方法,独立完成程序设计(4) 程序是否运行正常,未见运行错误3. 课程设计报告书的质量与标准(占30%)教师评分:1.学生出勤得分A.优B.良C.中D.及格E.不及

2、格2.程序设计得分A.优B.良C.中D.及格E.不及格3.设计报告得分A.优B.良C.中D.及格E.不及格总分:教师评语:根据该生在课程设计期间,是否严格遵守课程设计纪律,按照规定时间完成设计任务, 完成的程序设计的质量与标准,提交的课程设计报告书的质量与标准等多方面的评分, 该生本次课程设计的评分为: 教师签名:日期:年 月 日JAVA编程课程设计指导书学时:1周,学分:11 课程设计目的:JAVA编程课程设计属于软件开发类课程设计。该课程设计培养学生熟练应用当前主流的 JAVA软件开发语言,检验软件的设计、编码与测试,具备较强的JAVA语言软件开发能力。2 课程设计方式:1JAVA编程课程

3、设计方式采取 ACM测试的方式,利用所学的面向对象程序设计 JAVA 知识,培养学生具有分析应用问题的能力,能够独立完成应用程序的编制与调试工作。3每个同学必须完成 8-12道题,每题写出解题报告,解题报告内容:.题目标题2题目描述3.解题思路4.源码5小结3. 课程设计平台:eclipse 或Myeclipse4 课程设计考核方式1学生独立提交软件设计作品和“课程设计报告书,指导教师根据学生组提交的 软件设计作品和“课程设计报告书的质量,为学生组评定“优“良“中“及格或“不及格;2 根据各组学生所选题目的难易程度以及验收结果,为学生评定“优“良 “中 “及格或“不及格。“课程设计报告书包括:

4、课程设计工程名称,课程设计任务,课程设计任务功能说明及功能模块图,数据库设计,各模块功能说明,使用的算法描述如果需使用算法, 各模块界面设计,各模块中关键代码段功能说明与代码行注释,测试说明,参考文献等。5 参考文献1张思民.Java语言程序设计第 2版M.北京:清华大学出版社,2021.12姜华.Java工程实战教程M.北京:清华大学出版社,2021.93 陈喧.Java程序设计教程M.北京:清华大学出版社,2021.54 美Echel,B .Java编程思想第四版M.北京:机械工业出版社,20075 Michael Main.数据结构:Java语言描述第二版国外经典计算机科学教材M.北京:

5、中国电力出版社,20071星系炸弹11.1 问题描述1解题思路1代码1小结32小光棍数4问题描述4解题思路4代码5小结53零起点学算法12求2个日期之间的天数.7问题描述7解题思路7代码7小结94零起点学算法34继续求多项式104.1 问题描述10解题思路10代码10小结11125零起点学算法35再求多项式含浮点.问题描述12解题思路12代码12小结146 3n+1 问题15问题描述15解题思路15代码15小结167根底练习Huffuman树17问题描述17解题思路18代码18小结19总结201星系炸弹问题描述在X星系的广袤空间中漂浮着许多X星人造“炸弹,用来作为宇宙中的路标。每个炸弹都可以设

6、定多少天之后爆炸。比方:阿尔法炸弹2021年1月1日放置,定时为15天,那么它在2021年1月16日爆炸。有一个贝塔炸弹,2021年11月9日放置,输入定时天数,例如定时为1000天,请你计算它爆炸的准确日期。请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。比方:2021-02-19输入:输入炸弹引爆延迟的天数。输出:对于每个输入天数,输出符合题目要求的格式的日期。样例输入:1000样例输出:2021-08-05解题思路1, 分析题意可知,此题是求一个日期,想到了Calendar。2, 输入的数据是这个日期距离2021-11-09的天数,想到了 add方法。3, 用set

7、设置起始日期2021-11-09 11月在代码中表现为 10。4,用add方法设置偏移值,偏移值由键盘输入获取scanner。5,用getTime获取偏移后的 Date对象。6,自定义格式把对象转换成字符串输出,格式为:yy-MM-dd。代码import java.text.SimpleDateFormat;import java.util.Cale ndar;import java.util.Date;import java.util.Sca nner;public class Mai n /* param args* throws IOExcepti on*/public static v

8、oid main( Stri ng args) throws IOExcepti on / TODO Auto-ge nerated method stubSca nner sc=new Sca nn er(System.i n);while(sc.hasNext()Cale ndar c=Cale ndar.getl nsta nce();c.set(2021, 10, 9);int amoun t=sc .n extl nt();c.add(Cale ndar.DATE,am oun t);Date date =c.getTime();DateFormat format = newSimp

9、leDateFormat(yyyy-MM-dd);Stri ng str=format.format(date);System.out.pri ntln( str);小结Calendar对象可以灵活地设置修改日期,非常好用,还有就是要注意在java中日期的数字表示:月是用011的整数表示的,0表示1月,1表示2月 11 表示12月。 日是用131的整数表示。小时用023的整数表示。2小光棍数问题描述为了迎接一年一度光棍节的到来,让我们一起来看看小光棍数吧。倘假设一个数的三次方最后三位数是111,这样的数称为小光棍数。从0开始计数,第一个小光棍数是471(4723=104487111),请问第m

10、个小光棍数是多少。输入第一行一个整数T表示有T组测试数据接下来T行每行有一个数m输出输出第m个小光棍数每次输出占一行样例输出11样例输出471解题思路1, 分析题意可知,第一次输入的数据表示测试数据有几组,也就是控制循环的次数。2, 第二次输入的数据表示查找第几个小光棍数,想到了定义一个变量作为计数器,查 找到一个记一次数,计数器的值等于输入的数据就停止查询,并输出查到的数据。3, 循环控制着一个查找功能,数字的三次方要保证是三位数,不是就不用查找了,用if条件语句控制。直接把三次方处理后的数据对1000取余数得出的值就是最后三位,如果是111就满足条件,这个数字就是小光棍数。代码import

11、 java.util.Sca nner;public class Mai n public static void main( Stri ng args) Sca nner sca nner=new Scann er(System.i n);int n=scanner.nextInt();while( n-!=0)long m=sca nner.n extL on g();System.out.pri ntln (471+(m-1)*1000);小结这种特殊数字的查找原本在不用数学方法的情况下,计算量十分大,但是对计算机而言却不是很大,以后这种数据找不到规律可以直接用java写一个程序快速计算

12、。但要注意对循环的控制。3零起点学算法12求2个日期之间的天数问题描述水题输入输入2个日期,日期按照年月日,年月日之间用符号-隔开题目包含多组数据输出求出这2个日期之间的天数不包括自身,每组测试数据一行样例输入:2021-1-12021-1-5样例输出:3解题思路1, 分析题意可知,此题使用了日历,想到了Calendar。2, 分别用两个字符串接收输入的数据,并且把接收到的字符串中的年、月、日切割出 来,想到了 split 方法。3, 分别用set设置起始日期和终止日期。4, 分别用getTime方法获取Date对象,再把 Date对象转化为毫秒值。5, 用后一个毫秒值减前一个毫秒值,并把毫秒

13、转化成天打印。代码import java.util.Date;import java.util.Calendar;import java.util.Scanner;public class Main/* param args*/public static void main(String args) / TODO Auto-generated method stubCalendar c1=Calendar.getlnstance();Calendar c2=Calendar.getlnstance();Scanner sc=new Scanner(System.in); while(sc.ha

14、sNext()String s1=sc.nextLine();String s2=sc.nextLine();if(s1.equals(s2) return;String str1=s1.split(-);String str2=s2.split(-);c1.set(lnteger.parselnt(str1O),Integer.parselnt(str11),lnteger.parselnt(str12);c2.set(lnteger.parselnt(str20),Integer.parselnt(str21),lnteger.parselnt(str22);if(c1 pareTo(c2

15、)0)return;Date date1=c1.getTime();Date date2=c2.getTime();long time1=date1.getTime();long time2=date2.getTime();long t=time2-time1;int day=(int) (1000/3600/24)-1;System.out.println(day);小结对日期进行运算首先要想到,将日期转化为毫秒值,转化后就可以使用数学方法计算, 从而得到日期结果,这种想法很方便。4零起点学算法34继续求多项式问题描述输入1个正整数n,计算 1+ 1+2 + 1+2+3 +.+1+2+3+.

16、+n输入输入正整数n 多组数据输出输出 1+ 1+2+ 1+2+3+.+1+2+3+.+n 的值每组数据一行样例输入:2样例输出:4解题思路1, 看到这个式子想到了循环,把一个数据从1累加到n。但这只是完成了一个小括号 内部的运算。2, 继续思考,想到了递归,定义一个方法add实现累加功能,运算完一次就把传入的 值减一,把每次累加后的值相加。3, 如果n的值等于1,就停止递归,把最终的和返回。代码import java.util.Sca nner;public class Mai npublic static void main Stri ng argsSca nner sc=new Sca

17、nn er(System.i n);while(sc.hasNext() int sum=O;int a=O;int n=sc.n extl nt();for(int i=1;i=n;i+)a=a+i;sum=sum+a;System.out.pri ntln( sum);小结在方法中自己调用了自己,就要想到递归。使用递归要注意:1.递归一定要有结束条件。2.递归次数不能过多,容易引起内存溢出。5零起点学算法35再求多项式含浮点问题描述输入一个整数n,计算1 + 1/ 1-3+1/ 1-3+5+.+1/1-3+5-.+2n-1 的值输入输入一个整数n 多组数据输出的值,保存2位小数每组数出 1

18、+1/ 1-3+1/ 1-3+5+.+1心-3+5-.+2n-1 据一行样例输入:1样例输出:解题思路1, 建立一个名称为 fun的方法计算1-3+5-.+2n-1的值。2, 建立一个名称为 operation 的方法计算 1+1/ 1-3+1/ 1-3+5+.+1/1-3+5.+2n+1的值,分母的值调用fun方法得到,分子为1,运用递归知识,和上一题思想一样。3, 调用operation方法得到返回值,将返回值以保存两个小数的固定格式输出。代码import java.text.DecimalFormat;import java.util.Sca nner;public class Main

19、public static void main( Stri ng args)Sea nner sc=new Sea nn er(System.i n);while(sc.hasNext()int a;double b=0;double c=0;int flag=1;a=sc. next In t();for(i nt i=1;i=a;i+)c=c+flag*(2*i-1);b=b+1.O/c;flag=-flag;DecimalFormat df=new DecimalFormat(#0.00);System.out.pri ntl n(df.format(b);小结递归一定要有结束条Stri

20、ng类中的静在方法中自己调用了自己, 就要想到递归。使用递归要注意:1. 件。2.递归次数不能过多,容易引起内存溢出。以固定格式输出可以考虑 态方法format 方法。6 3n+1问题问题描述任给一个正整数n,如果n为偶数,就将它变为n/2 ,如果为奇数,那么将它乘3加1 (即 3n +1)。不断重复这样的运算,经过有限步后,一定可以得到1。输入:输入1个正整数n (n=10人10)(多组数据)输出:输出变化的次数(每组数据一行)样例输入:3样例输出:7解题思路1, 获取输入的数据,判断是否满足*=10A10。2, 定义一个变量count为计数器。3, 用if判断n为奇数还是偶数,按各自要求分

21、别处理数据,直到n值为1。每处理一 次count就加1,循环结束打印count。代码import java.util.Scanner;public class Main public static void main(String args) Scanner sc=new Scanner(System.in);while(sc.hasNext()int num=sc.nextlnt();if(num=Math.pow(10, 10)int count=0;while(!(num=1)if(num=0) break;if(num%2=0)num=num/2;else num=num*3+1;co

22、unt+;System.out.println(count);sc.close();小结适宜的定义变但凡遇到和次数有关的问题, 就要想到能否认义一个计数器来记录次数, 量可以很好地控制和显化代码的执行。7根底练习Huffuman树问题描述Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。给出一列数pi=pO, p1,pn-1,用这列数构造 Huffman树的过程如下:1. 找到pi中最小的两个数,设为pa和pb,将pa和pb从pi中删除掉,然后将它们的和参加到pi中。这个过程的费用记为pa + pb。2. 重复步骤1,直到pi中只剩下一个数。在上面的操作过程

23、中,把所有的费用相加,就得到了构造Huffman树的总费用。此题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。例如,对于数列pi=5, 3, 8, 2, 9, Huffman树的构造过程如下:1. 找到5, 3, 8, 2, 9中最小的两个数,分别是 2和3,从pi中删除它们并将和5参加,得到5, 8, 9, 5,费用为5。2. 找到5, 8, 9, 5中最小的两个数,分别是 5和5,从pi中删除它们并将和10参加,得到8, 9, 10,费用为10。3. 找到8, 9, 10中最小的两个数,分别是 8和9,从pi中删除它们并将和17参加,得到10, 17,费用为1

24、7。4. 找到10, 17中最小的两个数,分别是 10和17,从pi中删除它们并将和 27 参加,得到27,费用为27。5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。输入输入的第一行包含一个正整数n (*=100)。接下来是n个正整数,表示 p0, p1,pn-1,每个数不超过1000。输出输出用这些数构造 Huffman树的总费用。样例输入:55 3 8 2 9样例输出59解题思路1. 分析题意知道先输入数列的总数,然后输入数列,可以用数组进行存储数列。2. 用循环,当数列不为空,对数组进行排序,进行运算,直至队列为空,输出结果。代码import java.util.Arrays;import

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论