JS基础(2)

一、流程控制

   控制代码的执行顺序
   流程控制语句:
     1. 顺序结构:按照代码书写顺序,代码自上至下一行一行执行
     2. 选择结构(分支结构)
     3. 循环结构

(一)选择结构:

      根据条件判断的结果选择执行某一段代码执行

1、if 条件语句

1、if语句
             if(判断条件){
             条件为真时执行的代码段,
             条件为假时,会跳过
             }
     注意:
         1. if()后面的{} 可以省略,省略之后,认为if()后面的第一条语句是条件成立时待执行的语句
         2. 判断条件必须是布尔类型的结果
         3. 任何非0值都为真,0为假,以下条件的结果都为假 :
             if(0){}
             if(0.0){}
             if(""){}
             if(NaN){}
             if(undefined){}
             if(null){}

<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    var a = 101;
    if(a > 100){
        console.log("a>100");
    }
    console.log("正常语句");

    if(true){
        console.log("hello");
        console.log("world");
    }

    if(false) 
    console.log("省略{}");
    console.log("省略之后第二行语句");

    if(NaN){
        alert("非零值为真");
    }

  </script>
 </head>
 <body>
  
 </body>
</html>
if

2、if-else语句
 语法:if(条件){
                 条件为真时执行
            }else {
                条件为假时执行
            }
        et:
            var age = prompt("请输入年龄");
            if(age >= 18){
                 console.log("成年人可以进网吧");
            } else {
                 console.log("未成年人禁止入内");
            }
3、if-else if语句
       多重分支结构
   语法:
         if(条件1){
                条件1成立时执行
         } else if(条件2){
                条件1为假,条件2成立时执行
         } else if(条件3){
                条件2为假,条件3为真时执行
         }
                      ...
         }else{
                条件不满足时执行
         }
  练习:
      1、成绩等级判定

<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    //成绩判定
    var score = prompt("请输入成绩");
    if(score >= 90){
        console.log("A");
    }else if(score >= 80){
        console.log("B");
    }else if(score >= 60){
        console.log("C");
    }else{
        console.log("D");
    }

  </script>
 </head>
 <body>
  
 </body>
</html>
成绩判断

      2、日期计算器
         1. 接收用户输入 年 月 日,判断用户输入的日期是当年的第几天
            et:  用户输入 2018-1-15
                  输出     当天是2018年的第15天
                  用户输入 2018-10-15
                  输出     当天是2018年的第31 + 15天
            实现:
                1. 将当前月之前的整月天数累加
                2. 加上当前月的天数
                3. 判断当前年份是否是闰年,若当年是闰年,并且用户输入的月份>2,总天数再+1

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
  //1.接收用户输入,转换数据类型
    var year = Number(prompt("请输入年份"));
    var month = Number(prompt("请输入月份"));
    var day = Number(prompt("请输入日期"));
    //总天数
    var dayNum = 0;
    //闰年判断
    var isRun = year % 400 == 0 || (year % 100 != 0 && year % 4 == 0);
  //2. 月份判断实现天数累加
    if(month == 1){
        dayNum  = day;
    }else if(month == 2){
        dayNum = 31 + day;
    }else if(month == 3){
        dayNum = 31 + 28 + day;
    }else if(month == 4){
        dayNum = 31 + 28 + 31 + day;
    }

    //3. 根据是否为闰年,计算最终天数
    if(isRun && month > 2){
        dayNum++;
    }
    console.log(year+""+month+""+day+""+"是当年的第"+dayNum+"");
  </script>
 </head>
 <body>
  
 </body>
</html>
日期计算器

2、switch 语句

     在进行值判断时用的比较多
1)语法:
         switch(值){
                case 值1 :
                       值匹配恒等时,执行的语句
                       break;
                case 值2 :
                       值匹配恒等时,执行的语句
                       break;
                       ...
                default :
                       待执行的语句
         }
