第三天笔记
程序控制语句
-
条件控制语句(根据不同的条件进入不同的代码块)
-
循环控制语句(根据循环条件进行多次循环)
循环控制语句流程
-
定义初始值
-
设置迭代条件
-
执行的代码 循环体
-
设置终止条件(Boolean类型表达式,返回的是Boolean的值(强制转换为Boolean))
常用的循环控制语句
-
while
-
do while
-
for
-
···
while循环
var i=0; // 外部定义初始值
while(终止条件){
循环体 // 执行的代码
i++ // 迭代条件
}
示例:
1-100的和
var i=0
var sum=0
while(i<100){
i++
sum+=i
}
console.log(sum)// 5050
拓展:
var的变量提升 是伪全局变量 会被预编译(开辟空间且赋值为undefined)预编译过程不会读取赋值操作
在循环中不建议声明变量 会覆盖之前的值 会加大空间复杂度
练习
求1-100的阶乘
var i=2
var sum=1
while(100>=i){
sum*=i
i++
}
console.log(sum)
求1-100之间5的倍数的阶乘
/*var i=0
var sum=1
while(i<100){
i++
if(i%5==0){
sum*=i
}
}
console.log(sum)
*/
// 运行次数减少 时间复杂度减小
var i=0
var sum=1
while(i<100){
i+=5
sum*=i
}
console.log(sum)
求100-999之间的水仙花数
var i = 100
var b,c,d
while (i < 1000) {
b = parseInt(i / 100);
c = parseInt(i % 100 / 10);
d = parseInt(i % 10);
if (b ** 3 + c ** 3 + d ** 3 == i) {
console.log(i+"是水仙花数");
}
i++
}
循环的嵌套
-
循环嵌套时间复杂度会增加(不建议嵌套超过两层)
-
循环嵌套执行次数为循环次数*内层循环次数
示例:
打印乘法口诀
var row=1
var col
while(row<=9){
col=1
while(col<=row){
document.write(col+'*'+row+'='+col*row + ' ')
col++
}
document.write('<br>')
row++
}
打印直角三角形
var row = 1
var col
while (row <= 5) {
col = 1
while (col <= row) {
document.write("* ")
col++
}
document.write('<br>')
row++
}
do while循环
var i=0;
do{
循环体
i++
}while()
do while 和 while 的区别
while 最少执行0此次 do while 最少执行 1 次
do while 常用于 先执行对应的内容再判断是否循环(人机交互)
示例:
var i=1
do{
console.log(i)
i++
}while(i<=100) //条件不成立 也会执行一次循环体
练习
do while 打印1-100的3的倍数
var i=1;
do{
if(i%3==0){
console.log(i+'是3的倍数');
}
i++
}while(i<=100)
计算1-100内容 3的倍数及7的倍数的和
var i=1
var sum=0
do{
if(i%3==0 || i%7==0){
sum+=i;
}
i++
}while(i<=100)
console.log(sum);
叫号系统
var code
do {
code = prompt('请输入你需要叫的技师') * 1
switch (code) {
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 也可以嵌套(了解)
//打印4行5列
var row=0,col,str
do{
str=''
col=0
do{
str+='*'
col++
}while(col<5)
console.log(str)
row++
}while(row<4)
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)// 2550
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++){
for(var j=0;j<4-i;j++){
document.write(' ')
}
for(var k=0;k<=2*i;k++){
document.write('*')
}
document.write('<br>')
}
求1-100的质数
for(var i=1;i<=100;i++){
var count=0;
for(var j=2;j<i;j++){
if(i%j==0){
count++
}
}
if(!count){
console.log(i);
}
}
打印所有的偶数每行3个
var count = 0;
for (var i = 1; i <= 100; i++) {
if (i % 2 == 0) {
if (count == 3) {
document.write('<br>')
document.write(i + ' ')
count = 1
} else {
count++
document.write(i + ' ')
}
}
}
循环总结
-
循环用于反复多次执行一段代码
-
循环的三种方案可以互相嵌套 以及三种方法可以随意转换 常用为for while
-
while 循环用于处理不知道对应的执行次数 for 循环常用于知道对应执行次数
-
循环要避免对应的死循环 (死循环就是循环的迭代条件一直为true 没有办法停止)
-
while 和 for 的死循环写法
while(true){
}
for(;;){
}
-
while循环的时间复杂度低于for循环 for循环的执行效率要低于while循环
-
do while 循环先做后判断 最少执行一次
循环中的关键字
break 跳出循环(跳出switch块)
continue 跳出本次循环
示例
A:for(var i=1;i<=100;i++){// 这里表示给这个循环取名 A
for(var j=2;j<i;j++){
if(i%j == 0){
continue A; // 跳过 A 的本次循环
}
}
console.log(i);
}
扩展内容
时间复杂度(用O表示)
时间复杂度讲的是恒定机器内的执行次数和对应的变量的比例 也就是说执行次数越多 那么时间复杂度越高 那么对应的时间复杂度越高 执行效率越低 将时间复杂度降低就可以提高对应的效率
时间复杂度跟对应的执行次数成正比
O1 (常数阶)
每行代码只执行一次
On (线性阶)
执行n次
Ologn (对数阶)
由两个变量来控制的
var i=2
while(i<n){
i*=k// k的大小也影响时间复杂度
}
On logn 线性对数阶 线性阶包含对数阶 for(){while(){}} 递归的时间复杂度也是On logn
On2 平方阶 两个线性阶包含
Onk 次方阶 k个线性阶
······
时间复杂度排序
O1<Ologn<On<On logn<On2<Ok
空间复杂度
空间复杂度讲的是在内存开辟上 有多个变量内存被同时开辟,开辟的内存越多对应的空间复杂度越高 占用的内存大小就越大
标签:log,++,sum,第三天,笔记,while,循环,var From: https://www.cnblogs.com/balloontrue/p/17103209.html