控制结构
目录
分支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) {
条件1为true时执行这{}的所有的代码
}else if(条件2){
条件1为false同时条件2为true时执行这{}的所有的代码
}else {
条件1和2都为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> </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> </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);