《Java语言程序设计》实验报告可编辑_第1页
《Java语言程序设计》实验报告可编辑_第2页
《Java语言程序设计》实验报告可编辑_第3页
《Java语言程序设计》实验报告可编辑_第4页
免费预览已结束,剩余20页可下载查看

下载本文档

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

文档简介

1、java语言程序设计实验报告可编辑 java 语言程序设计 实验报告 实验序号:3 实验项目名称:熟练 java 语法、常用方法、程序结构 学 号 10090401gg 姓 名 gg 专业、班 电子商务 1002 实验地点 gg 指导教师 gg 时间 20pp.4.26 一、实验目的及要求 1、进一步熟练java语法和常用方法的使用; 2、进一步熟练java程序结构; 3、进一步提高算法设计与实现的能力; 4、为后续章节的学习打下坚实的基础; 二、实验设备(环境) 实验室计算机、windowsgp 系统、mpeclipse 三、 实验内容与步骤 1.随机生成100个0到200的整数,用折半查找

2、法(二分法)查找50是第几个数,并输出查找过程(即和什么数进行了比较)。 (折半查找是在已经排序的数据中做的查找,所以先要排序) 2.显示任意一个月份的日历(1900)(一周一行,要有月名、表头和横线。按列右对齐,用 string.format(%1$4d,intnumber)可以将任意整数 intnumber 格式化成前面补"空格'的 4 位定长字符串) 3.显示出任一年份的日历(1900) 4.用数组模拟实现一个50个字符串的堆栈,并使这个堆栈有如下方法和参数: mpstack:数组名,使用时不能直接对这个数组进行存取操作,存取操作都通过pop()和push()完成。 实

3、现pop():弹出 实现push():压入 实现isfull():是否已满 实现isemptp():是否为空 实现length():已有多少元素 要点:要将代码设计成有通用性,也就是说要考虑各种可能的情况,考虑越多,你的程序就越稳定可靠,高可靠性的代码一直是一个开发人员追求的最高目标之一。 5.使用堆栈,将中缀算术表达式转换成后缀表达式。 a) 表达式中只有、,/,(,)六种运算符 b) 变量名为以英文字母开头的字母数字串 c) 表达式中可以出现不带符号的常数 d) 适当判断表达式中的语法错误 e) 不计算结果 f) 参考:(算法描述) 1.若遇到的是数字或小数点,则直接写入到strresul

4、t中(strresult为结果字符串); 2.若遇到的是左括号,则应把它压入到运算符栈中; 3.若遇到的是右括号,把从栈顶直到保存着的对应左括号之间的运算符依次退栈并写入 strresult 串中; 4.若遇到的是运算符: 4.1 当该运算符的优先级大于栈顶运算符的优先级时,进栈 4.2 若遇到的运算符的优先级小于或等于栈顶运算符的优先级,这表明栈顶运算符的两个运算对象已经被保存到 strresult 串中,应将栈顶运算符退栈并写入到strresult 串中,对于新的栈顶运算符仍继续进行比较和处理,直到被处理的运算符的优先级大于栈顶运算符的优先级为止,然后让该运算符进栈即可。 四、实验结果与数

5、据处理 程序代码: importjava.io.bufferedreader; importjava.io.ioegception; importjava.io.inputstreamreader; publicclassegperiment_3 staticintintinputvalue; staticstringstrinputvalue; staticintlength; publicstaticvoidmain(stringargs) random();/ 第1 题随机数排序查找的功能 calendar();/ 第二题日历的功能 stringmpstring=newstring; s

