1.什么是流程控制?
- 流程控制就是来控制代码按照怎样的顺序来执行
- 流程控制主要有有三种结构:
顺序结构、分支结构、循环结构
2. 分支结构
1.if分支
- 单分支
if和if...else
- 多分支
if...else...if
// 判断是否为闰年(能够被4整除,并且不能被100整除或者能够被400整除的是闰年)
var year = prompt('请输入年份');
if (year % 100 != 0 && year % 4 == 0 || year % 400 == 0) {
alert(year + '是闰年!');
} else {
alert(year + '不是闰年!')
}
// 接收用户的体重和身高,并测量出用户的BMI指数
// BMI的计算公式:体质指数(BMI)=体重(kg)÷身高^2(m)
// 过轻:低于18.5
// 正常:18.5-23.9
// 过重:24-27
// 肥胖:28-32
// 非常肥胖, 高于32
var height = prompt('请输入您的身高(cm):');
var weight = prompt('请输入您的体重(斤):');
height /= 100;
var BMI = (weight / 2) / (height * height);
alert('您的BMI指数为' + BMI);
if (BMI < 18.5 && BMI > 0) {
alert('您过于轻了,请您及时补充营养!');
} else if (BMI >= 18.5 && BMI < 24) {
alert('您的体重正常,请您继续保持!');
} else if (BMI >= 24 && BMI < 28) {
alert('您的体重有些过重了,请您适当运动!');
} else if (BMI >= 28 && BMI < 32) {
alert('您的体重有些肥胖了,请您合理饮食!');
} else if (BMI >= 32 && BMI < 40) {
alert('您已经非常肥胖率,必须马上减肥!')
} else {
alert('您输入有误!');
}
2.三元表达式
- 语法:
条件表达式?表达式1:表达式2
- 解释:如果条件表达式的值为true,返回表达式1的值;
如果条件表达式的值为false,则返回表达式2的值。
// 三元表达式
var num = 10;
var result = num > 5 ? '没错' : '有问题';
console.log(result); // 没错
// 数字补0,如果小于9就在前面补个0,如果大于则不补
var num = prompt('请输入一个数字:');
var result = num < 9 ? '0' + num : num;
alert(result);
3.switch分支
- 当针对变量设置一系列特定值的选项时,就可以使用switch
- 在switch中变量的值和case中的值必须全等
- 如果当前的case中没有break则不会退出会继续执行下一个case
// 查水果价格案例
var fruit = prompt('请输入水果名');
switch (fruit) {
case '苹果':
alert('苹果(每斤/25元)');
break;
case '香蕉':
alert('香蕉(每斤/45元)');
break;
case '菠萝':
alert('菠萝(每斤/60元)');
break;
default:
alert('没有此水果!')
break;
}
4.if else if和switch的区别?
- switch…case用于case比较确定值的情况下,而if else更加灵活,常用于判断某个范围
- switch条件判断后直接执行到程序的条件语句,效率跟高。而if else有几种条件就得判断多少次
- 当分支比较少时,if else 执行效率比switch高
- 当分支比较多时,switch执行效率比较高,而且结构更清晰
- 一般情况下,它们两个可以互换
3. 循环结构
1. 什么是循环?
- 在程序中,一组被重复执行的语句被称为循环体,能否继续执行,取决于循环的终止条件。
- 由循环体和循环的终止条件组成的语句,被称为循环语句
2. for循环
for (初始化变量; 条件表达式; 操作表达式) {
// 循环体
}
初始化变量
:就是声明的一个普通变量,通常用作计数器;条件表达式
:终止条件(决定每一次循环是否继续执行);操作表达式
:用于计数器变量的更新(递增或递减),是循环最后执行的代码
for (var i = 1; i <= 100; i++) {
alert('你好');
}
- 首先执行var i = 1(初始化变量);这句话只会执行一次。(i就是index的意思)
- 其次执行i <= 100(条件表达式);如果满足此条件就执行循环体中的内容,若不满足条件,就退出循环
- 最后执行i++(操作表达式),i++是单独写的代码,表示递增
- 第一轮循环结束后,第二轮循环从条件表达式开始执行,以此类推。
双重for循环
// 双重for循环
for (外层初始化变量; 外层条件表达式; 外层操作表达式) {
for (里层初始化变量; 里层条件表达式; 里层操作表达式) {
// 执行语句
}
}
- 我们可以把里面的循环看做外层循环的循环语句
- 外层循环每循环一次,里层循环循环全部
for循环的特点
- for循环可以重复执行某些相同的代码
// 1.for循环执行相同的代码
var str = prompt('请输入内容');
for (var i = 1; i <= str; i++) {
console.log('我爱你!');
}
- for循环可以执行不同的代码,因为有计数器
// 2.for循环执行不同的代码
for (var i = 1; i <= 100; i++) {
console.log('你' + i + '岁了');
if (i == 1) {
console.log('你出生了');
} else if (i == 50) {
console.log('你到中年了!');
} else if (i == 100) {
console.log('你死了');
}
}
- for循环可以重复某些操作,比如:算出运算加法操作
// 3.求1~100之间的累加和
// var result = 0; // 累加的结果,初始化为数字类型
// for (var i = 1; i <= 100; i++) {
// result += i; // 把每次循环的i都累加起来
// }
// console.log(result); // 5050
// 4.求1~100之间所有数的平均值
// var result = 0; // 累加的结果,初始化为数字类型
// var avg = 0; //用来保存平均值
// for (var i = 1; i <= 100; i++) {
// result += i; // 把每次循环的i都累加起来
// }
// avg = result / (i - 1);
// console.log(avg); // 50.5
// 5.求1~100之间所有偶数和奇数的和
// var even = 0; // 定义偶数
// var odd = 0; // 定义奇数
// for (var i = 1; i <= 100; i++) {
// if (i % 2 == 0) { // 能被2整除就是取模2等于0
// even += i;
// } else {
// odd += i;
// }
// }
// console.log('偶数的和为' + even);
// console.log('奇数的和为' + odd);
// 6.求1~100之间能够被三整除的数的累加和
// var num = 0;
// for (var i = 1; i <= 100; i++) {
// if (i % 3 == 0) { // 能被2整除就是取模2等于0
// num += i;
// }
// }
// console.log(num); // 1683
- 在确定循环数量的情况下更适合用for循环
// 7.求班级学生的成绩总分和平均分,(学生数量需要用户确定)
var num = prompt('请输入学生的数量');
var result = 0; // 总成绩
var avg = 0; // 平均成绩
for (var i = 1; i <= num; i++) {
var score = prompt('请输入学生' + i + '的成绩:');
result += parseFloat(score);
}
avg = result / num;
alert('学生的总成绩为:' + result);
alert('学生的平均成绩为:' + avg);
// 8.打印一行五个*
// 技术点:使用追加字符串的方式来打印
// var str = ''; //先定义一个空字符串
// for (var i = 1; i <= 5; i++) {
// str += '*'; // 把每次需要打印的图案追加在次字符串中
// }
// console.log(str);
// 9.用户自定义打印图案的个数
// var str = '';
// var num = prompt('请输入数量');
// for (var i = 1; i <= num; i++) {
// str += '*';
// }
// console.log(str);
- 随着求增加,双重for循环可以做更多、更好看的效果
// 打印五行五列的*
// 技术点:
// 1.外层循环负责打印五行
// 2.内层循环负责每行打印五个*
// 3.在内层每打印一行*后,在原有的字符串后面追加一个换行符\n
// var str = ''
// for (var i = 1; i <= 5; i++) {
// for (var j = 1; j <= 5; j++) {
// str += '*';
// }
// str += '\n';
// }
// console.log(str);
// 打印n行n列的*
// var rows = prompt('请输入行数:');
// var cols = prompt('请输入列数:');
// var str = ''
// for (var i = 1; i <= rows; i++) {
// for (var j = 1; j <= cols; j++) {
// str += '*';
// }
// str += '\n';
// }
// console.log(str);
// 打印一个倒三角
// 核心算法:第二个循环的j等于第一个循环的i,(var j = i; j <= 10; j++)
// var str = ''
// for (var i = 1; i <= 10; i++) {
// for (var j = i; j <= 10; j++) {
// str += '*';
// }
// str += '\n';
// }
// console.log(str);
// 打印一个正三角形
// 核心算法:(var j = i; j >= 1; j--)
// var str = ''
// for (var i = 1; i <= 10; i++) {
// for (var j = i; j >= 1; j--) {
// str += '*';
// }
// str += '\n';
// }
// console.log(str);
// 打印99乘法表
// 核心算法:每一行公式的个数正好和行数一致 j<=i
var str = ''
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= i; j++) {
str += j + '*' + i + '=' + j * i + '\t';
}
str += '\n';
}
console.log(str);
- for循环是循环条件和数字直接相关的循环
分析比写代码重要
3.while循环
while (条件表达式) {
// 循环体
}
- 语法结构:当…的时候
- 执行思路:当条件表达式为true的时候,就执行循环体,否则退出循环
// 打印100次你好
var num = 1; // 计数器
while (num <= 100) {
console.log('你好!');
num++; // 操作表达式
}
- while循环里面也应该有计数器来初始化变量
- while循环里面也应该有操作表达式来完成计数器的更新,防止死循环
// while循环案例
// 1.打印一个人从1岁到100岁
// var num = 1;
// while (num <= 100) {
// console.log('我' + num + '岁了');
// num++;
// }
// 2.求出1~100累加和
// var i = 1;
// var result = 0;
// while (i <= 100) {
// result += i;
// i++;
// }
// console.log(result);
// 3.弹出一个提示框,并提示“你爱我吗?”,如果用户输入我爱你,程序结束,反之一直询问。
var str1 = '我爱你';
var str = prompt('你爱我吗?');
while (str !== str1) {
str = prompt('你爱我吗?');
}
alert('我也爱你啊')
4.do-while循环
do {
// 循环体
} while (条件表达式)
- 执行思路:与while循环不同的地方在于,do while先执行一下循环体之后在判断条件,如果条件表达式结果为真,则继续执行循环体,反之退出循环
var i = 1;
do {
console.log('你好吗!');
i++;
} while (i <= 100)
- do while中循环体至少执行一次
// do while 案例
// 1.打印1~100岁
// var i = 1;
// do {
// console.log('我' + i + '岁了');
// i++;
// } while (i <= 100)
// 2.求1~100累加和
// var i = 1;
// var result = 0;
// do {
// result += i;
// i++;
// } while (i <= 100)
// console.log(result);
// 3.弹出一个提示框,并提示“你爱我吗?”,如果用户输入我爱你,程序结束,反之一直询问
var i = 1;
do {
var message = prompt('你爱我吗?');
i++;
} while (message !== '我爱你')
alert('我也爱你');
5.for-in循环
6.for-of循环
7.continue和break的区别和联系?
- continue:跳出本次循环 ,直接跳到i++
- break:用于跳出整个循环(循环结束)
// 吃包子案例,有五个包子,我吃到第三个包子的时候发现第三个包子有虫,我就跳过第三个包子,吃其他包子
// for (var i = 1; i <= 5; i++) {
// if (i == 3) {
// console.log('这个包子有虫,还是吃后面的包子吧');
// continue;
// }
// console.log('我在吃第' + i + '个包子');
// }
// 求1~100之间如果不能被7整除的累加和
var result = 0;
for (var i = 1; i <= 100; i++) {
if (i % 7 == 0) {
continue;
}
result += i;
}
console.log(result); // 4315
// 求出1~100之间所有数的累加和(个位是3的除外)
// var num = 0//
// var result = 0; //累加值
// for (var i = 1; i <= 10; i++) {
// num = i;
// if (i % 10 == 0) {
// num = num - 10;
// }
// if (num == 3) {
// continue;
// }
// result += i;
// }
// console.log(result);
// 吃包子案例,有五个包子,我吃到第三个包子的时候发现第三个包子有虫,我就不吃第三个包子,后面的包子我也不吃了
// for (var i = 1; i <= 5; i++) {
// if (i == 3) {
// console.log('这个包子有虫,后面的包子也不吃了');
// break;
// }
// console.log('我在吃第' + i + '个包子');
// }