流程控制语句

包括:顺序语句、选择语句、循环语句

条件语句

if语句

也称选择语句;一般结合else使用

if (测试条件) {
    //语句块1
    //测试条件为真,则执行语句块1
} else {
    //语句块2
    //当测试条件为假,则执行语句块2
}

单行if语句,可省略大括号和换行

var a = Number(prompt('请输入一个整数'));
if (a > 5) alert('这个数字大于5');
if (a % 2 == 0) alert('这个数字是偶数');
alert('再见');

问题:判断奇偶

var a = Number(prompt('请输入要判断奇偶的数字'));
if (a % 2 == 0) {
    alert(a + '是偶数');
} else {
    alert(a + '是奇数');
}

else if语句

暗含不符合之前所有条件

if (测试表达式1) {
      //执行条件:测试表达式1为true
} else if (测试表达式2) {
     //执行条件:1为false且2为true
} else if (测试表达式3) {
    //执行条件:1为false且2为fa1se且3为true
}
……
else {
    //执行条件:之前所有测试表达式都为false
}

问题-计算BMI

var weight = Number(prompt('请输入您的体重(单位:公斤)'));
var height = Number(prompt('请输入您的身高(单位:米)'));
var BMI = weight / Math.pow(height, 2);
if (BMI < 18.5) {
    alert('过瘦');
} else if (BMI < 24) {
    alert('正常');
} else if (BMI < 28) {
    alert('过胖');
} else if (BMI < 32) {
    alert('肥胖');
} else {
    alert('非常肥胖');
}

问题-判断水仙花数
水仙花数:每个数位上的数字的立方和等于它本身的3位数
拆位方法1:算术方法:取整&求模
其中,取整有两种方法Math.floor()、parseInt()

var a = Math.floor(n / 100);
var b = Math.floor(n / 10) % 10; 
var c = n % 10;

拆位方法2:字符串方法:toString()转为字符串,再用charAt()

 var n_str = n.toString();
 var a = Number(n_str.charAt(0));
 var b = Number(n_str.charAt(1));
 var c = Number(n_str.charAt(2));

完整代码:

var n = Number(prompt('请输入需要判断的三位数'));
//1.验证数据为三位数
if (!isNaN(n) && n >= 100 && n <= 999) {
  //2.拆位
  var a = Math.floor(n / 100);
  var b = Math.floor(n / 10) % 10;
  var c = n % 10;
  //3.验证每个数位上的数字的立方和等于它本身
  if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == n) {
    alert(n + "是水仙花数");
  } else {
    alert(n + "不是水仙花数");
  }
} else {
  alert("您输入的数字不合法");
}

switch语句

语法:

switch (表达式){
    case 目标值1:
        执行语句1
        break;
    case 目标值2:
        执行语句2
        break;
    ...
    case 目标值n:
        执行语句n
        break;
    default:
        执行语句n+1
        break;
}

其中,多个case可共用语句体

三元运算符

作用:根据某个条件是否成立,在两个不同值中选择变量的值
语法:条件表达式?表达式1:表达式2
其中,
当条件表达式为真调用表达式1
为假时调用表达式2。

循环语句

for循环语句

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

其中,
var i=1;定义循环变量i并赋值为1
i<=10;循环继续执行的条件,为真则会一直执行
i++;更新循环变量

while循环语句

满足条件会一直执行循环体
循环变量:
while循环中不能显式定义循环变量,故需在外定义;也可无循环变量;
循环体:
内部的语句,应使测试条件趋向不成立,否则会死循环

while(测试条件){
}
var i = 1;
var sum = 0;
while (i <= 100) {
    sum += i;
    i++;
}
console.log(sum);

问题:猜数字
随机生成一个2到99的数字,用户输入猜测的数
提示“输入的数字太大了”或“输入的数字太小了”
不断重复这个过程,直到用户准确猜到这个数字
其中
Math.random()返回[0,1)的随机数
parseInt(Math.random()*(b-a+1))+a得到[a,b]的随机整数

//1.封装函数:随机生成min-max之间的一个数
function getRandomIntInclusive(min, max) {
	min = Math.ceil(min);
	max = Math.floor(max);
	return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 
    }
//2.调用生成[2,99]的随机整数
var n = getRandomIntInclusive(2, 99);
//3.测试输入数据
var min = 2;
var max = 99;
console.log(n);
while (true) {
    var a = Number(prompt('请猜测数字' + min + '-' + max));
    if (a > n) {
        max = a;
        alert('您输入的数字太大了');
    } else if (a < n) {
        min = a;
        alert('您输入的数字太小了');
    } else {
        alert('猜对了随机数是' + a);
        break;
    }
}

while循环改为do while循环

do {
  var a = Number(prompt('请猜测数字' + min + '-' + max));
  if (a > n) {
      max = a;
      alert('您输入的数字太大了');
  } else if (a < n) {
      min = a;
      alert('您输入的数字太小了');
  }
} while (a != n);
  alert('猜对了随机数是' + a);

