循环控制语句

程序控制语句

  • 条件控制语句 (根据对应的条件执行对应的代码片段)

  • 循环控制语句 (根据循环条件循环执行多次对应的代码)

循环控制语句的流程

  • 定义初始值

  • 设置迭代条件(初始值的基础上迭代)

  • 执行的代码 循环体

  • 设置终止条件 (布尔类型表达式 返回的是boolean的值(强制转换为boolean类型))

常用的循环控制语句

  • while

  • do while

  • for

  • ...

while循环

//外部定义初始值
var 初始值变量 = 值
while(终止条件(当他为false的时候就会结束对应的循环)){
	//执行的代码 循环体
	//迭代条件
}
示例

打印1-100的值

var i = 1
while(i<=100){
	console.log(i)
	i++
}

求和 1-100的求和

var i = 1
var sum = 0
while(i<=100){
	console.log(i)
	sum += i
	i++
}
console.log(sum)
  • var关键词修饰的变量进行变量提升 伪全局变量

  • var关键词修饰的变量会被预编译 但是不会读取赋值操作 而是强制赋值undefined

  • 在循环中不建议声明变量 会覆盖之前的值 会加大空间复杂度

练习

求1-100的阶乘

求1-100之间5的倍数的阶乘

打印100-999之间的水仙花数

while循环嵌套
while(条件){
 while(条件){
 	循环体
 }
}
  • 循环嵌套时间复杂度会增加(不建议嵌套超过俩层)

  • 循环嵌套执行的次数为外层循环次数*内层循环次数

示例

打印乘法口诀表 (外层控制行 内层控制列)

/*
乘法口诀表为9行9列 1行为1列 2行为2列 .... 9行为9列
*/
var row = 1,col //声明行和列
while (row <= 9) { //打印行
    col = 1 //列值返回初始值 为了下一行
    while (col <= row) { //列最大为行数
        document.write(row+'*'+col+'='+row*col+' ')//在文档上书写内容
        col++
    }
    document.write('<br/>') //换行
    row++
}

打印直角三角型

/*
*
***
*****
*******
*********
*/
var row = 0,col
while(row<5){
	col = 0
	//处理列 列和行的关系 行数*2+1
	while(col < row*2+1){
		document.write('*')
		col++
	}
	document.write('<br/>') //换行
	row++
}

do while循环

var 初始值变量 = 初始值
do{
	循环体
}while(条件)
do while和while的区别
  • while 最少执行0次 do while 最少执行一次

  • do while常用于 先执行对应的内容再判断是否循环(人机交互)

示例

打印1-100

var i = 1
do{
	console.log(i)
	i++
}while(i<=100)
练习

do while 打印1-100的3的倍数

计算1-100内容 3的倍数及7的倍数的和

叫号系统
/*
输入的编号来进行叫号
输入1 输出一号技师
输入2 输出金牌技师
输入3 输出88号技师
输入其他重新输入
*/
var code
do {
    code = prompt('请输入你需要叫的编号')
    switch (code * 1) {
        case 1:
            console.log('一号技师为您服务')
            break
        case 2:
            console.log('金牌技师为您服务')
            break
        case 3:
            console.log('88技师为您服务')
            break
    }
} while (code != 1  &&  code != 2 && code != 3)
do while也可以嵌套
/*
打印四行五列的矩形
*/
var row = 0,
    col, str = ''
do {
    col = 0
    do {
        str += '*'
        col++
    } while (col < 5)
        str += '\n'//换行
    row++
} while (row < 4)
    console.log(str)

for循环

任何循环之间可以互相转换 while循环适用于你不知道执行次数的时候 for循环适用于知道执行次数

for(初始值;迭代条件;迭代量){
	执行的代码 循环体
}
示例

打印1-100之间的数

for(var i=0;i<100;i++){
	console.log(i+1)
}

打印1-100之间能整除2和3的数

for(var i=1;i<=100;i++){
	if(i%2==0 && i%3==0){
		console.log(i)
	}
}

打印1-100之间的偶数和

var sum = 0
for(var i=1;i<=100;i++){
	if(i%2==0){
		sum+=i
	}
}
console.log(sum)
for循环嵌套

任意循环可以互相嵌套

for(初始值;迭代条件;迭代量){
	for(初始值;迭代条件;迭代量){
		//循环体
	}
}
示例

