JavaScript-流程控制语句(笔记)

流程控制语句

  1. 条件语句

    1. if语句

    if语句是条件语句, 也称为选择语句. 它通常结合else一起使用, 表示如果…就…否则…

    if (测试条件) {
        // 语句块1
        // 当测试条件为真, 则执行这里
    } else {
        // 语句块2
        // 当测试条件为假, 则执行这里
    }
    

    案例1: 输入一个数字, 如果这个数是偶数, 则弹出对话框显示’偶数’, 否则弹出对话框显示’‘奇数’’

    let a = Number(prompt('请输入一个数字'));
    if (a % 2 == 0) {
    	alert('偶数')
    } elsse {
    	alert('奇数')
    }
    

    案例2: 输入年龄, 判断用户是否可以申领驾照. 申领驾照的条件是年龄为18到70岁

    let age = Number(prompt('请输入年龄'));
    if (age >= 18 && age <= 70){
        alert('可以考取驾照')
    } else {
        alert('年龄不符合要求')
    }
    

    在if语句中else可以省略

    let a = Number(prompt("请输入你喜欢的数字"));
          if (a > 5) {
            alert("这是我喜欢的数字!");
          }
          if (a % 2 == 0) {
            alert("这是偶数");
          }
          alert("88");
    

    单行if 语句 : 如果if语句体中只有一行语句, 可以省略大括号和换行

    var a = Number (prompt('请输入一个整数'));
    if(a > 5) alert('这个数字大于5');
    if(a % 2 == 0) alert('这个数字是偶数');
    alert('再见');
    
    1. if else if多条件分支

    案例1:

    let score = Number(prompt("请输入考试成绩"));
    
          if (score == 100) {
            alert("膜拜学霸");
          } else if (score >= 95) {
            alert("再接再厉");
          } else if (score >= 80) {
            alert("考的不错");
          } else if (score >= 60) {
            alert("及格啦");
          } else if (score < 60) {
            alert("去重读");
          }
    

    案例2: 计算BMI肥胖指数, 返回对应指数结果

    let weight = Number(prompt("请输入体重"));
          let height = Number(prompt("请输入身高"));
    
          let BMI = weight / (height * height);
    
          if (BMI > 32) {
            alert("非常肥胖");
          } else if (BMI > 28) {
            alert("肥胖");
          } else if (BMI > 24) {
            alert("过胖");
          } else if (BMI > 18.5) {
            alert("正常");
          } else {
            alert("过廋");
          }
    
    1. if 语句算法题

案例1: 判断水仙花数

水仙花数是指: 它的每个数位的数字的立方和等于它本身

// 要求用户输入一个三位数
      let n = Number(prompt("请输入一个三位数"));
      // 对用户输入的数值, 进行合法性的验证
      if (!isNaN(n) && n >= 100 && n <= 999) {
        // 当用户输入的数字合法时

        // 方法一 : 数学方法(复杂)
        /* let a = Math.floor(n / 100);
        let b = Math.floor(n / 10) % 10;
        let c = n % 10; */

        // 方法二 : 字符串方法
        let n_str = n.toString();
        let a = Number(n_str.charAt(0));
        let b = Number(n_str.charAt(1));
        let c = Number(n_str.charAt(2));

        // 根据水仙花数的条件进行判断
        if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == n) { // Math.pow(a, 3) 意为a 的 3 次方
          alert("这个数是水仙花数");
        } else {
          alert("这个数字不是水仙花数");
        }
      } else {
        alert("输入的数字不合法");
      }

案例2: 游乐园门票计算

用户输入年龄和星期几, 弹出对话框显示门票价格,

条件年龄大于等于10岁年龄小于10岁
平日300140
周末500210
// 用户输入星期几
      let day = Number(prompt("请输入星期几"));
      // 用户输入年龄
      let age = Number(prompt("请输入年龄"));

      // 思路: 使用if else嵌套逻辑, 先判断星期几, 再判断年龄, 最后输出
      if (day == 0 || day == 6) {
        // 在周末
        if (age >= 10) {
          // 判断年龄
          alert("500全票");
        } else {
          alert("210儿童票");
        }
      } else {
        // 不在周末
        if (age >= 10) {
          // 判断年龄
          alert("300全票");
        } else {
          alert("140儿童票");
        }
      }
  1. switch语句

除了if语句之外, JS还提供了另外一种选择语句: switch语句

switch语句的用途: 当一个变量被分类讨论的情形

  • 在switch()的圆括号中一般是一个变量名, 这个变量将被分类讨论
  • case表示"情况", 它后面没有圆括号, 直接跟一个值. 程序会一次将case后面的值与switch圆括号中的值进行全等比对, 如果比对相同, 则执行这条case冒号后面的语句. default表示默认情况
  • 多条case可以共用同一个语句体
  • switch语句并不像if语句那样当执行了某一个分支之后会自动跳出if语句体, 我们必须主动调用break来跳出switch语句体. 如果不书写break, 则后面的所有case都将被视为匹配, 直到遇见break

