判断

题单类型:官方题单
创建人:
ACGO官方
题数:20
收藏题单
完成度:0/20

判断

分支结构也叫选择结构或判断结构,能够根据条件判断的真假进行情况的判断,从而对程序的运行进行分类处理,不同情况选择不同的后续操作。

1.双分支

分支结构一般使用 if 方法,常见的有 if 单分支结构、if-else 双分支结构,对应只有一个条件的真假两种结果的情况。

分支结构常见模版如下:

if( 关系表达式作为条件 ){
    条件为真时要做的事情
}
else{ 
    条件为假时要做的事情
}

这里的关系表达式是使用了 > >= < <= == != 六种用来判断两个值之间大小关系的关系运算符的表达式,结果有 true 真 或 false 假 两种情况,所以称为双分支,这也是最常见的判断情况。

需要注意的是,分支结构的条件不能是一个问句,只能是具体的表达式,类似于一个陈述句。例如判断今天是否是周一,那么条件不能是问 “今天是不是周一”,而是需要 “今天是周一” 或 “今天不是周一” 的形式,这样才能有明确的真假结果。

由于条件结果必定有真假的情况,所以双分支是分支语句的基本结构。但在生活中与题目中,我们经常会遇到只有一种情况需要操作,另一种情况不需要操作的,这时候就可以省去 else 语句,这就是单分支结构。

if(条件){
    条件为真时要做的事情
}
/*
else{
    条件为假时没有要做的事
    整个else结构都可以去掉,称为缺省
}
*/

练习题

  • 整数判断
  • 浮点数判断
  • 奇偶数判断
  • 比较大小
  • 判断正负数
  • Yes or No
  • 输出绝对值
  • PH值检测
  • 等级测评
  • 今天是星期几

2.多分支

多分支结构是在双分支结构的基础上,我们发现当条件为假时,此时剩余的情况里还存在多种可能,需要在其他情况里再进行分支语句判断,模版结构如下:

if( 条件1 ){
    条件1为真时要做的事情
}
else if( 条件2 ){ //条件1为假的情况中继续判断
    条件2为真时要做的事情
}
else if( 条件3 ){ //条件1,2为假的情况中继续判断
    条件3为真时要做的事情
}

...

else{ //条件1,2,...,n都为假的情况中只有一种结果
    前面条件都为假时要做的事情
}

如果当前条件为假时,只有一种结果,那么可以使用 else 语句。

如果当前条件为假时,还存在多种结果,那么需要使用 else if 语句继续进行判断分类。

由于情况可能有很多种,所以多分支结构中 else if 语句的数量可以根据情况增加,但不能过多,否则代码的书写和维护可能存在困难。

需要注意的是,if 作为分支结构的判断开始,必须处于一个分支结构的开头即第一次分类判断。else 表示剩余的情况,应当处于一个分支结构的结尾,即后面不应该再有其他的情况出现。

因此 else if 一般处于 if 分支结构的中间部分,但在剩余情况都无需操作的情况下,也可以作为缺省 else 时的最后一个分支判断。

练习题

  • 判断能否被3,5,7整除
  • 找出大于0的数
  • 最大数输出
  • 有一门课不及格的学生
  • 成绩等级划分

逻辑运算符

由于多分支语句中会出现多个条件的情况,所以需要使用逻辑运算符来进行条件的组合判断。

逻辑运算符常见有 &&|| 两种,分别表示与、或的逻辑关系。

  • && 逻辑与运算符:当两个条件都为真时,结果才为真,否则为假。
  • || 逻辑或运算符:当两个条件有一个为真时,结果为真,否则为假。

例如:闰年表示 (年份是 44 的倍数但不是 100100 的倍数) 或 (年份是 400400 的倍数),对应代码为 (n%4==0 && n%100!=0) || (n%400==0)

我们可以将常识或题目描述中的信息对应地转化为逻辑与和逻辑或来表示,比如:并且、且、而且、同时、都,此类关键词都表示条件需要同时为真,对应逻辑与 &&。或者、或、只要、至少、有一个,此类关键词都表示条件只要有一个为真,对应逻辑或 ||。具体使用哪种逻辑运算符与关系运算符,需要根据题目的具体情况和描述信息来选择。

区间范围写法

区间范围 xyx\sim y 通常表示 xxyy 之间的所有数,通常也包括 xxyy 本身。

对于范围更加规范的写法是 闭区间[x,y][x,y] 和 开区间 (x,y)(x,y)。闭区间表示边界位置 xxyy 都包含在内,开区间表示边界位置 xxyy 都不包含在内,开闭区间只限制当前这一侧的边界情况,所有可以出现一边开一边闭的情况,即一边包含在内另一边不包含在内。

