(javascript)(基础知识+实例) 3.运算符,循环

119 阅读3分钟

NaN

  • not a number
  • 是数值类型 不是一个数字
  • 产生: 其他类型转number会得到这个NaN

运算符

  • 数学运算符
    • + - * / %
    • 当加法遇到字符串的时候会拼接
    • 其他的任何运算都是先把左右两侧数据转换(隐式类型转换)成数值然后在进行数学运算
  • 赋值运算符
    • = += -= *= /= %=
    • a+=b --> a = a+b
  • 比较运算符
    • > < == === != !== >= <=
    • 得到是布尔值
    • ==(等于) 和 ===(全等|恒等)
  • 逻辑运算符
    • && || !
    • 逻辑短路
  • 一元运算符
    • ++ --
    • a++ --> a = a+1
    • ++a --> a = a+1
    • 前置和后置
  • 三元运算符
    • 条件?条件成立:条件不成立

分支

  • 单分支
  • 双分支
  • 多分支
  • switch..case

循环语句

  • 循环的含义: 重复执行某一段代码
  • 组成条件
    1. 初始化状态
    2. 条件判断
    3. 循环体代码
    4. 状态变化
  • js实现循环的语法
    1. while循环(10%)
        初始化状态
        while(条件判断){
            // 如果满足执行循环体代码
            // 放在花括号里面的代码会重复执行多次
            循环体代码
            状态变化
        }
    
    1. do..while循环(几乎不用)
        初始化状态
        do{
            // 放在花括号里面的代码会重复执行多次
            循环体代码
            状态变化
        }while(条件判断)
    
    1. for循环(90%)
        for(初始化条件;条件判断;状态变化){
            循环体代码
        }
    
    • for循环执行的顺序
      1. 执行初始化条件
      2. 执行条件判断,如果条件满足,执行3;如果条件不满足,结束循环
      3. 执行循环体代码
      4. 执行状态变化
      5. 再返回2执行

break 和 continue

  • break和continue可以写在循环体内
  • break可以提前结束循环
  • continue跳过本次循环直接进入下一次循环

双重for循环

  • 每一次执行外循环都会等待内循环执行结束
  • 一旦出现循环嵌套 就不要使用相同的变量名

while循环和for循环

  • 思路: 一般首先想到用for循环,for能解决的就使用for循环 for解决不了的问题就要想到用while循环
  • 一般我们知道开始的条件和结束的条件就直接使用for循环
  • 当我们不知道循环执行的次数 只知道重复做一件的满足或者不满足的条件这时候就要使用while循环

实例

(以下代码均为课程实例) ​ (1)while循环

    <script>
        // 初始化状态  一般初始化状态就是一个数字 用来计数
        console.log('循环开始的代码')
        var n = 10 // 初始化状态
        while(n<10){ // 条件判断
            // 此处的代码会执行多次 而且只有在条件满足的时候才会执行 
            console.log(n) // 循环体代码
            n++ // 状态变化 一般状态变化都是用自增或者自减 作用就是计数
        }
        // 不满足就执行循环后面的代码
        console.log('循环后面的代码')
    </script>

(2)do ... while循环

    <script>
        // 这种写法后面一般不用
        console.log('循环之前的代码')
        var n = 10 // 第一次初始化状态就不满足
        // 无论第一次条件是否满足都会执行一次循环体代码
        do{
            console.log(n)
            n++
        }while(n<10)
        console.log('循环之后的代码')
    </script>

(3)for 循环

    <script>
        console.log('循环之前的代码')
        for(var n=10;n<10;n++){
            console.log(n)
        }
        console.log('循环之后的代码')
    </script>

(4)利用for 循环进行求和

    <script>
        // var n = 1+2+3...+10
        // 累加法
        var sum = 0 // 用来统计总和
        // 每一次加上一个数
        // sum += 1
        // sum += 2
        // sum += 3
        // sum += 4
        // sum += 5
        // sum += 6
        // sum += 7
        // sum += 8
        // sum += 9
        // sum += 10

        for(var i=1;i<=10;i++){
            sum+=i
        }
        // 最终得到的sum就是1-10的和
        console.log(sum)
    </script>

