2021-09-16---JavaScript基础语法:分支结构

1.程序的流程控制

在这里插入图片描述

2.程序控制的三大结构

  1. 顺序结构:从上到下,从左到右,依次执行每一条语句,不允许跳过任一语句。
  2. 选择结构:根据条件判断,执行某一段代码。
  3. 循环条件;满足某一条件,重复执行某一段代码。
    在这里插入图片描述

3.实现选择结构的语句有哪些

  1. ? :
  2. if
  3. switch

三目运算符 ?:

if

单分支选择

if(条件){
	语句组;
}

<script>
        //只要是从外部获取的数据,都是String类型。
        //i. 根据成绩判断是否发放清华大学的通知书?720
        var i_score = prompt('请输入您的成绩:');
        if(!isNaN(i_score)){  //先判断输入的是否为数字  不是isNaN ,就是数字
            if(i_score > 600){
                        alert('祝贺你!')
                    }
        }
        
        /*
输入任意两个数,然后交换位置输出(如: a=4,b=5 输出 a=5,b=4)

        */
        var a = prompt("请输入一个数");
        var b = prompt('请输入另一个数');
        console.log("交换前\n"+ 'a' + '=' + a +'\nb' + '=' + b);

        var t ;
        t = a;
        a = b;
        b = t;
        console.log("交换后\n"+ 'a' + '=' + a +'\nb' + '=' + b);


        /*
输入任意三个数,由大到小输出
        */
        var a = prompt('please');
        var b = prompt('please');
        var c = prompt('please');
        var t;
        //思路:让a里面存放三个数中最大值,先判断A和B的大小,如果A小于B,则交换,此时A里面存放A和B之间较大的值,然后再判断A和C的大小,如果A小于C,则交换,此时A里面存放的为A B C 中最大的值;然后再判断B和C的大小,如果B小于C,则交换,此时B里面存放的为B C之间较大的值也就是第二大值,那么C里面存放的就是三者之间最小的值。
        //始终保持让A里面存放最大的值
        //判断A B的大小,B 大,则交换
        if(a<b){
            t = a;
            a = b;
            b = t;
        }
        //判断A C 的大小,C大,则交换
        if(a < c){
            t = a;
            a = c;
            c = t;
        }
        //始终保持让B 里面存放第二大值。
        //判断B C 的大小,C大,则交换
        if(b < c){
            t = b;
            b = c;
            c = t;
        }
        console.log(a,b,c);
    </script>

双分支选择

if(条件){
	语句组;
}else{
	语句组;
}

多分支选择

if(条件){
	语句组;
}else if(条件){
	语句组;
}...

...else if(条件){
	语句组;
}else{
	语句组;
}

<script>
        /*
        任意输入一个数字,判断是星期几?
        */
        // var a = prompt('请输入');
        // if(a == 1){
        //     alert('星期一');
        // }else if(a == 2){
        //     alert('星期二');
        // }else if(a == 3){
        //     alert('星期三');
        // }else if(a == 4){
        //     alert('星期四');
        // }else if(a == 5){
        //     alert('星期五');
        // }else if(a == 6){
        //     alert('星期六');
        // }else{
        //     alert('星期日');
        // }
        // //判断成绩优(90-100)良(80-89)中(70-79)差(60-69) 不及格(<60)
        // var score = prompt('请输入');
        // if(score > 0 && score <=100){
        //     if (score >= 90 && score <= 100){
        //     alert('you');
        //     }else if(score >= 80){
        //         alert('liang');
        //     }else if(score >= 70){
        //         alert('zhong');
        //     }else if(score >= 60){
        //         alert('cha');
        //     }else{
        //         alert('bujige');
        //     }
        // }else{
        //     alert('lihai');
        // }
        //设计一个具有+、-、*、/、%的简单计算器
        var a = Number( prompt('第一个数'));
        var ch = prompt('运算符');
        var b = Number(prompt('第二个数')) ;
        if(ch == '+'){
            alert(a + '+' + b + '=' + (a + b));
        }else if(ch == '-'){
            alert(a + '-' + b + '=' +(a - b));
        }else if(ch == '*'){
            alert(a + '*' + b + '=' +(a * b));
        }else if(ch == '/'){
            alert(b !== 0 ?  a + '/' + b + '=' +(a / b) : '除数不能为0');
        }else{
            alert(b !== 0 ? a + '%' + b + '=' +(a % b) : '除数不能为0');
        }
    </script>
</body>

Switch 开关语句

switch(表达式){
	case 表达式 : 语句组;[break;]
	case 表达式 : 语句组;[break;]
	……
	case 表达式 : 语句组;[break;]
	[default : 语句组;]
}