案例1:

let year = Number(prompt("请输入年份"));
      // 输入一个月份, 判断该月份一共有几天

      // 获取数据
      let Month = Number(prompt("请输入月份"));

      switch (Month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
          alert("这个月有31天");
          break;
        case 4:
        case 6:
        case 9:
        case 11:
          alert("这个月有30天");
          break;
        case 2:
          let runnian =
            (year % 100 != 0 && year % 4 == 0) ||
            (year % 400 == 0 && year % 100 == 0);
		// 三元表达式写法: runnian ? alert('29天') : alert('28天')
          switch (
            runnian // switch嵌套的应用, 两个条件的场景建议用三元运算符
          ) {
            case true:
              alert("这个月有29天");
              break;
            case false:
              alert("这个月有28天");
              break;
          }
          break;
        default:
          alert("请输入正确的月份");
      }
  1. 三元运算符

用途: 根据某个条件是否成立, 在两个不同值中选择变量的值

let age = 24;
let type = age >= 18 ? '成年人' : '未成年人';
alert(type); 	// 成年人

条件表达式 ? 表达式1 : 表达式2

问号前是判断的条件, 问号后面用冒号隔开两个表达式, 当条件表达式为真时调用表达式1, 为假时调用表达式2.

  1. 循环语句

    1. for循环语句

作用: 简化程序.

for 的圆括号中有三个表达式:

  • 表达式var i = 1; 表示定义一个"循环变量" i, 并赋值为1;
  • 表达式i <= 10; 表示继续执行循环的条件, 只要这个条件为真, 则会一直执行;
  • 表达式i++用来更新循环变量, 使循环变量的值越来越趋向终点
for (let i = 1; i <= 10; i++) {
        console.log(i);
      }

for循环步骤解析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YlQ6ZqmX-1650025592531)(C:\Users\lcm\Desktop\三元表达式.png)]

  • 首先会执行语句①,
  • 然后判断语句②是否满足, 如果满足则进入循环体, 执行语句③, 如果不满住则退出循环
  • 语句体中的语句执行完毕后, 执行语句④
  • 再次判断语句②是否满足, 如果满足则进入循环体, 执行语句③, 如果不满足则退出循环

根据for循环执行机理, 必须要会准确遍历for循环

练习1:

for (let i =2; i < 12; i += 3) {
	i += 4;
    console.log(i)		//输出结果: 6
}						//		  13

练习2:

for (var i = 1; i < 10; i++) {}
      console.log(i);       // 输出在循环体外, 打印结果为10

练习3:

for (var i = 10; i < 4; i++) {
	console.log(i);		// 没有输出结果, 原因是i在第二步就没有满足条件,在循环体内不做输出
}

练习4:

// 使用for循环语句在控制台逐行输出18, 14, 10, 6, 2, -2, -6
      for (let i = 18; i >= -6; i -= 4) {
        console.log(i);
      }

练习5:

// 使用for循环语句在控制台逐行输出0, 0.2, 0.4, 0.6, 0.8, 1
      for (let i = 0; i <= 1; i += 0.2) {
        console.log(Number(i.toFixed(1))); //.toFixed() 方法 把浮点数值转化为保留自定义长度的字符串类型的小数.括号数字表示保留多少位小数
      }
  1. for循环算法题

案例1: 计算1~100所有数的和

// for循环算法题
      // 创建累加器sum, 初始值是0
      // 遍历1到100的值, 每遍历一个数字要把这个数字加到sum中去
      for (var sum = 0, i = 1; i <= 100; i++) {
        sum += i;
      }
      console.log(sum);

案例2: 1~100中哪个数字除以3余1, 除以4余2, 除以5余3? 运用穷举法

// 穷举法
      // 请问1~100中哪个数字除以3余1, 除以4余2, 除以5余3?
      for (i = 1; i <= 100; i++) {
        if (i % 3 == 1 && i % 4 == 2 && i % 5 == 3) {
          console.log(i);
        }

        /*
          三元表达式写法
         let n = i % 3 == 1 && i % 4 == 2 && i % 5 == 3;
        n ? console.log(i) : "";
         */
      }
  1. while循环语句

​ while语句也是一种循环结构, 是一种"不定范围"循环, 和for循环各有不同的用武之地

​ 几乎所有变成语言, 都同时提供for循环和while循环

​ while语句事先不指定循环开始, 结束的范围, 只要测试条件满足, 就一直执行循环体

​ while循环没有显示定义循环变量, 必须自己在while循环外先定义好循环变量, 有时甚至可以没有循环 变量

​ 循环体内的语句, 必须睡循环测试条件趋于不成立, 否则会死循环

案例1:

// 输出1,2,3,4....100
var i = 1;
while(i<100){
    i++;
    console.log(i)
}

案例2:

// 累加1-100的和
      let sum = 0;
      let i = 1;
      while (i <= 100) {
        sum += i;
        i++;
      }
      console.log(sum);