2)注意 :
         1. switch一般用于值得匹配,()中表示的是值
         2. case 可以使用多个,每个case对应一种情况
         3. case 后面直接写要对应匹配的值
             et:
                 var a = 10;
                 swicth(a){
                       case 1 :
                              console.log("a=1");
                              break;
                       case 12 :
                              console.log("a=10");
                              break;
                       default :
                              console.log("查询不到");
                  }
         4. 如果case给出的值匹配成功,执行当前case :后面的语句
         5. break 用于跳出switch语句匹配,不再向下执行匹配,可以省略
         6. default 表示所有的case都匹配失败之后默认执行的语句
3)其他情况
         1. default 关键字一般写在switch的末尾,匹配失败之后最终执行的操作,可以省略
         2. break 表示跳出switch语句,可以省略,如果省略break,会从当前匹配到的case开始向后依次执行所有的语句。
         3. case 关键字,可以共用代码语句,注意配合break
              et:
                 case 1:
                 case 2:
                 case 3:
                     console.log();
                     break;
   练习:
         1、每周食谱
            用户输入星期几 (1-7)
            判断当前日期对应的食谱
                星期一 :今天是星期一,吃红烧肉
                 ...
                星期天 :今天是星期天,吃红烧鱼

switch_食谱

         2、改版日期计算器,计算当日是当年的第几天

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    var month = Number(prompt("请输入月份"));
    var day = 0;
    //计算当前月之前的总天数
    //month = 12
    // 1 3 5 7 8 10 : 31
    //4 6 9 11: 30
    //2 : 28
    switch(month-1){
        case 11:
            day += 30; //day = day + 31
        case 10 :
            day += 31;
        case 9:
            day += 30; //day = day + 31
        case 8 :
            day += 31;
        case 7:
            day += 31; //day = day + 31
        case 6 :
            day += 30;
        case 5:
            day += 31; //day = day + 31
        case 4 :
            day += 30;
        case 3 :
            day += 31;
        case 2 :
            day += 28;
        case 1 :
            day += 31;        
    }
    console.log(day);

    //根据用户输入的月份,告知用户当前月有多少天
    switch (month){
        case 1 :
        case 3 :
        case 5 :
        case 7 :
        case 8 :
        case 10 :
        case 12 :
            console.log("本月有31天");
            break;
        case 4 :
        case 6 :
        case 9 :
        case 11 :
            console.log("本月有30天");
            break;
        case 2 :
            console.log("本月有28天");
            break;
        
    }
  </script>
 </head>
 <body>
  
 </body>
</html>
switch_日期计算器
<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    //1.接收用户输入,转换数据类型
    var year = Number(prompt("请输入年份"));
    var month = Number(prompt("请输入月份"));
    var day = Number(prompt("请输入日期"));
    //总天数
    var dayNum = 0;
    //闰年判断
    var isRun = year % 400 == 0 || (year % 100 != 0 && year % 4 == 0);
    //2. 月份累加
    switch (month - 1){
        case 11:
            dayNum += 30;
        case 10:
            dayNum += 31;
        case 9:
            dayNum += 30;
        case 8:
            dayNum += 31;
        case 7:
            dayNum += 31;
        case 6:
            dayNum += 30;
        case 5:
            dayNum += 31;
        case 4:
            dayNum += 30;
        case 3:
            dayNum += 31;
        case 2:
            dayNum += 28;
            if(isRun){
                dayNum += 1;
            }
        case 1:
            dayNum += 31;
    }
    //3.累加当前月的天数
    dayNum += day;
    console.log(year+""+month+""+day+""+"是当年的第"+dayNum+"");
    
  </script>
 </head>
 <body>
  
 </body>
</html>
switch-exer

(二)循环结构:

     重复执行某一段代码
1、循环语句的三要素
           1. 循环变量
           2. 循环条件
           3. 循环体
2、语句
           1、while 循环

           2、do-while循环

           3、for循环

1)while 循环

    1、语法

         while(循环条件){
                   条件成立时,执行循环体
         }
    2、执行流程 :
         1. 定义循环变量
         2. 判断循环条件
         3. 条件成立,执行循环体
         4. 更新循环变量 (重点)
         5. 重复步骤 2 - 3 - 4,直到条件不成立,跳出循环

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    //在控制台中输出一百次“编程使我快乐”

    var i = 1;
    while(i < 101){
        console.log("编程使我快乐");
        //更新循环变量
        i++;
    }

  </script>
 </head>
 <body>
  
 </body>
