条件语句

1)if语句的基本使用

image.png

image.png

if语句举例1

image.png

if语句执行流程图

image.png

if语句举例2

image.png

else可以省略

image.png

看清楚哪些语句是if语句体中的语句

image.png

单行if语句

image.png

2)if elseif多条件分支

image.png

必须注意“否则如果“

image.png

BMI肥胖指数计算

image.png
image.png
image.png

3)if语句算法题

判断水仙花数

image.png

如何拆位

image.png

实现1

  1. //要求用户输入一个三位数
  2. var n = Number(prompt('输入一个三位数'))
  3. //对用户输入的数值,进行合法性的验证
  4. if (!isNaN(n) && 100 <= n && n <= 999) {
  5. //当用户输入的数字是合法
  6. //数学方法
  7. //百位方法
  8. var a = Math.floor(n / 100);
  9. //十位
  10. var b = Math.floor(n / 10) % 10;
  11. //个位
  12. var c = n % 10;
  13. //根据水仙花数进行判断
  14. if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == n) {
  15. console.log('水仙花数')
  16. } else {
  17. console.log('不是水仙花数')
  18. }
  19. } else {
  20. //输入是不合法的
  21. alert('您输入的数字是不合法的')
  22. }

实现2

  1. //要求用户输入一个三位数
  2. var n = Number(prompt('输入一个三位数'))
  3. //对用户输入的数值,进行合法性的验证
  4. if (!isNaN(n) && 100 <= n && n <= 999) {
  5. //当用户输入的数字是合法
  6. //字符串方法
  7. //把数字n变为字符串
  8. var n_str = n.toString();
  9. //百位
  10. var a = Number(n_str.charAt(0));
  11. //十位
  12. var b = Number(n_str.charAt(1));
  13. //个位
  14. var c = Number(n_str.charAt(2));
  15. //根据水仙花数进行判断
  16. if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == n) {
  17. console.log('水仙花数')
  18. } else {
  19. console.log('不是水仙花数')
  20. }
  21. } else {
  22. //输入是不合法的
  23. alert('您输入的数字是不合法的')
  24. }

游乐园门票计算

image.png

if语句的嵌套

image.png

  1. //让用户输入星期几
  2. var week = Number(prompt('请输入星期几'));
  3. //再让用户输入年龄
  4. var age = Number(prompt('请输入年龄'));
  5. //让星期几作为大前提条件
  6. if (week == 0 || week == 6) {
  7. //周末
  8. if (age >= 10) {
  9. a = 500;
  10. }
  11. else {
  12. a = 210;
  13. }
  14. } else {
  15. //平日
  16. if (age >= 10) {
  17. a = 300;
  18. }
  19. else {
  20. a = 140;
  21. }
  22. }
  23. console.log(a)

4)switchi语句

image.png
image.png

switchi语句

image.png

  1. //让用户输入月份
  2. var month = Number(prompt('请输入一个月份'))
  3. //分类讨论
  4. switch (month) {
  5. case 1:
  6. case 3:
  7. case 5:
  8. case 7:
  9. case 8:
  10. case 10:
  11. case 12:
  12. console.log('这个月有31天')
  13. break;
  14. case 4:
  15. case 6:
  16. case 9:
  17. case 11:
  18. console.log('这个月有30天')
  19. break;
  20. case 2:
  21. console.log('这个月有28或者29天')
  22. break;
  23. default:
  24. console.log('您输入的月份有误')
  25. }

Break语句非常重要

image.png

5)三元运算符

image.png
image.png

  1. var age = Number(prompt('请输入'));
  2. var type = age >= 18? '成年人' : '未成年人';
  3. console.log(type);

循环语句

1)for循环语句

从一个例子了解循环语句的功能

image.png
image.png

  1. //输出1、2、3、4.....10
  2. for (var i = 1; i <= 10; i++) {
  3. console.log(i)
  4. }

for语句的语法

image.png

for语句的执行机理

image.png
image.png

准确遍历for循环

image.png

2)for循环算法题

for循环算法题1

image.png
image.png

for循环算法题2

image.png

  1. //寻找1~100的符合条件的数字;除以3余1,除以4余2,除以5余3
  2. for (var i = 1;i <=100;i++){
  3. if(i % 3 == 1 && i % 4 == 2 && i % 5 == 3 ){
  4. console.log(i);
  5. }
  6. }

3)while循环语句

image.png

while循环的语法

image.png

注意事项

image.png

用while实现之前的案例