打印直角三角型

/*
*
***
*****
*******
*********
*/
for(var i=0;i<5;i++){
	for(var j=0;j<2*i+1;j++){
		document.write('*')
	}
	document.write('<br/>')
}
练习

打印等腰三角形

/*
    *    
   ***
  *****
 *******
*********
*/
for(var i=0;i<5;i++){
	var line = ''
	//打印空格
	for(var j=0;j<4-i;j++){
		line += ' '
	}
	//打印*
	for(var j=0;j<2*i+1;j++){
		line += '*'
	}
	console.log(line)
}

找到1-100之间所有的素数 (只能被自身和1整除)

for(var i=1;i<=100;i++){
	//从2数到自身-1
	var count = 0 //计算因数的个数
	for(var j=2;j<i;j++){
		//用i除以j
		if(i%j==0){ //是有因数
			count++
		}
	}
	if(!count){ //判断因数是否还是0个 如果是0表示当前为素数
		console.log(i)
	}
}

打印乘法口诀表

for(var i=1;i<=9;i++){
	var line = ''
	for(var j=1;j<=i;j++){
		line+=i+'*'+j+'='+i*j+'\t'
	}
	console.log(line)
}

打印 1-100所有的偶数每行三个

var line = ''
var count = 0
for (var i = 1; i <= 100; i++) {
    if (i % 2 == 0) {
        count++
        line += (i+'\t')
        //满足了3个条件
        if (count==3) {
            //到达三个加上换行符
            line+='\n'
            //重新计数
            count = 0
        }
    }
}
console.log(line)

循环总结

  • 循环是用于反复多次执行一段代码

  • 循环的三种方案可以互相嵌套 以及三种方法可以随意转换 常用的为for和while

  • while循环用于处理不知道对应的执行次数 for循环常用于知道对应的执行次数

  • 循环要避免对应的死循环(死循环就是循环的迭代条件一直为true 没有办法停止)

  • while死循环写法 for死循环写法

while(true){ //死循环
	
}
for(;;){ //死循环
	
}
  • while循环的时间复杂度低于for循环 for循环的执行效率要低于while循环

  • do while循环先做后判断 最少执行一次 while及for最少执行0次

用于循环中的关键词

break 跳出当前循环(跳出switch块)
示例

查找1-100内的素数

for(var i=1;i<=100;i++){
    var count = 0
    //再进行对应的整除 用i整除 2-i-1的值 只要有能整除的那么这个数就是不是素数 没有就是素数
    for(var j=2;j<i;j++){
        if(i%j==0){
            count++
            break
        }
    }
    if(count!=1){
        console.log(i)
    }
}
continue 跳过本次循环 进入下一次
示例

1-100 逢7过 里面带7和7的倍数跳过

for(var i=1;i<100;i++){
	if(i%7==0 || parseInt(i/10)==7 ||parseInt(i%10)==7){
		continue
	}
	console.log(i)
}

扩展内容

时间复杂度

时间复杂度讲的是恒定机器中的执行次数和对应的变量的比例 也就是说在恒定机器内执行次数越多 那么时间复杂度越高,那么对应的时间复杂度越高 他的执行效率就越低。将时间复杂度降低那么就可以提高对应的效率。

时间复杂度(用O来表示)跟对应的执行次数成正比

O1 常数阶 每行代码执行一次

console.log('123')//1次
console.log('123')//1次
console.log('123')//1次
console.log('123')//1次

On 线性阶 循环执行多次由一个n变量来控制

for(var i=0;i<n;i++){
	console.log('123')
}

Ologn 对数阶 由俩个变量来控制的 (递归)

var i = 2
while(i<n){
	i*=k
}

Onlogn 线性对数阶 线性阶包含对数阶

for(var i=0;i<n;i++){
    var j = 2
    while(j<n){
        j*=k
    }
}

On2 平方阶 俩个线性阶包含

for(var i=0;i<n;i++){
    for(var j=0;j<n;j++){
        console.log('123')
    }
}

On3立方阶 3个线性阶

Onk次方 k个线性阶

...

时间复杂度排序

O1<Ologn<On<Onlogn<On^2<On^3<On^k....

空间复杂度

空间复杂度讲的是在内存开辟上 有多个变量内存被同时开辟,开辟的内存越多对应的空间复杂度越高,占用的内存大小就越大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值