do while 语句(后测试)

for循环和while循环是“先测试条件是否满足,再执行循环体"
do-while循环是“先执行循环体,再测试条件是否满足”
语法:

do{
循环体
}while(循环执行条件)

问题:随机生成两个变量dx和dy,它们均在[-4,4]
区间随机取值,但要求dx和dy不能同时为0

do {
    var dx = parseInt(Math.random() * (9)) - 4;
    var dy = parseInt(Math.random() * (9)) - 4;
} while (dx == 0 && dy == 0)
//出循环意味着dx和dy不同时为0
console.log(dx, dy);

default

表示默认情况

break

表示终止循环
if语句执行某一个分支后会自动跳出if语句体,而switch语句不会
通常用于while(true){}

问题:查询某年某月的天数

 var year = Number(prompt('请输入年份'));
 var month = Number(prompt('请输入您要查询的月份'));
 switch (month) {
     case 1:
     case 3:
     case 5:
     case 7:
     case 8:
     case 10:
     case 12:
         alert(month + '月有31天');
         break;
     case 4:
     case 6:
     case 9:
     case 11:
         alert(month + '月有30天');
         break;
     case 2:
         if (year % 4 == 0 && year % 100 != 0 || year % 100 == 0 && year % 400 == 0) {
                 alert(year + '年属于闰年,故2月有29天');
             } else {
                 alert(year + '年属于平年,故2月有28天');
             }
             break;
         default:
             alert('请输入正确的月份');
     }

continue

用于跳过循环中的一个迭代,继续执行下一个迭代
经常用于for循环

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

}

初识算法Algorithm

定义

指解题方案的准确而完整的描述,是一系列解决问题的清晰指令
算法代表着用系统的方法描述解决问题的策略机制
也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出
把一个问题,拆解为计算机能够一步一步执行的步骤

基本要求

正确性
健壮性(访问量大,各平台等)
可读性
时间效率高
存储量低
注: 伪代码是一种算法描述语言;使算法用编程语言更易实现(例:C, Java等)

例:
定义变量sum
从1100遍历数字,用i表示
把每个数字i加到sum中
打印显示sum

累加器

累加器和累乘器同属暂存器,用来储存计算所产生的中间结果;
当所有的数字都被加入/乘入后,结果才写回到主存中,可提高效率

问题:输入数字n,计算3/2+4/3+5/4+……+n-1/n的值

var n = Number(prompt('请输入数字n'));
var sum = 0;
for (var i = 2; i <= n; i++)
    sum += (i + 1) / i;
console.log(sum.toFixed(2));

累乘器

问题:输入数字n,计算n的阶乘

var n = Number(prompt('请输入数字n'));
var result = 1;
for (var i = 1; i <= n; i++)
    result *= i;
alert(result);

问题:圆周率π可由莱布尼茨级数公式计算,输入参数n,计算圆周率π

π/2 =1+1/3+(1*2/3*5)+(1*2*3/3*5*7)+……+(1*2**n/3*5**2n+1)
 var n = Number(prompt('请输入参数n'));
//累加器
 var sum = 1;
//累乘器:负责制作每一项
 var item = 1;
 for (var i = 1; i <= n; i++) {
     item *= i / (2 * i + 1);
     sum += item;
 }
 alert(sum * 2);

穷举法

指确定答案的大致范围后,对所有可能逐一验证
若某个情况符合条件,则为一个解
若全部情况验证后都不符合条件,则无解
注:计算机最突出的能力计算,无归纳总结、逻辑推理能力;要扬长避短

问题:100以内既能被3整除又能被5整除的数字

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

问题:输入一个数字,控制台显示其全部约数

var n = Number(prompt('请输入一个数字'));
for (i = 1; i <= n; i++) {
     if (n % i == 0) {
         console.log(i);
     }
}

问题:小兔子拔萝卜,第1天拔1个,第2天拔2个,第3天拔3个,以此类推,多少天能拔光500个

var i = 1;
var sum = 0;
while (sum < 500) {
    sum += i;
    i++;
}
//注意“出一错误”:条件变量和编号变量不一致时会出现
console.log(i - 1);

问题:1-100的所有质数

 //外层for循环加上lable 
outer: for (var i = 1; i <= 100; i++) {
        for (var j = 2; j < i; j++) {
            if (i % j == 0) {                   
              continue outer;//表示执行外层for循环的下一个迭代
            }
        }
        console.log(i);
       }

问题:雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何

for (var i = 0; i <= 35; i++) {
            for (var j = 0; j <= 35; j++) {
                if (i + j == 35 && 2 * i + 4 * j == 94) {
                    console.log('小鸡有' + i + '只,兔子有' + j + '只');
                }
            }  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值