从零开始学嵌入式技术之C语言07:分支控制语句(if,switch)

一:if语句

(1)分支

        基本语法

if (条件表达式)
{
    执行代码块;
}

        说明:当条件表达式为真(非0时,就会执行代码块语句,条件表达式为假(0)时,不会执行代码块。

(2)双分支   

        基本语法

if (条件表达式)
{
    执行代码块1;
}
else
{
    执行代码块2;
}

        说明:当条件表达式成立(为真),执行代码块1,否则执行代码块2。

        案列:输入年龄,如果大于18岁,则输出 “你年龄大于18,要对自己的行为负责!”,否则,输出”你的年龄不大这次放过你了。”

#include <stdio.h>

int main()
{
    int age = 0;
    printf("请输入年龄");
    scanf("%d", &age);

    if (age > 18)
    {
        printf("\n你年龄大于18,要对自己的行为负责!");
    }
    else
    {
        printf("\n你的年龄不大,这次放过你了");
    }

    return 0;
}

(3)多向分支 else if

        基本语法

if (条件表达式1)
{
    执行代码块1;
}
else if (条件表达式2)
{
    执行代码块2;
}
... 
else
{
    执行代码块n;
}

        说明:当条件表达式1成立时,即执行代码块1,如果表达式1不成立,才去判断表达式2是否成立,如果表达式2成立,就执行代码块2,以此类推如果所有的表达式都不成立,则执行else 的代码块。

        案列:张三参加考试,他和父亲达成协议,如果成绩不到 60 分没有任何奖励;如果成绩 60分(含)到80分,奖励一个肉夹馍;如果成绩80分(含)到90分,奖励一个 ipad;如果成绩90分及以上,奖励一部华为mate60 pro。

#include <stdio.h>

int main()
{
    // 定义变量记录成绩
    double score;
    printf("请输入你的成绩:");
    scanf("%lf", &score);

    // 根据成绩进行判断
    if (score < 60)
    {
        printf("你的成绩不及格,没有任何奖励!");
    }
    else if (score < 80)
    {
        printf("奖励你一个肉夹馍");
    }
    else if (score < 90)
    {
        printf("奖励你一个ipad");
    }
    else if (score <= 100)
    {
        printf("奖励你一部华为 mate60 pro,遥遥领先!");
    }
    else 
    {
        printf("输入无效!");
    }

    return 0;
}

 二:多向分支 switch

         基本语法

switch (表达式)
{
    case 常量值1:
       语句块1;
        break;
    case 常量值2:
       语句块2;
        break;
    case 常量值n:
        语句块n;
        break;
    default:
       语句块n + 1;
}
  1. switch后面表达式的值必须是一个整型(char、short, int, long等)或枚举类型。
  2. case后面的值必须是常量,而不能是变量。
  3. default是可选的,当没有匹配的case时,执行default。
  4. break语句可以使程序跳出switch语句块,如果没有break,会执行下一个case 语句块,直到遇到break或者执行到switch结尾,这个现象称为穿透。 

        案列:编写程序,根据输入的月份和年份,求出该月的天数(1-12),就是需要考虑闰年(2月份 29)和平年(2月份 28)。 

#include <stdio.h>
//(4)编写程序,根据输入的月份和年份,求出该月的天数(1-12), 
//就是需要考虑闰年(2月份 29)和平年(2月份 28)。
int main()
{
    int month, year;
    printf("请输入年份");
    scanf("%d", &year);
    printf("请输入月份");
    scanf("%d", &month);
    _Bool flag;
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
    {//判断是否为闰年
        flag = 1;
    }
    else
    {
        flag = 0;
    }
    switch (month)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        printf("该月有31天");
        break;
    case 2:
        if (flag)
        {
        printf("该月有29天");
        }
        else
        {
         printf("该月有28天");
        }

        break;

    case 4:
    case 6:
    case 9:
    case 11:
        printf("该月有30天");
        break;

        return 0;
    }
}

        switch和if else if的比较

  1. 如果判断条件是判等,而且符合整型、枚举类型,虽然两个语句都可以使用,建议使用swtich语句。
  2. 如果判断条件是区间判断,大小判断等,使用if else if。

 三:嵌套分支

        嵌套分支是指,在一个分支结构中又嵌套了另一个分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。嵌套分支层数不宜过多,建议最多不要超过3层。

