JavaScript(2)

97 阅读7分钟

控制结构

目录

分支
if
switch
循环
for
while
do...while
关键字
break
continue

控制结构

概念:指有自己的代码执行顺序的特殊语法结构。
分类:
分支:根据条件的结果会执行不同的代码。
循环:根据条件是否为true决定是否要重复执行指定的代码。

分支

if

概念:分支结构中的一种。根据某个条件的true或false来执行不同的代码。
语法
if(条件){
          条件为true时执行这{}的所有的代码
          }
else {
       条件为false时执行这{}的所有的代码
       }

当执行if结构时,有以下的执行过程
判断if()里的条件是否为true;
为true则执行if(){}里的代码;
为false则执行else{}里的代码;
以上两种情况执行其中一个,执行后if结构就结束了。

if-else if-else

概念:可以认为if-else if-else是if-else的升级版,可以针对超过2种情况的判断。
语法
if(条件1) {
           条件1true时执行这{}的所有的代码
           }else if(条件2){
                   条件1false同时条件2true时执行这{}的所有的代码
                   }else {
                            条件12都为false时执行这{}的所有的代码
                            }

流程
(1)先判断if()里条件1是否为true。为true则执行对应{}里的代码,代码执行后退出整个的if else if的结构。为false则执行第二步。
(2)判断else-if里的条件2是否为true,如果为true,执行对应{}里的代码,代码执行后退出整个的if else if的结构。为false则执行第三步。
(3)如果还有else-if的代码,则继续判断,决定是否执行对应{}里的代码。如果没有则直接执行else里{}的代码。

if结构练习

<script>
        //90分及以上为优秀,70(包括)-90为良好,60(包括)-70为及格,60以下为不及格
        var num = parseInt(prompt("输入一个数:"));
        if(num>90 || num==90) {
            document.write("优秀");
        }else if(num<90 && num>70 || num==70) {
            document.write("良好");
        }else if(num<70 && num>60 || num==60) {
            document.write("及格");
        }else{
            document.write("不及格");
        }
        
        //判断是否登录成功(正确的用户名:addmin,密码:ad123)
        var name1 = prompt("输入用户名:");
        var password1 = prompt("输入密码:");
        if(name1 == "admin") {
            if(password1 == "ad123") {
                document.write("登录成功");
            }
            else {
                document.write("登录失败");
            }
        }
        else {
            document.write("登录失败");
        }
        
        //判断输入的三位数是否为水仙花数
        var num = String(prompt("输入一个数"));
        var x = parseInt(num/100);
        var y = parseInt(num/10%10);
        var z = parseInt(num%10);
        if(num.length == 3){
            if(x*x*x + y*y*y +z*z*z == num) {
                document.write("是水仙花数");
            }
            else{
                document.write("不是水仙花数");
            }
        }else{
            document.write("不是水仙花数");
        }

        
    </script>

switch

概念:当有固定的分支情况时,switch更简单的语法k'y使代码简洁整齐一些。
作用:效果类似于if-else。只不过在针对判断固定分支时,switch语法更简洁整齐。
语法
switch(要判断的数据){
        case 数值1:当数据为数值1时要执行的代码;break;
        case 数值2:当数据为数值2时要执行的代码;break;
        case 数值3:当数据为数值3时要执行的代码;break;
        case 数值n:当数据为数值n时要执行的代码;break;
        default:以上数值都不满足时执行这里的代码;break;
        }

switch和if的区别

(1)switch和if都是用于分支结构。而switch则适用于固定数据(分支)的情况。if适用于任何情况。
(2)只是说switch在面对固定数据的情况时,语法简洁度好于if结构。

循环-for

概念:可以实现某些代码重复执行。
语法
for (定义循环变量;循环继续执行的条件;循环变量自增或自减){
        需要重复执行的代码;
        }
     

流程解析

for(var i = 1;i<=10;i++) {
        console.log("跑一圈");
        }

(1)执行一次var i=1;
(2)判断是否满足循环继续条件(即是否为true)。如果为true,则执行第三步。如果为false,则退出for循环结构。
(3)完整的执行一次{}里面的所有代码,即执行了console.log("跑一圈");
(4)执行一次循环变量自增或自减。执行了i++;
(5)退回到第二步;

for循环练习

