实验目的:1、掌握数组的创建
2、掌握数组的访问与遍历
3、掌握数组的属性与方法
实验重点:创建数组、数组的访问与遍历、数组元素的添加与修改、遍历数组。
实验内容:
1、用冒泡排序法实现数组arr[10,26,58,96,43]升序输出,写出每一趟排序的结果,写出程序代码。
console.log('1、用冒泡排序法实现数组arr[10, 26, 58, 96, 43]升序输出,写出每一趟排序的结果(试写代码)。');
var arr = [10, 26, 58, 96, 43];
var temp;
console.log("初始数组: " + arr);
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交换位置
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
console.log("第 " + (i + 1) + " 趟排序结果: " + arr);
}
console.log("最终升序排序结果: " + arr);
console.log('----------分隔符----------');
2、用插入排序法升序实现数组s[89,56,10,21,67,45,1,88]升序输出,写出每一趟排序的结果。
console.log('2、用插入排序法升序实现数组s[89, 56, 100, 21, 67, 45, 1, 88]升序输出,写出每一趟排序的结果。');
var s = [89, 56, 100, 21, 67, 45, 1, 88];
var temp1, j;
console.log("初始数组: " + s);
for (var i = 1; i < s.length; i++) {
temp1 = s[i];
j = i - 1;
while (j >= 0 && s[j] > temp1) {
s[j + 1] = s[j];
j--;
}
s[j + 1] = temp1;
console.log("第 " + i + " 趟排序结果: " + s);
}
console.log("最终升序排序结果: " + s);
console.log('----------分隔符----------');
3、用选择排序法实现数组arr[13,26,21,76,43]降序输出,写出每一趟排序的结果。
console.log('3、用选择排序法实现数组arr[13, 26, 21, 76, 43]降序输出,写出每一趟排序的结果。');
var arr1 = [13, 26, 21, 76, 43];
var temp2, maxIndex;
console.log("初始数组: " + arr1);
for (var i = 0; i < arr1.length - 1; i++) {
maxIndex = i;
for (var j = i + 1; j < arr1.length; j++) {
if (arr1[j] > arr1[maxIndex]) {
maxIndex = j;
}
}
temp2 = arr1[i];
arr1[i] = arr1[maxIndex];
arr1[maxIndex] = temp2;
console.log("第 " + (i + 1) + " 趟排序结果: " + arr1);
}
console.log("最终降序排序结果: " + arr1);
console.log('----------分隔符----------');
4、用数组输出菲波拉切数列的前20个数。
console.log('4、用数组输出菲波拉切数列的前20个数。');
function generateFibonacci(n) {
var fibonacci = [0, 1];
for (var i = 2; i < n; i++) {
fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
}
return fibonacci;
}
var fibonacciArray = generateFibonacci(20);
console.log("斐波拉切数列的前20个数: " + fibonacciArray);
console.log('----------分隔符----------');
5、用Array数组对象定义星期值数组,通过当前的时间在页面上显示是今天星期几。
提示:今天的日期var day=new Date() ;星期几:var w=day.getDay();
console.log('5、用Array数组对象定义星期值数组, 通过当前的时间在页面上显示是今天星期几。');
var day = new Date();
var w = day.getDay();
var weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
var today = weekdays[w];
console.log("今天是" + today);
// 提示:今天的日期var day = new Date(); 星期几:var w = day.getDay();
// 显示效果: 今天是星期三
console.log('----------分隔符----------');
6、编写程序:定义4*4矩阵二维数组arr[[6,3,5,1],[2,4,8,5],[3,5,6,7],[3,7,6,9]],按矩阵效果输出于屏幕,并求矩阵的主对角线和次对角线之和。
console.log('6、 编写程序:定义4*4矩阵二维数组arr[[6,3,5,1],[2,4,8,5],[3,5,6,7],[3,7,6,9]],按矩阵效果输出于屏幕,并求矩阵的主对角线和次对角线之和。');
// 定义矩阵二维数组
var arr2 = [
[6, 3, 5, 1],
[2, 4, 8, 5],
[3, 5, 6, 7],
[3, 7, 6, 9]
];
// 输出矩阵效果
console.log("矩阵效果:");
for (var i = 0; i < arr2.length; i++) {
console.log(arr2[i].join("\t"));
}
// 计算主对角线和次对角线的和
var primaryDiagonalSum = 0;
var secondaryDiagonalSum = 0;
for (var i = 0; i < arr2.length; i++) {
primaryDiagonalSum += arr2[i][i]; // 主对角线元素之和
secondaryDiagonalSum += arr2[i][arr2.length - 1 - i]; // 次对角线元素之和
}
console.log("\n主对角线之和: " + primaryDiagonalSum);
console.log("次对角线之和: " + secondaryDiagonalSum);
console.log('----------分隔符----------');
7、二维数组的转置,输出转置前和转置后的效果
1 2 3 1 4
4 5 6 2 5
3 6
console.log('7、二维数组的转置,输出转置前和转置后的效果')
// 转置前的数组
var originalArray = [
[1, 2, 3],
[4, 5, 6]
];
console.log("转置前的数组:");
for (var i = 0; i < originalArray.length; i++) {
console.log(originalArray[i].join("\t"));
}
// 转置操作
var transposedArray = [];
for (var i = 0; i < originalArray[0].length; i++) {
transposedArray[i] = [];
for (var j = 0; j < originalArray.length; j++) {
transposedArray[i][j] = originalArray[j][i];
}
}
console.log("\n转置后的数组:");
for (var i = 0; i < transposedArray.length; i++) {
console.log(transposedArray[i].join("\t"));
}
console.log('----------分隔符----------');
8、综合应用:【案例】猴子选大王
游戏规则:要求一群猴子排成一圈,按“1,2,……,n”依次编号。然后从第1只开始数,数到第m只,把它踢出圈,其后的猴子再从1开始数,数到第m只,再把它踢出去……,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就是我们要找的大王。
console.log('6、综合应用:猴子选大王');
function monkeyKing(totalMonkeys, kickOutIndex) {
var monkeys = [];
// 创建猴子数组
for (var i = 1; i <= totalMonkeys; i++) {
monkeys.push(i);
}
var index = 0;
while (monkeys.length > 1) {
index = (index + kickOutIndex - 1) % monkeys.length;
monkeys.splice(index, 1);
}
return monkeys[0];
}
console.log('猴子的总数totalMonkeys = 10');
var totalMonkeys = 10; // 猴子的总数
console.log('每次踢出第几只猴子(游戏规则)kickOutIndex = 3');
var kickOutIndex = 3; // 每次踢出第几只猴子---游戏规则
var king = monkeyKing(totalMonkeys, kickOutIndex);
console.log("猴子选大王结果: 第 " + king + " 号猴子成为大王");
console.log('----------分隔符----------');
代码实现思路:(仅供参考)
通过prompt()接收用户传递的猴子总数n和踢出的第m只猴子。
利用数组保存所有猴子的编号(1~n)。
设置一个变量i,记录每次参与游戏(报数)的猴子位置。
通过while循环,只要猴子数组内元素个数大于1,就继续循环。
在循环中判断当前猴子的位置i与m求余是否为0,若为零,删除该数组元素。
提示:通过头部出栈的方式取出猴子,如判断不为0,再将该元素尾部入栈。
本代码由上课实机作业结合外部软件完成,一切操作仅供参考,如有更正请指出一起学习交流。