JavaScript流程控制(顺序分支循环)及相关练习
Posted YuLong~W
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript流程控制(顺序分支循环)及相关练习相关的知识,希望对你有一定的参考价值。
文章目录
流程控制
在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的。很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能。
流程控制主要有三种结构,分别是顺序结构、分支结构和循环结构,这三种结构代表三种代码执行的顺序。
顺序结构
程序中最简单、最基本的流程控制,无特定语法结构,按照代码先后顺序,依次执行
分支结构
由上到下执行代码的过程中,根据不同的条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果
if语句
if(条件表达式)
{
代码段
}
if…else语句
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语句
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-流程控制(if else三元表达式switch)循环(forwhilecontinue break)