JavaScript流程控制(顺序、分支、循环)及相关练习

文章目录

  • 流程控制
    • 顺序结构
    • 分支结构
      • if语句
      • if...else语句
      • if...else if语句
      • 三元表达式
      • switch语句
    • 循环结构
      • while循环
      • do-while循环
      • for循环
      • 循环嵌套
      • continue、break关键字
    • 相关练习
      • 斐波那契数列求前20项和
      • 输出100以内所有素数
      • 判断水仙花数
      • 输出月份、季节及该年的第几天
      • 求1/2 + 3/2 + 5/3 + 8/5... 的前20项和
      • 输出1000之内的所有完数
      • 猴子吃桃问题

流程控制

在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的。很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能。

流程控制主要有三种结构,分别是顺序结构、分支结构和循环结构,这三种结构代表三种代码执行的顺序。
JavaScript流程控制(顺序、分支、循环)及相关练习_第1张图片

顺序结构

程序中最简单、最基本的流程控制,无特定语法结构,按照代码先后顺序,依次执行

分支结构

由上到下执行代码的过程中,根据不同的条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果

if语句

JavaScript流程控制(顺序、分支、循环)及相关练习_第2张图片

if(条件表达式)
{
     
      代码段
}

if…else语句

JavaScript流程控制(顺序、分支、循环)及相关练习_第3张图片

if(条件表达式)
{
     
	  代码段1
}
else
{
     
	  代码段2
}
//判断闰年
var y=prompt('请输入一个年份')
var year=parseInt(y)
if(year%400==0||(year%4==0 && year%100!=0)){
     
    alert(year+"是闰年")
}else{
     
    alert(year+"不是闰年")
}

if…else if语句

JavaScript流程控制(顺序、分支、循环)及相关练习_第4张图片

if(条件表达式1)
{
     
	   代码段1 
}
else if(条件表达式2)
{
     
	   代码段2
}
else if(条件表达式3)
{
     
	   代码段3
}
 ...
else if(条件表达式n)
{
     
	   代码段n
}
else{
     
	   代码段n+1
}
//判断成绩的等级
var y=prompt('请输入学生的成绩')
var score=parseInt(y)

if(score>=90){
     
    console.log("等级为A")
}else if(score>=80){
     
    console.log("等级为B")
}else if(score>=70){
     
    console.log("等级为C")
}else if(score>=60){
     
    console.log("等级为D")
}else{
     
    console.log("等级为E")
}

三元表达式

表达式1?表达式2:表达式3
//判断三个数最大的那个数
var a = 2,b=4,c=3
var max = ((a>b?a:b)>c)?(a>b?a:b):c
console.log(max)

执行思路:如果表达式1为 true ,则返回表达式2的值,如果表达式1为 false,则返回表达式3的值
简单理解: 就类似于 if else (双分支) 的简写

switch语句

switch(表达式)
{
     
	  case 常量1:代码段1;break;
	  case 常量2:代码段2;break;
	  case 常量3:代码段3;break;
	  ...
	  case 常量n:代码段n;break;
	  default:
		      代码段n+1;
}
var y=prompt('请输入学生的成绩')
var score=parseInt(y)
switch(parseInt(score/10)){
     
    case 10:
    case 9:alert('等级为A');break;
    case 8:alert('等级为B');break;
    case 7:alert('等级为C');break;
    case 6:alert('等级为D');break;
    default:alert('等级为E')
}

注意:

  • 关键字 switch 后面括号内可以是表达式或值, 通常是一个变量
  • 关键字 case , 后跟一个选项的表达式或值,后面跟一个冒号
  • 执行case 里面的语句时,如果没有break,则继续执行下一个case里面的语句
  • 如果存在匹配全等(===) ,则与该 case关联的代码块会被执行,并在遇到 break 时停止
  • 关键字default可有可无,位置任意,建议case后

循环结构

循环结构用于根据条件来决定是否重复执行某一段代码。

while循环

while (条件表达式) {
     
    循环体语句
}
//2+22+222+2222+22222
var i=0,a=2,sum=0
while(i<5){
     
    sum=sum+a
    a=a*10+a
    i++
    console.log(sum)
}
//求S=1+2+3+…+n之和,S<1000的最大n的值
var i=0,s=0
while(s<=1000){
     
    i++
    s=s+i
}
console.log(i-1)
  • 先执行条件表达式,如果结果为 true,则执行循环体代码;如果为 false,则退出循环,执行后面代码 使用 while
  • 循环时一定要注意,它必须要有退出条件,否则会成为死循环

do-while循环

do{
     		
	   循环体语句
}while(条件表达式)
//求1+2+...+100的和
var i=1
var sum=0
do{
     
    sum=sum+i
    i++
}while (i<=100)

console.log("sum="+sum)
  • 先执行循环体语句,直到条件表达式为假时结束
  • 无论条件表达式是否为真,循环体语句至少执行一次

for循环

 for(表达式1;表达式2;表达式3)
{
     
		 循环体语句
}
  • 表达式1:初始化语句
  • 表达式2:条件表达式
  • 表达式3:使循环趋向结束表达式
  • 三个表达式都可省略,但分号不能省略

