控制结构

目录

  • 分支

    • if-else if -else
    • switch

      • break;
  • 循环

    • for
    • while
    • do…while
  • 综合应用

概念

  • 指某个语法结构代码的执行书顺序并不是从上往下,可能是判断、重复执行等。我们统称这些语法结构为控制结构。

分支结构

if

  • if结构表示当需要跟某个条件的判断结构进行不同的处理
  1. if(需要判断的条件){
  2. 条件为True时要执行的代码
  3. }else{
  4. 条件为false时要执行的代码
  5. }
  6. 代码执行流程:
  7. 1. 判断条件是否为true
  8. 2. true时就执行if{}中的代码
  9. 3. false时就执行else{}中的代码
  10. 4. if-else代码结束
  • if-else结构只能处理最多两个分支,当有3个或以上分支情况时,需要额外使用else-if结构来扩展分支
  1. if(条件1){
  2. 条件1True时要执行的代码
  3. }else if(条件2){
  4. 条件1false、条件2true时要执行的代码
  5. }else if(条件n){
  6. 之前的条件不满的,条件ntrue时要执行的代码
  7. }else{
  8. 所有条件都为false时要执行的代码
  9. }
  • 练习
  1. // 1.用户输入一个成绩,判断是优秀、及格、还是不及格 >=90(优秀) 90>分数>60(及格)
  2. // 2.用户登录:用户输入用户名和密码并用两个变量保存,判断是否登录成功并输出登录结果
  3. // ( 正确账号:用户名: admin 密码:ad123)
  4. // 3.用户输入一个数字,判断该数是否是水仙花数,水仙花数:一个三位数。它的每位数的立方和等于自身
  5. // 比如 153 = 1*1*1 +5*5*5 +3*3*3,除了153 ,还有 370 371 407

switch

  • 概念:也是一种分支结构,功能跟if类似
  • 特点:

    • 一般适用于固定的分支情况。比如星期几
    • 相比if结构,switch语法结构更加简洁,整齐,代码量要少一些。
    • 一般每个case后都会加break用于退出switch,如果不退出,可能会继续下一个case中的代码
  • 语法
  1. switch(条件){
  2. case 1: 当条件为值1时要执行的代码;break;
  3. case 2: 当条件为值2时要执行的代码;break;
  4. case 3: 当条件为值3时要执行的代码;break;
  5. case n: 当条件为值n时要执行的代码;break;
  6. default:
  7. 当所有分支都不满足时要执行的代码;break;
  8. }
  9. 例子:星期几
  10. var date = 0;
  11. switch (date) {
  12. case 0:document.write('今天是星期天');break;
  13. case 1:document.write('今天是星期一');break;
  14. case 2:document.write('今天是星期二');break;
  15. case 3:document.write('今天是星期三');break;
  16. case 4:document.write('今天是星期四');break;
  17. case 5:document.write('今天是星期五');break;
  18. case 6:document.write('今天是星期六');break;
  19. default:
  20. document.write('输入不合法');
  21. break;
  22. }
  • 跟if的区别

    • switch一般用于固定分支的情况,if可用于任何情况
    • switch分支需break来结束。if自动结束
    • switch语法更加简洁
  • 练习
  1. 1. 用户分别输入3次,表示年份、月份、日期。计算该日期是当年的第几天
  2. 思路:利用switch来加上已过月份的天数+ 当月已过天数

循环结构

  • 能够重复执行指定代码的语法结构

for

  • 语法
  1. for(当前循环次数;循环满足的条件;循环次数自增){
  2. 每次循环要执行的代码
  3. }
  4. 例子:重复执行130遍输出语句
  5. for(var i =40;i<=70;i++){
  6. document.write(`上学 极域连起来 学习 练习 复习 做作业 休息的第${i}天<br>`);
  7. }
  • for循环执行流程:以输出130次为例

    1. 初始当前循环次数变量,即执行一次var i = 1
    2. 判断循环继续条件是否满足,即判断i<=130是否为true,如果为true,执行第三步,不满足则退出整个for循环,即循环结束.
    3. 执行一次{}里的所有代码
    4. 循环次数自增,即执行一次i++,即for语法中第二个分号后的代码
    5. 退回到第二步

while

  • 概念:循环结构的另一种语法,能够与for循环完全相互替换使用。只是语法和适用场景有所不同。
  • 语法
  1. while(循环继续条件){
  2. 每次循环要执行的代码
  3. }
  • while流程

    1. 判断循环继续条件是否为true。为true,则执行第二步。为false,就退出while循环
    2. 执行一次{}里的代码。执行后退回第一步
  • 与for循环的区别

    • while语法更简单。但是不提供循环次数的书写位置
    • 两者可以完全相互替用。只不过while更适用于不关心次数的情况。for循环适用于需要控制循环次数的情况。比如猜数字,登录。