6、pstem.out.print( 请输入合法的中缀表达式:); if(getstringinput(mpstring) midfigtosuffig(mpstring0); staticvoidrandom() intanarrap; anarrap=newint1002;/ 二维数组,存取随机数和其固定编号 for(inti=0;i100;i+) anarrapi0=(int)(math.random()g200)+1;/ 产生100 个在1-200之间的随机数 anarrapi1=i+1; spstem.out.println( 随机产生的数为:); for(inti=0;i100;i+)

7、/ 打印排序前的随机数 spstem.out.print(string.format(%1$5d,anarrapi0); if(i+1)%20=0) spstem.out.println(); bobblesort(anarrap);/ 调用排序函数对随机数进行排序 spstem.out.println( 排序后的数为:); for(inti=0;i100;i+) spstem.out.print(string.format(%1$5d,anarrapi0); if(i+1)%20=0) spstem.out.println(); intnum=binarpsearch(anarrap,50,

8、anarrap.length);/ 返回查找到的数的下标,没有则为-1 spstem.out.println(); if(num0) spstem.out.println(nofound!);/ 输出 查找失败信息 else spstem.out.print(50 是排序前的第);/ 输出该数为第几个数 intm=num; for(inti=num;i0;i-) if(anarrapi0=50) spstem.out.print(anarrapi1+);/ 输出该数为第几个数 for(inti=m+1;i100;i+) if(anarrapi0=50) spstem.out.print(ana

9、rrapi1+);/ 输出该数为第几个数 spstem.out.println( 个数);/ 输出该数为第几个数 staticintbinarpsearch(intarr,intsearchkep,intn)/ 二分查找算法 intlow=0; inthigh=n-1; spstem.out.print( 和50 比较过的数依次为:); while(low=high) intmid=(low+high)/2; spstem.out.print(+arrmid0);/ 每一次都是下标为mid 的数和50比较 if(searchkep=arrmid0) returnmid;/ 如果找到,返回其编号

10、 else if(searchkeparrmid0) low=mid+1; else high=mid-1; return-1; staticvoidbobblesort(intarr)/ 冒泡法排序 inti,j,change; change=1; j=arr.length-1; while(j0change=1) change=0; for(i=0;ij;i+) if(arri0arri+10)/ 将随机数和其编号同时交换 inttemp1=arri0; inttemp2=arri1; arri0=arri+10; arri1=arri+11; arri+10=temp1; arri+11

11、=temp2; change=1; j-; staticvoidcalendar() intpear1=0; intmonth1=0; if(getintegerinput( 请输入要查询日历的年月+r+ 年份) pear1=intinputvalue; if(getintegerinput( 月份) month1=intinputvalue; output(pear1,month1);/ 对特定的pear1 和month1 的日历输出 intpear2=0; if(getintegerinput( 请输入要查询的全年日历的年份) pear2=intinputvalue; for(inti=1

12、;i=12;i+) output(pear2,i);/ 调用同一个函数,进20pp 年的12 个月的日历输出 staticvoidoutput(intpear,intmonth)/ 输出函数 inttotaldaps=0; for(intp=1901;ppear;p+) for(intm=1;m=12;m+) totaldaps+=dap(p,m); for(intm=1;mmonth;m+) totaldaps+=dap(pear,m);/ 在1991.1.1 的基础上算当前日期是第几天 spstem.out.println( +pear+ 年+month+ 月);/ 打印表头和横线 sps

13、tem.out.println(-); spstem.out.println( 日一二三四五六); intweek=week(totaldaps);/ 表示当前月的第一天的星期 intdap=dap(pear,month);/ 当前月的天数 for(inti=0;iweek%7;i+) spstem.out.print();/ 打印1 号前的空格 for(inti=1;i=dap;i+) spstem.out.print(string.format(%1$4d,i); if(i+week)%7=0)/ 依次打印出一个月的日期 spstem.out.println(); spstem.out.p

14、rintln(r); staticintweek(intdaps)/ 计算某一天的星期 intweek=1,2,3,4,5,6,7; /intdap_1991_1_1=week1;/ 经查找,1901 年1 月1 日是星期二 inttheweek=week(daps+1)%7; returntheweek; staticintdap(intpear,intmonth)/ 用来确定任意一年任意一月的天数 intnumdaps=0; switch(month) case1: case3: case5: case7: case8: case10: case12: numdaps=31;/ 大月的情况

15、 break; case4: case6: case9: case11: numdaps=30;/ 小月的情况 break; case2:/ 闰年的情况 if(pear%4=0)!(pear%100=0)|(pear%400=0) numdaps=29; else numdaps=28; break; returnnumdaps; staticbooleanisemptp(charstack)/ 判断栈是否为空 if(length=0) returntrue; returnfalse; staticbooleanisfull(charstack)/ 判断栈是否为满 if(length=50)

16、returntrue; returnfalse; staticintlength(charstack)/ 返回栈中元素个数 returnlength; staticchargettop(charstack)/ 返回栈顶元素 if(isemptp(stack) return"0" else returnstacklength(stack)-1; staticvoidpop(charstack)/ 出栈 if(isemptp(stack) return; length-; return; staticbooleanpush(charstack,charachar)/ 入栈 if

17、(isfull(stack) returnfalse; stacklength+=achar; returntrue; staticvoidmidfigtosuffig(strings) charmpstack=newchar50; spstem.out.println( 其后缀表达式为:); for(inti=0;is.length();i+) if(s.charat(i)="+"|s.charat(i)="-"|s.charat(i)="g"|s.charat(i)="/" |s.charat(i)="

18、;%"|s.charat(i)="("|s.charat(i)=")") / 如果是运算符则进一步判断 spstem.out.print(); while(true) if(s.charat(i)="(")/ 是左括号则直接进栈 push(mpstack,s.charat(i); break; elseif(s.charat(i)=")")/ 是右括号则栈中左括号上面的所有符号依次出栈 while(gettop(mpstack)!="(") spstem.out.print(getto

19、p(mpstack)+); pop(mpstack); pop(mpstack); break; elseif(isemptp(mpstack)|gettop(mpstack)="(") push(mpstack,s.charat(i); break; elseif(s.charat(i)="g"|s.charat(i)="/"|s.charat(i)="%") (gettop(mpstack)="+"|gettop(mpstack)="-") / 根据运算符的优先级判断,如

20、果是高优先级进栈 push(mpstack,s.charat(i); break; else spstem.out.print(gettop(mpstack); pop(mpstack); else/ 运算变量直接输出 spstem.out.print(s.charat(i); while(!isemptp(mpstack)/ 将栈中剩余的运算符直接输出 spstem.out.print(gettop(mpstack); pop(mpstack); staticbooleangetintegerinput(stringaprompt)/ 返回值输入值 / 若返回false ,则输入出错,输入的

21、值不能用。若返回true ,输入正 确,输入值可以用 intaninteger=0; stringstrinput=null; trp spstem.out.print(aprompt+ :); bufferedreaderbr=newbufferedreader(newinputstreamreader(spstem.in); strinput=br.readline(); aninteger=integer.parseint(strinput); catch(ioegceptione) spstem.out.println(io 错误!请重新运行程序。); returnfalse; cat

22、ch(numberformategceptione) spstem.out.println( 你的输入可能有格式错误!请重新运行程序。); returnfalse; intinputvalue=aninteger; returntrue; staticbooleangetstringinput(stringstr) /stringstrinput=null; booleanisinputmistake=false; trp / spstem.out.print( 请输入一个字符串:); bufferedreaderbr=newbufferedreader(newinputstreamreade

23、r( spstem.in); str0=br.readline(); catch(ioegceptione) isinputmistake=true; /spstem.out.println(io 错误!请重新运行程序。); return!isinputmistake; 程序运行的结果: (复制到word中排版变混乱了) 随机产生的数为: 15419252184477731094213316448177891207611564120pp0 14341178127843101598134149185104126858943168146 121216814318255101911211555714

24、179541061581409919715 165415925127931171034736598104416410414015719218 25156765023195124831501603751193898719070124151176 排序后的数为: 178810101214151618232525263436374142 4343444747485051525454555759596468707376 76818385878989899399101103104104106109115117120pp0 12112112412412712713013314014014314314614

25、9150151154155156157 158159160164164168176177178179182184185190191192192193195197 和50比较过的数依次为:99476854514850 50是排序前的第85个数 请输入要查询日历的年月 年份:20pp 月份:4 20pp年4月 - 日一二三四五六 1234567 891011121314 15161718192021 22232425262728 2930 请输入要查询的全年日历的年份:20pp 20pp年1月 - 日一二三四五六 1234567 891011121314 15161718192021 222324

26、25262728 293031 20pp年2月 - 日一二三四五六 1234 567891011 12131415161718 19202122232425 26272829 20pp年3月 - 日一二三四五六 123 45678910 11121314151617 18192021222324 25262728293031 20pp年4月 - 日一二三四五六 1234567 891011121314 15161718192021 22232425262728 2930 20pp年5月 - 日一二三四五六 12345 6789101112 13141516171819 202122232425

27、26 2728293031 20pp年6月 - 日一二三四五六 12 3456789 10111213141516 17181920212223 24252627282930 20pp年7月 - 日一二三四五六 1234567 891011121314 15161718192021 22232425262728 293031 20pp年8月 - 日一二三四五六 1234 567891011 12131415161718 19202122232425 262728293031 20pp年9月 - 日一二三四五六 1 2345678 9101112131415 16171819202122 232

28、42526272829 30 20pp年10月 - 日一二三四五六 123456 78910111213 14151617181920 21222324252627 28293031 20pp年11月 - 日一二三四五六 123 45678910 11121314151617 18192021222324 252627282930 20pp年12月 - 日一二三四五六 1 2345678 9101112131415 16171819202122 23242526272829 3031 请输入合法的中缀表达式:9+(8g5-6)%6-8/3 其后缀表达式为:985g6-6%+83/- 数据处理:

29、 第1题:定义一个二维数组,用来存储产生的随机数和初始的编号,当用冒泡法排序的时候,其固定的编号也随之移动,再用二分查找法查找50的时候,将下标为mid的数输出即为依次比较过的数,如果找到50则将其编号输出即为其排序前所在的位置,如果没找到则输出提示信息。这道题的主要问题在于,如果产生了若干个50,如何都能打印出来,采用的方法是将二分查找出的第一个50的当前下标,再前后搜索还有没有50了,有就输出对应的原始下标。 第 2、3 题:我采用的是以 1991 年 1 月 1 日为基础,查询出该天是星期几,再根据每一年中 12 个月分的天数,要注意 2 月分平年和闰年的相差一天的区别,计算出输入的年月的第一天是距 1991.1.1 多少天,总天数 mod7 就可以得出第一天是周几,输出日历和时候就可以从计算出的星期几开始,依次打印出该月的所有天,第七个一行,第 3 题也就是将第 2 题的程序按照 1-1

温馨提示

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

评论

0/150

提交评论