</html>
while

     练习 :
         1. 输出 1-100之间的数字
         2. 计算 1-100之间所有数字的和
         3. 输出 1-100之间所有3的倍数

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    //1. 输出1-100的数字
    //2. 求和
    var i = 1;
    var num = 0;
    while(i < 101){
        console.log(i);
        num += i; //求和
        i ++;
    }
    console.log("1-100之间所有数字的和为",num);
    
    var j = 1;
    while(j < 101){
        if(j % 3 == 0){
            console.log(j);
        }
        j ++;
    }

  </script>
 </head>
 <body>
  
 </body>
</html>
练习

2)do-while循环

1、语法:do{
             //循环体
              }while(循环条件);
2、执行流程 :
         1. 定义循环变量
         2. 执行do操作,循环体
         3. 循环体中更新循环变量
         4. 判断循环条件,决定是否继续执行循环体
3、特点:
         do-while循环不管条件是否成立,都至少执行一次循环体
4、while 与 do-while区别
         while循环先判断循环条件,为真才执行循环体;
         do-while循环不管条件是否成立,先执行循环体,后判断循环条件。即使循环条件不成立,也会执行一遍循环体。

              et:
                 var i = 101;
                 do{
                      console.log(i);
                      //更新循环变量
                      i ++;
                 }while(i < 101);

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    var i = 101;
    while(i < 101){
        console.log(i);
        i++;
    }
    do{
        console.log(i);
        i ++;
    }while(i < 101);

  </script>
 </head>
 <body>
  
 </body>
</html>
do-while

     练习:
         1、循环接收用户输入,并在控制台中输出;
               直到用户输入“exit”,结束循环

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    //1. 循环接收用户输入,并输出
    do{
        var input = prompt("请输入内容,exit表示退出");
        if(input != "exit"){
            console.log(input);
        }
    }while(input != "exit");
  </script>
 </head>
 <body>
  
 </body>
</html>
do-while-exer

         2、使用while循环改版日期计算器

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    //1.接收用户输入,转换数据类型
    var year = Number(prompt("请输入年份"));
    var month = Number(prompt("请输入月份"));
    var day = Number(prompt("请输入日期"));
    //总天数
    var dayNum = 0;
    //闰年判断
    var isRun = year % 400 == 0 || (year % 100 != 0 && year % 4 == 0);

    //2.使用循环实现月份累加
    var i = 1;
    //month = 5 累加前4个月
    while(i < month){
        switch(i){
            case 1 :
            case 3 :
            case 5 :
            case 7 :
            case 8 :
            case 10 :
                dayNum += 31;
                break;
            case 4 :
            case 6 :
            case 9 :
            case 11 :
                dayNum += 30;
                break;
            case 2 :
                dayNum += 28;
                if(isRun){
                    dayNum++;
                }
                break;
        }
        i++;
    }
    //累加当前月的天数
    dayNum += day;
    console.log(year+""+month+""+day+""+"是当年的第"+dayNum+"");

  </script>
 </head>
 <body>
  
 </body>
</html>
while-date

3)for循环

  1、语法:

              for(定义循环变量;循环条件;更新循环变量;){
                    //循环体
              }

        et:
            for(var i = 1;i < 101; i ++){
                   console.log(i);
            }

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    // 跑十圈
    for(var i = 1; i < 11;i ++){
        if(i == 5){
            /*
            console.log("中场休息,歇一圈");
            continue;
            */
            console.log("跑不动了");
            break;

        }
        console.log(""+i+"");

    }
  </script>
 </head>
 <body>
  
 </body>
</html>
for


  2、for循环与while循环区别
              1、循环的执行流程相同
              2、for  循环常用于确定循环次数的场合
                   while循环常用于不确定循环次数的场合