do…while

  • 概念:从while衍变来的另一种循环语法。更适用于先执行一次再判断的情况。

  • 语法

    1. do{
    2. // 要循环的代码
    3. }while(循环继续条件);
  • 流程:先执行一次{}里的代码,再进行判断是否继续循环执行

各个循环结构的对比

  1. 三个都是用于进行循环操作。就语法结构上还有应用场景上有所区别
  2. for和while结构都是先判断再执行。do..while是先执行一次再判断是否继续
  3. for循环适用于有明确循环次数的情况,而while适用于循环次数未知的情况。do….while适用于先执行再判断的情况
  4. for和while更加常用,并且可以相互替换使用。

练习:

  1. 1.输出从1乘到10的积: 答案:3628800
  2. 2.输出从100加到500的和
  3. 3.输出100内的所有能被5整除的数字
  4. 4.输出100999之间的所有位相同的数字(即 111 222 333...999)
  5. 5.输出100999之间的所有水仙花数
  6. 6.用户有3次登陆机会。3次输错,程序结束。中间有一次数对了,提示登陆成功并结束程序
  7. 7.用户输入一个数,判断是否是质数(质数:该数只能被1和本身整除 比如13
  8. 8.扩展:输出99乘法表
  9. 9.再扩展:输出彩色版的99乘法表
  10. 10. 鸡兔问题: 鸡兔的脚数量一共40只, 鸡兔一共15只,求鸡兔分别是多少。
  11. 11. 计算xy次方,底数x和指数y由用户输入
  12. 12. 输入n的值,计算 1*1+2*2+...+n*n的和
  13. 13. 判断当前日期是星期几。(可利用 new Date().getDay()来获取当天对应星期的数字,0-6 0表示星期天)--switch
  14. 14. 猜数字游戏:系统随机生成一个1000内的随机数,用户输入数字进行猜测,
  15. 如果大了则提示大了,小了则提示小了。直到相等则游戏结束。结束后输出游戏的猜测次数。--while
  16. 15.输出100内所有偶数之和(while)
  17. 16.20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐 while
  18. 17.输出100内的所有质数(嵌套循环,先判断单个数字为质数,再外面套一个循环来处理100内的)
  19. 18.完成龟兔赛跑程序:比赛路程由用户输入,兔子速度为每次走5,乌龟每次走2,但兔子每次有50%不跑,乌龟稳定速度,求跑完比赛路程兔子和乌龟用的次数以及谁赢了。(提示:分别用不同变量来表示兔子和乌龟的当前路程。用循环来描述整个比赛过程,每次循环执行时乌龟都会前进2,兔子有50%不走,50%走5)
  20. if(Math.random()<0.5){
  21. }
  22. while(兔子当前路程<比赛路程 || 乌龟当前路程 <比赛路程 ){
  23. //每次循环都表示为1秒,乌龟稳定速度,兔子50%不跑
  24. }
  25. 19.输入一个数字,倒序输出数字并求出位数之和(while) 。比如1234 输出4321 位数之和为1+2+3+4=10.提示:无论多少位数字,%10都可以获取个位数。 那么获取个位数后除以10取整会怎么样呢
  26. 1234%10 => 4并输出 1234/10取整 => 123
  27. 123%10 =>3并输出 123/10取整 =>12 如此重复

break&continue

continue

  • JavaScript的关键字。能够实现跳过当前的循环过程,继续下一次循环过程。
  • 语法:在循环体{}中写continue即可
  1. 语法:
  2. for(){
  3. continue;
  4. 该次循环过程{}里剩余代码不会执行
  5. }
  • 执行continue时,当前循环过程还未执行的代码会被跳过不执行

break

  • 概念:JavaScript中的关键字,主要用来结束循环或switch结构
  • 作用

    • 结束循环
  • 语法
  1. for(){
  2. break;//会结束整个循环
  3. }
  • 特点

    • 当break被执行时,循环中的循环变量会被中途夭折,不会依次递增到循环自然结束。在编程中可以使用利用该特点来帮助我们实现判断。比如质数
  1. var num = 13;
  2. for(var i=2;i<num;i++){
  3. if(num%i==0){
  4. //已经被整除过,就不是质数,后续的循环过程就不需要了,就可以提前结束循环
  5. break;
  6. }
  7. }
  8. document.write(i);//终止循环i的数值 13,for循环自然结束
  9. if(i<num){
  10. document.write(`${num}不是质数`);
  11. }
  1. - 如果break处于嵌套循环中,break会结束最近的for循环

补充

生成随机数

  1. Math.random();
  2. 例子:
  3. var num = Math.random();
  4. document.write(num);输出: 0.几的小数
  • 生成0~1之间的随机小数,取不到1