C/C++中的选择分支语句(if、switch语句)

示例代码的第一段是 if 语句的用法,第二段是 switch 语句的用法。

if语句

if语句有三种形态:if、if…else、if…else if…else。三种形态各有着不同的应用场景

if(表达式){
    表达式成立语句体;
} else {
    表达式不成立语句体;
}
评价:标标准准的分支语句,二选其一。成立执行 表达式成立语句体;不成立执行 表达式不成立语句体。
if(表达式1){
    语句体1;
} else if(表达式2){
    语句体2;
} else if(表达式3){
    语句体3;
} ... else {
    表达式均不成立执行的语句体;
}
评价:多分支语句,可以对多个给出的条件进行判断
if(表达式){
    语句体1;
}
语句体2;

特意将 if单语句体 放在这里是因为单语句体的一个用处。
一般情况下,如果if中有return语句,语句体2不一定执行;但如果没有return语句,语句体2一定执行。
因为这一点:
void func(){
    if(1){
        ...
        return;
    }
    // 因为if条件成立后边的 a、b、c均不会被执行。
    a ;
    b ;
    ...
}

以及 if 中不包含 return 时,语句2一定会被执行。
// a为负数 a = a + 20, a 为正数 a = a + 10.
if(a < 0){
    a = a + 10;
}
a = a + 10;

评价:简单之中,蕴含巨大能量。

switch语句

由switch语句的结构片段很容易就看出来 switch语句 的用法。

switch(整型表达式){
    case value1 :
        语句1;
        break;
    case value2 :
        语句2;
        break;
    ...
    default:
        语句;
    case extern1 :
        语句e1;
        break;
}

这里我们主要说的就是几个点:

  1. switch 后面跟的是整型表达式, 这个整型不单单是我在数据类型中归为整型的short、int等,任意和整型的数据储存格式相同的(计算机底层按照整型存储的)类型,如:char、bool、以及枚举类型都可以作为switc中表达式的类型。
  2. switch语句中有 case 和 default,case 后边必须跟一个表达式所允许的取值,default 和 else 的作用一样,都表示所有的语句入口均不符合要求时进入的分支。switch 和 else 均可以省略,表达的意思是所有的语句入口均不符合要求时不做处理。
  3. case 和 default 的位置不做要求。这是因为 break 的作用就是跳出 switch 的分支结构。case 后面跟着 break 当进入 case 对应的分支之后语句执行完成,遇到 break 就跳出了 switch 语句(switch语句执行完成)。也由此 default 后面 break 也不写都一样(default放在哪都是最后一个入口)。
  4. 基于 break 的作用。如果省略 break,switch 分支视自己没有执行结束,它会继续向下一个分支前进。这时 case 语句的先后顺序决定了语句的执行顺序,又称switch的穿透。比如,我计算给出的一天是当年的哪一天,我就可以使用 switch 的穿透作用,将这个月之前的所有天数进行求和。

示例代码

#include <stdio.h>

enum e_age { 
    AGE1 = 18, 
    AGE2 = 30, 
    AGE3 = 40, 
    AGE4 = 60 
};

int main(int argc, char const *argv[]) {
    int age = 10;
    if(age < 0){       
        return -1; //如果age < 0,成立,那么后面的代码就都不会执行
    }
    // 问:如果我这里写 age = 30 输出是多少
    if (age >= AGE1) {   
        printf("成年\n");
    } else if (age >= AGE2 && age < AGE3) {
        printf("而立之年\n");
    } else if (age >= AGE3 && age < AGE4) {
        printf("正值壮年\n");
    } else if (age >= AGE4) {
        printf("老年\n");
    }
    return 0;
}
#include <stdbool.h>
#include <stdio.h>

bool isLeapYear(int year) {
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
        return true;
    return false;
}

int main(int argc, char const *argv[]) {
    unsigned int year = 2022;
    unsigned int month = 10;
    unsigned int day = 24;
    unsigned int total = 0;  //用于天数的累加,建议是赋其初始值

    switch (month) {
        case 12:
            total += 30;
        case 11:
            total += 31;
        case 10:
            total += 30;
        case 9:
            total += 31;
        case 8:
            total += 31;
        case 7:
            total += 30;
        case 6:
            total += 31;
        case 5:
            total += 30;
        case 4:
            total += 31;
        case 3:
            if(isLeapYear(year))
                total += 29;
             else
                total += 28;   
        case 2:
            total += 31;
        case 1:
            total += day;
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fstarSea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值