首页 > 编程语言 >JavaScript中的流程控制(顺序结构、分支结构、循环结构)

JavaScript中的流程控制(顺序结构、分支结构、循环结构)

时间:2024-10-12 22:54:09浏览次数:8  
标签:流程 JavaScript alert 循环 var 100 执行 sum 结构

流程控制

1.概念

在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的,很多时候要通过控制代码的执行顺序来实现我们完成的功能

简单的理解:流程控制就是控制代码,按照一定的结构顺序来执行

流程控制的分类:

  • 顺序结构
    在这里插入图片描述
  • 分支结构
    在这里插入图片描述
  • 循环结构
    在这里插入图片描述

2.顺序流程控制

顺序流程控制是程序中最简单、最基本的流程控制。没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数代码都是这样执行的。

在这里插入图片描述

3.分支流程控制

3.1 分支结构

由上到下执行代码的过程中,根据不同的条件,执行不同路径的代码(执行代码多选一的过程),从而得到不同的结果。

在这里插入图片描述

JS语言中提供了两种分支结构语句:

  • if语句
  • switch语句

3.3 if语句

3.3.1 基本if/简单if结构
语法:
// 条件成立执行代码,否则什么也不做
if(条件表达式) {
    //条件成立执行的代码语句
}

语句可以简单的理解为一个行为,循环语句和分支语句就是典型的语句,一个程序由很多个语句组成,一般情况下,会分隔成一个一个的语句

执行流程

在这里插入图片描述

var age = prompt('请输入年龄:');
if(age == 18){
    alert('可以玩整夜的游戏');
}
3.3.2 双分支if结构
语法:
// 条件成立 执行 if里面的代码,否则执行else里面的代码
if(条件表达式){
   //【如果】条件成立时执行的代码
} else{
    //【否则】执行的代码
}

执行流程

在这里插入图片描述

var age = prompt('请输入年龄:');

if(age >= 18){  //年龄满了18
    alert('你可以通宵打游戏');
} else {
    alert('未成年,进制通宵');
}
3.3.3 多分支if结构

语法:

//适合检查多重条件
if(条件表达式1){
	//语句1;   
} else if(条件表达式2){
    //语句2;    
} else if(条件表达式3){
    //语句3;    
}
...
} else {
    //上面的条件都不成立,执行此处的代码
}

执行流程

在这里插入图片描述

var score = prompt('请输入小明的分数:');

	/* if(score == 100){
            alert('奖励手机一部');
        } else if(score >= 90 && score < 100){
            alert('奖励平板电脑一台');
        } else if(score >= 80 && score < 90){
            alert('奖励鼠标一个');
        } else {
            alert('奖励试卷一吨');
        } */

if(score == 100){
    alert('奖励手机一部');
} else if(score >= 90){
    alert('奖励平板电脑一台');
} else if(score >= 80){
    alert('奖励鼠标一个');
} else {
    alert('奖励试卷一吨');
}
3.3.4 练习
// 需求1:输入年龄(prompt),如果年龄在18岁或以上alert弹出“我爱吃榴莲炒臭豆腐”,否则输出“我爱写作业”
var age = prompt('请输入年龄:');
if(age >= 18){
    alert('我爱吃榴莲炒臭豆腐');
} else {
    alert('我爱写作业');
}
// 需求2:输入年份(如:2024)判断是否是闰年。  
//       闰年能被4整除且不能整除100的为闰年,或者能被400整除的也是闰年   (2024是闰年,1901年不是闰年)

var year = prompt('请输入年份:')
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
    alert(year + '是闰年')
} else {
    alert(year + '不是闰年')
}

4.三元表达式

三目运算

语法:

表达式1 ? 表达式2 : 表达式3;

执行流程:

  • 如果表达式1的结果为true,则返回表达式2的值,如果表达式1的结果为false,则返回表达式3的值
  • 简单理解:就类似于if … else… (双分支)。可以认为就是双分支的简写
//需求:输入年龄,判断是否18或以上,如果是18或以上则允许通宵
var age = prompt('请输入年龄:')

//1.通过 if...else...
/* if(age >= 18){
            alert('允许通宵');
        } else {
            alert('不允许通宵');
        } */

