(1) 创建一个100×100的二维数组,对数组中的元素进行随机赋值(要求使用Math.random()生成0-1之间的浮点数)。通过算法找到该数组中最大的5个数,要求从大到小输出,同时计算整个程序所耗费的时间,并分析算法的复杂度(如果复杂度较高会扣5分)。在报告中附上程序截图、运行结果截图和详细的文字说明。(20分)
1.创建二维数组后使用Math.random()进行随机赋值,并输出部分数组进行查看。
2.输出结果如下,可知成功随机生成了数据。
3.创建集合并遍历数组取得最大的五个值。
4.将集合降序排序后输出,并输出程序运行时间。
5.输出结果如下。
6.算法复杂度分析:遍历数组取得最大的五个值的复杂度为O(n),集合降序排序后输出的复杂度为O(1),总复杂度为O(n)。
(2) 某省居民电价分三个“阶梯”:
对于用电量50度以内的这部分电量,电价为0.55元/度;
对于用电量在51度至220度之间的这部分电量,电价为0.58元/度;
对于用电量超过220度的这部分电量,电价为0.65元/度。
编写程序,用户从键盘输入用电量(要求在不终止程序的情况下能循环10次从键盘读入10个数字:48、52、230、90、80、89、510、60、1、10),程序输出用户应缴纳的电费。在报告中附上程序截图、运行结果截图和详细的文字说明。(15分)
1.在程序不终止的情况下会一直读入数据,存为int类型,接着调用calculate函数计算应付电费;在calculate函数中对输入数据进行分类讨论,最后返回电费并输出。
2. 依次输入十个数据,程序成功计算并输出电费。
(3) 编写程序:用户从键盘输入1个正整数,程序逆序打印出该正整数的各位数字(例如:某个正整数为123456,程序输出654321),要求在不终止程序的情况下能循环10次从键盘读入。在报告中附上程序截图、运行结果截图和详细的文字说明。(15分)
1.以字符串的方式读入输入的正整数,最后利用StringBuilder类自带的reverse函数将字符串反转,最后输出。
2.运行结果如下图所示,程序实现了逆序输出的功能。
(4) 编写程序:计算1-500之间有多少个素数,并输出所有素数。在报告中附上程序截图、运行结果截图和详细的文字说明。(15分)
1.由于1不是素数,故从2开始,对于每个数都调用isPrime函数进行判断,若为素数则输出并且通过flag计数确保每输出10个素数则换行一次;在isPrime函数中,首先判断是否是2或3,若是则返回true,接着判断是否可以被2或3整除,若是则说明其不是素数;接下来通过for循环逐一用1-number/2判断是否能整除number,若能则说明岂不是素数。
2.运行结果如下图所示,输出了1-500的所有素数,并且每输出10个换行一次。
(5) 编写程序:有一序列(分子为1、2、3、4递增,分母为1、5、25、125倍增):1/1,2/5,3/25,4/125,...求出这个数列的前20项之和。在报告中附上程序截图、运行结果截图和详细的文字说明。(15分)
1.使用double类型存储分子、分母和累加值,并在每次循环中分子+1,分母×5,并将分子除以分母的值进行累加,循环结束后输出累加值。
2.输出结果如下图所示,成功输出了数列的前20项之和。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
其他(例如感想、建议等等)
通过此次实验,加深了对java语言的了解,学会了使用java语言进行简单的编程以及实现简单的功能,对java的命名规则以及一些特性也有了更深的了解。
(by 归忆)