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>