//2.通过三元运算符
var result = age >= 18 ? '允许通宵' : '不允许通宵';
alert(result);
//需求:用户输入0~59之间的一个数字,如果数字小于10,则在这个数字前面补0
var time = prompt('请输入0~59之间的一个数字:');

var result = time < 10 ? '0' + time : time;
alert(result);

5.switch流程控制

  • switch: 开关
  • case:案例/例子
  • break:结束

语法:

switch(表达式){
    case value1:
        //表达式     等于value1时要执行的代码
        break;
    case value2:
        //表达式     等于value2时要执行的代码
        break;
    case value3:
        //表达式     等于value3时要执行的代码
        break;
     ....
    default:
        //表达式     不等于任何一个value时要执行的代码
}
  • 表达式的值会与结构中的case的值进行比较
  • 如果存在匹配全等(===),则该case关联的代码会被执行,并在遇到break就停止,整个switch语句代码执行结束
  • 如果所有的case的值都和表达式的值不匹配 ,则执行default里面的代码
  • **注意:**执行case里面的语句的时候,如果没有break,则继续执行下一个case中的语句
//输入一个数字,如果输入的是1:苹果   输入2:香蕉   输入3:葡萄  输入4:西瓜   输入其它数字提示输入错误
var num = prompt('请输入一个数字:')

switch(num){
    case '1':
        alert('您兑换的奖品是苹果');
        break;
    case '2':
        alert('您兑换的奖品是香蕉');
        break;
    case '3':
        alert('您兑换的奖品是葡萄');
        break;
    case '4':
        alert('您兑换的奖品是西瓜');
        break;
    default:
        alert('您输入的数字有误!')
        break;
}
var num = parseInt(prompt('请输入数字:'));
switch(num){
    default:
        console.log('others');
        break;
    case 2:
        console.log('2222222')
        break;
    case 1:
        console.log('111111')
        break;

    case 3:
        console.log(3333333)
        break;
}

6.switch和if的区别

  • 一般情况下,他们两个语句可以相互替换
  • switch…case 语句通常处理case为比较确定的值得情况,而if…else语句更加灵活,常用于范围判断(大于、小于等于等范围)
  • sitch语句进行判断后直接执行到程序得条件语句效果更高。而if…else语句有几种条件,就得判断多次
  • 当分支比较少得时候,if…else语句执行得效率要比switch语句效率要高
  • 当分支比较多得时候,switch语句执行得效率比较高,而且结构更加清晰。
//需求:100分奖励手机一部,90~100奖励键盘一个  60~90奖励鼠标一个  60分以下奖励一顿试卷
var score = parseInt(prompt('请输入分数:'));
//1.if
	/* if(score == 100){
            alert('奖励手机一部');
        } else if(score >= 90){
            alert('奖励键盘一个');
        } else if(score >= 60){
            alert('奖励鼠标一个');
        } else {
            alert('奖励一吨试卷');
        } */

//2.switch
switch(parseInt(score / 10)){
    case 10:
        alert('奖励手机一部');
        break;
    case 9:
        alert('奖励键盘一个');
        break;
    case 8:
    case 7:
    case 6:
        alert('奖励鼠标一个');
        break;
    default:
        alert('奖励一吨试卷');
}

7.循环流程控制

7.1for循环

语法结构
for(初始化变量;条件表达式;操作表达式){
    
}
  • 初始化变量:通常用于初始化一个计数器,该表示是中可以使用var关键字声明一个新的变量,这个变量用来帮助我们记录循环次数
  • 条件表达式:用于确定每一次循环是否能被执行,如果结果为true就继续循环,否则就退出循环
  • 操作表达式:用于确定每一次循环是否能被执行,如果结果是true就继续执行,否则就退出循环
执行过程

在这里插入图片描述

  • 第一步:变量的初始化时最先开始执行的,而且在整个循环中只执行依次
  • 第二步:判断条件是否成立,如果为true则执行循环中的内容,为false则直接跳出循环
  • 第三步:如果条件表达式为true,则执行循环中的内容,在执行完成循环中的内容后,进入到操作表达式,对计数器进行更新
  • 第四步:计算器更新完成后,重新回到条件表达式,按照上面的第二步和第三步重复执行
断点调试

