控制结构
目录
概念
- 指某个语法结构代码的执行书顺序并不是从上往下,可能是判断、重复执行等。我们统称这些语法结构为控制结构。
分支结构
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的积: 答案:36288002.输出从100加到500的和3.输出100内的所有能被5整除的数字4.输出100到999之间的所有位相同的数字(即 111 222 333...999)5.输出100到999之间的所有水仙花数6.用户有3次登陆机会。3次输错,程序结束。中间有一次数对了,提示登陆成功并结束程序7.用户输入一个数,判断是否是质数(质数:该数只能被1和本身整除 比如138.扩展:输出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表示星期天)--switch14. 猜数字游戏:系统随机生成一个1000内的随机数,用户输入数字进行猜测,如果大了则提示大了,小了则提示小了。直到相等则游戏结束。结束后输出游戏的猜测次数。--while15.输出100内所有偶数之和(while)16.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐 while17.输出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取整 => 123123%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
