判断大类的法术

经过三篇,终于是把这个条件判断讲完了,下一篇讲循环,这篇讲多了点

目录

if else 的嵌套

else的原则

if,else if,else的运用

御剑飞行交通法 

分析

设计

编码

测试运行

多路分支switch-case

小结


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才可以考)。

由于修仙界有些天骄铸就金丹的年龄很小,所以外表的年龄不是你来判断他们是否违规的依据,要根据骨龄判断是否违规。

修仙界的御剑飞行交通法是这样的⬇️

  1. 对于未满16岁的修士,禁止御剑飞行,违者扣押法器一月,并处罚金1块中品灵石
  2. 对于年满16岁未满18岁的修士,只能单人御剑飞行,违者扣押法器半月,并处罚金5块中品灵石
  3. 对于年满18岁的修士,最多载一人御剑飞行,违者处罚金10中品灵石
  4. 一旦发现没有飞行执照的修士,扣押法器十年,并处罚金100中品灵石。(年龄未满16岁的不算在内)

你拿着测骨龄的法器在空中巡查,等待着违规者的出现:

分析

我们需要根据修仙者的骨龄和是否持有飞行执照,结合修仙界的御剑飞行交通法来判断违规情况并给出相应的处罚。需要处理以下几种情况:

  1. 未满 16 岁的修士,禁止御剑飞行。
  2. 年满 16 岁未满 18 岁的修士,只能单人御剑飞行。
  3. 年满 18 岁的修士,最多载一人御剑飞行。
  4. 没有飞行执照的修士(年龄未满 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 后面的常量都不匹配时执行这里
}

⚠️这里的数据类型只能是整型 


小结

恭喜道友学会了判断大类的法术!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值