JS条件语句
第1关:if-else类型任务描述本关任务:根据成绩判断考试结果。相关知识在编程中,我们常常根据变量是否满足某个条件来执行不同的语句。JavaScript中利用以if关键字开头的条件语句达到以上目的,根据if后面括号内表达式的计算结果来进行分支控制。if语句一段完整的JavaScript语句相当于一条主干路,从第一句开始执行直到最后一句。而if语句是一条连接在干路上的支路,满足某个条件时程序进入支
第1关:if-else类型
任务描述
本关任务:根据成绩判断考试结果。
相关知识
在编程中,我们常常根据变量是否满足某个条件来执行不同的语句。
JavaScript中利用以if关键字开头的条件语句达到以上目的,根据if后面括号内表达式的计算结果来进行分支控制。
if语句
一段完整的JavaScript语句相当于一条主干路,从第一句开始执行直到最后一句。而if语句是一条连接在干路上的支路,满足某个条件时程序进入支路中执行,执行完后回到干路。如下所示:
条件成立指if后面的括号内的表达式的计算结果为true。
if语句的结构为:
if(表达式)
{
//上面的表达式成立则执行本语句
语句;
}
比如下面的例子会根据a的正负输出相应的结果:
//求一个数的绝对值
function abs(a) {
if(a < 0) {//如果a是负数
a = -a;//取反
}
return a;
}
if-else语句
if-else相当于干路分成了两条支路,程序执行遇到分支的时候,必须且只能选择其中一条继续执行,结束后回到干路。如下:
条件成立时执行语句1,这里的语句1是条件成立时你希望执行的语句,条件不成立时执行语句2。
语句结构为:
if(条件表达式){
//条件成立执行语句1
语句1;}
else{
//条件不成立执行语句2
语句2;}
下面是一个具体的例子:
//a为正数或0返回1,a为负数返回0
function num(a) {
if(a >= 0) {
return 1;
}
else {
return 0;
}
}
匹配问题
多个if-else连接起来的时候会出现匹配问题,如下面的例子:
function abs(a) {
if(a >= 0)
if(a > 0)
a = 1;
else
a = -1;
return a;
}
从代码的缩进角度看来,程序中的else和第一个if实现了匹配。但是,实际上else匹配的是第二个if,因为JavaScript中的else遵循的是就近匹配,即else会和最近的if组合成一个完整的if-else结构。
建议:if语句执行部分加{},防止出现 if-else不匹配问题。
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
根据分数a(百分制)返回考试结果;
a小于60分返回unpass,否则返回pass;
本题考察非嵌套的if-else语句;
具体请参见后续测试样例。
测试说明
测试过程:
平台将读取用户补全后的IfElse.js;
调用其中的mainJs()方法,并输入若干组测试数据;
接着根据测试结果判断程序是否正确。
以下是测试样例:
测试输入:
59
预期输出:
unpass
测试输入:
90
预期输出:
pass
海到无边天作岸,山登绝顶我为峰。 ——林则徐
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考代码:
function mainJs(a) {
a = parseInt(a);
//请在此处编写代码
/********** Begin **********/
if(a<60){
return "unpass";
}
else{
return "pass";
}
/********** End **********/
}
第2关:switch类型
任务描述
北美五大湖的名称和面积如下:
本关任务:根据面积判断湖泊的名字。
相关知识
上一关讲解的是拥有少数分支的if-else结构,实际开发的过程中,还会遇到多分支的情况,比如根据电话号码判断运营商,如果用if-else型条件语句,代码会很长而且难以理解。所幸的是,JavaScript提供了另外一种选择结构:switch语句。
严格相等
在了解switch语句之前,先要知道严格相等的概念,严格相等的符号为===。
对于JavaScript中的内置数据类型,如数字,字符串,布尔型等。严格相等要求比较双方的数据类型和值都相等,而相等==只要求比较双方的值相等,因为可以进行数据类型转换。例子如下:
var string = “1”;
var number1 = 1;
var number2 = 1;
console.log(string === number1);
console.log(number1 === number2);
输出结果:
false
true
对于JavaScript中的对象类型,严格相等要求双方的引用相同,即必须是同一个对象。如果不是同一个对象,即使双方的属性、值都相同,也被认为不等,比如下面的例子:
var class1 = {
id:251,
name:“class”
}
var class2 = {
id:251,
name:“class”
}
var class3 = class1;
console.log(class2 === class1);
console.log(class3 === class1);
输出结果:
false
true
虽然class1和class2的属性名、属性值都相等,但是不满足严格相等,因为它们是不同的对象,指向内存的不同地方。而class3和class1严格相等,因为它们指向内存的同一个地方。
switch语句
switch是一种多分支的选择结构,采用等值判断,如下是结构图,其中T表示条件成立,F表示条件不成立,箭头表示语句的执行方向。
switch语句的语法如下:
switch(表达式)
{
case 值1:语句1;
break;
case 值2:语句2;
break;
case 值3:语句3;
break;
default:语句;
break;
}
括号中的表达式计算后会得到一个值,该值会从上到下依次与case关键字后面的值比较,如果满足严格相等,则执行相应case后面的语句;如果与所有的值都不满足严格相等,则执行default关键字后的语句。
当和case后面的某一个值完成匹配并执行完语句后,需要用break结束整个的switch选择,否则会与后面的继续匹配。
//函数(方法):根据身份证号前两位判断所在省份
function judgeProvince(idCard) {
switch(idCard) {
case 31:console.log(“上海”);
break;
case 32:console.log(“江苏”);
break;
case 33:console.log(“浙江”);
break;
case 34:console.log(“安徽”);
break;
case 35:console.log(“福建”);
break;
case 36:console.log(“江西”);
break;
case 37:console.log(“山东”);
break;
default:console.log(“未知”);
break;
}
}
//调用上面的函数
judgeProvince(36);//输出“江西”
如果不加break,代码会从满足switch条件的地方开始执行,一直执行到最后,不符合的case后面的语句也会被执行。
下面的例子根据输入的分数计算绩点(GPA):
//函数(方法):根据百分制的成绩计算GPA
function calGrade(grade) {
grade = parseInt(grade/10);//除以10后取整数
var gpa;
switch(grade) {
case 10://注意这后面没有break
case 9: gpa = 4;break;//90到100均为4
case 8: gpa = 3;break;
case 7: gpa = 2;break;
case 6: gpa = 1;break;
default: gpa = 0;break;
}
return gpa;
}
//调用上面的函数
console.log(calGrage(100));//输出4
当grade为10的时候,没有break,会往下一直执行;执行到grade为9的时候,有break,会终止switch语句块,此时 gpa被赋值4,所以90到100分的返回值都是4。
编程要求
本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
根据面积参数a返回湖泊的名字,湖泊的名称和面积的对照表在最上面的任务描述里面,这里不再赘述;
没有对应的湖泊返回error;
具体请参见后续测试样例。
测试说明
测试过程:
平台将读取用户补全后的SwitchSeten.js;
调用其中的mainJs()方法,并生成若干组测试数据;
接着根据测试结果判断程序是否正确。
以下是测试样例:
测试输入:
82414
预期输出:
Superior
海到无边天作岸,山登绝顶我为峰。 ——林则徐
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考代码:
function mainJs(a) {
a = parseInt(a);
//请在此处编写代码
/********** Begin **********/
var inCard;
switch(a){
case 82414:inCard="Superior";
return inCard;
break;
case 59600:inCard="Huron";
return inCard;
break;
case 58016:inCard="Michigan";
return inCard;
break;
case 25744:inCard="Erie";
return inCard;
break;
case 19554:inCard="Ontario";
return inCard;
break;
default: return"error" ;
break;
}
/********** End **********/
}
第3关:综合练习
编程要求
本关的任务分为三个小题,你需要完成全部三个小题才能通关:
第一题
完成函数judgeLeapYear(year),功能是判断某一年是否为闰年,是则返回“xxx年是闰年”,否则返回“xxx年不是闰年”。参数year是表示年份的四位数整数。
判断闰年的过程如下:
效果如下:
当year等于2000,该函数返回“2000年是闰年”。
第二题
完成函数normalizeInput(input),功能是对输入的字符串进行规范化,参数input是输入的字符串,返回规范化后的字符串,规范化的标准如下:
注:篇幅有限,这里不单独列出民主党派和无党派人士。
效果如下:
当input等于“市民”,返回“群众”。
第三题
完成函数evaluateApple(weight,water),功能是判断苹果是否为优质品,是则返回“是优质品”,否则返回“不是优质品”。参数weight表示重量(克),为整数;参数water表示含水量,为小数。
判断标准如下:
weight大于等于200,为优质品;
weight小于200,但water大于等于0.7为优质品;
其余不是优质品。
效果如下:
weight为220,water为0.6,返回“是优质品”。
测试说明
测试过程:
平台将读取用户补全后的ConditionSetenceCase.js;
根据测试输入调用相应的方法,并输入测试数据;
接着根据测试结果判断程序是否正确。
测试样例:(每个测试用例仅测试其中一个小题!已经用函数名标出来了!相应的输出也只是该题的输出!)
测试输入:
judgeLeapYear:2006
预期输出:
judgeLeapYear:2006年不是闰年
测试输入:
normalizeInput:党员
预期输出:
normalizeInput:中共党员
测试输入:
evaluateApple:200,0.5
预期输出:
evaluateApple:是优质品
海到无边天作岸,山登绝顶我为峰。 ——林则徐
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考代码:
//判断一个年份是否为闰年
function judgeLeapYear(year) {
//请在此处编写代码
/********** Begin **********/
if(year%100!=0&&year%4==0||year%400==0){
return year+"年是闰年";
}
else{
return year+"年不是闰年";
}
/********** End **********/
}
//对输入进行规范化处理
function normalizeInput(input) {
/********** Begin **********/
switch(input){
case "中共党员":
case "党员":
case "共产党员": return"中共党员";
break;
case "中共预备党员":
case "预备党员": return"中共预备党员";
break;
case "团员":
case "共青团员":return"共青团员";
break;
case "大众":
case "群众":
case "市民":
case "人民":return"群众";
break;
default:return"错误数据";
break;
}
/********** End **********/
}
//判断苹果是否为优质品
function evaluateApple(weight,water) {
/********** Begin **********/
if(weight>=200){
return"是优质品";
}
else if(weight<200&&water>=0.7){
return"是优质品";
}
else {
return"不是优质品";
}
/********** End **********/
}
更多推荐
所有评论(0)