Javascript之条件、循环、函数、递归、数组、字符串、Date练习题
2020-04-06 07:14
1446 查看
文章目录
- 编写函数,计算三个数字的大小,按从小到大的顺序打印
- 编写函数,在页面上打印一个N行M列的表格,表格内容填充0~100的随机数字
- 编写函数,实现功能:foo(1)(2)(3)(4) 打印 24
- 编写函数,实现点击按钮随便改变页面和按钮背景颜色
- 编写函数,实现随机点名
- 编写函数,计算两个数字的和差积商
- 编写函数,判断一个字符串的内容是不是纯数字,返回true或false
- 编写函数,生成4位数字的验证码
- 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,请编写一个函数,传入原文,输出密文
- 编写函数,计算任意两个数字之间所能组成的奇数个数,数字必须是个位数。比如:计算0~3之间能组成的奇数是: 01、03、13、21、23、31
- 编写函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数求1/1+1/3+...+1/n
- 在页面输入任意数字,点击按钮后计算该数字的阶乘
- 斐波那契数列(1,1,2,3,5,8···)
- 辗转相除法(求最大公约数)
- 定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程
- 编写函数map(arr) 把数组中的每一位数字都增加30%,并返回一个新数组
- 有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
- 编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组
- 通过循环按执行顺序,做一个5×5的二维数组,赋1到25的自然数,然后输出该数组的左下半三角。试编程
- 实现filter、every、some函数
- 冒泡排序
- 选择排序
- 桶排序
- 快速排序
- 编写函数,输出四位数的数字字母混合验证码(数字+大写字母+小写字母)
- aabccd统计每个字符出现的次数,使结果显示为一个对象,如:{a:2, b:1, c:2, d:1},去掉重复的字符,使结果显示 abcd
- 编写函数,判断一个字符串是否是 “可回文字符串”,如:abccba。是:true;不是:false
- 编写函数,获得一个十六进制的随机颜色的字符串(例如:#20cd4f)
- 字符串拼接配合json实现商品列表布局
一、条件类
判断三个数的大小,并从小到大排列
var num1 = +prompt("请输入数字:"); var num2 = +prompt("请输入数字:"); var num3 = +prompt("请输入数字:"); if(num1 > num2 && num1 > num3){ if(num2 > num3){ alert(num3 + "," + num2 + "," + num1); }else{ alert(num2 + "," + num3 + "," + num1); } }else if(num2 > num1 && num2 > num3){ if(num1 > num3){ alert(num3 + "," + num1 + "," + num2); }else{ alert(num1 + "," + num3 + "," + num2); } }else{ if(num1 > num2){ alert(num2 + "," + num1 + "," + num3); }else{ alert(num1 + "," + num2 + "," + num3); } }
判断学生成绩是否合格
var score = prompt("请输入分数:"); switch(parseInt(score / 10)){ case 10: case 9: case 8: case 7: case 6: console.log("及格啦"); break; default: console.log("不及格"); }
输入日期,判断这个日期是这一年的第几天
var date = prompt("请输入8位数日期:"); var year = parseInt(date / 10000) var month = parseInt(date / 100) % 100; var day = date % 100; var count = 0; var february = 28; switch(month - 1){ case 12: count += 31; case 11: count += 30; case 10: count += 31; case 9: count += 30; case 8: count += 31; case 7: count += 31; case 6: count += 30; case 5: count += 31; case 4: count += 30; case 3: count += 31; case 2: if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){ count += 29; }else{ count += 28; } case 1: count += 31; break } count += day; alert("第" + count + "天");
二、循环类
打印1000-2000之间的闰年,每行打印4个
for(var i = 1000 , count = 0 ; i < 2001 ; i++){ if(i % 4 === 0 && i % 100 !== 0 || i % 400 === 0){ document.write(i + " "); count++; } // count为计数器 if(count % 4 === 0){ document.write("<br>") } }
打印水仙花数
for(var i = 100 ; i < 1000 ; i++){ var a = i % 10; // 个位数字 var b = parseInt(i / 10) % 10; // 十位数字 var c = parseInt(i / 100); // 百位数字 // i === Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) // i === a ** 3 + b ** 3 + c ** 3 if(i === a * a * a + b * b * b + c * c * c){ document.write(i + "<br>"); } }
打印1-100之间所有的质数
for(var i = 2 ; i < 101 ; i++){ var flag = true; //使用中间量 flag 记录状态 for(var j = 2 ; j < i ; j++){ //代码优化1: j < i 改为 j <= Math.sqrt(i) if(i % j === 0){ flag = false; break; //代码优化2 } } if(flag){ console.log(i); } }
判断某个数是否是质数
var num = prompt("请输入一个大于1的数字:"); var flag = true; //使用中间量 flag 记录状态 for(var i = 2 ; i < num ; i++){ if(num % i === 0){ flag = false; break; } } if(flag){ document.write(num + "是质数"); }else{ document.write(num + "不是质数"); }
打印三角形
for(var i = 0 ; i < 10 ; i++){ for(var j = 0 ; j < i + 1 ; j++){ document.write("* "); } document.write("<br>"); }
打印倒三角形
for(var i = 10 ; i > 0 ; i--){ for(var j = 0 ; j < i ; j++){ document.write("* "); } document.write("<br>") }
打印等腰三角形
for(var i = 0 ; i < 10 ; i++){ for(var j = 0 ; j < i * 2 + 1 ; j++){ document.write("* "); } document.write("<br>") }
打印菱形
for(var i = 0 ; i < 10 ; i++){ for(var j = 0 ; j < i * 2 + 1 ; j++){ document.write("* "); } document.write("<br>") }for(var i = 8 ; i >= 0 ; i--){ for(var j = 0 ; j < i * 2 + 1 ; j++){ document.write("* "); } document.write("<br>") }
打印空心菱形
for(var i = 0 ; i < 10 ; i++){ for(var j = 0 ; j < i * 2 + 1 ; j++){ if(j === 0 || j === i * 2){ document.write("* "); }else{ document.write(" "); } } document.write("<br>") } for(var i = 8 ; i >= 0 ; i--){ for(var j = 0 ; j < i * 2 + 1 ; j++){ if(j === 0 || j === i * 2){ document.write("* "); }else{ document.write(" "); } } document.write("<br>") }
打印99乘法表
for(var i = 1 ; i < 10 ; i++){ for(var j = 1 ; j < i + 1 ; j++){ document.write(j + "*" + i + "=" + j * i + " "); } document.write("<br>"); }
三、函数类
编写函数,计算三个数字的大小,按从小到大的顺序打印
function fun(a, b, c) { var temp; if(a > b){ temp = a; a = b; b = temp; } if(a > c){ temp = a; a = c; c = temp; } if(b > c){ temp = b; b = c; c = temp; } console.log("从小到大的顺序是" + a + "," + b + "," + c); } fun(11, -2, 5);
编写函数,在页面上打印一个N行M列的表格,表格内容填充0~100的随机数字
function printForm(N, M){ document.write("<table>") for(i = 0 ; i < N ; i++){ document.write("<tr>") for(j = 0 ; j < M ; j++){ document.write("<td>" + parseInt(Math.random() * 101) + "</td>") } document.write("</tr>") } document.write("</table>") } printForm(8, 5);
编写函数,实现功能:foo(1)(2)(3)(4) 打印 24
function foo(a){ return function(b){ return function(c){ return function(d){ console.log(a * b * c * d); } } } } foo(1)(2)(3)(4);
编写函数,实现点击按钮随便改变页面和按钮背景颜色
<body id="body"> <button id="btn">变换背景颜色</button> function setRandomColor(ele, color){ var r = color === "red" ? 255 : parseInt(100 * Math.random()); var g = color === "green" ? 255 : parseInt(100 * Math.random()); var b = color === "blue" ? 255 : parseInt(100 * Math.random()); random_color = "rgb(" + r + "," + g + "," + b + ")"; ele.style.cssText = "background-color : " + random_color; } btn.onclick = function(){ setRandomColor(body, "red"); setRandomColor(btn, "green"); }
编写函数,实现随机点名
<button id="btn">随机点名</button> function getRandomName(){ var random_index = parseInt(arguments.length * Math.random()); return arguments[random_index]; } btn.onclick = function(){ var random_name = getRandomName("吴京", "吴奇隆", "吴彦祖", "吴亦凡", "吴孟达", "吴晨"); console.log(random_name); }
编写函数,计算两个数字的和差积商
function calculate(a, b, operator){ switch(operator){ case "+": return a + b; case "-": return a - b; case "*": return a * b; case "/": return a / b; } } console.log(calculate(10, 2, "/"));
编写函数,判断一个字符串的内容是不是纯数字,返回true或false
function fun(a){ return Number(a) || a === "0" ? true : false; }
编写函数,生成4位数字的验证码
function generateCode(){ var code = ""; for(var i = 0; i < 4; i++){ code += parseInt(Math.random() * 10) } return code; } console.log(generateCode());
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,请编写一个函数,传入原文,输出密文
function generatePassword(i){ // 千位数字 var a = (parseInt(i / 1000) + 5) % 10; // 百位数字 var b = (parseInt(i / 100) % 10 + 5) % 10; // 十位数字 var c = (parseInt(i / 10) % 10 + 5) % 10; // 个位数字 var d = (i % 10 + 5) % 10; var temp = a; a = d; d = temp; temp = b; b = c; c = temp; return a * 1000 + b * 100 + c * 10 + d; } console.log(generatePassword(3759));
编写函数,计算任意两个数字之间所能组成的奇数个数,数字必须是个位数。比如:计算0~3之间能组成的奇数是: 01、03、13、21、23、31
function countOdd(a, b){ // 默认a<b,若a>b则a,b换位 if(a > b){ var temp = a; a = b; b = temp; } for(var i = a , count = 0 ; i <= b ; i++){ for(var j = a ; j <= b ; j++){ if(i % 2 !== 0 && j !== i){ console.log("" + j + i); count++; } } } return count; } console.log(countOdd(3, 0));
四、递归类
编写函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数求1/1+1/3+…+1/n
function calculator(n){ if(n === 1 || n === 2){ return 1 / n; } return 1 / n + calculator(n - 2); } console.log(calculator(5)); console.log(calculator(6));
在页面输入任意数字,点击按钮后计算该数字的阶乘
function factorial(n){ if(n === 1){ return 1; } return n * factorial(n - 1); } var value = prompt("请输入数字:"); btn.onclick = function(){ console.log(factorial(value)); }
斐波那契数列(1,1,2,3,5,8···)
function fun(i){ if(i === 1 || i === 2){ return 1; } return fun(i - 1) + fun(i - 2); } console.log(fun(3));
辗转相除法(求最大公约数)
function fun(a, b){ if(a % b === 0){ return b; } var r = a % b; a = b; b = r; return fun(a , b); } console.log(fun(16, 24));
五、数组类
定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程
var arr = []; var res = []; var sum = 0; for(var i = 1 ; i < 31 ; i++){ arr.push(2 * i); sum += 2 * i; if(i % 5 === 0){ res.push(sum / 5); sum = 0; } } console.log(res);
编写函数map(arr) 把数组中的每一位数字都增加30%,并返回一个新数组
function map(arr){ var new_arr = []; for(var i = 0; i < arr.length; i++){ // Math.round 解决数组元素中存在浮点数时的计算误差问题 new_arr.push(Math.round(arr[i] * 1.3 * 10) / 10); } return new_arr; } var arr = [1, 10, 100, 1000, 10000]; console.log(map(arr));
有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
function sort(arr, value){ if(arr[arr.length - 1] <= value){ arr.push(value); }else{ for(var i = 0 ; i < arr.length ; i++){ if(arr[i] > value){ arr.splice(i, 0, value); break; } } } return arr; } var arr = [1, 5, 8, 10, 14]; var value = +prompt("请输入数字:"); console.log(sort(arr, value));
编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组
function norepeat(arr){ for(var i = 0; i < arr.length; i++){ for(var j = i + 1; j < arr.length; j++){ if(arr[i] === arr[j]){ arr.splice(j, 1); j--; } } } return arr; } var arr = [1, 2, 2, 5, 5, 6, 4, 4, 7, 1, 3, 5]; console.log(norepeat(arr));
通过循环按执行顺序,做一个5×5的二维数组,赋1到25的自然数,然后输出该数组的左下半三角。试编程
var arr =[]; var res = []; var new_arr = []; for(var i = 1; i < 26; i++){ res.push(i); if(i % 5 === 0){ arr.push(res); res = []; } } for(var j = 0; j < 5 ; j++){ new_arr.push(arr[j].slice(0, j + 1)); } console.log(arr); console.log(new_arr);
实现filter、every、some函数
function filter(arr, fn){ var res_arr = []; for(var i = 0; i < arr.length; i++){ var res = fn(arr[i]); if(res){ res_arr.push(arr[i]); } } return res_arr; } function every(arr, fn){ var flag = true; for(var i = 0; i < arr.length; i++){ if(!fn(arr[i])){ flag = false; break; } } return flag; } function some(arr, fn){ var flag = false; for(var i = 0; i < arr.length; i++){ if(fn(arr[i])){ flag = true; break; } } return flag; } var arr = [1, 2, 3, 4, 5]; console.log(filter(arr, function(item){ return item > 3; })) console.log(every(arr, function(item){ return item > 3; })) console.log(some(arr, function(item){ return item > 3; }))
冒泡排序
var arr = [3, 5, 2, 7, 9, 11, 6]; for(var k = 0 ; k < arr.length - 1 ; k++){ // i < arr.length - 1 ==> 没必要比较最后一个数和undefined // i < arr.length - 1 - k ==> 已经排序好的不用再比对 for(var i = 0 ; i < arr.length - 1 - k ; i++){ if(arr[i] > arr[i + 1]){ var temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } console.log(arr);
选择排序
var arr = [3, 5, 2, 7, 9, 11, 6]; for(var k = 0 ; k < arr.length ; k++){ // 假定的最小值 var min = arr[k]; var index = k; for(var i = 1 + k ; i < arr.length ; i++){ // 记录实际最小值 if(arr[i] < min){ min = arr[i]; index = i; } } // 实际最小值和假定最小值换位 arr[index] = arr[k]; arr[k] = min; } console.log(arr);
桶排序
var arr = [3, 2, 5, 7, 10]; // 建立对于最大值数量的桶,该步可省略 // 承载下标的容器 var bocket = []; for(var i = 0; i < arr.length; i++){ // 往桶里注水 bocket[arr[i]] = 1; } arr.length = 0; // 用for in可略过empty的数据 for(var attr in bocket){ // attr是字符串,需要转换为数字 arr.push(Number(attr)); } console.log(arr);
快速排序
function quickSort(arr){ // 终止条件 if(arr.length === 1 || arr.length === 0){ return arr; } // 找中点 var mid_index = parseInt(arr.length / 2); var mid_num = arr[mid_index]; // 分左右 var left = []; var right = []; for(var i = 0; i < arr.length; i++){ // 不和中比对 if(i === mid_index){ continue; } // 分配左右 if(arr[i] > mid_num){ right.push(arr[i]); }else{ left.push(arr[i]); } } // 拼接左、中、右三者的结果(注意中点为值,需要加中括号变成数组) return quickSort(left).concat([mid_num], quickSort(right)); } var arr = [2, 5, 1, 3, 7]; console.log(quickSort(arr));
六、字符串类
编写函数,输出四位数的数字字母混合验证码(数字+大写字母+小写字母)
function getRandomInt(min , max){ return min + parseInt( Math.random() * (max - min + 1)); } function generateCode(){ var min, max; var code = ""; for(var i = 0 ; i < 4 ; i ++){ switch(getRandomInt(1 , 3)){ case 1 : min = 48; max = 57; break; case 2 : min = 65; max = 90; break; case 3 : min = 97; max = 122; break; } var randomInt = getRandomInt(min , max); code += String.fromCharCode(randomInt); } return code; } console.log(generateCode());
aabccd统计每个字符出现的次数,使结果显示为一个对象,如:{a:2, b:1, c:2, d:1},去掉重复的字符,使结果显示 abcd
function fn(str){ var obj = {}; for(var i = 0; i < str.length; i++){ var attr = str[i]; if(obj[attr] === undefined){ obj[attr] = 1; }else{ obj[attr]++; } } console.log(obj); var string = ""; for(var key in obj){ string += key; } console.log(string); } var str = "aabccd"; fn(str);
编写函数,判断一个字符串是否是 “可回文字符串”,如:abccba。是:true;不是:false
// 方法1 function judgePalindrome(str){ var n = parseInt((str.length + 1) / 2); var flag = true; for(var i = 0; i < n; i++){ if(str[i] !== str[str.length - i - 1]){ flag = false break; } } return flag; } // 方法2 function judgePalindrome(str){ // 字符串 => 数组 => 倒序数组 => 字符串 var new_str = str.split("").reverse().join(""); return str === new_str; } console.log(judgePalindrome("abccba")); console.log(judgePalindrome("abcgcba")); console.log(judgePalindrome("abcdba"));
编写函数,获得一个十六进制的随机颜色的字符串(例如:#20cd4f)
function getColorNum(){ var color = "#"; for(var i = 0 ; i < 6 ; i ++){ color += parseInt(Math.random() * 15).toString(16); } return color; } console.log(getColorNum());
字符串拼接配合json实现商品列表布局
<head> <style> body{margin: 0; padding: 0; background: #b6b6b6; } .center{ width: 1380px; height: 233px; margin: 0 auto; } .center .box{ width: 260px; height: 193px; border-radius: 4px; float: left; margin-right: 20px; background: #fff; } .center .box:last-of-type{ margin-right: 0; } .center .box img{ width: 260px; height: 146px; } .center .box p{ padding: 0 10px; margin-top: 4px; font: 14px/1.5 "PingFang SC","Lantinghei SC","Microsoft YaHei","HanHei SC","Helvetica Neue","Open Sans",Arial,"Hiragino Sans GB","微软雅黑",STHeiti,"WenQuanYi Micro Hei",SimSun,sans-serif; } </style> </head> <body> <div class="center" id="center"></div> <script> var json = `[ { src : "https://image.gogoup.com/course/20181016/1539669673749.jpg", title : "教你画卡通IP" }, { src : "https://image.gogoup.com/course/20190115/1547541116847.jpg", title : "商业插画之时尚人物篇" }, { src : "https://image.gogoup.com/course/20180824/1535089522410.jpg", title : "10堂课看懂西方艺术史" }, { src : "https://image.gogoup.com/course/20200301/1583074941120.png", title : "UI设计适配与落地" }, { src : "https://image.gogoup.com/course/20181016/1539689983190.jpg", title : "商业UI设计:全链式设计方法与流程" } ]` var item_list = eval(json); var insert_html = ""; for(var i = 0; i < item_list.length; i++){ insert_html += '<div class="box">' + '<img src="' + item_list[i].src +'" alt="">' + '<p>' + item_list[i].title +'</p>' + '</div>' } var center = document.getElementById("center"); center.innerHTML = insert_html; </script> </body> </html>
七、Date类
编写函数,把当前时间格式化成 YYYY-MM-DD HH-MM-SS
function getTime(){ var d = new Date(); var res = ""; res += d.getFullYear() + "-"; res += getDblTime(d.getMonth() + 1) + "-"; res += getDblTime(d.getDate()) + " "; res += getDblTime(d.getHours()) + "-"; res += getDblTime(d.getMinutes()) + "-"; res += getDblTime(d.getSeconds()); return res; } function getDblTime(num){ if(num >= 10){ return num; } return "0" + num; } console.log(getTime());
编写函数,要求传入两个日期时间,返回两个日期时间之间,相差 多少天多少小时多少分钟多少秒
function dateReduce(options){ if(options.start === undefined || options.start === "now"){ start_d = new Date(); }else{ var start_str = formateDateArray(options.start); var start_d = new Date(start_str); } var end_str = formateDateArray(options.end); var end_d = new Date(end_str); var reduce_ms = end_d.getTime() - start_d.getTime(); return { days : parseInt(reduce_ms / 1000 / 3600 / 24), hours : parseInt(reduce_ms / 1000 / 3600 % 24), min : parseInt(reduce_ms / 1000 / 60 % 60), sec : parseInt(reduce_ms / 1000 % 60 ) } } function formateDateArray( arr ){ var date_str = ""; switch(arr.length){ case 3 : date_str = arr.join("/"); break; case 6 : date_str = arr.slice(0,3).join("/"); date_str += " " + arr.slice(3).join(":") break; } return date_str; } var res = dateReduce({ // start : [1995,8,24,8,0,0], start : "now", end : [2020,3,6,0,0,0] }); console.log(res);
- 点赞 3
- 收藏
- 分享
- 文章举报
相关文章推荐
- 前端JavaScript基础知识点讲义代码九九乘法表、函数、排序、数组、循环、分支判断、对象、日期函数、装饰器、闭包、堆和栈、字符串
- javascript笔记 字符串 数组 循环 选择 变量 函数 获取元素
- JavaScript学习笔记 6-循环、数组和函数 Loops , Arrays and Function
- 数组求和(递归和循环)函数 时间性能测量(最差情形)
- 使用for循环、while循环和递归写出3个函数来计算给定数组的总和。
- 从零开始学_JavaScript_系列(15)——js系列<4>(数值、字符串、对象、数组、函数、日期的基本方法)
- javascript(注意点) 字符串、数组、对象、循环
- javascript 函数 Date对象 数组对象
- Javascript关键字,条件语句,循环语句,函数
- javascript 基本使用—字符串、变量、数组、函数、for循环
- javascript 中 split 函数分割字符串成数组
- JavaScript 数组循环条件自减到0时引发的思考
- 一个JavaScript递归实现反转数组字符串的实例
- 我的JavaScript回顾之路_01—0206—++在前在后区别/&&和||/条件判断语句/循环语句的区别/字符串类型数字和数字类型之间的转换
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
- javascript 基本使用—字符串、变量、数组、函数、for循环
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- JS基础知识(上)(变量,条件判断语句,循环语句,函数,对象,数组)
- 条件、循环、函数定义、字符串操作练习
- javascript学习笔记(二)——数组和字符串及其函数