C语言中的分支语句——if和switch语句

本文详细介绍了C语言中的语句概念,包括分号作为语句结束符、空语句。接着,深入讲解了if语句的三种形式,并通过示例解释了条件判断的逻辑与运算符的使用。此外,还探讨了if语句中的悬空else问题及正确的语句匹配。最后,介绍了switch语句的结构和用法,强调了case标签的连续匹配问题以及default子句的重要性。文章通过实例帮助读者理解C语言中的条件控制结构。
摘要由CSDN通过智能技术生成

一.什么是语句

C语言中由一个分号‘;’隔开的就是一条语句。比如:
        printf("haha\n");
        1+2;
再比如:
        int main()
        {
                ;        
                return  0;
        }
单独的一个分号,也是语句,称为空语句。


二.if语句

1.语法结构:
1.if(表达式)
        语句;
2.if(表达式)
        语句1
  else
        语句2
3.if(表达式1)
        语句1
   else if(表达式2)
        语句2
    ·······
    ·······
    ·······
   else
        语句3

比如
 

#include<stdio.h>
int main()
{
    int age=18;
    if(age<18)
        printf("未成年\n");
    else if(age>=18 && age<28)
        printf("青年\n");
    else if(age>=28 && age<50)
        printf("壮年\n");
    else if(age>=50 && age<90)
        printf("老年\n");
    else
        printf("高寿\n");
}

结果是:

在这里再说明一种情况:

 如果运行上图的代码会输出“青年”,这是因为C语言不允许这样写判断表达式,表示and用‘&&’;表示or用‘||’。一旦用18<=age<28,电脑会先判断前面那个操作符,再判断后面那个操作符,即18<=age错误则为0,再0<28正确,那么就会输出“青年”,(0为假,非0为真)

当条件成立,要执行多条语句时要用“{}”将所写的语句包括。如:

 

 2.悬空else

#include<stdio.h>
int main()
{
    int a=0;
    int b=2;
    if(a==1)
        if(b==2)
            printf("hh\n");
    else
        printf("aa\n");
    return 0;
}

当我们写下这样的一段代码,发现else的缩进很奇怪,不知道它是跟哪个if相匹配,我们再来看看输出结果:

结果是没有输出,这是因为else是跟最近的未匹配的if配对,也就是说其实正确缩进是这样的:

a==0,不符合条件表达式,所以后面的就不会执行,输出的也就是空。

三.switch语句

switch语句也是一种分支语句。常用于多分支的情况。
switch(整型表达式)
{
        语句项;
}

语句项就是一些case语句,比如:
case  整形常量表达式
        语句;


比如:

#include<stdio.h>
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");
    case 5:
        printf("星期五\n");
    case 6:
        printf("星期六\n");
    case 7:
        printf("星期天\n");

    }
    return 0;
}

运行后发现,后面的都会输出:

 这是因为break没有用到,在switch语句中,无法直接实现分支,搭配break才能实现分支


每个case后面都最好加上break,这样更能避免出错。

case还有一种用法:

像这样当我们输入1~5就会输出“工作日”;输入6~7就会输出“休息日”。
switch语句还需要考虑一点,就比如,如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?你可以在语句列表中增加一条default子句。比如:

像这样,当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。

另外需要注意

 1.switch后面必须是整型变量
2.case后面整型常量表达式(整数)
下面举些例子来证明:

 
当用float定义day时就会报错。
 


case后面是1.0也会报错,因为后面必须是整型
 

 

 case后面是一个变量也不行,必须是一个整数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阳862

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

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

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

打赏作者

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

抵扣说明:

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

余额充值