image.png

  1. //输出1、2、3、4、....100
  2. var i = 1;
  3. while (i <= 100) {
  4. console.log(i)
  5. i++;
  6. }

image.png

  1. //累加1+2+3+4+....100
  2. //累加器
  3. var sum = 0; i = 0;
  4. while (i <= 100) {
  5. sum += i;
  6. i++;
  7. }
  8. console.log(sum)

更适合while循环的场景

image.png

  1. //寻找满足n的平方大于456789的最小整数
  2. //穷举法,从1开始试验
  3. var n = 1;
  4. while (n * n <= 456789) {
  5. n++;
  6. }
  7. console.log(n)

image.png

  1. //寻找满足n的平方大于456789的最小整数
  2. //穷举法,从1开始试验
  3. var n = 0; i = 1;
  4. while (n < 500) {
  5. n = n + i;
  6. i++;
  7. }
  8. //一定要注意这里有一个“出一”错误
  9. console.log(i - 1)

条件满足时,之前变量已经增加过了

更适合while循环的场景

image.png
image.png
image.png
image.png

4)break和continue

image.png

break

image.png
image.png
image.png

continue

image.png

5)do while语句

image.png

随机数函数

image.png

do while小案例

image.png

  1. //随机两个变量,dy和dx,他们都在[-4,4]之间随机取值,但是不都能为0
  2. parseInt(Math.random() * 10);
  3. do {
  4. var dx = parseInt(Math.random() * 9) - 4;
  5. var dy = parseInt(Math.random() * 9) - 4;
  6. }
  7. while (dx == 0 && dy == 0)
  8. //只要出了循环,就保证 dx 和 dy不都是0
  9. console.log(dx, dy)

6)while语句算法题

image.png

while (true)

  1. //随机一个数字,2~99之间
  2. var answer = parseInt(Math.random() * 98) + 2;
  3. //此时范围最小值和最大值
  4. var min = 1;
  5. var max = 100;
  6. //为了能够不断执行的执行询问,此时就必须使用死循环
  7. while (true) {
  8. //询问用户猜测的数字
  9. var n = Number(prompt('请猜测数字' + min + '~' + max));
  10. //验证用户输入的数字是否在范围内
  11. if (n <= min || n >= max) {
  12. alert('你输入的数字不在范围内');
  13. //不在区间时,直接放弃这次循环,就开启下一次迭代
  14. continue;
  15. }
  16. //判断用户输入的数字和answer的关系
  17. if (n > answer) {
  18. alert('你输入的数字太大了')
  19. //因为用户输入的数字较大,所以可以让此时的最大范围数字变为用户输入的数字
  20. max = n;
  21. } else if (n < answer) {
  22. alert('你输入的数字太小了')
  23. //因为用户输入的数字较小,所以可以让此时的最小范围数字变为用户输入的数字
  24. min = n;
  25. } else {
  26. alert('你猜对了!');
  27. //结束循环
  28. break;
  29. }
  30. }

do while

  1. //随机一个数字,2~99之间
  2. var answer = parseInt(Math.random() * 98) + 2;
  3. //此时范围最小值和最大值
  4. var min = 1;
  5. var max = 100;
  6. do{//询问用户猜测的数字
  7. var n = Number(prompt('请猜测数字' + min + '~' + max));
  8. //验证用户输入的数字是否在范围内
  9. if (n <= min || n >= max) {
  10. alert('你输入的数字不在范围内');
  11. //不在区间时,直接放弃这次循环,就开启下一次迭代
  12. continue;
  13. }
  14. //判断用户输入的数字和answer的关系
  15. if (n > answer) {
  16. alert('你输入的数字太大了')
  17. //因为用户输入的数字较大,所以可以让此时的最大范围数字变为用户输入的数字
  18. max = n;
  19. } else if (n < answer) {
  20. alert('你输入的数字太小了')
  21. //因为用户输入的数字较小,所以可以让此时的最小范围数字变为用户输入的数字
  22. min = n;
  23. }
  24. }while( n !=answer)
  25. //出了do while循环,就说明n和answer相等了,因为只有相等才能出循环
  26. alert('你猜对了!');

初识算法

1)什么是算法

image.png
image.png

优质算法的要求

正确性、健壮性、可读性

伪代码

image.png

算法如何培养

多敲、多练、多总结。经典的业务需求场景要熟记心间

2)累加器和累乘器

累加器题目

