Provide Best Programming Tutorials

编程作业 — 数组

(指定等级)

编写一个程序,读入学生成绩,获取最髙分best, 然后根据下面的规则陚等级值

• 如果分数>=best-10, 等级为A

• 如果分数>=best-20, 等级为B

• 如果分数>=best-30, 等级为C

• 如果分数>=卜68140, 等级为D

• 其他情况下,等级为F

程序提示用户输入学生总数,然后提示用户输入所有的分数,最后显示等级得出结论。下面

是一个运行示例:

Enter the number of students: 4
Enter 4 scores: 40 55 70 58
Student 0 score is 40 and grade is C
Student 1 score is 55 and grade is B
Student 2 score is 70 and grade is A
Student 3 score is 58 and grade is B

(倒置输入的数)

编写程序,读取10 个整数,然后按照和读人顺序相反的顺序将它们显示出来。

(计算数字的出现次數)

编写程序,读取在1到100 之间的整数,然后计算每个数出现的次数。假定输入是以0 结束的。下面是这个程序的一个运行示例:

Enter the integers between 1 and 100: 2 5 6 5 4 3 23 43 2 0
2 occurs 2 times
3 occurs 1 time
4 occurs 1 time
5 occurs 2 times
6 occurs 1 time
23 occurs 1 time
43 occurs 1 time

(分析成绩)

编写一个程序,读人个数不确定的考试分数,并且判断有多少个分数是大于或等于平均分,多少个分数是低于平均分的。输人一个负数表示输入的结束。假设最高分为100。

(打印不同的教)

编写一个程序,读人10 个数并且显示互不相同的数(即一个数出现多次,但仅显示一次)。(提示,读人一个数,如果它是一个新数,则将它存储在数组中。如果该数已经在数组中,则忽略它。)输入之后,数组包含的都是不同的数。下面是这个程序的运行示例:

(统计一位数的个數)

编写一个程序,生成0 和9 之间的100 个随机整数,然后显示每一个数出现的次数。

〆提示:使用(int)(Math.random()*10)产生0 到9 之间的随机整數。使用一个名为counts 的由10 个整数构成的數组存放0,1,…,9 的个数

(求数组的平均值)

编写两个重载的方法,使用下面的方法头返回一个数组的平均数:

public static int average(int[] array)
public static double average(double[3 array)

编写测试程序,提示用户输人10 个double 型值,调用这个方法,然后显示平均值

(找出最小元素)

编写一个方法,使用下面的方法头求出一个整数数组中的最小元素:

public static double min(double[] array)

编写测试程序,提示用户输人十个数字,调用这个方法返回最小值.显示其最小值。下面是该程序的运行示例

Enter ten numbers: 1.9 2.5 3.7 2 1.5 6 3 4 5 2
The minimum number is: 1.5

(找出最小元素的下标)

编写一个方法,求出整数数组中最小元素的下标。如果这样的元素个数大于1,则返回最小的下标。使用下面的方法头:

public static int indexOfSmal1estEIement(double[] array)

编写测试程序,提示用户输人10 个数宇,调用这个方法,返回最小元素的下标,然后显示这个下标值。

(随机数选择器)

编写一个方法,返回1到S4 之间的随机数,不包括传递到参数中的numbers。

如下指定这个方法头:

public static int getRandom(int. . . numbers)

(计算gcd)

编写一个方法,返回个数不确定的整数的最大公约数。指定这个方法头如下所示:

public static int gcd(int… numbers)

编写测试程序,提示用户输人 5 个数字,调用该方法找出这些数的最大公约数,并显示这个最大公约数。

(消除重复)

使用下面的方法头编写方法,消除数组中重复出现的值:

public static int[] eliminateDuplicates(int[] list)

编写一个测试程序,读取10 个整数,调用该方法,然后显示结果。下面是程序的运行示例:

Enter ten numbers: 1 2 3 2 1 6 3 4 5 2
The distinct numbers are: 1 2 3 6 4 5

(对学生排序)

编写一个程序,提示用户输入学生个数、学生姓名和他们的成绩,然后按照学生成绩的降序打印学生的姓名

( 冒泡排序)

使用冒泡排序算法编写一个排序方法。冒泡排序算法遍历数组几次。在每次遍历中,对相邻的两个元素进行比较。如果这一对元素是降序,则交换它们的值;否则,保持值不变。由于较小的值像气泡一样逐渐“ 浮向” 顶部,同时较大的值“沉向” 底部,所以,这种技术称为冒泡排序法( bubble sort) 或下沉排序法( sinking sort)。编写一个测试程序,读取10 个double 型的值,调用这个方法,然后显示排好序的数字。

(是否排好序了?)

编写以下方法,如果参数中的list 数组已经按照升序排好了,则返回true。

public static boolean isSorted(int[] list)

编写一个测试程序,提示用户输人一个列表,显示该列表是否已经排好序。下面是一个运行示例。注意,输人中的第一个数表示列表中的元素个数。该数不是列表的一部分。

Enter list: 8 10 1 5 16 61 9 11 1
The list is not sorted

Enter list: 10 1 1 3 4 4 5 7 9 11 21
The list is already sorted

(游戏:八皇后)

经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能互相攻击(即没有两个皇后是在同一行、同一列或者同一对角上)。可能的解决方案有很多。编写程序显示一个这样的解决方案。一个示例输出如图所示。

(游戏:储物柜难題)

一个学校有 100 个储物柜和 100 个学生。所有的储物柜在上学第一天都是关着的。随着学生进来,第一个学生(用S1表示)打开每个柜子。然后,第二个学生(用S2 表示)从第二个柜子(用L2 表示)开始.关闭相隔为 1 的柜子。学生S3 从第三个柜子开始,然后改变每个第三个柜子(如果它是开的就关上,如果它是关的就打开)。学生S4 从柜子L4 开始,然后改变每个第四个柜子的开闭状态。学生S5 从 L5 开始,然后改变每个第五个柜子的状态,依此类推,直到学生 S100 改变 L100 为止。

在所有学生都经过教学楼并且改变了柜子之后,哪些柜子是开的?编写程序找出答案。

(仿真:优惠券收集人网題)

优惠券收集人问题是一个经典的统计问题,它有很多实际应用。这个问题重复地从一套对象中?出一个对象,然后找出要将所有需要拿出的对象都至少拿出来一次,需要拿多少次。从该问题衍生出的类似问题就是,从一副打乱的 52 张牌中重复选牌,找出在看到每种花色都有一张出现前,需要选多少次。假设在选下一张牌之前的那张牌是背面向上的。编写程序,模拟要得到四张不同花色的牌所需要的选取次数,然后显示选中的四张牌(有可能一张牌被选了两次)。下面是这个程序的运行示例:

Queen of Spades
5 of Clubs
Queen of Hearts
4 of Diamonds
Number of picks: 12

( 完全相同的数组)

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

public static boolean equals(int[] listl, int[] 1ist2)

编写一个测试程序,提示用户输人两个整数列表,然后显示这两个列表是否完全相同。下面是运行示例。注意,输人的第一个数字表明列表中元素的个数。该数字不是列表的一部分。

(相同的数组)

如果两个数组listl 和list2 的内容相同,那么就说它们是相同的。使用下面的方法头编写一个方法,如果 list1 和 list2 是相同的,该方法就返回true:

public static boolean equals(int[] listl, int[] list2)

编写一个测试程序,提示用户输人两个整数列表,然后显示它们两个是否相同。下面是运行示例。注意,输入的第一个数字表示列表中元素的个数。该数字不是列表的一部分。

Enter list1: 5 2 5 6 6 1
Enter list2: 5 5 2 6 1 6
Two lists are identical

Enter list1: 5 5 5 6 6 1
Enter list2: 5 2 5 6 1 6
Two lists are not identical

(数学方面:组合)

编写一个程序,提示用户输人10 个整数,然后显示从这10 个数中选出两个数的所有组合。

( 游戏:选出四张牌)

编写一个程序,从一’副52 张的牌中选出四张,然后计算它们的和。Ace、King,Queen 和Jack 分别表示1、13、12 和11。程序应该显示得到的和为24 的选牌次数。

(模式识别方面:四个连续相等的数)

编写下面的方法,测试某个数组是否有四个连续的值相同的数字。

public static boolean isConsecutiveFour(int[] values)

编写测试程序,提示用户输人一个整数列表,如果这个列表中有四个连续的具有相同值的数,那就显示true ; 否则,显示false。程序应该首先提示用户键人输人的大小,即列表中值的个数。这里是一个运行示例。

Enter the number of values: 8
Enter the values: 3 4 5 5 5 5 4 5
The list has consecutive fours
Enter the

Enter the number of values: 9
Enter the values: 3 4 5 5 6 5 5 4 5
The list has no consecutive fours

(合并两个有序列表)

编写下面的方法,将两个有序列表合并成一个新的有序列表。

public static int[] merge(int[] listl, int[] list2)

只进行listl.length+list2.length 次比较来实现该方法。编写一个测试程序,提示用户输入两个有序列表,然后显示合并的列表。下面是一个运行示例= 注意,输人的第一个数字表示列表中元素的个数 3 该数字不是列表的一部分。

Enter list1: 5 1 5 16 61 111
Enter list2: 4 2 4 5 6
The merged list is 1 2 4 5 5 6 16 61 111

( 对字符串中的字符排序)

使用以下方法头编写一个方法,返回一个排好序的字符串。

public static String sortCString s)

例如. sort(“acb”)返回abc。编写一个测试程序.提示用户输入一个字符串,显示排好序的字符串。

( 游戏:猜字游戏)

编写一个猜宇游戏。随机产生一个单词,提示用户一次猜测一个宇母,如运行示例所示。单词中的每个字母显示为一个星号。当用户猜测正确后,正确的字母显示出来。当用户猜出一个单词,显示猜错的次数,并且询问用户是否继续对另外一个单词进行游戏。声明一个数组来存储单词,如下所示:

// Add any words you wish in this array
String[] words = {"write", "that", ...};
(Guess) Enter a letter in word ******* > p
(Guess) Enter a letter in word p****** > r
(Guess) Enter a letter in word pr**r** > p
p is already in the word
(Guess) Enter a letter in word pr**r** > o
(Guess) Enter a letter in word pro*r** > g
(Guess) Enter a letter in word progr** > n
n is not in the word
(Guess) Enter a letter in word progr** > m
(Guess) Enter a letter in word progr*m > a
The word is program. You missed 1 time
Do you want to guess another word? Enter y or n>
Programming Exercises 285

参考答案

https://github.com/AndrewProgramming/JavaProgrammingHomework/tree/master/src/chpater_array

Leave a Reply

Close Menu