if ()
{
    if ()
    {
    }
    else
    {
        switch ()
        {
        case …
        }
    }
}

        案列:输入油号(92或95)和油量,计算需要支付的金额。92号汽油每升4元,如果油量大于等于40升,每升3.5元;95号汽油每升5元,如果油量大于等于40升,每升4.5元。

#include <stdio.h>

int main()
{
    // 获取用户输入的油号和油量
    int oilN, oilL;
    printf("请输入油号:");
    scanf("%d", &oilN);
    printf("请输入油量:");
    scanf("%d", &oilL);

    // 定义变量记录价格
    double price;

    // 嵌套分支
    switch (oilN)
    {
    case 92:
        price = 4;
        if (oilL >= 40)
        {
            price = 3.5;
        }
        printf("您本次加油需支付:%.2f", price * oilL);
        break;
    case 95:
        price = 5;
        if (oilL >= 40)
        {
            price = 4.5;
        }
        printf("您本次加油需支付:%.2f", price * oilL);
        break;
    default:
        printf("本加油站没有您所需油号!");
    }

    return 0;
}

四:本章练习

习题1:

        实现判断一个整数,属于哪个范围:大于0;小于0;等于0。

#include <stdio.h>
//实现判断一个整数,属于哪个范围:大于0;小于0;等于0。
int main()
{
    int num;
    printf("请输入一个整数");
    scanf("%d", &num);
    if (num > 0)
    {
        printf("该整数大于0");
    }
    else if (num == 0)
    {
        printf("该整数等于0");
    }
    else if (num < 0)
    {
        printf("该整数小于0");
    }

    return 0;
}

习题2:

        判断一个年份是否为闰年。

#include <stdio.h>
//判断一个年份是否为闰年。
int main()
{
    int year;

    printf("请输入一个年份");
    scanf("%d", &year);
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
    {
        printf("该年是闰年");
    }else{
        printf("不是闰年");
    }
    

    return 0;
}

习题3:

        判断一个整数是否是水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身,例如:153 = 1*1*1 + 5*5*5 + 3*3*3。

#include <stdio.h>
//判断一个整数是否是水仙花数,所谓水仙花数是指一个3位数,
//其各个位上数字立方和等于其本身,例如:153 = 1*1*1 + 5*5*5 + 3*3*3。
int main()
{
    int num;
    printf("请输入一个数字用以判断是否为水仙花数");
    scanf("%d", &num);
    int g, s, b;
    b = num / 100;
    s = (num - b * 100) / 10;
    g = (num - 100 * b - 10 * s);
    if (num == (b * b * b + s * s * s + g * g * g))
    {
        printf("该数为水仙花数");
    }
    else
    {
        printf("你输入的非水仙花数\n以下为全部水仙花数\n");
    }

    for (int i = 100; i < 1000; i++)
    {
        num = i;
        b = num / 100;
        s = (num - b * 100) / 10;
        g = (num - 100 * b - 10 * s);
        if (num == (b * b * b + s * s * s + g * g * g))
        {
            printf("%d\n", num);
        }
    }

    return 0;
}

习题4:

        输入星期几,如果是星期一到星期三,打印:AAA,星期四到星期五,打印: BBB,星期六到星期日,打印CCC,如果都不是,提示“输入错误”。

#include <stdio.h>
//输入星期几,如果是星期一到星期三,打印:AAA,
//星期四到星期五,打印:BBB,
// 星期六到星期日,打印CCC,
//如果都不是,提示“输入错误”。
int main()
{
    int num;
    printf("请输入星期");
    scanf("%d", &num);
    switch (num)
    {
    case 1:
    case 2:
    case 3:
        printf("AAA");
        break;
    case 4:
    case 5:
        printf("BBB");
        break;
    case 6:
    case 7:
        printf("CCC");
        break;
    default:
        printf("输入错误");
        break;
    }
    return 0;
}

 

        本章的内容就到这里。

        关注我一起成为嵌入式大佬。

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值