程序控制语句
条件控制语句 (根据对应的条件执行对应的代码片段)
循环控制语句 (根据循环条件循环执行多次对应的代码)
循环控制语句的流程
定义初始值
设置迭代条件(初始值的基础上迭代)
执行的代码 循环体
设置终止条件 (布尔类型表达式 返回的是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....
空间复杂度
空间复杂度讲的是在内存开辟上 有多个变量内存被同时开辟,开辟的内存越多对应的空间复杂度越高,占用的内存大小就越大。