烟台南山学院计算机与电气自动化学院java实训报告.docx
- 文档编号:7506718
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:30
- 大小:174.07KB
烟台南山学院计算机与电气自动化学院java实训报告.docx
《烟台南山学院计算机与电气自动化学院java实训报告.docx》由会员分享,可在线阅读,更多相关《烟台南山学院计算机与电气自动化学院java实训报告.docx(30页珍藏版)》请在冰豆网上搜索。
烟台南山学院计算机与电气自动化学院java实训报告
烟台南山学院计算机与电气自动化学院
Java程序设计实训报告
(2011~2012)学年第2学期)
姓名:
******
学号:
****************
专业:
计算机科学
班级:
1001班
指导教师:
翟芸
编程课程实训报告
日期
2012.6.11——2012.6.15
地点
67号楼E305机房
项目名称
Java程序设计实训
实训目的能力目标
增强学生对java语言的熟悉,增强对java编程工具的熟悉掌握程度,为今后进一步深入学习java语言打下一个坚实的基础。
实训要求:
1、实训期间每天登记考勤,作为实训成绩的一部分。
2、实训期间不能玩游戏、看电影、小说等做与学习无关的事。
如果有不遵守的同学将取消当天成绩。
3、每天的作业必须经过指导教师检查后才可以登录当天成绩。
4、完成整个实训以后,要求每人写出实训报告。
作为评定整个实训成绩的重要参考依据。
实训内容(过程及步骤)
第一题:
古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21....
importjava.util.Scanner;
publicclassTuzi{
publicstaticvoidmain(Stringargs[]){
inta=1,b=1;//a大前一个月,b前一个月
intcount=1;//当月
System.out.print("请输入要求的月份");
Scannersc=newScanner(System.in);
intmounth=sc.nextInt();
//前两个月都是1
if(mounth>0&&mounth<=2)
System.out.println("兔子在"+mounth+"月有"+count+"只");
//3个月以后是当月的为前两个月的和,采用递推的方法算出结果
if(mounth>2)
{
for(inti=0;i { count=a+b; a=b; b=count; } System.out.println("兔子在"+mounth+"月有"+count+"只"); } } } 第二题: 判断101-200之间有多少个素数,并输出所有素数。 程序分析: 判断素数的方法: 用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 publicclassSushu{ publicstaticvoidmain(Stringargs[]){ inti=101; booleantemp=true;//true表示是素数,先假设他是素数 intcount=0;//一个累加器,控制换行 for(;i<=200;i++) { for(intt=2;t<=Math.sqrt(i);t++) { //如果能被整除,则不是素数并且跳出循环 if(i%t==0) {temp=false;break;} } if(temp) { System.out.print(i+""); count++; //四个数一行 if(count%4==0) System.out.println(); } temp=true;//一个数计算完毕,再次假设他是素数 } } } 第三题: 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 程序分析: 利用for循环控制100-999个数,每个数分解出个位,十位,百位。 publicclassShuixianhua{ publicstaticvoidmain(Stringargs[]){ intone,two,three; //one个位,two十位,three百位 for(inti=100;i<1000;i++) { one=i%10; two=(i/10)%10; three=i/100; if(i==(one*one*one+two*two*two+three*three*three)) System.out.println(i); } } } 第四题: 将一个正整数分解质因数。 例如: 输入90,打印出90=2*3*3*5。 程序分析: 对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 importjava.util.Scanner; classZhishu{ //判断是不是素数的一个构造方法 publicbooleanzhishu(inttemp){ booleana=true;//先假设他是素数 for(inti=2;i<=Math.sqrt(temp);i++) if(temp%i==0) {a=false;break;}//如果他能被整除了,那么他就不是素数,中断循环,得到结果 returna;//返回结果 } } classFenjie{ publicstaticvoidmain(Stringargs[]){ Zhishua=newZhishu(); //输入计算的整数 System.out.print("请输入要求的整数"); Scannersc=newScanner(System.in); intnum=sc.nextInt(); System.out.print("分解质因数后是"+num+"="); //若果他是质数,则输出它本身 if(a.zhishu(num)) System.out.println(num); //若果他不是质数,那么他肯定是有2个或者2个以上质因数 for(inti=2;i<=Math.sqrt(num);i++)//循环找他的质因数 { if(a.zhishu(i)&&(num%i==0))//和循环一起构成找他的质因数 { System.out.print(i);//输出第一个最小质因数 if(i! =num) //若果他不等于要求的最终数字,那么他就被他自身整除当前质因数的结果代替 {num=num/i;System.out.print("*");} //由于还没有输出完毕,当然最后还需要输出一个*号; i--;//可能他还能被这个质因数整除,所以i--继续计算; } } System.out.print(num); //经过被质因数连续整除后,他便成了最后一个质因数,当然还得输出他 } } 第五题: 利用条件运算符的嵌套来完成此题: 学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 程序分析: (a>b)? a: b这是条件运算符的基本例子。 importjava.util.Scanner; publicclassChengji{ publicstaticvoidmain(Stringargs[]){ System.out.print("请输入要计算的成绩"); Scannersc=newScanner(System.in); intgrade=sc.nextInt(); //(a>b)? c: d把d替换成要继续嵌套的算式 System.out.println("他的成绩是"+((grade>=90)? 'A': (grade>=60)? 'B': 'C')); } } 第六题: 题目: 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析: 利用辗除法。 importjava.util.Scanner; classRun{ privateintmax,min; //初始化,分别把最小值和最大值区分开 Run(intmax,intmin){ if(max {this.max=min;this.min=max;} else {this.max=max;this.min=min;} } //求最大公约数 publicintgetMax(){ inttemp=1; intmax,min; max=this.max;min=this.min; while(temp! =0){ temp=max%min; max=min;min=temp; } returnmax; } //求出最小公倍数 publicintgetMin(){ intmin=this.min; min=this.max*this.min/getMax(); returnmin; } } publicclassMax{ publicstaticvoidmain(Stringargs[]){ System.out.print("请输入第一个整数"); Scannersc=newScanner(System.in); intone=sc.nextInt(); System.out.print("请输入第二个整数"); inttwo=sc.nextInt(); Runa=newRun(one,two); System.out.println("最大公约数是"+a.getMax()+"\n最小公倍数是"+a.getMin()); } } 第七题: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米? 第10次反弹多高? publicclassQiu{ publicstaticvoidmain(Stringargs[]){ doublea=100; doublesum=a; for(inti=1;i<10;i++) {sum+=a;a=a/2;} System.out.print("经过"+sum+"米,高度为"+a/2+"米"); } } 第八题: 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数? 都是多少? 1.程序分析: 可填在百位、十位、个位的数字都是1、2、3、4。 组成所有的排列后再去掉不满足条件的排列。 publicclassPai{ publicstaticvoidmain(Stringargs[]){ intcount=0; for(inta=1;a<5;a++) for(intb=1;b<5;b++) for(intc=1;c<5;c++) for(intd=1;d<5;d++) { if(a! =b&&a! =c&&a! =d&&b! =c&&b! =d&&c! =d) count++; } System.out.print("共有"+count+"种排法"); } } 第九题: 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析: 在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。 请看具体分析: publicclassZhao{ publicstaticvoidmain(Stringargs[]){ inta,b; for(inti=0;i<=100000;i++) { a=(int)Math.sqrt(i+100); b=(int)Math.sqrt(i+268); if(a*a==i+100&&b*b==i+268) System.out.print(i+""); } } } 第十题: 输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析: 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。 importjava.util.Scanner; classJsuan{ privateinty,m,d,two,sum;//年月日,二月,总和; Jsuan(inty,intm,intd){ this.y=y; this.m=m; this.d=d; run(); } //闰年计算 voidrun(){ if(y%400==0) two=1; elseif(y%100! =0&&y%4==0) two=1; } //去掉当月之后再计算 intbegin(){ for(inti=m-1;i>0;i--) { if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) sum+=31; if(i==4||i==6||i==9||i==11) sum+=30; if(i==2) sum+=28+two; } returnsum+d; } } publicclassDiji{ publicstaticvoidmain(Stringargs[]){ System.out.println("输入年"); Scannersc=newScanner(System.in); inty=sc.nextInt(); System.out.println("输入月"); intm=sc.nextInt(); System.out.println("输入日"); intd=sc.nextInt(); Jsuana=newJsuan(y,m,d); System.out.println("这是第"+a.begin()+"天"); } } 第十一题: 题目: 输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析: 我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 importjava.util.Scanner; classRun{ publicintone,two,three; inttemp; Run(){ System.out.println("输入第一个数"); Scannersc=newScanner(System.in); one=sc.nextInt(); System.out.println("输入第二个数"); two=sc.nextInt(); System.out.println("输入第三个数"); three=sc.nextInt(); if(one>two) temp=one;one=two;two=temp; if(one>three) temp=one;one=three;three=temp; if(two>three) temp=two;two=three;three=temp; System.out.println(one+"<"+two+"<"+three); } } classPaixu{ publicstaticvoidmain(Stringargs[]){ Runa=newRun(); } } 第十二题: 输出9*9口诀。 1.程序分析: 分行与列考虑,共9行9列,i控制行,j控制列。 publicclassJ6{ publicstaticvoidmain(Stringargs[]){ for(inti=1;i<10;i++) { for(intj=1;j<=i;j++) System.out.print(j+"×"+i+"="+j*i+""); System.out.println(); } } } 第十三题: 猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘了多少。 程序分析: 采取逆向思维的方法,从后往前推断。 publicclassHou{ publicstaticvoidmain(Stringargs[]){ intsum=1; for(intday=10;day>1;day--){ sum=++sum*2; } System.out.println("总共摘了"+sum+"个桃子"); } } 第十四题: 题目: 两个乒乓球队进行比赛,各出三人。 甲队为a,b,c三人,乙队为x,y,z三人。 已抽签决定比赛名单。 有人向队员打听比赛的名单。 a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 classRun{ publicStringshow(intx){ if(x==0) return"和x比"; if(x==1) return"和y比"; if(x==2) return"和z比"; return""; } } publicclassTest28{ publicstaticvoidmain(Stringargs[]){ Runp=newRun(); for(inta=0;a<3;a++) for(intb=0;b<2;b++) for(intc=0;c<3;c++) if(a! =b&&b! =c&&a! =c&&a! =0&&c! =0&&c! =2) System.out.print("a"+p.show(a)+"b"+p.show(b)+"c"+p.show(c)); } } 第十五题: 有一分数序列: 2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 程序分析: 请抓住分子与分母的变化规律。 publicclassF10{ publicstaticvoidmain(Stringargs[]){ doublea=2,b=3,c; doublex=1,y=2,z; doublesum=0; sum=a/x+b/y; for(inti=3;i<=20;i++) { c=a+b;a=b;b=c; z=x+y;x=y;y=z; sum+=c/z; } System.out.println(sum); } } 第十六题: 求1+2! +3! +...+20! 的和 程序分析: 此程序只是把累加变成了累乘。 publicclassJie{ publicstaticvoidmain(Stringargs[]){ longsum=0; longcount=1; for(inti=1;i<=20;i++) { count*=i;//当前阶乘值 //System.out.println("! "+i+"="+count); sum+=count;//当前和 //System.out.println("sum="+sum); } System.out.println("sum="+sum); } } 第十七题: 利用递归方法求5! 。 程序分析: 递归公式: fn=fn_1*4! classRun{ longrun(longx){ if(x>1) returnx*run(x-1); else returnx; } Run(longn){ System.out.print(n+"! ="+run(n)); } } publicclassDitui{ publicstaticvoidmain(Stringargs[]) { Runa=newRun(5); } } 第十八题: 有5个人坐在一起,问第五个人多少岁? 他说比第4个人大2岁。 问第4个人岁数,他说比第3个人大2岁。 问第三个人,又说比第2人大两岁。 问第2个人,说比第一个人大两岁。 最后问第一个人,他说是10岁。 请问第五个人多大? publicclassW3{ publicstaticvoidmain(Stringargs[]){ inta=10; for(inti=1;i<=4;i++) { a+=2; } System.out.println(a+"岁"); } } 第十九题: 给一个不多于5位的正整数,要求: 一、求它是几位数,二、逆序打印出各位数字。 importjava.util.Scanner; classRun{ intwei; privateintx; //求位数 voidW(intx){ intcount=0; for(;x>0;x/=10) count++; wei=count; } //用连除法球逆序输出 voidNi(){ intwei=this.wei; for(;wei>0;wei--) { System.out.print(x%10); x/=10; } } Run(intx){ this.x=x; W(x); } } publicclassTest34{ publicstaticvoidmain(Stringargs[]){ System.out.print("请输入要求的五位以内正整数"); Scannersc=newScanner(System.in); intnum=sc.nextInt(); Runa=newRun(num); System.out.println("它共有"+a.wei+"位数"); System.out.print("逆序输出为"); a.Ni(); System.out.println(); } } 第二十题: 一个5位数,判断它是不是回文数。 即12321是回文数,个位与万位相同,十位与千位相同。 importjava.util.Scanner; classRun{ Run(intx){ if(x%10==x/10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 烟台 南山 学院 计算机 电气 自动化 java 报告