学习Js-day03

学习Js的第三天,重新学习了一下大一的C语言循环部分🤡,老刘的指导历历在目。

循环while,它的兄弟循环do-while,循环for,如何跳出循环break和continue,以及时间复杂度(有点云里雾里),学数据结构的时候没好好学😇,现在就记得名字了,需要好好百度学习一下🤧

循环语句

简单来说,循环就是周而复始的重复一件事,在各种条件的加持下,变量发生数据迭代,从而衍生出一系列的数据,达到某一个节点就可以break,跳出循环,广泛用于大量数据的处理。我们需要注意的是,要全力避免死循环,不至于造成程序卡死甚至崩溃等问题。

循环分类:分类种类很多,如for-in,for-each等,这次学习了其他计算机语言通用的三种方式,属于通吃行为。

while循环

while循环语法格式:

<!-- 循环三要素:初始值,迭代量,条件 -->

 

 while(条件表达式) {

      迭代量;

       执行代码;

注意:

1.遵守语法格式,只能更改内容和执行代码;

2.表达式可以是常量,变量或者其他表达式,该表达式会被强制转换为boolean类型, 可以理解表达式就是循环的条件, 条件成立则进入括号{}里面执行代码,否则不进入; 

3.执行代码可以有多行, {}所包含的称为循环体;

4.表达式不要一直是true, 避免死循环;

5.while循环的顺序是: 先判断表达式是否为true, 若true则执行执行代码, 然后再继续判断表达式是否为true, ….  直到判断表达式为false才会跳出循环, 执行while后面的代码 

示例:

// 1加到100
    var number = 0;
    while(number<100){
        number ++;
        sum += number;
    }
    console.log(sum);
    // 100加到1
    var i = 100;
    var sum = 0;
    while(i>=1){
        sum += i;
        i--;
    }
    console.log(sum);
    打印100以内7的倍数
    var i = 1;
    var sum = 7;
    while(sum<100){
        console.log(sum);
        i += 1;
        sum = i*7;
    }
    // 打印100以内的奇数
    var i = 1;
    var number = 0
    while(i<100){
        console.log(i);
        i +=2;
    }
    // 1.打印100以内偶数的和
    var i = 0;
    var sum = 0;
    while(i<100){
        i += 2;
        sum += i;
    }
    console.log(sum);
    //2. 打印100以内偶数的和
    var i = 0;
    var sum = 0;
    while(i<100){
        i++;
        if(!i%2){
            sum+=i;
        }
    }
    console.log(sum);

 

do-while循环

do-while循环语法格式:

do {

       执行代码;

} while(表达式) 

注意:

1.作为兄弟,他的书写格式和while类似。

2.之前的区别就是判断条件的先后不一致,while是先判断条件,而do-while则是先执行代码,不管条件满不满足,do-while都至少执行一次循环体。

示例:

<script>
    //对应while来说,唯一的区别是先做后判断,至少走一次
    /* var 初识值 = 值
    do {
        执行的代码
        迭代量变化
    }while(条件) */
    var isEmpty = true
    do {
        console.log('有人吗');
        isEmpty = false;
    }while(isEmpty)

    //1+……100
    var i = 0;
    var sum = 0;
    do {
        i++;
        sum +=i;
    }while(i<100)
    console.log(sum);
</script>
<!-- while和do while 的区别 -->
<script>
    // 1.while是先判断后执行 do while 先执行后判断
    // 2.do while 最少执行一次 while最少执行0次
    // 常用while来写一些执行多次的内容, do while规定必须要执行的时候
</script>

 

for循环

for循环语法格式:

 for (表达式1; 表达式2; 表达式3) {

       执行代码;

      // 执行的代码 跟if一样如果你执行的代码只有一行就可以省略{}

注意:  

1, 表达式1: 循环初始值, (可以不填)            

2, 表达式2: 循环条件            

3, 表达式3: 迭代量            

4, 两个分号必须写.

5.省略条件和迭代量,必然是死循环

示例:

<!-- <script>
    //省略条件和迭代量 必定是死循环
    for(初始值;条件;迭代量){
        // 执行的代码 跟if一样如果你执行的代码只有一行就可以省略{}
    }
</script> -->
<script>
    // 1+……100
    var sum = 0;
    for(var i=0;i<=100;i++){
        sum +=i;
    }
    console.log(sum);
</script>
<script>
    //O(1)每行只执行一遍
    var i = 0;
    i++;
    if(i<10){
        console.log(i);
    }
    // O(logN)
    var i = 1//由ii和2决定
    while(i<100){
        i*=2
    }
    // O(n)由对应的一个值决定的
    for(var i=0;i<100;i++){
        console.log('我执行了' +i+ '遍');
    }
    // 时间复杂度 O(1) <O(logN)<O(n)
</script>
<script>
    //打印四行四列的图形
    // 循环嵌套(将多个循环嵌套在一起)
    var row = 4;
    var col = 4;
    for(var i=0;i<row;i++){
        var j=0;
        var rowStr = ''
        while (j<col){
            j++;
            rowStr+='*';     
        }
        document.write(rowStr+'<br/>');
    } 
</script>

 其中循环嵌套:

一个循环语句又包含另一个循环语句,三种循环都可以相互嵌套,以下的循环语句都是合理的。

break关键字    

break的功能:      

1,在switch语句中使流程跳出switch结构。      

2,在循环语句中使流程跳出当前的循环               

注意:  1, 如果已执行break语句,就不会执行循环体中位于break后的语句。

          2, 在多层循环中,一个break语句只向外跳一层 。

示例:

<script>
    // 判断一个数是不是合数
    var number = prompt();
    for(var i=2;i<number;i++){
        if(number%i==0){
            console.log('当前数为合数');
            break;
        }
    }
</script>
<script>
    // 判断一个数是不是素数
    var count = 0;
    var number = prompt();
    for(var i=2;i<number;i++){
        if(number%i==0){
            count++;
            break;
        }
    }
    if(count==0){
        console.log('当前数为素数');
    }
</script>

continue关键字    

continue的功能:    

只能在循环语句中使用,使本次循环结束,即跳过循环体中下面尚未执行的语句,接着进行下次是否执行循环的判断。            注意:  1, continue语句只能用在循环里。

          2, 对于 while 和 do-while 循环,continue 语句执行之后的动作是条件判断;对于 for 循环,随后的动作是变量更新。 

示例:

<script>
    // 求整数1-100的累加值,要求跳过所有各位为3的数
    var sum = 0;
    for(var i=1;i<=100;i++){
        if(i%10==3){
            continue//跳过本次循环,开始下一次循环
        }
        sum+=i;
    }
    console.log(sum);
</script>

课后练习:

1<script>
    //1, 一个新入职,月工资为2000元的员工,每年涨当年工资5%,20年后的月工资是多少?
    var i=1;
    sum = 2000;
    while(i<20){
        i++;
        sum*=1.05
    }
    console.log('20年后工资为'+sum);
</script>
2<script>
    //2, 山上有一口缸可以装50升水,现在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。
    // 问:小和尚要挑几次水才可以把水缸挑满?通过编程解决这个问题。
    var sum = 15;
    var i =0;
    while(sum<50){
        sum+=5;
        i++
    }
    console.log(i);
</script>
3<script>
    //3, 打印100–200之间所有能被3或者7整除的数
    for(var i=100;i<200;i++){
        if(i%3==0 || i%7==0){
            console.log(i);
        }
    }
</script>
4<script>
    //4.计算10的阶乘   (1*2*3*4*5*6*7*8*9*10   n的阶乘1*2……*n)
    var sum = 1;
    for(i=2;i<10;i++){
        sum *=i     
    } 
    console.log(sum);
</script>
5<script>
    // 5.计算1+3+5+...+99的和
    var sum = 0;
    for(i=1;i<100;i++){
        if(i%2==0){
            continue;
        }
        sum +=i;
    }
    console.log(sum);
</script>
6<script>
    //6.99乘法表
    var sum = 0;
    for(var i=0;i<=9;i++){
        var str = ''
        for(var j=0;j<=i;j++){
            str += j + '*' + i + '=' + i*j +'\t'
        }
        document.write(str);
    }
</script>
7<script>
    //7.输出20~80之间能被3整除的整数, 每行5个
    
        var str ='';
        var count = 0;
        for(var i=20;i<=80;i++){
            if(i%3==0){
                count++;
                str += i+'\t';
             if(count%5==0 && count!=0){
                console.log(str);
                str =''
              }
            }
        }
</script>
8<script>
    //8.打印1000~2000年中所有的闰年, 每行4个
    var j=0;
    var str ='';
    for(var i=1000;i<=2000;i++){
       if(i%4==0 && i%100!=0 || i%400==0){
            j++;
            str += i+'\t';
            if(j%4==0 && j!=0){
                console.log(str);
                str =''
            }
        } 
    }
</script>
9<script>
    //9.求: 1-1/2+1/3-1/4 …  1/100的和
    var sum = 0;
    var b;
    var a;
    for( var i=1;i<=100;i++){
        if(i%2==0){ 
            sum -=1/i;
        }
        else{          
            sum +=1/i;
        }   
    }
    console.log(sum);
</script>
10<script>
    // 输入两个数,求两个数的最小公倍数(****)
    //     如: 9和6的最小公倍数是18, 
    //      1, 先找出两个数中的最大数   // 9 -> 6*9
    //      2, 最大数++,找出能被两个数整除的数(退出循环)
    var a =prompt('第一个数');
    var b =prompt('第二个数');
    if(a>b){
        for(var i=1;i<100;i++){
            a = a*i
            if(a%b==0){
                console.log(a);
                break;
            }
        }
    }else {
        for(var i=1;i<100;i++){
            b = b*i
            if(b%a==0){
                console.log(b);
                break;
            }
        }
    }
 </script>
11<script>
    // 输入两个数n,a,如果n==3, a == 2;
    // 输出 2 + 22 + 222 的值。(不用输出式子)(****)
    //   如: n == 4, a == 3;
    //   输出 3 + 33 + 333 + 3333的值。
    //   提示: 1、n = 3,相加三次,每次相加比前一次相加的数,多一位
    //         2、每次多的这个位数的值为a,  3, 3*10+3(33), 33*10+3(333),...
    var n =prompt('第一个');
    var a =prompt('第二个');
    var str = '';
    var sum = 0;
    for(var i=0;i<n;i++){
        str +=a;
        sum +=Number(str);
    }
    console.log(sum);
</script>
12<script>
    // 五位数中,对称的数称为回文数,找出所有的回文数。
    var number;
    for (number = 10000; number < 100000; number++) {
        var wan = parseInt(number/10000);
        var qian = parseInt((number/1000)%10);
        var shi = parseInt((number/1000)/10);
        var ge = parseInt(number%10);
        while (wan == ge && qian == shi) {
            console.log(number);
        }
    }
</script>
14<script>
    //找出所有的水仙花数,三位数,各位立方和等于该数本身。
    //如: 153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3 
    var number = 100;
    for (number = 100; number < 1000; number++) {
        var bai = parseInt(number/100);
        var shi = parseInt((number/10)%10);
        var ge = parseInt(number%10);
        if (((Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3))) == number) {
            console.log(number);
        }
    }
</script>
16<script>
    // 输入两个数,求两个数的最大公约数(*****)
    // 如: 12和8的最大公约数是4,
    //     提示: 能够同时整除两个数的最大数          
    //      1, 先找出两个数中最小的那个数, 
    //      2, 最小数--, 找出能被两个数整除的数(退出循环break)
    var number1 = 12
        var number2 = 8
        var min = number1<number2?number1:number2
        for(var i=min;i>0;i--){
            if(number1%i==0 && number2%i==0){
                console.log(i);
                break
            }
        }
</script>

 

posted @ 2022-07-27 20:29  可爱就要得到  阅读(48)  评论(0)    收藏  举报