规则:先计算switch后表达式的值,该值如果与某个case后表达式的值一致,则执行该case后的语句组,如果后面有break,则退出switch语句;如果没有break。则继续执行后面所有语句组,直到遇到break或右大括号结束。

<script>
        // 任意输入一个数字,判断是星期几?
        // var z = parseInt(prompt('一个数') );
        // switch(z){
        //     case 1 : alert('星期一');break;
        //     case 2 : alert('星期二');break;
        //     case 3 : alert('星期三');break;
        //     case 4 : alert('星期四');break;
        //     case 5 : alert('星期五');break;
        //     case 6 : alert('星期六');break;
        //     case 7 : alert('星期日');break;
        //     default : alert('无效');
        // }

        /*
输入一个 0-6 的整数,判断哪一天是工作日,哪一天是 休息日?
        */
        // var a = parseInt(prompt('0-6的整数')) ;
        // switch( a ){
        //     case 1 : alert('工作日');break;
        //     case 2 : alert('工作日');break;
        //     case 3 : alert('工作日');break;
        //     case 4 : alert('工作日');break;
        //     case 5 : alert('工作日');break;
        //     case 6 : alert('休息日');break;
        //     case 0 : alert('休息日');break;
        //     default : alert('非法');
        // }

    //计算某日是该年的第几天?
    // 2020 8 1
    // 月份  7  是要根据月份来判断加几个月的时间
        var year = parseInt(prompt('年份'));
        var month = parseInt(prompt('月份'));
        var day = parseInt(prompt('日期'));
        var sum = 0;
        switch( month ){
            case 12 : sum += 30;
            case 11 : sum += 31;
            case 10 : sum += 31;
            case 9 : sum += 30;
            case 8 : sum += 31;
            case 7 : sum += 31;
            case 6 : sum += 30;
            case 5 : sum += 31;
            case 4 : sum += 30;
            case 3 : sum += 31;
            case 2 : !(year % 4) && year %100 || !(year % 400) ? sum += 29  : sum+=28;
            case 1 : sum += day;
            // default : alert('无效');            
        }
        alert(sum);

        
    </script>

计算某日是该年的第几天?
这个案例很好地利用了switch的穿透性。首先要能判断出来,我们是根据月份来判断一共要加几个月的时间,知道这一点就能知道switch后面的表达式里面要写到的是month;然后必须从case 12 开始,依次倒着写,这样,如果说输入的日期是11月28号,那么case匹配到month是11,就跳过case 12,从case 11 开始,依次执行后面的每一条语句,也就会依次加上10月,9月,……,2月,一月的天数,这样就能得出总的时间;最后需要注意的是,用户输入的是12月,则加的前11个月的天数,然后再加上12的day数,用户输的是9月,则加的是前8个月的天数,然后加上9月的day数,……,依次……;如果用户输入的是1月,则直接加上一月份的day数就好了。

