C语言-分支语句

前言:时间一切伟大的壮举都是默默完成的。

大家好,我是战堂、小漠。

目录

1.什么是语句?

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

2.1 if语句

 2.1.1 悬空else

2.1.2 if语句不同书写形式的对比

2.1.3 练习

2.2 Switch语句

2.2.1 break语句

2.2.2 default

2.2.3 练习


1.什么是语句?

C语句可分为以下五类:

1.表达式语句

2.函数调用语句

3.控制语句

4.复合语句

5.空语句

后面重点介绍的是控制语句。

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

可分成以下三类:

1.分支语句(也叫条件判断语句):if语句、switch语句;

2.循环执行语句:do while语句、while语句、for语句;

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

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

好好学习,毕业后找到一个好工作,从此开始走向幸福的生活;

不好好学习,毕业等于失业;

这就是选择。

2.1 if语句

那if语句的语法结构是怎么样的呢?

语法结构:

// 第一种:单分支

if(表达式)

     语句;

//  第二种:双分支

if(表达式)

    语句1;

else

   语句2;

// 第三种:多分支

if(表达式1)

     语句1;

else if(表达式2)

     语句2;

else

     语句3;

代码举例:

单分支:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main ()
{
    int age = 0;
    scanf ("%d",&age);
    if (age < 18)
    {
        printf (" 未成年");
    }
    return 0;
}

双分支:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main ()
{
    int age = 0;
    scanf ("%d",&age);
    if (age < 18)
    {
        printf (" 未成年");
    }
    else
    {
        printf ("成年人");
    }

     return 0;
}

 多分支:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main ()
{
    int age = 0;
    scanf ("%d",&age);
    if (age < 18)
    {
        printf ("未成年");
    }
    else if (age >= 18 && age < 30)
    {
        printf ("青年");
    }
    else if (age >= 30 && age < 50)
    {
        printf ("中年");
    }
    else if (age >= 50 && age < 80)
    {
        printf ("老年");
    }
    else
    {
        printf ("老寿星");
    }
    return 0;
}

 解释一下 :

1.如果表达式的结果为真,则语句执行,反之,则不执行。

在C语言中如何表示真假呢?

在C语言中,0表示假,非0表示真。

2.如果条件成立,需要执行多条语句,则应该使用代码块

if (condition)

{

    语句1;

    语句2;

}

else if (condition)

{

     语句1;

     语句2;

}

 else

{

    语句1;

    语句2;

}

上面的一对{} ,就是一个代码块

 2.1.1 悬空else

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main ()
{
    int a = 0;
    int b = 0;
    if (1 == a)
        if (0 == b)
        {
            printf ("hehe");
        }
    else
    {
        printf ("haha");
    }
    return 0;
}

试着猜想一下,这个代码的运行结果是hehe 还是 haha ?

其实都不是,该代码什么都不会输出

运行结果如下: 

 为什么会这样呢?

因为是第二个if与else匹配,共同构成第一个if的子语句。第一个if表达式不成立,所以程序直接跳出if这个分支语句,跳过了第二个if。

猜错了也不要紧,因为该代码的逻辑和代码风格对初学者实在是不太友好。

改正:

//适当地使用一些代码块,可以使你的代码逻辑让别人看的更清楚。
//良好的代码风格很重要。
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main ()
{
    int a = 0;
    int b = 0;
    if (1 == a)
    {
        if (0 == b)
        {
            printf ("hehe");
        }
        else
        {
            printf ("haha");
        }
    }
    return 0;
}

关于代码风格的书籍,大家可以去看一下《高质量的C/C++编程》

2.1.2 if语句不同书写形式的对比

//代码1
if (condition)
{
    return x;
}
    return y;
//代码2
if (condition)
{
    return x;
}
else
{
    return y;
}
//代码3
#include <stdio.h>
int main ()
{
    int n = 0;
    if (n == 1)
    {
        printf ("念念不忘必有回响");
    }
    return 0;
}
//代码4
#include <stdio.h>
int main ()
{
    if (1 == n)
    {
        printf ("大弦嘈嘈如急雨小弦切切如私语");
    }
    return 0;
}

大家细细看过之后,就知道代码2和代码4的代码更好

代码1相比于代码2对初学者来说比较难理解;

代码4中,if表达式中常量在左,变量在右,这样可以防止将等于号==,错写成赋值号,却无法找到错误

2.1.3 练习

1.判断一个数为奇数

2.输出1~100中的奇数

//代码1
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main ()
{
    int n = 0;
    scanf ("%d",&n);
    if (n % 2 == 1)//也可以写成n % 2 != 0
    {
        printf ("奇数");
    }
    return 0;
}

//代码2
//方法1:
#include <stdio.h>
int main ()
{
    int n = 1;
    while (n <= 100)
    {
        if (n % 2 != 0)
            {
                printf (" %d",n);
            }
        n++;
    }
    return 0;
}
//方法2:
#include <stdio.h>
int main ()
{
    int n = 1;
    while (n <= 100)
    {
        printf (" %d",n);
        n += 2;
    }
   
    return 0;
}

2.2 Switch语句

Switch语句也是一种分支语句,但常常用于多分支

语法结构:

switch (整型表达式)

{

    语句项;

}

什么事语句项呢?

//其实是一些case 语句

//如下:

case (整型常量表达式):

    语句; 

问题举例:

输入1    输出星期一;

输入2    输出星期二;

输入3    输出星期三;

输入4    输出星期四;

输入5    输出星期五; 

输入6    输出星期六;

输入7    输出星期日;

代码:

#define  _CRT_SECURE_NO_WARNINGS 1
#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;
}

执行结果: 

 

 解释一下:从执行结果我们可以看到仅仅凭Switch和case还无法达到我们的使用要求,这就需要一个新的语句---break语句。

2.2.1 break语句

只用Switch和case不能实现真正的分支,只有搭配break语句才可以实现真正的分支。

代码:

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

    }
    return 0;
}

 运行结果:

 有时候我们的需求变了

输入1

输入2

输入3

输入4

输入5

需要输出“weekday”

输入6

输入7

需要输出“weekend”

代码:

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

    }
    
    return 0;
}

执行结果:

break语句的实际效果是将语句列表划分成不同的分支部分。

编程好习惯:在最后一个case后加一个break(这样做是为了防止在今后添加新的case语句时,忘记在上次最后一个case后加break,而使代码运行时与我们想要的结果不符)

2.2.2 default

如果表达的值与所有case标签都无法匹配时,会出现什么情况呢?

其实也不用慌,程序不会报错,因为这种情况在C语言中并不算是个错误。

如果我们不想忽略与所有case标签都无法匹配所表达的值,我们只需在Switch语句中任何位置加一个default语句

如果所表达的值与所有case标签都无法匹配时,这时候default语句中的子语句就会执行。

所以一个Switch语句中,只能有一个default语句。

代码:

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

执行结果:

编程好习惯:在每一个Switch语句中添加一个default语句。

2.2.3 练习

//大家猜想一下下面这个代码的运行结果是什么
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main ()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
        case 1:
            n++;
        case 2:
            m++;
        case 3:
            switch (n)//switch语句是允许嵌套的
            {
                case 1:
                    n++;
                case 2:
                    m++;
                    n++;
                break;
            }
        case 4:
            m++;
        break;
    }
    printf ("m = %d n = %d",m,n);
    return 0;
}

运行结果:

 知识点:Switch语句是允许嵌套的

如果文章对你有用的话就点个关注吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值