案例3:

// 寻找满足n的平方大于456789的最小整数
      // 穷举法, 从1开始
      let n = 1;
      while (n * n <= 456789) {
        n++;
      }
      console.log(n);
// 小兔子拔萝卜, 第一天拔1个, 第二天拔2个, 第三天拔3个, 以次类推, 请问小兔子多少天能500个萝卜拔完?
      let d = 1,
        sum = 0;

      while (sum < 500) {
        sum += d;
        d++;
      }
      // 这里有一个"出一错误"
      console.log(d - 1);
    1. break和continue

    break案例

    let n = 1;
          while (true) {
            if (n * n > 456789) {
              console.log(n);
              break;
            }
            n++;
          }
    

    continue案例

    // contiinue 跳过当前迭代, 进入下一个循环
          for (let i = 0; i < 5; i++) {
            if (i == 2 || i == 3) {
              //表示跳过2和3
              continue;
            }
            console.log(i); //输出结果是0, 1, 4
          }
    
    1. do while 语句

    案例1

    // do while 循环是后判断的循环形式, 能至少执行一次循环体
          do {
            console.log("★");
          } while (false);
    
          // 输出1, 2, 3.....100
          let n = 1;
          do {
            console.log(n);
            n++;
          } while (n <= 100);
    

    案例2

    得到[a, b]区间的整数, 注b>a

    公式:

    parseInt(Math.random()*(b-a+1)) + a

    // 随机生成两个变量dx和dy, 它们均在[-4, 4]取件随机取值, 但要求dx和dy不能同时为0
          do {
            var dx = parseInt(Math.random() * 9) - 4;
            var dy = parseInt(Math.random() * 9) - 4;
          } while (dx == 0 && dy == 0);
    
          // 只要出循环, 就保证dx和dy不都是0
          console.log(dx, dy);
    
    1. while语法算法题

    猜数字案例, 猜到正确数字退出循环

    // 随机一个数字, 2~99之间
          let answer = parseInt(Math.random() * 98) + 2;
          let min = 1,
            max = 100;
    
          // 不断重复执行, 需要使用死循环
          while (true) {
            // 询问用户猜测的数字
            let n = Number(prompt("请猜测数字" + min + "~" + max));
    
            // 判断用户输入的数字和answer的关系
            if (n > answer) {
              alert("你输入的数字太大了");
              max = n;
            } else if (n < answer) {
              alert("你输入的数字太小了");
              min = n;
            } else {
              alert("猜对了!");
              break;
            }
          }
          console.log(dx, dy);
    
  1. 初识算法

    1. 什么是算法

    2. 累加器和类乘器

    // 由用户输入数字n, 计算3/2 +4/3 + 5/4 + ...... +(n+1)/n的结果
          // 用户输入输在n
       let n = Number(prompt("请输入数字n"));
    
          // 累加器
          let sum = 0;
    
          // 遍历分母就可以了, 因为分子就是i分母就是
          for (let i = 2; i <= n; i++) {
            sum += (i + 1) / i;
          }
          alert(sum.toFixed(2));
    
    // 计算阶乘
          // 请用户输入数字n
          let n = Number(prompt("请输入数字"));
          // 类乘器, 一定注意, 累乘器要从1开始, 因为如果从0开始, 0乘以任何数都为0
          let result = 1;
          // 倒着遍历, 计算阶乘
          for (var i = n; i >= 1; i--) {
            result *= i;
          }
          alert(result);
    
    1. 穷举法
    // 穷举法
    // 寻找1~100当中的既能被3整除, 也能被5整除的数字
          for (let i = 1; i <= 100; i++) {
            if (i % 3 == 0 && i % 5 == 0) {
              console.log(i);
            }
          }
    
    // 寻找约数
    
          // 让用户输入数字n
          let n = Number(prompt("请输入数字"));
          // 穷举法
          for (let i = 1; i <= n; i++) {
            if (n % i == 0) {
              console.log(i);
            }
          }
    
    // 寻找水仙花数
          for (let i = 100; i < 1000; i++) {
            // 水仙花数要拆数位
            // a, b, c分别表示百位, 十位, 个位
            let i_str = i.toString();
            let a = i_str.charAt(0);
            let b = i_str.charAt(1);
            let c = i_str.charAt(2);
    
            if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == i) {
              console.log(i);
            }
          }
    
    1. 综合算法题目
    // 循环嵌套
          for (let i = 0; i < 3; i++) {
            for (let j = 0; j < 3; j++) {
              console.log(i, j);
            }
          }
    
// 寻找100以内的质数

      // 穷举法
      outer: for (let i = 2; i <= 100; i++) {
        // 内层循环开始从2开始尝试除i, 如果能够整除, 说明它不是质数, 就可以筛选下一个数字了
        for (let j = 2; j < i; j++) {
          if (i % j == 0) {
            continue outer; // 给外层循环命名, 并调用
          }
        }
        console.log(i);
      }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值