(5)利用while循环进行求和

    <script>
        // var n = 1+2+3...+10
        // 累加法
        var sum = 0 // 用来统计总和
        // 每一次加上一个数
        var i=0
        while(i<=10){
            sum+=i
            i++
        }
        // 最终得到的sum就是1-10的和
        console.log(sum)
    </script>

(6)break

    <script>
        for(var i=1;i<=10;i++){
            if(i==3){
                console.log('break之前')
                // 一旦在循环体里面遇到了break后面所有代码都不执行了  循环提前结束
                break
                console.log('break之后')
            } 
            console.log(i)
        }
        console.log('循环结束')
    </script>

(7)continue

    <script>
        for(var i=1;i<=10;i++){
            if(i==3){
                console.log('continue之前')
                // 一旦在循环体里面遇到了continue continue后面的代码就不会执行
                // 直接进入下一次循环
                continue
                console.log('contimue之后')
            } 
            console.log(i)
        }
        console.log('循环结束')
    </script>

(8)使用continue实现求0-100所有偶数的和

    <script>
        var sum = 0
        for(var i=0;i<=100;i++){
            if(i%2==1){
                // 是奇数 我们就跳过
                continue
            }
            sum+=i
        }
        console.log(sum)
    </script>

(9)双重for循环

    <script>
        // 外循环的每一次都会等待内循环执行结束
        for(var i=1;i<=10;i++){
            // 循环体代码 写在花阔里面代码会重复执行多次
            console.log('i1', i) // 10次
            // 如果出现循环嵌套 不要用同样变量名
            for(var i=1;i<=10;i++){
                console.log('i2', i) // 10*10次
                // for(var k=1;k<=10;k++){
                //     console.log('k', k) // 10*10*10次
                // }
            }
            // 等到内层循环结束 i=10
        }

        for(var i=1;i<=100;i++){
            
        }
    </script>

(10)画直角三角形

    <script>

/* 

@
@@
@@@
@@@@
@@@@@
@@@@@@
@@@@@@@
@@@@@@@@
@@@@@@@@@

*/
        // 重复写一点@ 重复写一个换行
        // document.write('@')
        // document.write('<br>')
        // document.write('@')
        // document.write('@')
        // document.write('<br>')
        // document.write('@')
        // document.write('@')
        // document.write('@')
        // document.write('<br>')
        // document.write('@')
        // document.write('@')
        // document.write('@')
        // document.write('@')
        // document.write('<br>')
        // 外层代表行数
        for(var i=1;i<=9;i++){
            // 每一行写的@个数和行数相关
            // 内层代表每一行@个数
            for(var j=1;j<=i;j++){
                document.write('@')
            }
            // 每一行只需要写一个换行
            document.write('<br>')
        }
    </script>

(11)等腰三角形

    <script>


/* 
先画行数  再来看每一行符号的个数
      @     i=1    1  6
     @@@    i=2    3  5
    @@@@@   i=3    5  4
   @@@@@@@  i=4    7  3
  @@@@@@@@@           2
 @@@@@@@@@@@          1 
@@@@@@@@@@@@@         0

*/
for(var i=1;i<=7;i++){
    // 先写空格 空格个数 = 7 - 行数
    for(var j=1;j<=7-i;j++){
        document.write('&emsp;')
    }
    // @的个数和行数的关系是 @个数 = 2*行数 - 1
    for(var j=1;j<=2*i-1;j++){
        document.write('@')
    }
    document.write('<br>')
}
    </script>

(12)倒等腰三角形

    <script>
/* 
19-2*i
@@@@@@@@@@@@@@@@@     17    i=1  0
 @@@@@@@@@@@@@@@      15    i=2  1
  @@@@@@@@@@@@@       13    i=3  2
   @@@@@@@@@@@        11    i=4  3
    @@@@@@@@@
     @@@@@@@
      @@@@@
       @@@
        @

*/   
// 先来画行数
for(var i=1;i<=9;i++){
    // 空格个数 = i-1
    for(var j=1;j<=i-1;j++){
        document.write('&emsp;')
    }
    // @个数 = 19-2*i
    for(var j=1;j<=19-2*i;j++){
        document.write('@')
    }
    
    document.write('<br>')
}     
    </script>

