C语言(6)分支语句

P25【C语言初阶】分支语句

1.概述

    C语言是【结构化】的程序设计语言:顺序结构,选择结构,循环结构

   C语句可分为以下五类: 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句

   控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。

  可分成以下三类: 1. 条件判断语句也叫分支语句(选择结构):if语句、switch语句;

                              2. 循环执行语句(循环结构):do while语句、while语句、for语句;

                              3. 转向语句:break语句、goto语句、continue语句、return语句。 

2.分支语句(选择结构)

2.1   if  语句

以上,如果表达式为真,则执行语句。

以上,如果表达式为真,则执行语句1,如果为假,则执行语句2。如果要同时执行多条语句要加上大括号,即使用代码块。

示例如下:

多分支

多分支示例如下

注如下的错误写法:这样也会输出青年,因为执行过程是10>=18为假,所以为0,0<28为真,所以执行输出语句。

else会和最近的if匹配。

2.1.1  语句的书写
//代码1
if (condition) {
    return x;
}
return y;
//代码2
if(condition)
{
    return x;
}
else
{
    return y;
}
//代码3
int num = 1;
if(num == 5)
{
    printf("hehe\n");
}
//代码4
int num = 1;
if(5 == num)
{
    printf("hehe\n");
}

如上所示,代码2和4的书写更加规范,易于阅读

2.1.2  练习

1.判断一个数是否为奇数

2.输出1-100之间的奇数

2.2   switch 语句

   比如我想输入1-7,分别会输出星期一到七,如果写成  if.......else语句会太复杂,此时就比较适合用switch语句。

语句结构如下:

其中语句项为:

注:switch和case后必须是整型,case还要求必须是常量,当然字符也可以,因为字符是以ASCII码值的形式存储的。

2.2.1  switch语句中的break

以上需求的实现:

#include <stdio.h>
int main()
{
    int day = 0;
    scanf_s("%d",&day);
    switch (day)
    {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");
            break;
    }
    return 0;
}

   switch语句工作过程:首先根据switch后面的表达式的值,决定和哪个case语句匹配,就从哪个case语句进入,进入后执行语句,执行完成后通过break跳出switch语句,如果没有break就会顺着一直往下走。

#include <stdio.h>
int main()
{
    int day = 0;
    scanf_s("%d", &day);
    switch (day)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
    }
    return 0;
}

2.2.2  编程好习惯

   在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

2.2.3 default 语句

    如果输入的表达的值与所有的case标签的值都不匹配, 则所有的语句都被跳过。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果不想忽略不匹配所有标签的表达式的值时,可以在语句列表中增加一条default子句。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

#include <stdio.h>
int main()
{
    int day = 0;
    scanf_s("%d", &day);
    switch (day)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
        default:
            printf("输入错误\n");
            break;
    }
    return 0;
}

2.2.4 练习

最后输出结果是m=5,n=3。

#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
    case 1:
        m++;//m=3
    case 2:
        n++;//n=2
    case 3:
        switch (n)
        {//switch允许嵌套使用
        case 1:
            n++;
        case 2:
            m++;//m=4
            n++;//n=3
            break;//此break只会跳出嵌套的这个switch,依然在大的switch中
        }
    case 4:
        m++;//m=5
        break;
    default:
        break;
    }
    printf("m = %d, n = %d\n", m, n);//m=5,n=3
    return 0;
}

总结:1.switch语句是可以嵌套的

           2.在switch语句中,没有break会一直往下执行

           3..break只会跳出自己所在的switch语句

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值