JS笔记
三大流程控制语句
1.顺序结构:代码自上而下顺序执行
//输入两个数,然后交换这两个数,在输出它们交换的结果
var num1 = 10;
var num2 = 20;
alert("num1=" + num1 + ",num2=" + num2);
var tmp = num1;
num1 = num2;
num2 = tmp;
alert("num1=" + num1 + ",num2=" + num2);
2.分支/选择/条件结构:要根据不同的条件,执行不同的操作
单分支语句:
if(判断的条件){
执行语句;
}
双分支语句:
if(判断的条件){
执行语句;
}else{
执行语句;
}
多分支语句:
if(表达式1){
执行语句1;
}else if(表达式2){
执行语句2;
}else if(表达式3){
执行语句3;
…
}else{
执行语句n;
}
switch语句:
switch(表达式){
case 常量1:语句;break;
case 常量2:语句;break;
case 常量3:语句;break;
…
case 常量n:语句;break;
default:语句;break;
}
三目运算符:(本质是一个双分支语句)
表达式1 ? 表达式2 : 表达式3;
【注】if()里面可以写任何的表达式,都会自动数据类型转换成布尔值;如果是匹配确定的结果,优先使用switch语句,需要判断的题目,只能用if语句
//判断一个数是奇数还是偶数
var num = 8;
if (num % 2 == 0) {
alert("偶数");
}
alert("奇数");
//三目运算符
num % 2 == 0 ? alert("偶数") : alert("奇数");
//双分支语句
var num = 7;
if(num % 2 == 0){
alert("这是一个偶数");
}else{
alert("这是一个奇数");
}
//求两个数的最大数 num1=10 num2=20
var num1 = 10,num2 = 20;
if (num1 >= num2) {
alert(num1);
} else {
alert(num2);
}
//判读一个年份,是闰年还是平年
var year = 1998;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
alert("闰年");
} else {
alert("平年");
}
//switch语句。成绩划分等级
var grade = "B";
switch (grade) {
case "A":alert("80~100");break;
case "B":alert("70~79");break;
case "C":alert("60~69");break;
case "D":alert("<60");break;
default:alert("error");break;
}
//switch语句简化。输入月份,显示当前月的天数。要求:1)利用case穿透简化代码
var month = 4;
var year = 2000;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:alert("31天");break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
alert("29天");
} else {
alert("28天");
}
break;
default:alert("30天");break;
}
3.循环结构:重复去做一件事情
while循环:(好处:代码简洁;代码没有冗余;后期维护方便)
while(循环条件){
循环语句;
}
do…while循环:
do{
循环语句;
}while(循环条件);
【注】while循环和do…while循环的区别:while循环先判断循环条件;do…while循环先去运行一次循环语句,再去判断循环条件
for循环:
for(表达式1;表达式2;表达式3){
执行语句;
}
【注】break和continue关键字:break用来终止当前循环;continue跳过这次循环,直接进入下次循环
死循环:循环条件永远成立
while(true){
执行语句;
}
while(1){
执行语句;
}
do{
执行语句;
}while(1);
for( ; ; ){
执行语句;
}
//while循环,1加到100的和
var sum = 0;
var i = 1;
while (i <= 100) {
sum += i;
i++;
}
alert(sum);
//do...while循环
var i = 1;
var sum = 0;
do {
sum += i;
i++;
} while (i <= 100);
console.log(sum);
//for循环
var i = 1;
var sum = 0;
for (i = 1; i <= 100; i++) {
sum += i;
}
console.log(sum);
//求出1000-2000之间所有的闰年,并保证每4个一行
var i = 1000;
var count = 0; //用于计数闰年的个数
while (i <= 2000) {
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
document.write(i + " ");
count++;
if (count % 4 == 0) {
document.write("<br/>");
}
}
i++;
}
//for循环嵌套,打印三角形(左下三角)
var i = 0;
var j = 0;
for (i = 0; i < 5; i++) {//左下三角
for (j = 0; j <= i; j++) {
document.write("○" + " ");
}
document.write("<br/>");
}
//左上三角
var i = 0;
var j = 0;
for (i = 0; i < 5; i++) {//左上三角
for (j = i; j < 5; j++) {
document.write("○");
}
document.write("<br/>");
}
//for循环嵌套,输出9*9的乘法口诀
var i = 1;
var j = 1;
for (i = 1; i <= 9; i++) {//输出乘法口诀表
for (j = 1; j <= i; j++) {
document.write(j + "X" + i + "=" + i * j + " ");
}
document.write("<br/>");
}
//深度综合练习
//山上有一口缸可以装50升水,现在有15升水,老和尚叫小和尚下山挑水,每次可以挑5升。问:几次可以挑满
var water = 15;
var count = 0;
while (water < 50) {
water += 5;
count++;
}
console.log(count);
//判断一个数是不是合数(除了能被1和本身除以外,还能被其他数整除);判断一个数是不是质数(除了能被1和本省除以外,不能被其他数整除)
var num = 12;
var isYes = false;
for (var i = 2; i < num; i++) {
if (num % i == 0) {
isYes = true;
break;
}
}
if (isYes) {
document.write(num + " 是一个合数");
} else {
document.write(num + " 是一个质数");
}
//国王奖励大师,大师说,国际一共有64格,第一个放1粒麦子,后面的格放前面歌的2倍,一共需多少
var i = 0;
var sum = 0;
var num = 1;
for (i = 0; i < 64; i++) {
sum += num;
num *= 2;
}
console.log(sum);
//找出所以的水仙花数,三位数,各位的立方和等于该数本身。153=1^3+5^3+3^3 【Math.pow(x,y),可以求x的y次方】
var num = 100;
for (num = 100; num < 1000; num++) {
var i = parseInt(num / 100);
var j = parseInt((num % 100) / 10);
var k = (num % 100) % 10;
if (num === Math.pow(i, 3) + Math.pow(j, 3) + Math.pow(k, 3)) {
document.write(num + "<br/>");
}
}
//输入两个数,求这两个数的最大公约数和最小公倍数
var num1 = 6;
var num2 = 5;
var min = num1 > num2 ? num2 : num1;
var max = num1 > num2 ? num1 : num2;
while (1) {//求两个数的最大公约数
if (num1 % min == 0 && num2 % min == 0) {
break;
}
min--;
}
while (1) {
if (max % num1 == 0 && max % num2 == 0) {
break;
}
max++;
}
console.log(min);
console.log(max);
/*
输入两个数n,a,如果n==3,a==2;
输出2+22+222的值
如果n==4,a==3;
输出3+33+333+3333的值
不用输出式子
*/
var n = 3;
var a = 2;
var tmp = a;
var sum = 0;
for (var i = 0; i < n; i++) {
sum += tmp;
tmp = tmp * 10 + a;
}
console.log(sum);
//五位数中,对称的数称为回文数,找出所有的回文数。如12321
var num = 10000;
for (num = 10000; num < 100000; num++) {
var i = num % 10; //个位
var k = parseInt(num / 10) % 10; //十位位
var j = parseInt(num / 1000) % 10; //千位
var l = parseInt(num / 10000); //万位
if (i == l && j == k) {
console.log(num);
}
}
//省略break简化代码。输入年月日,输出当前年第多少天/多少周 -->Math.ceil()向上取整
var year = 2008;
var month = 2;
var date = 8;
var sum = 0; //记录第几天
switch (month) {
case 12:
sum += 30;
case 11:
sum += 31;
case 10:
sum += 30;
case 9:
sum += 31;
case 8:
sum += 31;
case 7:
sum += 30;
case 6:
sum += 31;
case 5:
sum += 30;
case 4:
sum += 31;
case 3:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
sum += 29;
} else {
sum += 28;
}
case 2:
sum += 31;
case 1:
sum += date;
default:
document.write("Error");
break;
}
document.write("date is:" + sum + " week is:" + Math.ceil(sum / 7));