经过三篇,终于是把这个条件判断讲完了,下一篇讲循环,这篇讲多了点
目录
if else 的嵌套
上篇学到了if的进阶法术,if else。在实际的对战当中,运用法术的时候不止一个,自然会多种结合在一起用,所以if else当中还能嵌套if再运用。
指的是在一个 if
或 else
语句块内部再包含其他的 if-else
语句,用于处理复杂的条件判断逻辑。
if (条件1) {
// 当 条件1 为真时执行这里
if (条件2) {
// 当 条件1 和 条件2 都为真时执行这里
} else {
// 当 条件1 为真,但 条件2 为假时执行这里
}
} else {
// 当 条件1 为假时执行这里
if (条件3) {
// 当 条件1 为假,条件3 为真时执行这里
} else {
// 当 条件1 为假,且 条件3 为假时执行这里
}
}
上述的代码为对条件1是否成立的一个判断,运用到了if else的嵌套 。
如果说上述的内容还是有点难以理解,我们可以用流程图来表示⬇️
当然以上是一个比较复杂的嵌套情况,所以通常情况下大概率是这样的一个嵌套:
if (条件1) {
// 当 条件1 为真时执行这里
if (条件2) {
// 当 条件1 和 条件2 都为真时执行这里
} else {
// 当 条件1 为真,但 条件2 为假时执行这里
}
} else {
// 当 条件1 为假时执行这里
}
else的原则
else
总是与离它最近的、尚未匹配的 if
语句配对。这意味着当有多个嵌套的 if
语句时,else
会和距离它最近的那个没有匹配 else
的 if
关联。
如下面这段代码:
#include <stdio.h>
int main() {
int num = 0;
scanf("%d", &num);
if (num > 5) {
if (num < 15) {
printf("num 大于 5 且小于 15\n");
} else {
printf("num 大于等于 15\n");
}
}
return 0;
}
上述的情况就是对num进行一个判断,else跟随的是离它最近的if语句。
if,else if,else的运用
if-else if-else
结构用于处理多个互斥的条件判断,当有多个条件需要检查时,依次判断每个条件,一旦某个条件为真,就执行对应的语句块,其余部分将被跳过。
if (条件1) {
// 当 条件1 为真时执行这里
} else if (条件2) {
// 当 条件1 为假,但 条件2 为真时执行这里
} else if (条件3) {
// 当 条件1 和 条件2 都为假,但 条件3 为真时执行这里
} else {
// 当所有条件都为假时执行这里
}
御剑飞行交通法
Q6:在黑市卖丹药小赚一笔的你不打算引人注目,于是老老实实的回到宗门。宗门给你下派了一个任务:在宗门上空巡查是否有人违规御剑。
虽然大家都能修仙了,上天入地看起来很厉害的样子,但是修仙界有飞行法,御剑飞行要考飞行执照(年满16才可以考)。
由于修仙界有些天骄铸就金丹的年龄很小,所以外表的年龄不是你来判断他们是否违规的依据,要根据骨龄判断是否违规。
修仙界的御剑飞行交通法是这样的⬇️
- 对于未满16岁的修士,禁止御剑飞行,违者扣押法器一月,并处罚金1块中品灵石
- 对于年满16岁未满18岁的修士,只能单人御剑飞行,违者扣押法器半月,并处罚金5块中品灵石
- 对于年满18岁的修士,最多载一人御剑飞行,违者处罚金10中品灵石
- 一旦发现没有飞行执照的修士,扣押法器十年,并处罚金100中品灵石。(年龄未满16岁的不算在内)
你拿着测骨龄的法器在空中巡查,等待着违规者的出现:
分析
我们需要根据修仙者的骨龄和是否持有飞行执照,结合修仙界的御剑飞行交通法来判断违规情况并给出相应的处罚。需要处理以下几种情况:
- 未满 16 岁的修士,禁止御剑飞行。
- 年满 16 岁未满 18 岁的修士,只能单人御剑飞行。
- 年满 18 岁的修士,最多载一人御剑飞行。
- 没有飞行执照的修士(年龄未满 16 岁的不算在内)。
设计
先判断骨龄,然后根据骨龄的范围判断是否违规,同时考虑是否持有飞行执照的情况。
- 定义变量age 为骨龄,判断是否违规。
- 定义变量license为飞行执照。
- 定义man为载人数量。
编码
#include <stdio.h>
int main() {
int age;
int license;
int man;
printf("检测出修士的骨龄为: ");
scanf("%d", &age);
printf("搭载的乘客数量为 ");
scanf("%d", &man);
printf("该修士是否持有飞行执照?(1表示有,0表示没有): ");
scanf("%d", &license);
if (age < 16) {
printf("违规!该修士未满16岁,禁止御剑飞行,扣押法器一月,并处罚金1块中品灵石。\n");
} else if (age < 18) {
if (!license) {
printf("违规!该修士没有飞行执照,扣押法器十年,并处罚金100中品灵石。\n");
} else if (man > 0) {
printf("违规!该修士年满16岁未满18岁,只能单人御剑飞行,扣押法器半月,并处罚金5块中品灵石。\n");
} else {
printf("未违规。\n");
}
} else {
if (!license) {
printf("违规!该修士没有飞行执照,扣押法器十年,并处罚金100中品灵石。\n");
} else if (man > 1) {
printf("违规!该修士年满18岁,最多载一人御剑飞行,处罚金10中品灵石。\n");
} else {
printf("未违规。\n");
}
}
return 0;
}
测试运行
详细的运行结果感兴趣的可以自己测试看看,我这边就一个举几个例子。
多路分支switch-case
switch-case
语句用于处理多分支选择问题,根据一个表达式的值来决定执行哪一个 case
分支。
switch (控制表达式) {
case 常量1 :
// 当 表达式 的值等于 常量1 时执行这里
break;
case 常量2:
// 当 表达式 的值等于 常量2 时执行这里
break;
// 可以有更多的 case 分支
default:
// 当 表达式 的值与所有 case 后面的常量都不匹配时执行这里
}
⚠️这里的数据类型只能是整型
小结
恭喜道友学会了判断大类的法术!