1. 读取学生的10门课的成绩, 然后输出10门课成绩的最高分, 最低分, 总分, 平均分.
提示:把10门课的成绩保存如一个数组中.
2. 创建100个随机的10到60的随机整数, 然后分别统计每个数字出现的次数
3. 定义一个函数, 判断数组中是否所有的数字都大于0
提示: 传入一个数组, 返回布尔值
4. 封装函数: 把两个数组共同的元素放入一个新的数组, 并返回新的数组
提示: 传入两个数组, 返回值为新的数组
5. 定义一个函数: 可以把数组中的下标为 3 的元素移到数组的开头.
提示: 传入一个数组
6. 有一个从大到小排好序的数组{99,85,82,63,60}。
现从页面输入一个数,要求按原来的规律将它插入数组中。
假设你输入的80,则应该插入到82和63之间。
7. 一个数字中有20个元素,对前10个元素使用升序,后10个元素使用降序。
元素都是整数。
1.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<!--题目:读取学生的10门课的成绩, 然后输出10门课成绩的最高分, 最低分, 总分, 平均分.
提示:把10门课的成绩保存如一个数组中.-->
<body>
<script>
var sum = 0;
var ave = 0;
var arr = [90, 100, 10, 20, 30, 40, 50, 60, 70, 80];
console.log(arr);
//排序
arr.sort(function (a, b) {
return a - b;
});
//最高分
function large(arr) {
return arr[arr.length - 1];
};
//最低分
function small(arr) {
return arr[0];
};
//总分
function total(arr) {
for (var ele of arr) {
sum += ele;
}
return sum;
};
//平均分
function ave(arr) {
return sum / arr.length;
}
//输出
console.log("总分: " + total(arr));
console.log("最高分: " + large(arr));
console.log("最低分: " + small(arr));
console.log("平均分: " + ave(arr));
</script>
</body>
</html>
<!--记得再次用原型替换3进行调试-->
用函数封装起来:(更具面向对象的思想)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
function Student(){
this.scores = [];
this.init = function (){
for (var i = 0; i < 3; i++){
var score = +prompt("请输入学生的成绩:");
this.scores.push(score);
}
};
this.max = function (){
var scores = this.scores;
var m = scores[0];// ["100", "200", "40"]
for(var i = 1; i < scores.length; i++){
if(m < scores[i]){
m = scores[i];
}
}
return m;
}
this.min = function (){
var scores = this.scores;
var m = scores[0];// ["100", "200", "40"]
for(var i = 1; i < scores.length; i++){
if(m > scores[i]){
m = scores[i];
}
}
return m;
}
this.sum = function (){
var s = 0;
for(var e of this.scores){
s += e;
}
return s;
}
this.avg = function (){
return this.sum() / this.scores.length;
}
}
var s1 = new Student();
s1.init(); //初始化学生的成绩
console.log(s1.max());
</script>
</body>
</html>
2.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<!--创建100个随机的10到60的随机整数, 然后分别统计每个数字出现的次数-->
<script>
//arr是放随机数产生的数字,newArr是放重复元素和重复个数的二维数组
var arr = [];
var newArr = [];
//js的数组可以动态增加,使用数组字面量创建
for (var i = 0; i < 100; i++) {
//用random判断随机数其实不是perfect(正态分布)
arr[i] = parseInt(Math.random() * 50 + 10);
}
console.log("随机数(正态分布):\n" + arr);
//对数组进行排序
arr.sort(function (a, b) {
return a - b; //升序
});
console.log("随机升序排序:\n" + arr);
//判断数组元素的重复个数,这样算法是相对而言比较高效的,省掉了低效的代码率
for (var i = 0; i < arr.length;) {
var count = 0;
for (var j = i; j < arr.length; j++) {
if (arr[i] == arr[j]) {
count++;
} else {
break;
}
}
newArr.push([arr[i], count]);
i += count;
}
//输出二维数组
for (var i = 0; i < newArr.length; i++) {
console.log(newArr[i][0] + "重复次数:" + newArr[i][1]);
}
</script>
<body>
</body>
</html>
在这顺便讲解一下随机数生成的方法,以后只要涉及到随机数,就套路进去就行,就跟数学公式一样。(证明略)
如何使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备。
方法1:Math.random() 函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1)
生成n-m,包含n但不包含m的整数:
Step1:算出 m-n的值,假设等于w
Step2:Math.random()*w
Step3:Math.random()*w+n
Step4:parseInt(Math.random()*w+n, 10) 在这里10表示10进制,默认就是10进制。
方法2:生成n-m,不包含n但包含m的整数:
Step1:算出 m-n的值,假设等于w
Step2:Math.random()*w
Step3:Math.random()*w+n
Step4:Math.floor(Math.random()*w+n) + 1
注:Math.floor() 返回小于等于数字参数的最大整数,对数字进行下舍入
一般记住这两种方法就行了。
另解:(在那里要不要加1,看自己的情况,掌握怎么算的):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
// [0, 1) [0, 51) [10, 61) [10, 60]
// m = 10 n= 60
function randomInt(m, n){ //区间: [m, n]
return parseInt(Math.random() * (n - m + 1) + m);
}
/*创建一个长度是 count, 元素的值的范围 是 [m, n]的数组*/
function createArray(count, m, n){
var arr = [];
for (var i = 0; i < count; i++){
arr.push(randomInt(m, n));
}
return arr;
}
function tongji(){
var obj = {};
var arr = createArray(400, 10, 19);
for (var num = 10; num <= 19; num++){
var c = 0;
for (var e of arr){
if (e == num){
c++;
}
}
obj[num + ""] = c;
}
return obj;
}
var result = tongji();
console.log(10 + "的个数:" + result["10"]);
console.log(result["11"]);
console.log(result);
</script>
</body>
</html>
3.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<!--定义一个函数, 判断数组中是否所有的数字都大于0
提示: 传入一个数组, 返回布尔值
-->
<body>
<script>
var arr=[10,20,3,1,3.1,9,1,34,90,0,-100,100];
var flag=true;
for(var i=0;i<arr.length;i++){
if(arr[i]<0){
flag=false;
console.log("数组存在第一个非正值为:"+arr[i]+" 其数组下标为 "+i);
break;
}
}
if(flag){
console.log("数组恒正~");
}else{
console.log("因此,数组不是恒正的~");
}
</script>
</body>
</html>
4.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<!--封装函数: 把两个数组共同的元素放入一个新的数组, 并返回新的数组
提示: 传入两个数组, 返回值为新的数组
-->
<body>
<script>
var arr1 = [1, 2, 3, "aaa", "hello", 999, -1];
var arr2 = [3, 78, "aaa", "bbb", 99, 1, -1, "hello"];
var newArr = [];
//两层嵌套,效率很低。
function common(arr1, arr2) {
for (var i = 0; i < arr1.length; i++) {
for (var j = 0; j < arr2.length; j++) {
if (arr1[i] === arr2[j]) {
newArr.push(arr1[i]);
}
}
}
}
common(arr1, arr2);
console.log(newArr);
</script>
</body>
</html>
5.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--定义一个函数: 可以把数组中的下标为 3 的元素移到数组的开头.
提示: 传入一个数组
-->
<script>
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 111];
console.log("原数组: " + arr);
//函数alter将下标为3的移动到开头
function alter(arr) {
var temp = arr[3];
arr.splice(3, 1);
arr.splice(0, 0, temp);
}
alter(arr);
console.log("移动后数组: " + arr);
</script>
</body>
</html>
6.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<!--题目:有一个从大到小排好序的数组{99,85,82,63,60}。
现从页面输入一个数,要求按原来的规律将它插入数组中。
假设你输入的80,则应该插入到82和63之间。
-->
<!--
此题方法集锦:
法1:投机取巧 直接先把数字插入到数组头部或者尾部,然后一块排序,很ok吧。
法2:用折半查找二分法,在大样本数据下比较高效,本题解法实则时间复杂度达到O(n),而折半O(log2n)
-->
<body>
<script>
//需插入的数字
var insertNum=16;
//假设未排序,自己先排序一下
var arr=[88,98,2,5,8,10,25,36];
arr.sort(function (a,b) {
return b-a; //降序排列
});
console.log("降序排列的数组为:"+arr);
// 此循环得到的i值就是排序好的数组最接近insertNum值得那个最大下标,虽然效率很差。
for(var i=0;i<arr.length;i++){
if(arr[i]>=insertNum){
var temp=i;
}
}
//插入到下标为temp+1的位置
arr.splice(temp+1,0,insertNum);
//输出info
console.log("插入数字"+insertNum+"后的新数组为: "+arr);
</script>
</body>
</html>
另解:
<script>
/*7. 有一个从大到小排好序的数组{99,85,82,63,60}。
现从页面输入一个数,要求按原来的规律将它插入数组中。
假设你输入的80,则应该插入到82和63之间。*/
function insert(arr, num){
for(var i = 0; i < arr.length; i++){
if(arr[i] < num){
arr.splice(i, 0, num);
return; // 直接结束函数
}
}
arr.push(num);
}
var arr = [99, 85, 82, 63, 60];
insert(arr, 610);
console.log(arr);
</script>
7.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//数组元素20个
var arr = [100,12,34,67,23,16,6,9,24,79,2,90,33,69,1,34,-2,0,666,1000];
//切片
var arr1=arr.slice(0,10);
var arr2=arr.slice(10);
//前升序
arr1.sort(function (a,b) {
return a-b;
});
//后降序
arr2.sort(function (a,b) {
return b-a;
});
//组合新数组(cs6)并输出
var newArr = [...arr1,...arr2];
console.log("前升序后降序的数组为: " + newArr);
</script>
</body>
</html>
版权声明:本文为LY_code原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。