4)循环控制

       1、continue 表示跳出本次循环,开始下一次循环
       2、break    表示跳出循环,结束整个循环,并且循环体中break后面的语句都不执行
   练习 :
         1. 判断素数(质数)
             只能被1和自身整除的数是质数
             接收用户输入的数字,判断是否为素数

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    //判断素数
    var num = Number(prompt("请输入数字"));
    var isSu = true;
    // 2 至 num-1
    for(var i = 2;i < num; i ++){
        if(num % i == 0){
            isSu = false;
            break;
            //console.log(num+"不是素数");
        }
    }
    if(isSu){
        console.log("是素数");
    }else{
        console.log(num+"不是素数");
    }
  </script>
 </head>
 <body>
  
 </body>
</html>
判断素数

         2. 接收用户输入年月日,判断当日是星期几
            参考 :已知 1990年1月1日是星期一
            解决思路 :   
              1. 接收年月日,转换为Number
              2. 计算当前日期与1990-01-01之间间隔多少天
                 年累加 1990 -> year-1
                 当前年中月份的累加
                 当前月的天数
              3. 总天数 % 7(0 - 6 代表周日 - 周六)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
    //1.接收用户输入,转换数据类型
    var year = Number(prompt("请输入年份"));
    var month = Number(prompt("请输入月份"));
    var day = Number(prompt("请输入日期"));
    //总天数
    var dayNum = 0;

    //2. 相隔的年份对应天数相加
    for(var i = 1990; i < year; i ++){
        dayNum += 365;
        //闰年判断
        if(i % 400 == 0 || (i % 100 != 0 && i % 4 == 0))
        dayNum ++;
    }

    //3. 当前年中经过的天数
    for(var j = 1; j < month; j ++){
        switch(j){
            case 1 :
            case 3 :
            case 5 :
            case 7 :
            case 8 :
            case 10 :
                dayNum += 31;
                break;
            case 4 :
            case 6 :
            case 9 :
            case 11 :
                dayNum += 30;
                break;
            case 2 :
                dayNum += 28;
                if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
                dayNum ++;        
        }
    }
    dayNum += day;
    //余数范围 0 - 6 周日 - 周六
    var weekDay = dayNum % 7;
    var show = "";
    switch(weekDay){
        case 0 :
            show = "";
            break;
        case 1 :
            show = "";
            break;
        case 2 :
            show = "";
            break;
        case 3 :
            show = "";
            break;
        case 4 :
            show = "";
            break;
        case 5 :
            show = "";
            break;
        case 6 :
            show = "";
            break;
    }

    console.log(year+""+month+""+day+""+"是星期"+show);
  </script>
 </head>
 <body>
  
 </body>
</html>
判断星期

3、循环的嵌套

      可以再循环中再次嵌套其他循环
 语法:for(var i = 0; i < 10; i ++){               
                        for(var j = 0; j < 10 ; j ++){ ....
                        }
                }

 练习:
     1. 在控制台中输出以下图形
        *
        **
        ***
        ****
        *****
     2. 在控制台中输出图形
           *
          ***
         *****
        *******
       *********
     3. 控制台输出99乘法表

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">

    //练习1
    for(var i = 1; i < 6;i ++){ //行数

        //空字符串用来拼接每行的星星符号
        var show = "";
        for(var j = 1; j <= i;j ++){  //星星数 = 行数
            //内层循环,确定星星个数,以字符串形式保存到变量show中
            show += '*'
        }
        //按行输出
        console.log(show);
    }
    console.log("---------------------");


    //练习2
    for(var i = 1; i < 6 ; i ++){  //行数
        var show = "";
        //输出空格 第五行 i = 5 
        for(var j = 1; j <= 5 - i;j ++){
            show += " ";
        }
        //星星数
        for(var k = 1; k <= 2 * i - 1;k ++){
            show += "*";
        }
        console.log(show);
    }
    console.log("---------------------");


    //练习3
    for(var i = 1; i <= 9; i ++){  //第一个操作数
        var show = "";
        for(var j = 1; j <= i; j ++){
            show += i + '*' + j + '=' + i * j +"\t";
        }
        console.log(show);
    }

  </script>
 </head>
 <body>
  
 </body>
</html>
练习

posted on 2018-10-18 21:22  破天荒的谎言、谈敷衍  阅读(232)  评论(0)    收藏  举报

导航