包括:顺序语句、选择语句、循环语句
条件语句
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
从1到100遍历数字,用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 + '只');
}
} }