应用

 <script>
	// switch
        // 1) 任意输入一个数字,判断是星期几? 
        //  var z = parseInt(prompt('一个数') );
        // switch(z){
        //     case 1 : alert('星期一');break;
        //     case 2 : alert('星期二');break;
        //     case 3 : alert('星期三');break;
        //     case 4 : alert('星期四');break;
        //     case 5 : alert('星期五');break;
        //     case 6 : alert('星期六');break;
        //     case 7 : alert('星期日');break;
        //     default : alert('无效');
        // }

        // 2) 输入一个 0-6 的整数,判断哪一天是工作日,哪一天是 休息日? 
        // var a = parseInt(prompt('0-6的整数')) ;
        // switch( a ){
        //     case 1 : alert('工作日');break;
        //     case 2 : alert('工作日');break;
        //     case 3 : alert('工作日');break;
        //     case 4 : alert('工作日');break;
        //     case 5 : alert('工作日');break;
        //     case 6 : alert('休息日');break;
        //     case 0 : alert('休息日');break;
        //     default : alert('非法');
        // }

        // 3) 输入一个月份,输出这个月有多少天?
        // var year = parseInt(prompt('年份')); 
        // var month = parseInt(prompt('月份'));
        // switch( month ){
        //     case 1 :
        //     case 3 : 
        //     case 5 :
        //     case 7 :
        //     case 8 :
        //     case 10 :
        //     case 12 : alert('31天');break;
        //     case 4 :
        //     case 6 :
        //     case 9 :
        //     case 11 : alert('30天');break;
        //     case 2 : !(year % 4) && (year % 100) || !(year % 400) ? alert('29天') : alert('28天');
        // }

        // 4) 判断成绩优良中差不及格 100-90 89- 80 79-70 69-60 <60

        //方法一
        // var i_score = Number(prompt('您的成绩'));
        // if(i_score >= 0 && i_score <= 100){
        //     switch (true){
        //         case i_score>=90 && i_score<=100 : alert('优');break;
        //         case i_score>=80 : alert('良');break;
        //         case i_score>=70 : alert('中');break;
        //         case i_score>=60 : alert('差');break;
        //         case i_score<60 : alert('不及格');
        //     }  
        // }else{
        //     alert('请输入0-100的数字');
        // }
        //方法二
        // var i_score = parseInt(prompt('您的成绩')/10); 
        // switch(i_score){
        //     case 10 :
        //     case 9 : alert('优');break;
        //     case 8 : alert('良');break;
        //     case 7 : alert('中');break;
        //     case 6 :alert('差');break;
        //     default :alert('不及格');
        // }


        // 5) 计算某日是该年的第几天? 
        // var year = parseInt(prompt('年份'));
        // var month = parseInt(prompt('月份'));
        // var day = parseInt(prompt('日期'));
        // var sum = 0;
        // switch( month ){
        //     case 12 : sum += 30;
        //     case 11 : sum += 31;
        //     case 10 : sum += 31;
        //     case 9 : sum += 30;
        //     case 8 : sum += 31;
        //     case 7 : sum += 31;
        //     case 6 : sum += 30;
        //     case 5 : sum += 31;
        //     case 4 : sum += 30;
        //     case 3 : sum += 31;
        //     case 2 : !(year % 4) && year %100 || !(year % 400) ? sum += 29  : sum+=28;
        //     case 1 : sum += day;
        //     // default : alert('无效');            
        // }
        // alert(sum);

        //这个案例很好地利用了switch的穿透性。首先要能判断出来,我们是根据月份来判断一共要加几个月的时间,知道这一点就能知道switch后面的表达式里面要写到的是month;然后必须从case 12 开始,依次倒着写,这样,如果说输入的日期是11月28号,那么case匹配到month是11,就跳过case 12,从case 11 开始,依次执行后面的每一条语句,也就会依次加上10月,9月,……,2月,一月的天数,这样就能得出总的时间;最后需要注意的是,用户输入的是12月,则加的前11个月的天数,然后再加上12的day数,用户输的是9月,则加的是前8个月的天数,然后加上9月的day数,……,依次……;如果用户输入的是1月,则直接加上一月份的day数就好了。

        // // 6) 用 switch 实现简单计算器 
        //     var i_one = Number(prompt('第一个数'));
        //     var ch = prompt('运算符');
        //     var i_two = Number(prompt('第二个数'));
        //     switch( ch ){
        //         case '+' : alert(i_one + '+' + i_two + '=' + (i_one+i_two));break;
        //         case '-' : alert(i_one + '-' + i_two + '=' + (i_one-i_two));break;
        //         case '*' : alert(i_one + '*' + i_two + '=' + (i_one*i_two));break;
        //         case '/' : i_two === 0 ? alert('除数不能为0') : alert(i_one + '/' + i_two + '=' + (i_one/i_two));break;
        //         case '%' : i_two === 0 ? alert('除数不能为0') : alert(i_one + '%' + i_two + '=' + (i_one%i_two));break;
        //     }

        // 7) 根据血型与性别测试性格 
            // var blood = prompt('血型 A B C 0');
            // var sex = prompt('性别 M W');
            // switch (sex ){
            //     case 'M' : switch (blood){
            //         case 'A' : alert('男A');break;
            //         case 'B' : alert('男B');break;
            //         case 'AB' : alert('男AB');break;
            //         case 'O' : alert('男O');
            //     };
            //     case 'W' : 
            //     switch (blood){
            //         case 'A' : alert('女A');break;
            //         case 'B' : alert('女B');break;
            //         case 'AB' : alert('女AB');break;
            //         case 'O' : alert('女O');
            //     }
            // }
        // 8) 设计一个简单的猜拳游戏
            var play_one = parseInt(prompt('请输入 0为石头 1为剪刀 2位布')) ;
            var play_two = parseInt(prompt('请输入 0为石头 1为剪刀 2位布')) ;
            switch(play_one){
                case 0 : 
                    switch(play_two){
                        case 0 : alert('平局');break;
                        case 1 : alert('先手赢');break;
                        case 2 : alert('后手赢');
                    }break;
                case 1 : 
                    switch(play_two){
                        case 0 : alert('后手赢');break;
                        case 1 : alert('平局');break;
                        case 2 : alert('先手赢');
                    }break;
                case 2 : 
                    switch(play_two){
                        case 0 : alert('先手赢');break;
                        case 1 : alert('后手赢');break;
                        case 2 : alert('平局');
                    }
            }

    </script>

posted @ 2022-10-08 01:20  昔痕  阅读(5)  评论(0编辑  收藏  举报