控制结构
目录
概念
- 指某个语法结构代码的执行书顺序并不是从上往下,可能是判断、重复执行等。我们统称这些语法结构为控制结构。
分支结构
if
- if结构表示当需要跟某个条件的判断结构进行不同的处理
if(需要判断的条件){
条件为True时要执行的代码
}else{
条件为false时要执行的代码
}
代码执行流程:
1. 判断条件是否为true,
2. 为true时就执行if{}中的代码
3. 为false时就执行else{}中的代码
4. if-else代码结束
- if-else结构只能处理最多两个分支,当有3个或以上分支情况时,需要额外使用
else-if
结构来扩展分支
if(条件1){
条件1为True时要执行的代码
}else if(条件2){
条件1为false、条件2为true时要执行的代码
}else if(条件n){
之前的条件不满的,条件n为true时要执行的代码
}else{
所有条件都为false时要执行的代码
}
- 练习
// 1.用户输入一个成绩,判断是优秀、及格、还是不及格 >=90(优秀) 90>分数>60(及格)
// 2.用户登录:用户输入用户名和密码并用两个变量保存,判断是否登录成功并输出登录结果
// ( 正确账号:用户名: admin 密码:ad123)
// 3.用户输入一个数字,判断该数是否是水仙花数,水仙花数:一个三位数。它的每位数的立方和等于自身
// 比如 153 = 1*1*1 +5*5*5 +3*3*3,除了153 ,还有 370 371 407
switch
- 概念:也是一种分支结构,功能跟if类似
特点:
- 一般适用于固定的分支情况。比如星期几
- 相比if结构,switch语法结构更加简洁,整齐,代码量要少一些。
- 一般每个case后都会加
break
用于退出switch,如果不退出,可能会继续下一个case中的代码
- 语法
switch(条件){
case 值1: 当条件为值1时要执行的代码;break;
case 值2: 当条件为值2时要执行的代码;break;
case 值3: 当条件为值3时要执行的代码;break;
case 值n: 当条件为值n时要执行的代码;break;
default:
当所有分支都不满足时要执行的代码;break;
}
例子:星期几
var date = 0;
switch (date) {
case 0:document.write('今天是星期天');break;
case 1:document.write('今天是星期一');break;
case 2:document.write('今天是星期二');break;
case 3:document.write('今天是星期三');break;
case 4:document.write('今天是星期四');break;
case 5:document.write('今天是星期五');break;
case 6:document.write('今天是星期六');break;
default:
document.write('输入不合法');
break;
}
跟if的区别
- switch一般用于固定分支的情况,if可用于任何情况
- switch分支需break来结束。if自动结束
- switch语法更加简洁
- 练习
1. 用户分别输入3次,表示年份、月份、日期。计算该日期是当年的第几天
思路:利用switch来加上已过月份的天数+ 当月已过天数
循环结构
- 能够重复执行指定代码的语法结构
for
- 语法
for(当前循环次数;循环满足的条件;循环次数自增){
每次循环要执行的代码
}
例子:重复执行130遍输出语句
for(var i =40;i<=70;i++){
document.write(`上学 极域连起来 学习 练习 复习 做作业 休息的第${i}天<br>`);
}
for循环执行流程:以输出130次为例
- 初始当前循环次数变量,即执行一次
var i = 1
- 判断循环继续条件是否满足,即
判断i<=130是否为true
,如果为true,执行第三步,不满足则退出整个for循环
,即循环结束. - 执行一次
{}
里的所有代码 - 循环次数自增,即执行一次
i++
,即for语法中第二个分号后的代码 - 退回到第二步
- 初始当前循环次数变量,即执行一次
while
- 概念:循环结构的另一种语法,能够与for循环完全相互替换使用。只是语法和适用场景有所不同。
- 语法
while(循环继续条件){
每次循环要执行的代码
}
while流程
- 判断循环继续条件是否为true。为true,则执行第二步。为false,就退出while循环
- 执行一次
{}
里的代码。执行后退回第一步
与for循环的区别
- while语法更简单。但是不提供循环次数的书写位置
- 两者可以完全相互替用。只不过while更适用于不关心次数的情况。for循环适用于需要控制循环次数的情况。比如猜数字,登录。
do…while
概念:从while衍变来的另一种循环语法。更适用于先执行一次再判断的情况。
语法
do{
// 要循环的代码
}while(循环继续条件);
- 流程:先执行一次
{}
里的代码,再进行判断是否继续循环执行
各个循环结构的对比
- 三个都是用于进行循环操作。就语法结构上还有应用场景上有所区别
- for和while结构都是先判断再执行。do..while是先执行一次再判断是否继续
- for循环适用于有明确循环次数的情况,而while适用于循环次数未知的情况。do….while适用于先执行再判断的情况
- for和while更加常用,并且可以相互替换使用。
练习:
1.输出从1乘到10的积: 答案:3628800
2.输出从100加到500的和
3.输出100内的所有能被5整除的数字
4.输出100到999之间的所有位相同的数字(即 111 222 333...999)
5.输出100到999之间的所有水仙花数
6.用户有3次登陆机会。3次输错,程序结束。中间有一次数对了,提示登陆成功并结束程序
7.用户输入一个数,判断是否是质数(质数:该数只能被1和本身整除 比如13
8.扩展:输出99乘法表
9.再扩展:输出彩色版的99乘法表
10. 鸡兔问题: 鸡兔的脚数量一共40只, 鸡兔一共15只,求鸡兔分别是多少。
11. 计算x的y次方,底数x和指数y由用户输入
12. 输入n的值,计算 1*1+2*2+...+n*n的和
13. 判断当前日期是星期几。(可利用 new Date().getDay()来获取当天对应星期的数字,0-6 0表示星期天)--switch
14. 猜数字游戏:系统随机生成一个1000内的随机数,用户输入数字进行猜测,
如果大了则提示大了,小了则提示小了。直到相等则游戏结束。结束后输出游戏的猜测次数。--while
15.输出100内所有偶数之和(while)
16.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐 while
17.输出100内的所有质数(嵌套循环,先判断单个数字为质数,再外面套一个循环来处理100内的)
18.完成龟兔赛跑程序:比赛路程由用户输入,兔子速度为每次走5,乌龟每次走2,但兔子每次有50%不跑,乌龟稳定速度,求跑完比赛路程兔子和乌龟用的次数以及谁赢了。(提示:分别用不同变量来表示兔子和乌龟的当前路程。用循环来描述整个比赛过程,每次循环执行时乌龟都会前进2,兔子有50%不走,50%走5)
if(Math.random()<0.5){
}
while(兔子当前路程<比赛路程 || 乌龟当前路程 <比赛路程 ){
//每次循环都表示为1秒,乌龟稳定速度,兔子50%不跑
}
19.输入一个数字,倒序输出数字并求出位数之和(while) 。比如1234 输出4321 位数之和为1+2+3+4=10.提示:无论多少位数字,%10都可以获取个位数。 那么获取个位数后除以10取整会怎么样呢
1234%10 => 4并输出 1234/10取整 => 123
123%10 =>3并输出 123/10取整 =>12 如此重复
break&continue
continue
- JavaScript的关键字。能够实现跳过当前的循环过程,继续下一次循环过程。
- 语法:在循环体
{}
中写continue
即可
语法:
for(){
continue;
该次循环过程{}里剩余代码不会执行
}
- 执行continue时,当前循环过程还未执行的代码会被跳过不执行
break
- 概念:JavaScript中的关键字,主要用来结束循环或switch结构
作用
- 结束循环
- 语法
for(){
break;//会结束整个循环
}
特点
- 当break被执行时,循环中的循环变量会被中途夭折,不会依次递增到循环自然结束。在编程中可以使用利用该特点来帮助我们实现判断。比如质数
var num = 13;
for(var i=2;i<num;i++){
if(num%i==0){
//已经被整除过,就不是质数,后续的循环过程就不需要了,就可以提前结束循环
break;
}
}
document.write(i);//终止循环i的数值 13,for循环自然结束
if(i<num){
document.write(`${num}不是质数`);
}
- 如果break处于嵌套循环中,break会结束最近的for循环
补充
生成随机数
Math.random();
例子:
var num = Math.random();
document.write(num);输出: 0.几的小数
- 生成0~1之间的随机小数,取不到1