注意:

  • 当循环次数明确用for循环
  • 当循环次数不明确,但知道循环结束条件用while或do-while循环

循环嵌套

在一个循环的内部嵌套一个或多个循环。
外循环每循环一次,内循环要全部做完。

// 输出九九乘法表
for(var i=1;i<=9;i++){
     
    var s=""
    for(var j=1;j<=i;j++){
     
        s=s+i+"*"+i+"="+i*j+"\t"
    }
    console.log(s)
}
//计算1!+2!+....+10!
var sum=0
for(i=1;i<=10;i++){
     
    var s=1
    for(j=1;j<=i;j++){
     
        s=s*j
    }
    sum=sum+s
}
console.log(sum)

continue、break关键字

continue:用于立即跳出本次循环,继续下一次循环(本次循环体中 continue 之后的代码就会少执行一次)。
break:用于立即跳出整个循环(循环结束)

相关练习

斐波那契数列求前20项和

//方法一
var a=1,b=1,count=1,sum=0
while(count<=10){
     
    sum=sum+a+b
    a=a+b
    b=a+b
    count++
}
console.log("前20项和为"+sum)
//方法二
var a=1,b=1,sum=a+b,i=1,c
while (i<=18) {
     
    c=a+b
    a=b
    b=c
    i++
    sum=sum+c
}
console.log("前20项和为"+sum)
//用for循环输出
var a=1,b=1,c,sum=a+b
for(var i=1;i<=18;i++){
     
    c=a+b
    a=b
    b=c
    sum=sum+c
}
console.log("前20项和为"+sum)

输出100以内所有素数

//输出100以内所有素数
//有标记
for(var i=2;i<=100;i++){
     
    var flag=true
    for(var j=2;j<i;j++){
     
        if (i%j==0) {
     
            flag=false
            break
        }
    }
    if (flag==true) {
     
        console.log(i+"是素数")
    }
}
//无标记
for(var i=2;i<=100;i++){
     
    for(var j=2;j<i;j++){
     
        if (i%j==0) {
     
            break
        }
    }
    if (j>=i) {
     
        console.log(i+"是素数")
    }
}

判断水仙花数

//判断水仙花数
var i =100
var ge,shi,bai
while(i<=999){
     
    bai=parseInt(i/100);
    ge=parseInt(i%10);
    shi=parseInt(i/10%10);
    // if (bai*bai*bai+ge*ge*ge+shi*shi*shi==i) {
     
    //     console.log(i+'是水仙花数')
    // }
    if (bai**3+shi**3+ge**3==i) {
     
        console.log(i+'是水仙花数')
    }
    i++;
}

输出月份、季节及该年的第几天

// 输入年、月、日
// 输出月份属于那个季节(3-5春季、6-8夏季、9-11秋季、12 1 2 冬季) 日期是该年中第几天 
var year=parseInt(prompt("输入年份:"))
var month=parseInt(prompt("请输入月份:"))
var day=parseInt(prompt("输入日期:"))
var flag
var num
var i=1
var sum=0
if (year%400==0||(year%4==0&&year%100!=0)) {
     
    flag=1
}
else{
     
    flag=0
}
switch(month){
     
    case 12:
    case 1:
    case 2:console.log("冬季");break
    case 3:
    case 4:
    case 5:console.log("春季");break
    case 6:
    case 7:
    case 8:console.log("夏季");break
    case 9:
    case 10:
    case 11:console.log("秋季");break
}
while(i<month){
     
    if (i==1||i==3||i==5||i==7||i==8|i==10||i==12) {
     
        num=31
    }
    else if (i==4||i==5||i==9||i==11) {
     
        num=30
    }
    else if (i==2 && flag==1) {
     
        num=29
    }
    else if (i==2 && flag==0) {
     
        num=28
    }
    sum=sum+num
    i++
}
console.log(sum+day)

求1/2 + 3/2 + 5/3 + 8/5… 的前20项和

//求1/2 + 3/2 + 5/3 + 8/5... 的前20项和,(保留两位小数输出)
var i=1,j=2,m,count=1,sum=0
while (count<=20) {
     
    sum=sum+j/i
    m=j
    j=m+i
    i=m
    count++
}
//保留两位小数*100+0.5后取整再除以100
sum=(parseInt(sum*100+0.5))/100
console.log(sum)
//用for循环
var a=1,b=2,c,sum=0
for(var i=1;i<=20;i++){
     
    sum=sum+b/a
    c=b
    b=a+c
    a=c
}
console.log(sum)

输出1000之内的所有完数

// 输出1000之内的所有完数
// 所谓完数指的是:如果一个数如果恰好等于除它本身外的因子之和,这个数就称为完数
for(var i=2;i<=1000;i++){
     
    var num=0
    for(var j=1;j<i;j++){
     
        if (i%j==0) {
     
            num=num+j
        }
    }
    if (num==i) {
     
        console.log(i)
    }
}

猴子吃桃问题

// 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个,到第十天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少
//采取逆向思维的方法,从后往前推断。
var s=1,sum=1
for(var i=9;i>=1;i--){
     
    s=2*(s+1)
}
console.log(s)

你可能感兴趣的:(JavaScript,javascript,css,html5,html,css3)