例如,分数低于 6060 分的部分属于不及格,表示为 [0,60)[0,60) ,就是一个左闭右开的区间,表示边界 00 包含在内,边界 6060 不包含在内。

if 语句中,区间范围可以用 >=<= 来表示包含边界,例如 if(x>=1 && x<=10) 表示 xx 介于 111010 之间。由于在范围内的确定需要两个条件同时为真,所以需要使用逻辑与 && 来连接两个条件。如果边界不包含在内,我们可以使用 > 代替 >=,用 < 代替 <=

在所有的问题中,我们都可以采用逻辑与来控制范围。但当区间范围连续且涵盖所有情况时,我们可以通过前一次 if 为假的结果,来省略部分的条件代码,例如:

if(x<=100){

}
else if(x<=200){//x>100&&x<=200

}

在此类写法中,由于 if 为假才会来到 else if 语句,所以可以省略 x>100 的条件判断,而只判断 x<=200 的情况。

但需要注意,如果数据存在例外的情况,或范围不连续、范围未按顺序判断,此时隐藏的条件不足以支持后续的省略写法,则必须写完整左右范围的两个条件。

分段计费问题

数学中有一类分段计费的问题,例如停车场根据停车时长确定不同时间段的收费情况,打车时距离越远的部分需要支付越高的费用,每个月内用电量超过一定区间的部分需要缴纳更高的电费。

这类问题的特点在于对不同部分的区间范围会有不同的计费标准,而不是根据使用情况确定整体的计费标准。

比如用电量在 01000\sim 100 度内,每度电价格为 0.50.5 元。用电量在 100200100\sim 200 度内,每度电价格为 1.01.0 元。用电量超过 200200 度,每度电价格为 1.51.5 元。这种描述中没有对部分和范围进行价格表述,而是对整体的价格进行了确定,所以直接按照条件判断分为三种价格情况即可。如果使用了 240240 度点,则总费用为 240×1.5=360240\times 1.5=360 元,这就是分类定价的写法。

比如用电量在 01000\sim 100 度内的部分每度电价格为 0.50.5 元,100200100\sim 200 度的部分每度电价格为 1.01.0 元,而每月用电量超过 200200 度的部分每度电价格为 1.51.5 元,如果使用了 240240 度电,则 01000\sim 100 范围内使用了 100100 度电,100200100\sim 200 范围内使用了 100100 度电,200240200\sim 240 范围内使用了 4040 度电,所以总计费用为 100×0.5+100×1+40×1.5=160100\times 0.5+100\times 1+40\times 1.5=160 元。这就是分段计费的写法。

我们可以发现分段计费的问题中描述往往针对某个区间范围,而非针对整体。与分类定价相比,分段计费问题的条件判断基本一致,但在计算上需要先计算得到每个区间范围内的使用量,分别与对应范围的价格计算后,再累加得到总费用。

以上述分段计费的电费问题为例,用 x 表示用电量,则总费用 ans 可以使用以下代码计算得到:

if(x<=100){
    ans=x*0.5;
}
else if(x<=200){//x>100&&x<=200
    ans=100*0.5+(x-100)*1.0;
}
else{//x>200
    ans=100*0.5+100*1.0+(x-200)*0.5;
}

由于总使用量不同,部分情况中存在未使用的区间,此时可以直接去除这个区间而不是继续相减得到用量,否则容易出现负数的使用量。

总结

分支结构的主要考点是条件判断,需要找出每种情况对应的条件与结果,此时需要准确地使用关系表达式来进行情况的分类判断。所以,对题意中的情况分类是非常重要的一步,只有对情况有了大致的分类后,才能使用逻辑运算符完成对应的关系表达式书写。

通常条件会需要一些常识分析或数学知识,比如经典的阶梯分段计费问题和多条件判断问题。可以当做数学题先进行思考,把情况和解题的思路过程想清楚再开始对应的代码书写。

综合练习题

  • 千万别挂科
  • 充值满赠
  • 分糖果
  • 苹果和虫子
  • 买花

本次题单设计了判断知识点,细化到单分支、双分支、多分支

在做题过程中,你会经历各种“小挑战”:比大小、判断奇偶、范围筛选、找绝对值、判断能否整除,甚至还要面对多个条件和多种情况的综合考验。

通过这些练习,你不仅能熟练掌握判断语句的写法,还能锻炼清晰的逻辑思维,让代码更聪明、更灵活。

【后置衔接知识点】
1、循环

【思维导图】

【题目知识点分类】