语句-分支语句

C语言初阶

分支语句和循环语句

分支语句
if、switch
循环语句
while、for、do while
goto语句

1. 什么是语句?

c语句可分为以下五类:
表达式语句
函数调用语句
控制语句
符合语句
空语句

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

先介绍控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式。
它们由特定的语句定义符组成,c语言有9种控制语句
可分成以下三类:
1. 条件判断语句也叫分支语句:if语句、switch语句
2. 循环语句:do while语句、while语句、for语句
3. 转向语句:break语句、goto语句、continue语句。return语句

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

2.1 if语句

语法结构:

单分支
if(表达式)
   语句;
    int main()
{
    if (3 == 5)
        printf("xixi\n");//不打印
    return 0;
}
if中表达式为真(非0)才执行
在 if 语句或者 else 语句后面,如果只有一条语句需要执行,那么{}可以省略。
int main()
{
    int a = 10;
    if (a == 3 )
        printf("xixi\n");不打印
    return 0;
}
如果把if(a == 3)改成if(a = 3)
则会打印,因为“ = ”为赋值,a = 3,为真。

为了减少出错可以这样写
3 == a,这个等价于,a == 3,而且如果这个时候漏写一个=,即3=a,会报错。

双分支
if (表达式)
    语句1;
else
    语句2;

int age = 10;
if (age < 18)
{
    printf("未成年\n");
    printf("不能打瓦\n")
}
//if后面跟多条语句时要加{}
else
    printf("成年\n");

int age = 10;
if (age < 18)
    printf("未成年");
else if (18 <= age < 28)
    printf("可以玩cf");
这样是错的,age=10时候也会打印,可以玩cf。
因为(18 <= age < 28)中首先看18 <= age,age是10,为假的所以是0,变成0<28,整体为真。

可以这样写:
else if (age >= 18 && age < 28)

多分支
int age = 10;
scanf("%d", &age);

if (age < 18)
    printf("未成年");
else if (age >= 18 && age < 28)
    printf("可以玩cf");
else if (age >= 28 && age < 40)
    printf("可以玩lol");
else if (age >= 40 && age < 60)
    printf("可以玩王者");
else if (age >= 60 && age < 120)
    printf("可以玩蹦极");
else
    printf("老乌龟");

思考题:
int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)
        if (b == 2)
            printf("hehe\n");
    else
        printf("xixi"\n);
    return 0;
}
最终不打印
因为else自动和最近的if匹配

练习:
1. 判断一个数是否为奇数
int main()
{
    //判断一个属是否为奇数,先输入一个数
    int a = 0;
    scanf("%d", &a);
    //判断
    if (a%2 == 1)
    {
        printf("奇数\n");
    }
    else
        printf("偶数\n");
    return 0;
}    

2. 输出1到100之间的奇数
int main()
{
    //产生1到100的数
    int i = 1;
    while (i <= 100)
    {
    //判断是否为奇数
        if (i % 2 == 1)
        {
            printf("%d ", i);
        }
    i++;
    }
    return 0;
}
或者
int main()
{

    for (int i = 1; i <= 100; i++)
    {
        if (i % 2 == 1)
            printf("%d ", i);
    }

    return 0;
}

2.2 switch语句


switch语句也是一种分支(选择)语句
常常用于多分支的情况
如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期天

int main()
{
    int day = 0;
    scanf("%d", &day);
    if (1 == day)
        printf("星期一\n");
    if else(2 == day)
        printf("星期二\n");
    ....
        return o;
}

写成if...else if...else if的形式太复杂,就需要有不一样的语法形式
switch
switch(整型表达式)
{
    语句项:
}
//语句项是一些case语句
如:
case 整型常量表达式://不能是非整型,也不能是变量,字符也是整型
    语句;

在 C 语言里,case 关键字主要用于switch语句中,它是构成多分支选择结构的重要部分。
switch语句能够依据一个表达式的值,从多个选项里挑选出特定的代码块来执行。
而case就用于定义这些选项。

int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
        printf("星期一\n");
    case 2:
        printf("星期二\n");
    case 3:
        printf("星期三\n");
    case 4:
        printf("星期四\n");
        .....
    }
        return o;
}
如果输入2,会输出234(称为穿透现象),因为没有break
遇到break才会跳出switch

完整形式:
switch (表达式) 
{
case 常量表达式1:
    // 当表达式的值等于常量表达式1时执行的代码
    语句1;
    break;
case 常量表达式2:
    // 当表达式的值等于常量表达式2时执行的代码
    语句2;
    break;
    // 可以有更多的 case 分支
    ...
default:
    // 当表达式的值与所有 case 后的常量表达式都不匹配时执行的代码
    语句n;
    break;
}

switch 表达式:
这个表达式的值通常是整数类型(像 int、char 等)。
switch 会依据这个表达式的值来决定执行哪个 case 分支。

case 常量表达式:
跟在 case 后面的常量表达式,用于和 switch 表达式的值进行比较。
一旦相等,就会执行该 case 分支下的语句。这里的常量表达式必须是常量,不能是变量。

break 关键字:
它的作用是终止当前 switch 语句的执行,跳出 switch 结构。
要是没有 break,程序会继续执行下一个 case 分支的语句
直至遇到 break 或者 switch 语句结束,这就是所谓的“穿透”现象。

default 关键字:
这是可选的。当 switch 表达式的值和所有 case 后的常量表达式都不匹配时
就会执行 default 分支下的语句。

如:
int main() 
{
    int day = 0;
    scanf("%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;
    default:
        printf("最多只有星期七,蠢货!\n");
        break;
    }
    return 0;
}

穿透现象示例:
int main()
{
    int num = 2;
    switch (num)
    {
    case 1:
        printf("数字是 1\n");
    case 2:
        printf("数字是 2\n");
    case 3:
        printf("数字是 3\n");
        break;
    default:
        printf("数字不是 1、2、3\n");
        break;
    }
    return 0;
}
在这个示例里,num 的值为 2,程序会执行 case 2 分支下的语句,输出“数字是 2”。
因为 case 2 分支中没有 break 语句,程序会接着执行 case 3 分支下的语句
输出 “数字是 3”,直到遇到 break 语句才会跳出 switch 结构。
这种现象就是“穿透”现象,在某些情况下可以巧妙利用,但使用时要谨慎,防止出现意外结果。


题目:
输入1-5,输出的是“weekday”
输入6-7,输出“weekend”
输入1到7以外的东西,输出“蠢货”

int main()
{
    int day = 0;
    scanf("%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;
}
多个case匹配同一个语句的情况

思考小问题:
int main()
{
    int n = 1;
    int m = 2;
    switch (n)//n=1,m=2,执行case 1
    {
    case 1: m++;//n=1,m=3,由于没有break则继续执行case 2
    case 2: n++;//n=2,m=3,继续执行case 3
    case 3:
        switch (n)//n=2,m=3,执行case 2
        {//switch允许嵌套使用
        case 1: n++;
        case 2: m++; n++;//n=3,m=4,遇到break,跳出此小swutch
            break;
        }//整个大的switch还是没遇到break,继续执行case 4
    case 4:
        m++;//n=3,m=5
        break;
    defaulf:
        break;
    }
    printf("m = %d,n = %d\n", m, n);
    return 0;
}

分支语句结束,介绍了if语句和switch语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值