//用一元钱兑换1分、2分、5分的硬币,兑换数量为50枚,列出所有可能
        for(var i=0;i<=100;i++) {
            for(var j=0;j<=50;j++) {
                for(var z=0;z<=20;z++) {
                    if(i+j+z==50 && i+j*2+z*5==100){
                        document.write("1分钱的有"+i+"个","2分钱的有"+j+"个","5分钱的有"+z+"个"+"<br>");
                    }
                }
            }
        }
 //抓球问题:红球5个,黑球7个,白球9个。随机抓取12个,输出所有的取球方式并输出方式数量
        for(var red=0;red<=5;red++){
            for(var black=0;black<=7;black++){
                for(var white=0;white<=9;white++){
                    if(red+black+white==12){
                        document.write("红球有"+red+"个","黑球有"+black+"个","白球有"+white+"个"+"<br>");
                    }
                }
            }
        }
        
 //根据输入行数打印一个菱形
        var line=parseInt(prompt("输入行数"));
        for(var i=1;i<=line;i++){
            //添加空格
            for(var k=1;k<=line-i;k++){
                document.write("<span>&nbsp;</span>");
            }
            for(var j=1;j<=2*i-1;j++){
                document.write("<span>*</span>");
            }
            document.write('<br>');
        }
        //倒立的三角形
        for(var i=line-1;i>=1;i--){
            for(var k=1;k<=line-i;k++){
                document.write("<span>&nbsp;</span>");
            }
            for(var j=1;j<=2*i-1;j++){
                document.write("<span>*</span>");
            }
            document.write('<br>');
        }
        <style>
        span{
            display: inline-block;
            width: 20px;
        }
    </style>

while

概念:也是用于循环结构;
作用:完成重复执行指定的代码;
语法
while(循环的继续条件) {
        条件为true执行{}里的代码
        }

流程
(1)判断循环继续条件是否为true,如果为true则执行第二步。否则退出while循环结构。
(2)执行一次{}里的代码,执行后退回第一步。
与for的区别
语法上:for循环针对循环变量的初始化以及自增有单独的位置来书写。而对while来说则没有单独的位置。
场景上:for更适用于那些有明确循环次数的情况。而while则用于循环次数不明确,但有循环结束条件的情况。

while循环练习

//用户输入一个多个位数的数字,倒序输出每位数,并求位数之和。比如1234 输出4321以及位数之和为1+2+3+4=10
        var num = Number(prompt("输入一个多位数:"));
        var sum = 0;
        while(num!=0) {
            var ge=num%10;
            sum+=ge;
            document.write(ge);
            num=parseInt(num/10);
        }
        document.write("<br>"+sum);

        //用户输入多次字符串,每次输入后就输出在控制台中,输入0表示结束
        var input = prompt("输入信息");
        while(input!="0") {
            console.log(input);
            var input=prompt("输入信息");
        }

do...while

概念:也是控制结构中的循环结构中的一种。
作用:类似于for和while,都是用于重复执行指定的代码。
语法
do {
   先执行一次这里的代码,再进行判断看是否继续循环
   }while(循环继续条件);

流程
(1)先执行一次{}里的代码,执行第二步; (2)判断条件是否为true。为true则退回第一步。否则退出do...while结构
与while、for的区别
三者都是循环结构。都是用于重复执行指定的代码。for和while可以相互替用。
语法:3者之间的语法有所不同。
应用场景
for更适用于循环次数已知的情况。
while适用于循环次数未知并且需要先判断再执行的情况。
do...while适用于先执行一次,再进行判断的情况。

break & continue

概念:这两个是控制结构中的特殊的关键字。关键字是指在程序中有特殊含义的单词或字母的组合。比如var、for while等。
break
概念:只能用于分支中的switch以及循环结构当中。
作用:
如果是在switch中,break表示当前的case的结束。
如果是在循环中,当执行break时,表示循环立即结束(终止)。
语法:
在循环结构中的{}中:
break;

continue
概念:只能在循环结构中使用。
作用:跳过当前次循环,继续下一次循环的判断(如果是for循环,那么退回到循环变量自增)
语法:
在循环结构中的{}中:
continue;

do...while练习

//用户输入多次数字,当输入0时结束,并输出用户输入的最大的数字。
        var max;
        do{
            var input = Number(prompt("输入数字"));
            if(max==undefined || max<input){
                max=input;
            }
        } while(input!=0);
        alert('最大为'+max);
        

登录-注册-综合练习

 var loginName;
        var loginPass;
        var isOver = false;//开关变量,用于结束登录和注册功能的循环
        /*功能:
        1.注册
        将用户输入人的用户名和密码保存到loginName和loginPass中
        2.登录
        先看loginName有没有数据,如果为underfined,说明没注册,提示注册。
        否则就用户输入用户名和密码进行登录验证并提示验证结果
        登录或注册功能结束后提示用户重新选择
        */
       do {
        var input = prompt('1.登录 2.注册 3.退出');
        //利用switch来处理
        switch(input){
            case "1":
                if(loginName!=underfined) {
                    var nameinput = prompt('输入登录的用户名');
                    var namepass = prompt('输入登录密码');
                    if(nameinput == loginName && namepass == loginPass) {
                        alert('登录成功');
                    }else{
                        alert('登录失败');
                    }
                }else{
                    alert("先注册再登录");
                }

                break;
            case "2":
                loginName = prompt('输入注册的用户名');
                loginPass = prompt('输入注册的密码');
                alert('注册成功');
                break;
            case "3":
                isOver = true;
                alert("谢谢使用");
                break;
            default:
                alert('无效选项');
                break;
        }
       } while(isOver==false);