JavaScript基础-testDemo
前言
这篇随笔记录的是一些之前JavaScript基础学习时的逻辑题demo.
// 1 写出判断一个年份是否闰年的表达式:
// 润年的判定(符合下面两个条件之一):
// 年份能够被400整除.(比如:2000)
// 年份能够被4整除但不能被100整除.(比如:2008)
//
var year = 2008;
year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
//
// 2 让用户输入一个年份,如果是润年,则输出true,如果不是,则输出false
var year = prompt("请输入一个年份");
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
console.log(true);
}else {
console.log(false);
}
// 3 比较3个数字的大小 ,输出最大者(不考虑相等)
// 思路:先比较其中两个,再用其中教大者和第三个数比较
var a = 6,b= 7,c=8;
if (a > b) {
if ( a > c) {
console.log(a);
}else {
console.log(c);
}
}else {
if ( b > c) {
console.log(b);
}else {
console.log(c);
}
}
//
// 4 提示用户输入密码,如果密码是“88888”则提示正确,否则要求再输入一次,如果密码是“88888”则提示正确,否则提示错误,程序结束。
// 思路:1 让用户输入密码
var pwd = prompt("请输入密码");
// 2 判断密码是否等于"888888"
if (pwd == "888888"){
// 3 密码正确,提示正确
alert("密码正确");
}else {
// 4 密码错误,要求重新输入
pwd = prompt("密码错误,请重新输入密码");
// 5 在判断一次
if (pwd == "888888"){
// 6 提示正确
alert("密码正确");
}else {
alert("密码错误");
}
}
// 5 提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,则提示正确,否则,如果用户名不是admin就提示用户用户名不存在,如果用户名是admin则提示密码错误.
// 思路:1 接收用户输入的用户名和密码
var account = prompt("输入用户名");
var pwd = prompt("输入密码");
// 2 判断用户名和密码是否正确
if (account == "admin" && pwd == "888888"){
alert("登录成功");
}else {
//如果用户名不是admin就提示用户用户名不存在
if (account != "admin"){
alert("用户不存在");
}else {
// 如果用户名是admin则提示密码错误
alert("密码错误");
}
}
// 6 提示用户输入年龄,如果大于等于18,则告知用户可以查看,如果小于10岁,则告知不允许查看,如果大于等于10岁并且小于18,则让用户确认是否查看
// 思路:1 接收用户输入
var age = parseInt(prompt("年龄"));4
// 2 判断处在哪个阶段
if (age > 18) {
alert("可以查看");
}else if (age > 10) {
confirm("你确定要看?");
}else {
alert("不允许查看");
}
//
// 循环结构
//
// 1 要求用户输入用户名和密码 用户名只要不是admin 密码不是888888就提示用户一直重新输入
var account = prompt("请输入用户名");
var pwd = prompt("请输入密码");
while (account != "admin" || pwd != "888888"){
alert("用户名或者密码错误,请重新输入");
account = prompt("请输入用户名");
pwd = prompt("请输入密码");
}
alert("正确");
// 2 输入一个数字,输出这个数字的位数
var number = parseInt(prompt("请输入一个数字"));
var count = 0;
if (number == 0){
count = 1;
console.log("数字的位数是:"+count);
}else {
while (number != 0){
number = parseInt(number / 10);
count++;
}
console.log("数字的位数是:"+count);
}
// 3 输入班级人数,然后依次输入学员成绩,计算班级学员的平均成绩和总成绩
var sum = 0;
var count = parseInt("输入人数");
for (var i = 0; i < count; i++) {
var score = parseFloat(prompt("请输入第个"+(i+1)+"同学的成绩"));
sum += score;
}
var avg = sum / count;
console.log("总分为"+sum);
console.log("平均分"+avg);
// 4 打印1到100的和
var sum = 0;
for (var i = 1; i <= 100; i++) {
sum += i;
}
console.log(sum);
// 5 求1-100之间所有数的和、平均值
// 和
var sum = 0;
for (var i = 1; i <= 100; i++) {
sum+=i;
}
// 平均值
var avg = sum/100;
// 6 求1-100之间所有偶数的和
var sum = 0;
for (var i = 1; i <= 100; i++) {
if ( i % 2 == 0){
sum += i;
}
}
// 7 求1-100之间所有所有奇数的和
//
// 8 找出100-999间的水仙花数
//
// 9 本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得多少钱?
var money = 10000;
var rate = 0.003;
for (var i = 0; i < 5; i++) {
money *= rate;
}
console.log(money);
//
// 10 求斐波那契数列中第12个数字,1,1,2,3,5,8,13,21
//
// 11 在网页上打印三角形
for (var i = 0; i < 9; i++) {
for (var j = 0; j <= i; j++) {
document.write("*");
}
document.write("<br>");
}
//
// 12 输出九九乘法表
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= i; j++) {
document.write( j + " x " + i + " = " + i*j + " ");
}
document.write("<br>");
}
//
// 13 案例:求1—100之间所有不能被3整除的整数的和,输出第一个大于2000的和并结束程序
var sum = 0;
for (var i = 1; i <= 100; i++) {
if ( i % 3 == 0){
continue;
}
sum += i;
if (sum > 2000){
console.log(sum);
break;
}
}//
// 14 循环录入5个人的年龄并计算平均年龄,如果录入的数据出现负数或大于100的数,立即停止输入并报错.
var sum = 0;
// 标记一下,如果中途出现问题,不需要执行求平均值的操作
var flag = true;
for (var i = 0; i < 5; i++) {
var age = parseInt(prompt("请输入第"+(i+1)+"个人的年龄"));
if ( age < 0 || age > 100 ){
alert("你输入的年龄有问题");
//出现问题之后要把标记更改
flag = false;
break;
}
sum += age;
}
if (flag){
var avg = sum / 5;
console.log(avg);
}
//
// 15 计算1-100之间不能被7整除的数的和
var sum = 0;
for (var i = 1; i < 100; i++) {
if( i % 7 == 0 ){
continue;
}
sum += i;
}
// 16 输出1-100内所有素数
// 素数:除了1和自己本身不能被其他数字整除
for (var i = 2; i < 100; i++) {
var flag = true;
for (var j = 2 ; j < i; j++){
if ( i % j == 0){
flag = false;
break;
}
}
if (flag){
console.log(i);
}
}
循环
// 找出100-999间的水仙花数
// 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
for ( var i = 100 ; i <= 999 ; i++ ) {
// 在循环内部做的事:
// 判断一个数字是否水仙花数
// 1 求出个位十位百位
var unit = i % 10;
var ten = parseInt(i /10) % 10;
var hun = parseInt(i /100);
// 2 三个位数的3次幂之和是否等于原来的数字
if(Math.pow(unit,3)+Math.pow(ten,3)+Math.pow(hun,3) == i){
console.log(i);
}
}
//求斐波那契数列中第12个数字,1,1,2,3,5,8,13,21
//代表的是要求的数字的前两个数字
var n1 = 1;
var n2 = 1;
var n3;
for (var i = 3; i <= 12; i++) {
n3 = n2 + n1;
n1 = n2;
n2 = n3;
}
console.log(n3);
//输出九九乘法表
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= i; j++) {
document.write(j + "x" + i + "=" + j*i + " ")
}
document.write("<br>");
}
//输出1-100内所有素数
// 素数:质数 ==》 除了1和自己本身之外不能被其他数字整除
for (var i = 2; i <= 100 ; i++) {
// 问:如何证明一个数字是素数?
// 从2开始到n-1这么多个数字都不能被整除
// 假设法:
// 先假设这个数字是质数
var flag = true;
// 循环的从2开始用这个数字除以每次循环的次数,如果有其中一次能被整除,就证明假设不成立
for (var j = 2; j <= i - 1; j++) {
if(i % j === 0){
// 推翻假设
flag = false;
break;
}
}
// 如果一直循环结束之后,假设仍然成立,就证明是质数
if(flag){
console.log(i);
}
}
``
- 数组
``js
// 求数组中元素的和,平均值,最大值,最小值
// var arr = [5,89,64,75,23,15];
// var sum = 0;
// for (var i = 0; i < arr.length; i++) {
// sum+=arr[i];
// }
// console.log(sum);
// console.log(sum/arr.length);
//
最大值
1 先默认数组的第0个元素是最大值
// var max = arr[0];
循环的和后面的每一个元素比较,取其大者和后面元素再比较
// for(var i = 1;i<arr.length;i++){
// if(max < arr[i]){
// max = arr[i];
// }
// }
// console.log(max);
// 根据输入班级人数依次输入每个人成绩,求总成绩和平均值
// 1 输入班级人数
// var count = parseInt(prompt("输入班级人数"));
// 从依次、和根据输入的人数可以知道用for循环
// 在循环里做什么事情?
// 输入每个人的成绩
// 求和
// 用数组来保存每一个同学的成绩
// var arr = [];
// var index = 0;
// for(var i = 0; i < count ;i++){
// var score = parseFloat(prompt("请输入第"+(i+1)+"个同学的成绩"));
arr[index] = score;
index++;
// arr[arr.length] = score;
// }
// console.log(arr);
// 将字符串数组用|或其他符号分割成字符串
// ["a","b","c","d"] ===> "a|b|c|d" "a,b,c,d"
// var arr = ["a","b","c","d"];
// var str = "";
// for (var i = 0; i < arr.length; i++) {
// if(i == arr.length - 1){
// str += arr[i];
// }else {
// str += arr[i] + ",";
// }
// }
// console.log(str);
// 去掉数组中重复元素并组成新数组
// var arr = [1,2,3,1,2,3,4,5,6,6,7];
//
var newArr = [1,2,3,4,5,6,7]
//
1 先声明一个新的数组用来装不重复的数据
// var newArr = [1,2];
思路:用旧的数组中的每一个数字跟新数组中的每一个数字比较,如过旧的数组中某一个元素跟新数组中每一个元素都不重复,就把这个元素往新数组中添加
外层循环取出旧的数组中的每一个元素
// for (var i = 0; i < arr.length; i++) {
内层循环取出新数组中的每一个元素
假设旧的数组元素跟新数组元素中任意一个都不相等
// var flag = false;
// for (var j = 0; j < newArr.length; j++) {
如果任意一个新元素和旧元素相等,证明假设是错的
// if ( arr[i] === newArr[j] ){
// flag = true;
// break;
// }
// }
// if(!flag) {
当假设仍然成立,才会把旧数组加入到新数组中
// newArr[newArr.length] = arr[i];
// }
// }
// console.log(newArr);
// 将数组中大于20的数字放入到一个新的数组中
// var arr = [2,7,8,15,89,44,56,3,9];
// var newArr = [];
用数组中的每一个元素和20比较,如果大于20就添加到新的数组中
// for (var i = 0; i < arr.length; i++) {
// if(arr[i] > 20){
// newArr[newArr.length] = arr[i];
// }
// }
// console.log(newArr);
// 翻转数组
// var arr = [1,2,3,4,5,6,7,8,9];
//
// for(var i = 0; i< arr.length / 2;i++){
// var temp = arr[i];
// arr[i] = arr[arr.length - 1 -i];
// arr[arr.length - 1 -i] = temp;
// }
// console.log(arr);
// arr = [9,8,7,6,5,4,3,2,1]
// 如果不在原来的数组上修改
// 直接用一个新数组将原来的数组从后开始遍历,往新数组里面存储
// var newArr = [];
// for (var i = arr.length -1 ; i >= 0; i-- ) {
// newArr[newArr.length] = arr[i];
// }
// console.log(newArr);
// 在原来的数组上修改的
// 交换两个变量的值
// var a = 10;
// var b = 20;
// var temp = a;
// a = b;
// b = temp;
冒泡排序
// 冒泡排序,从小到大 [15,97,36,13,47,42,88]
var arr = [15,97,36,13,47,42,88];
// 1 用外层循环控制比较的轮数
for (var i = 0; i < arr.length - 1; i++) {
// 2 用内存循环控制比较的次数
for (var j = 0; j < arr.length - i - 1; j++) {
// 如果前一个大于后一个,要调换位置
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
函数
// 判断一个数是否是素数
var number = 789;
var flag = true;
for (var i = 2; i < number; i++) {
if(number % i === 0){
flag = false;
break;
}
}
function isPrime(n) {
var flag = true;
for (var i = 2; i < n; i++) {
if(n % i === 0){
flag = false;
break;
}
}
return flag;
if (flag){
return true;
}else {
return false;
}
}
// 求斐波那契数列Fibonacci中的第n个数是多少? 1 1 2 3 5 8 13 21...
function getFibonacci1(n) {
if(n == 1 || n == 2){
return 1;
}
var n1 = 1;
var n2 = 1;
var n3;
for (var i = 3; i <= n; i++) {
n3 = n1 + n2;
n1 = n2;
n2 = n3;
}
return n3;
}
// 递归
// 就是函数内部调用自己本身
// 所有使用递归的时候,一定要有退出递归的条件
function getFibonacci2(n) {
if (n == 1 || n == 2){
return 1;
}
return getFibonacci(n -1) + getFibonacci( n -2 )
}
数组练习
// 将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。使用两种方式实现
// join
// var arr = ["a","b","c","d"];
// console.log(arr.join("|"));
// 将一个字符串数组的元素的顺序进行反转。["a","b","c","d"] ["d","c","b","a"]。使用两种种方式实现。
// reverse
// 作用是翻转数组,会改变原数组的顺序
// var arr = [0,1,2,3,4,5,6];
// console.log(arr.reverse());
// 工资的数组[1500,1200,2000,2100,1800],把工资超过2000的删除
// splice
// 用于删除、添加、替换数组的元素
// splice(从哪里开始删除,删除多少个)
// var arr =[1500,1200,2000,2100,2500,1800];
//
// for (var i = 0; i <arr.length; i++) {
// if (arr[i] > 2000){
// arr.splice(i,1);
//// 因为删掉一个之后,后面的元素会往前挪一位,所有要把索引也相应的向前挪一位
// i--;
// }
// }
// console.log(arr);
// ["c","a","z","a","x","a"]找到数组中每一个a出现的位置
// indexOf
// 获取某个元素在数组中的索引,如果没找到,返回-1
// indexOf(要查找的元素,从哪个位置开始查找)
var arr = ["c", "a", "z", "a", "x", "a"];
var index = -1;
for(var i = 0;i<arr.length;i++){
index = arr.indexOf("a",++index);
// 当index==-1的时候,已经找到了数组的最末尾并且没有这个元素了,没有必要继续循环了
if(index == -1){
break;
}
console.log(index);
}
Date对象
// 获取指定的日期和时间部分
var date = new Date();
获取日期
console.log(date.toDateString());
console.log(date.toLocaleDateString());
获取时间
console.log(date.toTimeString());
console.log(date.toLocaleTimeString());
// 获取日期中的每一个部分
var date = new Date();
console.log(date.getTime());//得到的是1970年到这个日期的毫秒总数
console.log(date.getMilliseconds());//得到当前时间的毫秒数 0-999
console.log(date.getSeconds());
console.log(date.getMinutes());
console.log(date.getHours());
console.log(date.getDay());
console.log(date.getDate());
console.log(date.getMonth());//月份也是从0开始的
console.log(date.getFullYear());