2021-09-16---JavaScript基础语法:分支结构
1.程序的流程控制
2.程序控制的三大结构
- 顺序结构:从上到下,从左到右,依次执行每一条语句,不允许跳过任一语句。
- 选择结构:根据条件判断,执行某一段代码。
- 循环条件;满足某一条件,重复执行某一段代码。
3.实现选择结构的语句有哪些
- ? :
- if
- 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>