




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java语言程序设计实验报告实验序号:3实验项目名称: 熟练java语法、常用方法、程序结构学 号xx姓 名xx专业、班电子商务1002实验地点xx指导教师xx时间2012.4.26一、实验目的及要求1、进一步熟练Java语法和常用方法的使用;2、进一步熟练Java程序结构;3、进一步提高算法设计与实现的能力;4、为后续章节的学习打下坚实的基础;二、实验设备(环境)实验室计算机、windows xp系统、myeclipse三、实验内容与步骤.随机生成100个0到200的整数,用折半查找法(二分法)查找50是第几个数,并 输出查找过程(即和什么数进行了比较)。(折半查找是在已经排序的数据中做的查
2、找,所以先要排序).显示任意一个月份的日历(1900)(一周一行,要有月名、表头和横线。按列右对齐,用 String.format(%1$ 4d,intNumber)可以将任意整数 intNumber 格式化成前面补“空格”的4位定长字符串).显示出任一年份的日历(1900).用数组模拟实现一个50个字符串的堆栈,并使这个堆栈有如下方法和参数: myStack:数组名,使用时不能直接对这个数组进行存取操作,存取操作都通过pop()和push()完成。实现pop():弹出实现push():压入实现isFull():是否已满实现isEmpty():是否为空实现length():已有多少元素要点:要
3、将代码设计成有通用性,也就是说要考虑各种可能的情况,考 虑越多,你的程序就越稳定可靠,高可靠性的代码一直是一个开发人员 追求的最高目标之一。.使用堆栈,将中缀算术表达式转换成后缀表达式。a)表达式中只有十、一、X, /, %,(,)六种运算符b)变量名为以英文字母开头的字母数字用c)表达式中可以出现不带符号的常数d)适当判断表达式中的语法错误e)不计算结果f)参考:(算法描述).若遇到的是数字或小数点, 则直接写入到strResult中(strResult为结果字符串); 2.若遇到的是左括号,则应把它压入到运算符栈中;若遇到的是右括号,把从栈顶直到保存着的对应左括号之间的运算符依次退栈并写入
4、 strResult 串中;若遇到的是运算符:当该运算符的优先级大于栈顶运算符的优先级时,进栈若遇到的运算符的优先级小于或等于栈顶运算符的优先级,这表明栈顶运算符的两个运算对象已经被保存到 strResult 串中,应将栈顶运算符退栈并写入到strResult 串中,对于新的栈顶运算符仍继续进行比较和处理,直到被处理的运算符的优先级大于栈顶运算符的优先级为止,然后让该运算符进栈即可。四、实验结果与数据处理程序代码:import ;import ;import ;public class experiment_3static int intInputValue;static String str
5、InputValue;static int length;public static void main(String args) random();/ 第 1 题随机数排序查找的功能calendar();/ 第二题日历的功能String myString=new String; 请输入合法的中缀表达式:);if(getStringInput(myString)MidfixToSuffix(myString0);static void random()int anArray;anArray=new int1002;/二维数组,存取随机数和其固定编号for(int i=0;i100;i+) an
6、Arrayi0=(int)(Math.random()*200)+1;/产生 100 个在 1-200之间的随机数anArrayi1=i+1; 随机产生的数为: );for(int i=0;i100;i+)/打印排序前的随机数%1$ 5d,anArrayi0);if(i+1)%20=0);BobbleSort(anArray);/调用排序函数对随机数进行排序 排序后的数为: ); for(int i=0;i100;i+)%1$ 5d,anArrayi0);if(i+1)%20=0) ;int num=BinarySearch(anArray,50,anArray.length);/的下标,没有
7、则为-1; if(num0;i-)if(anArrayi0=50) );/ 输出该数为第几个数for(int i=m+1;i100;i+)if(anArrayi0=50) );/ 输出该数为第几个数 个数 );/ 输出该数为第几个数 static int BinarySearch(int arr,int searchkey,int n)/ 法int low=0;int high=n-1; 和50 比较过的数依次为: ); while(lowarrmid0)elselow=mid+1;high=mid-1;return -1;static void BobbleSort(int arr)/ 冒泡
8、法排序 int i,j,change;change=1;j=arr.length-1;while(j0&change=1) change=0;for(i=0;iarri+10)/ int temp1=arri0;int temp2=arri1; arri0=arri+10;arri1=arri+11; arri+10=temp1; arri+11=temp2;change=1;j-;将随机数和其编号同时交换static void calendar()int year1=0;int month1=0;if(getIntegerInput(year1=intInputValue;请输入要查询日历的
9、年月 +r+ 年份 )if(getIntegerInput(month1=intInputValue;月份 )Output(year1,month1);/对特定的 year1 和 month1 的日历输出int year2=0;if(getIntegerInput(请输入要查询的全年日历的年份 )year2=intInputValue;for(int i=1;i=12;i+)Output(year2,i);/调用同一个函数,进2012 年的 12 个月的日历输出static void Output(int year,int month)/输出函数int totalDays=0;for(int
10、y=1901;yyear;y+)for(int m=1;m=12;m+) totalDays+=Day(y,m);for(int m=1;mmonth;m+)totalDays+=Day(year,m);/ +year+ 年+month+); 日一二int week=Week(totalDays);/int day=Day(year,month);/for(int i=0;iweek%7;i+) );/ 打印 1 号前的空格for(int i=1;i=day;i+)%1$ 4d,i);if(i+week)%7=0) /;r);static int Week(int days)/int week
11、=1,2,3,4,5,6,7;/int day_1991_1_1=week1;/int theweek=week(days+1)%7;return theweek;static int Day(int year,int month)/int numDays=0;在月 );/ 打印表头和横线三 四 五 六);表示当前月的第一天的星期当前月的天数依次打印出一个月的日期计算某一天的星期经查找, 1901 年1 月 1 日是星期二用来确定任意一年任意一月的天数switch(month)case 1:case 3:case 5:case 10:case 12:numDays=31;/ 大月的情况 bre
12、ak;case 4:case 6:case 9:case 11:numDays=30;/ 小月的情况 break;case 2:/ 闰年的情况if(year%4=0)&!(year%100=0)|(year%400=0)numDays=29;elsenumDays=28;break;return numDays;static boolean isEmpty(char stack)/ if (length=0)return true;return false;static boolean isFull(char stack)/if (length=50)return true;return fa
13、lse;static int Length(char stack)/return length;static char getTop(char stack) /if (isEmpty(stack)return 0;elsereturn stackLength(stack) - 1;static void pop(char stack) /if (isEmpty(stack)return ;length-;return ;返回栈中元素个数返回栈顶元素出栈判断栈是否为空判断栈是否为满入栈static boolean push(char stack, char aChar)/ if (isFull(
14、stack)return false;stacklength+ = aChar;return true;static void MidfixToSuffix(String s)char myStack=new char50; 其后缀表达式为: );for (int i = 0; i s.length(); i+)if (s.charAt(i) = + | s.charAt(i) = - | s.charAt(i)= *| s.charAt(i) = /| s.charAt(i) = %| s.charAt(i) = (| s.charAt(i)= )/ 如果是运算符则进一步判断 );while
15、 (true) if (s.charAt(i) = () /是左括号则直接进栈push(myStack,s.charAt(i);break;else if (s.charAt(i) = ) /是右括号则栈中左括号上面的所有符号依次出栈while (getTop(myStack) != () );pop(myStack);pop(myStack);break;else if (isEmpty(myStack)|getTop(myStack) = ()push(myStack, s.charAt(i);break;else if (s.charAt(i) = * | s.charAt(i) = /
16、 |s.charAt(i) = %)& (getTop(myStack) = + | getTop(myStack)= -)/ 根据运算符的优先级判断,如果是高优先级进栈push(myStack, s.charAt(i); break; else ;pop(myStack); else/ 运算变量直接输出 ;while (!isEmpty(myStack) /将栈中剩余的运算符直接输出 ;pop(myStack);static boolean getIntegerInput(String aPrompt) /返回值输入值/ 若返回 false ,则输入出错,输入的值不能用。若返回 true ,
17、输入正确,输入值可以 用int anInteger=0;String strInput=null; try : );BufferedReader br=new BufferedReader(new InputStreamReader(System.in);strInput=br.readLine();anInteger=Integer.parseInt(strInput); catch(IOException e)IO 错误!请重新运行程序。 ); return false; catch(NumberFormatException e) 你的输入可能有格式错误!请重新运行程序。 ); retu
18、rn false;intInputValue=anInteger;return true;static boolean getStringInput(String str)/ String strInput=null;boolean isInputMistake = false;try InputStreamReader(/ 请输入一个字符串: );BufferedReader br = new BufferedReader(new System.in);str0 = br.readLine(); catch (IOException e) isInputMistake = true;/ IO
19、 错误!请重新运行程序。 );return !isInputMistake;程序运行的结果: (复制到word 中排版变混乱了)随机产生的数为: TOC o 1-5 h z 154192521844777310942133 16448177 89 120 76 115 64 120 13014341178127843101598134 1491851041 26 85 89 43 168 14612121681431825510191121155 5714179 54 106 158 140 99 197 151654 15925 127 93 117103 473659810 44 164
20、104 140 157 192 1825156 7650 23 195 12483 1501603751193 89 87 190 70 124 151 176排序后的数为:17881010121415 16 18 23 252526343637414243434447 47 48 50 5152545455575959646870737676818385 87 89 89 899399101103104104106109115117120120121121124124 127 127 130133140140143143146149150151154155156157158159160164
21、 164 168 176177178179182184185190191192192193195197和 50 比较过的数依次为:99 47 68 54 51 48 5050 是排序前的第85 个数请输入要查询日历的年月年份:2012月份:42012 年4月日一二1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 2122 23 24 25 26 27 2829 30请输入要查询的全年日历的年份:2012 年1 月三四五六2012日一1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 2122 23 2
22、4 25 26 27 2829 30 312012 年2月三四五六日一1 2 3 45 67 8 9101112 13141516171819 20212223242526 2728292012 年3月三四五六日一1 2 34 56 7 891011 12131415161718 19202122232425 2627282930312012 年4月三四五六日一1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 21三四五六29 302012 年5月日一二三四1 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 19
23、20 21 22 23 24 25 2627 28 29 30 312012 年6月五六日一二三四1 23 45 6 78910 11121314151617 18192021222324 2526272829302012 年7月五六日一二三四1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 2122 23 24 25 26 27 2829 30 312012 年8月五六日一二三四1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 312012
24、年9月五六日一二三四12 345 6789 10111213141516 17181920212223 242526272829302012 年10月五六五六五六一二三1五六日一二三1 2 3 4 5 67 8 9 10 11 12 13 TOC o 1-5 h z 14 15161718192021 22232425262728 2930312012年11月日一二三1 2 34 5 6 7 8 9 1011 12 13 14 15 16 1718 19 20 21 22 23 2425 26 27 28 29 302012 年12月2 3 4 5 6 7 89 10 11 12 13 14
25、1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31请输入合法的中缀表达式:9+(8*5-6)%6-8/3其后缀表达式为: 9 8 5 *6 - 6 %+8 3/-数据处理: 第 1题:定义一个二维数组,用来存储产生的随机数和初始的编号,当用冒泡法排序的时候, 其固定的编号也随之移动, 再用二分查找法查找50的时候, 将下标为mid的数输出即为依次比较过的数,如果找到50则将其编号输出即为其排序前所在的位置, 如果没找到则输出提示信息。 这道题的主要问题在于, 如果产生了若干个 50, 如何都能打印出来, 采用的方法是将二分查找出的第一个50的当前下标,再前后搜索还有没有50了,有就输出对应的原始下标。第 2、 3 题:我采用的是以 1991 年 1 月 1 日为基础,查询出该天是星期几,再根据每一年中 12 个月分的天数,要注意2 月分平年和闰年的相差一天的区别,计算出输入的年月的第一天是距,总天数mod7就可以得出第一天是周几,输出日历和时候就可以从计算出的星期几开始, 依次打印出该月的所有天, 第七个一行,第 3 题也就是将第 2 题的程序按照 1-12 月循环执行12 次就可以得出最终的结果了。第4、5题:这道题的关键是定义一个栈和一个数组,其中栈用来存放运算符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 求职报告应届大学生范文
- 前台业绩报告范文
- 浙江国企招聘2024衢州龙游县全域城乡测绘有限公司招聘2人笔试参考题库附带答案详解
- MySQL教程(新体系-综合应用实例视频)(第4版) 习题-第10章-答案
- 二零二五年度债务清偿与债权保护委托合同
- 二零二五年度创业公司期权分配合同范本
- 二零二五年度特色饮品店餐饮服务员合同
- 2025年度退房协议书模板
- 二零二五年度学校与地方政府共建人才培养基地合同
- 二零二五年度雇主责任保险理赔细则书
- 危重患者的安全转运课件
- 医院药事管理法律法规
- 幼儿园中班美术《开心帽》课件
- DB21T 3379-2021 黑参加工技术规程
- 2024解析:第九章液体压强-基础练(解析版)
- 2024解析:第十章 浮力、阿基米德原理及其应用-讲核心(解析版)
- 隐睾手术配合
- 华东师范大学《社会学概论》2023-2024学年第一学期期末试卷
- 建筑工程财务流程制度(6篇)
- 阀门培训课件
- 2024年四川省公务员录用考试《行测》真题及答案解析
评论
0/150
提交评论