断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行的时候就会停住,然后你可以一步一步往下调试,调试过程中可以看到各个变量的当前值,出错的话,调试到出错的代码就会显示错误,停下。断点调试可以帮助我们观察程序运行的过程。

在这里插入图片描述

断点调试的流程:

  • 在浏览器中按F12 > source > 找到需要调试的文件 > 在程序的某一行设置断点
  • watch:监视,可以通过watch设置需要查看的变量,监视它的变化(非常的常用)
  • 按下F10程序单步执行,让程序一步一步的执行,这个时候,我们观察watch中的变量值的变化
案例

需求1:输入数字,根据输入的数字输出多少次“我爱中国”

// 需求1:输入数字,根据输入的数字输出多少次“我爱中国”
var num = prompt('请输入次数:');
for(var i = 1; i <= num; i++){
    console.log('第' + i + '次,我爱中国');
}

需求2:计算从1到100的和

var sum = 0; //1到100的和
for(var i = 1; i <= 100; i++){
    sum = sum + i;  //1.sum = 0 + 1;  2.sum = 1 + 2   3.sum =  1 + 2  + 3,....
}
console.log(sum)

需求3:求1到100中所有偶数的和

//需求3:求1到100中所有偶数的和

var sum = 0; //和
for(var i = 1; i <= 100; i++){
    if(i % 2 == 0){
        sum += i;
    }
}
console.log('1到100的偶数和为:' + sum);

需求4:打印输出所有的三位数中的水仙花数(水仙花数:各个位上的数的三次方之和等于它本身)

var a = 123;

​ console.log(‘个位数:’,a % 10)

​ console.log(‘十位数:’,parseInt(a / 10) % 10)

​ console.log(‘百位数’,parseInt(a / 100))

​ if(a % 10 * a%10 * a %10 + parseInt(a / 10) % 10 * parseInt(a / 10) % 10 * parseInt(a / 10) % 10 +

​ parseInt(a / 100) * parseInt(a / 100) * parseInt(a / 100) === a){

​ console.log(a)

​ }

//需求4:打印输出所有的三位数中的水仙花数(水仙花数:各个位上的数的三次方之和等于它本身)

for(var i = 100; i<= 999; i++){
    //获取到个位、百位和十位数字
    var gewei = i % 10;
    var baiwei = parseInt(i / 100);
    var shiwei = parseInt(i / 10) % 10;
    //判断是否为水仙花数
    if(gewei * gewei * gewei + shiwei * shiwei * shiwei + baiwei * baiwei * baiwei == i){
        console.log(i);
    }
}

需求:求1~100之间所有能被3整除的数字之和

需求:弹出输入框输入总的班级人数,依次输入学生的成绩,并计算学生的总成绩、平均成绩。(最高分和最低分)

// 需求:弹出输入框输入总的班级人数,依次输入学生的成绩,并计算学生的总成绩、平均成绩。(最高分和最低分
var num  = parseInt(prompt('请输入班级人数:'));
var sum = 0; //总分
var avg = 0;//平均分
//有多少人,就循环录入多少次分数
for(var i = 1; i <= num; i++){
    var score = parseInt(prompt('请输入第' + i + '位学生的分数:'))
    sum += score;//计算总分
}
//等录入完成,总分算出来后,计算平均分
avg = sum / num;

console.log('总分是:' + sum + '平均分是:' + avg)

7.2 双重for循环

概述

循环嵌套。是指在一个循环语句中再定义一个循环语句的语法结构。例如for循环语句中,可以再嵌套另一个for循环,这样的for循环就是我们所说的双重for循环

语法
for(外循环的初始化;外循环的条件;外循环的操作表达式){
    for(内循环的初始化;内循环条件;内循环操作表达式){
        //需要执行的代码
    }
}
  • 内层循环可以看作是外城循环的循环体语句。(外层循环执行一次,内层循环执行一整轮)
  • 内层循环执行的顺序也要遵循for循环的执行顺序
打印三角形
☆
☆☆
☆☆☆
☆☆☆☆
☆☆☆☆☆
var str = '';
//外层循环:负责行
for(var i = 1; i <= 5; i++){
    //内层循环:负责打印五角星
    for(var j = 1; j <= i; j++){
        str += "☆";
    }
    str += '\n'; //换行
}