(13)打印100-999之间所有的水仙花数

    <script>
        /*  
            水仙花必须是三位数 100 - 999
            每一位立方的和等于这个数  总共有4个水仙花数 153,370,371,407
            153 = 1*1*1 + 5*5*5 + 3*3*3
        */
       // 取出中间所有的数
       for(var i=100; i<=999;i++){
        // 做一个判断 a,b,c分别是i这个数个位,十位,百位 i = a*a*a + b*b*b + c*c*c
        // console.log(i)
        var ge = i%10
        var shi = parseInt(i/10)%10
        var bai = parseInt(i/100)
        // console.log('个位', i%10)
        // console.log('十位', parseInt(i/10)%10) // 除以10 抹去小数位 在取余
        // console.log('百位', parseInt(i/100)) // 除以100 再抹去小数位
        if(i == ge*ge*ge + shi*shi*shi + bai*bai*bai){
            console.log(i)
        }
       }
    </script>

(14)求一个数字的长度

    <script>
        // 要求用户输入一个数字
        var num = prompt('请输入一个数字')
        // 计算出这个数字的长度
        // 只知道重复做一件事情 但是不知道具体的次数 只知道结束的条件 用while循环
        var count = 0
        while(num!=0){
            // 写重复做的事情 拿num除以10在取整把算得结果在赋值这个数
            num = parseInt(num/10)
            // 每进来一次计个数
            count++
        }
        // 知道循环结束 count就是循环执行的次数
        console.log(count)
    </script>

(15)思考题

    <script>
        var sum = 0
        // 求0-100之间所有偶数的和
        // for(var i=0;i<=100;i++){
        //     // 累加只有在为偶数的时候才累加
        //     if(i%2===0){
        //         sum = sum + i
        //     }
        // }
        for(var i=0;i<=100;i+=2){
            sum = sum + i
        }
        console.log(sum)
    </script>

(16)扩展题(四叶玫瑰数)

    <script>
        
        // 打印1000-9999之间所有的四叶玫瑰数 1634,8208,9474
        // i == a*a*a*a + b*b*b*b + c*c*c*c + d*d*d*d
        for(var i =1000;i<=9999;i++ ){
            var ge  = i%10
            var qian  = parseInt(i/1000)  
            var bai =  parseInt( i/100) %10
            var shi  = parseInt(i/10) %10

            if(i== qian* qian*qian*qian + bai*bai*bai*bai + shi*shi*shi*shi + ge*ge*ge*ge  ){
                console.log(i)
            }
        }
    </script>

(17)作业01

    <script>
        // 求256-6666之间所有是5的倍数数字的和
 var sum=0
        for(i=256;i<6666;i++){
            // console.log(i)
            if(i%5===0){
                // console.log(i)
               sum+=i
            }        
        }
 console.log(sum)
    </script>

(18)作业02

    <script>
        // 求10!  阶乘
        // 10!=10*9*8*7*...*2*1
       
       var y =1
        for (i = 1; i <= 10; i++) {
            // console.log(i)         
               y=y*i
            }   
        console.log(y)
    </script>

(19)作业03

    <script>
        /* 
            1! + 2! + 3! + ... + 20!
            双重for循环 外层求和  内层求阶乘
        */
        // 
        var y = 0
        for (var i = 1; i <= 20; i++) {
            var x = 1
            for (var j = 1; j <= i; j++) {
                x *= j
            }
            y += x
        }
        console.log(y)



        
        // var sum = 0
        // for(var i=1;i<=20;i++){
        //     var ji = 1
        //     for(var j=1;j<=i;j++){
        //         ji*=j
               
        //     }
        //     sum+=ji
        // }
        // console.log(sum)



    </script>