image.png

  1. //由用户输入数字n,计算3/2+4/3+5/4+.....+(n+1)/n的结果
  2. //用户输入n
  3. var n = Number(prompt('请输入数字n'))
  4. //累加器
  5. var sum = 0;
  6. //遍历分母就可以了,因为分母就是分子加1有关系
  7. for (var i = 2; i <= n; i++) {
  8. sum += (1 + i) / n;
  9. }
  10. alert(sum.toFixed(2));

累乘器

image.png

  1. //计算阶乘
  2. //用户输入n
  3. var n = Number(prompt('请输入数字n'))
  4. //累乘器
  5. var result = 1;
  6. //倒着遍历,计算阶乘
  7. for (var i = n; i >= 1; i--) {
  8. result *= i;
  9. }
  10. alert(result);

同时用到累加器和累乘器的题目

image.png

  1. //用莱布尼茨级数估算圆周率
  2. //π = 2 * (1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+(1*2*3*4)/(3*5*7*9)+(1*....n)/(3*5*....2n+1)
  3. //累加器,就是最后的答案
  4. var sum = 0;
  5. //累乘器,用来制作每一项;制作出来的这个项,要往累加器中累加
  6. var item = 1;
  7. //用户输入n
  8. var n = Number(prompt('请输入数字n'));
  9. for (var i = 1; i <= n; i++) {
  10. //要先制作成这一项
  11. item *= i / (2 * i + 1);
  12. // console.log(item);
  13. //累加器中累加
  14. sum += item;
  15. }
  16. //显示结果
  17. alert((1 + sum) * 2);

3)穷举法

image.png

穷举法是什么

image.png
image.png
image.png

  1. //寻找既能被3整除,也能被5整除的数字
  2. //穷举法,从1开始试验
  3. for (var i = 1; i <= 100; i++) {
  4. if (i % 3 == 0 && i % 5 == 0) {
  5. console.log(i);
  6. }
  7. }

image.png

  1. //寻找约数
  2. //让用户输入数字n
  3. var n = Number(prompt('请输入数字'));
  4. //穷举法
  5. for(var i = 1;i<= n;i++){
  6. if (n %i ==0){
  7. console.log(i);
  8. }
  9. }

image.png

  1. //寻找水仙花数
  2. for(var i = 100;i<1000;i++){
  3. //水仙花数要拆数位
  4. //a、b、c分别表示百位、十位、个位
  5. var i_str = i.toString();
  6. var a = i_str.charAt(0);
  7. var b = i_str.charAt(1);
  8. var c = i_str.charAt(2);
  9. if(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)==i){
  10. console.log(i)
  11. }
  12. }

4)综合算法题目

循环的嵌套

  1. for (var i = 0; i < 3; i++) {
  2. for (var j = 0; j <3; j++) {
  3. console.log(i,j)
  4. }
  5. }

循环嵌套题目

image.png

  1. //寻找100以内的质数
  2. //穷举法
  3. outer: for (var i = 2; i <= 100; i++) {
  4. //内层循环开始从2开始尝试除i,如果能够整除,说明它不是质数,就可以筛选下一个数字了
  5. for (var j = 2; j < i; j++) {
  6. if (i % j == 0) {
  7. //说明数字i不是质数,因为它找到了除1和它本身之外的约数了,测试下一个数字
  8. //continue表示放弃这个数字
  9. //要给外层for循环加上label,然后在continue的后面加上这个label
  10. //这样表示立即开始迭代外层for循环的下一个数字了,而不是内层for循环
  11. continue outer;
  12. }
  13. }
  14. //能够遇见这条语句的数字i,一定是质数,否则就被continue略过了
  15. console.log(i);

image.png

  1. //鸡兔同笼的问题
  2. //假设小鸡有a只,兔子有b只
  3. for (var a = 0; a <= 35; a++) {
  4. for (var b = 0; b <= 35; b++) {
  5. if (a + b == 35 && 2 * a + 4 * b == 94) {
  6. console.log('小鸡有' + a + '只,兔子有' + b + '只')
  7. }
  8. }
  9. }

image.png

  1. var sum_1 = 0;
  2. var sum_2 = 0;
  3. var x = 0;
  4. outer: for (var a = 0; a <= 15; a++) {
  5. if (a < 11) {
  6. sum_1 = a * 4.5
  7. } else {
  8. sum_1 = 45 + 8 * (a - 10)
  9. }
  10. for (var b = 0; b <= 15; b++) {
  11. if (b < 11) {
  12. sum_1 = b * 4.5
  13. } else {
  14. sum_2 = 45 + 8 * (b - 10)
  15. }
  16. x = sum_1 - sum_2;
  17. console.log(x)
  18. }
  19. }