console.log(str)
打印九九乘法表
var str = '';
//外层循环:负责行
for(var i = 1; i <= 9; i++){
    //内层循环:负责打印五角星
    for(var j = 1; j <= i; j++){
        str += j + "✖" + i + '=' +  i*j + "\t";
    }
    str += '\n'; //换行
}

console.log(str)

在这里插入图片描述

for循环小结
  • for循环可以重复执行某些相同的代码
  • for循环可以重复执行某些不同的代码,因为我们有计数器
  • 随着需求的增加,双重for循环可以做更多,更好看的效果,外城循环一次,内层for循环全部执行
  • for循环时循环条件和数字相关的循环

7.3while循环

语法结构
while(循环条件){
      //循环代码
}
执行过程

在这里插入图片描述

  • 先执行初始化条件,第一步:执行条件表达式,如果结果为true,则执行循环体中的代码,如果为false则直接退出循环,执行循环后面的代码
  • 第二步:执行更新循环变量,再次回到循环条件判断,再按照第一步中的执行
//打印1到10
var i = 1; 
while(i <= 10){
    console.log(i);
    i++;
}

**注意:**使用while循环的时候一定要注意它必须要有退出条件,否则会成为死循环。

while循环案例

需求2:计算从1到100的和

//需求2:计算从1到100的和
var sum = 0; //和
var i = 1;  //初始化循环变量
while(i <= 100){    //循环条件
    sum += i;

    i++;//更新循环变量
}
console.log('一到100的和为:' + sum)

需求3:求1到100中所有偶数的和

//需求3:求1到100中所有偶数的和
var sum = 0; //1到100的偶数和
var i = 1;
while(i <= 100){

    if(i % 2 == 0){
        sum += i;
    }

    i++;
}
console.log('偶数和为:' + sum)

7.4do…while循环

语法结构
do {
    //循环体代码
} while(条件表达式);
执行流程

在这里插入图片描述

  • 先执行一次循环体中的代码
  • 再执行条件表达式,如果为true,则继续执行循环体中的代码,如果为false,则退出循环执行循环后的代码

**注意:**先执行,后判断。do…while循环至少会执行一次

do…while循环案例

需求2:计算从1到100的和

//需求2:计算从1到100的和
var sum = 0; //1到100的和
var i = 1;
do{
    sum += i;//求和
    i++;
}while(i <= 100);
console.log('1到100的和为:' + sum)

需求3:求1到100中所有偶数的和

//需求3:求1到100中所有偶数的和
var sum = 0; //1到100所有偶数的和
var i = 1;
do{
    if(i % 2 == 0){
        sum += i;
    }
    i++;
}while(i <= 100);
console.log(sum)

8.三种循环的区别

  • 对于循环次数确定的循环,推荐使用for循环
  • 对于循环次数不确定的循环,推荐使用while循环
  • 对于必须要执行一次的代码,我们推荐使用do…while循环
  • 实际开发中90%以上用到的时for循环

9.break和continue

9.1 continue

continue关键字用于立即跳出本次循环,继续进入下一次循环(本次循环中continue之后的代码不会被执行)

如:吃5个包子,第三个包子有问题扔掉,继续吃第四个和第五个包子。

在这里插入图片描述

9.2 break

break关键字用于立即结束循环

在这里插入图片描述

9.3 练习

需求1:求1~100之间,除了能被7整除之外的数的和

//需求1:求1~100之间,除了能被7整除之外的数的和
	/*
        var sum = 0;
        for(var i = 1; i <= 100; i++){
            if(i % 7 != 0){
                sum += i;
            }
        }
        console.log(sum); //4315
        */
//要求用continue
var sum = 0;
for(var i = 1; i <= 100; i++){
    if(i % 7 == 0){ //如果能被7整除,则不加
        continue;
    }
    sum += i;
}
console.log(sum); //4315

需求2:输入用户名和密码,如果用户名和密码分别为(admin,123)则提示登录成功,否则提示还剩余几次输入机会,如果3次都输入错误,则提示你没有机会了

