Java语言程序设计(第3版)
上QQ阅读APP看书,第一时间看更新

编程练习

5.1 编写程序,从键盘上输入5个整数,并存放到一个数组中,然后计算所有元素的和、最大值、最小值及平均值。

5.2 编写程序,随机产生100个1~6的整数,统计每个数出现的次数。修改程序,使之产生1000个1~6的随机数,并统计每个数出现的次数。比较不同的结果并给出结论。

5.3 编写一个方法,求一个double型数组中最小元素:

编写测试程序,提示用户输入5个double型数,并存放到一个数组中,然后调用这个方法返回最小值。

5.4 编写程序,定义一个有10个元素的整型数组,然后将其前5个元素与后5个元素对换,即:第1个元素与第10个元素互换,第2个元素与第9个元素互换……第5个元素与第6个元素互换。分别输出数组原来各元素的值和互换后各元素的值。

5.5 编写程序,定义一个有8个元素的整型数组,然后使用选择排序法对该数组按升序排序。选择排序法先找到数列中最小的数,然后将它和第一个元素交换。在剩下的数中找到最小数,将它和第二个元素交换,依次类推,直到数列中仅剩一个数为止。

5.6 编程打印输出Fibonacci数列的前20个数。Fibonacci数列是第一和第二个数都是1,以后每个数是前两个数之和,用公式表示为f1 = f2 = 1, fn = fn−1 + fn−2 (n≥3)。要求使用数组存储Fibonacci数。

5.7 编写一个方法,计算给定的两个数组之和,格式如下:

要求返回的数组元素是两个参数数组对应元素之和,不对应的元素直接赋给相应的位置,如{1,2,4} + {2,4,6,8}={3,6,10,8}。

5.8 编写一个方法,合并给定的两个数组,并以升序返回合并后的数组,格式如下:

例如,一个数组是{16,13,15,18},另一个数组是{29,36,100,9},返回的数组应该是{9,13,15,16,29,36,100}。

5.9 编写程序,使用下面的方法头编写一个解二次方程式的方法:

二次方程式ax2+bx+c=0的系数都传给数组eqn,然后将两个非复数的根存在roots中。方法返回根的个数。

5.10 编写程序,使用筛选法求出2~100的所有素数。筛选法是在2~100的数中先去掉2的倍数,再去掉3的倍数……依次类推,最后剩下的数就是素数。注意2是最小的素数,不能去掉。

5.11 如果两个数组list1和list2的长度相同,而且对于每个i,list1[i]都等于list2[i],那么认为list1和list2是完全相同的。使用下面的方法头编写一个方法,如果list1和list2完全相同,那么这个方法返回true。

5.12 编程求解约瑟夫(Josephus)问题:有12个人排成一圈,从1号开始报数,凡是数到5的人就离开,然后继续报数,试问最后剩下的一人是谁?

5.13 编写程序,从一副52张的牌中选出4张,然后计算它们的和。A、J、Q和K分别表示1、11、12和13。程序应该显示得到和24的选牌次数。

5.14 编写程序,提示用户从键盘输入一个正整数,然后以降序的顺序输出该数的所有最小因子。例如,如果输入的整数为120,应显示的最小因子为5,3,2,2,2。请使用StackOfInteger类存储这些因子(如2,2,2,3,5)然后以降序检索和显示它们。

5.15 有下面两个矩阵A和B:

编写程序,计算:A+B、A–B、矩阵A的转置。

5.16 编写下面的方法,返回二维数组中最大元素的位置。

返回值是包含两个元素的一维数组。这两个元素表示二维数组中最大元素的行下标和列下标。编写一个测试程序,提示用户输入一个二维数组,然后显示这个数组中最大元素的位置。

5.17 编写程序,打印n×n的魔方(1,2,…,n2的排列,且每行、每列和每条对角线上的和都相等)。由用户指定n的值,这里只计算n为奇数的魔方。

把魔方数存储在二维数组中。首先把1放在第0行的中间,剩下的数2,3,…,n2依次向上移动一行,并向右移动一列。当可能越过数组边界时需要“绕回”到数组的另一端。例如,如果需要把下一个数放到−1行,就将其存储到n−1行(最后一行);如果需要把下一个数放到第n列,就将其放到第0列。如果某个特定的数组元素已被占用,就把该数存储在前一个数的正下方。