for(var i = 1; i <= 3; i++){
    var name = prompt('请输入用户名:');
    var pwd = prompt('请输入密码:');
    if(name == 'admin' && pwd == '123'){
        console.log('登录成功');
        break;//结束整个循环
    } else {
        console.log('登录失败,还剩下' + (3 - i) + '次机会');
    }
}

标签:流程,JavaScript,alert,循环,var,100,执行,sum,结构
From: https://blog.csdn.net/qq_63946637/article/details/142832204

相关文章

  • 机器学习中的模型设计与训练流程详解
    目录前言1.模型设计1.1数据特性分析1.2计算资源限制1.3应用场景需求2.模型训练2.1训练集与验证集的划分2.2损失函数的选择2.3模型参数更新3.优化方法3.1梯度下降法3.2正则化方法4.模型测试4.1性能评估指标4.2模型的泛化能力5.模型选择5.1数据规模与......
  • python数据结构学习第一章——栈
    在这片文章中,我们使用python3.8自制一个具有基本功能的栈结构,它的功能只有push,pop,peek这三个功能`#!/usr/bin/envpython#*coding:utf-8*#@Time:2024/9/1519:26#@Author:Huzhaojun#@Version:V1.0#@File:test.py#@desc:#数据结构复习第一章,栈结构的......
  • 数据结构与算法Python版p26-p28 无序表链表实现、有序表
    B站视频-数据结构与算法Python版无序表链表实现、有序表一、节点二、无序表三、有序表一、节点#节点classNode:def__init__(self,initdata):self.data=initdataself.next=NonedefgetData(self):returnself.data......
  • JavaScript原型链污染探讨
    如果你想弄明白什么怎样才可以实现JavaScript的原型链污染,那么你首先需要弄清楚两个东西,那就是__proto__和prototype。到底什么才是__proto__和prototype?那我们先来看看比较官方的说法吧:__proto__:是每个对象的隐藏属性,指向创建该对象的构造函数的原型对象(prototype)。它是对象......
  • JavaScript进阶笔记--深入对象-内置构造函数及案例
    深入对象创建对象三种方式利用对象字面量newObject({…})利用构造函数//1.字面量创建对象constobj1={name:'pig',age:18};console.log(obj1);//{name:"pig",age:18}//2.构造函数创建对象functionPig(name,age){......
  • JavaScript 异步编程入门
    最近开始不断学习实践JavaScript,出于性能测试的敏感,首先研究了JavaScript的异步编程实践,目前看跟之前学过的Java和Go都不太一样。使用的语法上相对更加复杂,也可能因为我实践得还太少。异步编程异步编程是一种在程序执行过程中,不阻塞主线程的任务处理方式。相较于同步编程......
  • draw 使用 基本流程图介绍
      https://www.cnblogs.com/youjianschool/p/14113383.html基本流程图介绍 一、什么是流程图流程图概念:流程图是一种用规定的图形、指向线及文字说明来准确、直观地表示算法的图形。二、为什么要画流程图那么,流程有哪些作用呢?我们为什么要画流程图呢?首先,流程图作为......
  • 使用阿里云物联网平台流程
    ​  模拟设备连接阿里云物联网平台​编辑​编辑1.找到物联网平台 阿里云物联网平台是一个集成了设备接入、设备管理、数据安全通信、消息订阅、消息转发和数据服务(存储、分析、过滤、解析、集成等)等能力的一体化平台。向下支持连接海量设备,采集设备数据上云;向上提供云端A......
  • 【JavaScript】LeetCode:61-65
    文章目录61课程表62实现Trie(前缀树)63全排列64子集65电话号码的字母组合61课程表Map+BFS拓扑排序:将有向无环图转为线性顺序。遍历prerequisites:1.数组记录每个节点的入度,2.哈希表记录依赖关系。n=6,prerequisites=[[3,0],[3,1],[4,1],[4,2],[5,3],[5,4]]。0、1......
  • 面试官:说下你的vue项目的目录结构,如果是大型项目你该怎么划分结构和划分组件呢?
    一、为什么要划分使用vue构建项目,项目结构清晰会提高开发效率,熟悉项目的各种配置同样会让开发效率更高在划分项目结构的时候,需要遵循一些基本的原则:文件夹和文件夹内部文件的语义一致性单一入口/出口就近原则,紧耦合的文件应该放到一起,且应以相对路径引用公共的文件应该......