C语言总结二:控制语句之分支语句详细总结

        C语言是一门结构化程序设计语言,如何理解这个结构化?对于生活中的任何事情都可以抽象为三种结构化的逻辑设计,主要为:顺序结构、分支结构、循环结构,这也是程序逻辑设计的重要思想,本篇博客重点详细总结分支语句,达到能够理解和运用。

目录

一、C语言语句类型

1、C语言语句类型

1.1 语句是什么?

1.2 C语言的五类语句

1.2.1 表达式语句

1.2.2 函数调用语句

1.2.3 复合语句(块语句)

1.2.4 空语句

1.2.5 控制语句

二、分支语句

1、if 语句

1.1 if语句的基本语法结构

 1.1.1 单分支

 1.1.2 双分支

 1.1.3 多分支

1.2  悬空else

1.3  if语句的编写代码风格(更多代码风格参考《高质量c++编程》)

 1.3.1  适当使用花括号{},代码逻辑更加清楚

 1.3.2  整型变量与常量进行比较时,常量放在左边

2、switch 语句

2.1 switch语句的基本语法结构

2.2 在switch语句中的 break

2.3 default 语句

三:分支语句小结


一、C语言语句类型

1、C语言语句类型

1.1 语句是什么?

       在C语言中,语句是以分号结尾的字符序列,是程序最基本的执行单位,分号是C语句的必要组成部分。书写程序代码时,一行可以写几个语句,一个语句也可以写在多行上。C语句包含多种形式。

1.2 C语言的五类语句

1.2.1 表达式语句

   包括算术、逻辑、关系、位运算等表达式,例如 x = y + z;

1.2.2 函数调用语句

   用于执行函数,如 printf("Hello, World!");

1.2.3 复合语句(块语句)

   由多个语句组成,用大括号 { } 包围。

1.2.4 空语句

    只有一个分号 ;,表示不执行任何操作。

    空语句就是我需要这个语句,但不要这个语句做任何事

1.2.5 控制语句

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

可分成以下三类:

条件判断语句也叫分支语句if语句、switch语句;

循环执行语句也叫循环语句do while语句、while语句、for语句;

                             转向语句break语句、continue语句、goto语句、return语句。

二、分支语句

      当程序逻辑需要在多种情况进行选择执行时,就需要使用分支语句,C语言中分支语句主要有两种:if语句、switch语句,掌握好这两种语句至关重要!可以减少实际开发出错的机率,提高开发效率。

1、if 语句

1.1 if语句的基本语法结构

     if语句分为单分支,双分支,多分支三种形式,如下所示。

如果语句中的表达式为真则执行语句,为假就不执行语句在c语言中规定0为假非0为真。

if括号里的表达式是指是一个有值的式子。

 1.1.1 单分支

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if(age<18)
    {
        printf("未成年\n");
    }
    return 0;
}
1.1.2 双分支

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

双分支结构,可以使用三目运算符进行代替,方便实际开发  

//采用双分支
if(a>b)
{
   max = a;
}
else
{
  max = b;
}

//采用三目运算符
max=a>b?a:b;
1.1.3 多分支

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

注意:如果条件成立,要执行多条语句,应该使用花括号括起来,表示一个代码块!单条语句可以不加。 

1.2  悬空else

当使用if语句的双分支时我们一定要记住最重要的一点,else与其距离最近的if匹配,下面用一个例子来帮助大家理解这一点。

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

      当看到以上代码时,我相信很多人会认为运行结果为打印"haha",其实当我们运行时,控制台什么也不输出,这就是上面我们说的else与其距离最近的if匹配,所以上述代码这种缩进格式非常容易误解,我们应该避免这种缩进格式,应该将其改为以下形式:

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
 
#include<stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if (a == 1) 
    {
        if (b == 2)
            printf("hehe\n");
        else
            printf("haha\n");
    }
    return 0;
}

1.3  if语句的编写代码风格(更多代码风格参考《高质量c++编程》)

1.3.1  适当使用花括号{},代码逻辑更加清楚

     在编码时,使用花括号的优点主要有两个,首先,这代表一个代码块,程序在执行是把它作为一个整体执行,减少出错;其次,可以使代码逻辑更加清晰,易于理解维护。

//代码1
if (condition) 
{
    return x;
}
return y;


//代码2
if(condition)
{
    return x;
}
else
{
    return y;
}
1.3.2  整型变量与常量进行比较时,常量放在左边

     整型变量与常量进行比较时,用的是两个等于号==,由于数学习惯如果只采用一个等于号=,这是赋值操作,会改变变量的值,而不会发生报错,不易于对程序进行报错检查,而整型变量与常量进行比较时,常量放在左边,如果只采用了一个等于号,编译器会强制报错要求更改,因为等号赋值左值必须是变量!而双等于号没有要求。

//代码3
int num = 1;
if(num == 5)
{
    printf("hehe\n");
}

//代码4
int num = 1;
if(5 == num)
{
    printf("hehe\n");
}

2、switch 语句

      switch语句也可以作为一种分支语句,它有一个限制条件就是判断条件必须是整型表达式,有一定的适用范围

2.1 switch语句的基本语法结构

语句项是什么呢?

注意事项:

1、swtich后面的括号里必须是整型表达式/变量,变量的类型可以是:整型、字符型、枚举(字符型和枚举常量本质上也是整型值)。

2、case后面跟的是变量的所有取值!必须是整型!

3、case语句决定了分支的入口,break语句决定了分支的出口,二者结合使用才能达到分支的效果!

4、并不是说每个case语句必须有一个break语句,break语句的位置取决于实际的代码逻辑!

2.2 在switch语句中的 break

//代码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;
}

 当我输入了一个1,在没有break语句情况下,它将后面的都打印出来

//代码2
#include<stdio.h>
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;
}

 代码运行结果如下:

🔺注意:

        在这里的break实现了在switch语句跳出分支的效果,如果没有break语句的话,他就会一直按着顺序一条一条语句执行

        因此,在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

#include <stdio.h>
int main()
{
    int day = 0;
    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;
}

 有时候我们的需求变了
1.输入1-5,输出的是“weekday”

2.输入6-7,输出“weekend”
所以我们的代码就应该像上面这样实现了,本质上就是一个双分支!

break语句的实际效果是把语句列表划分为不同的分支部分!!!

编程好习惯!

       在最后一个 case 语句的后面加上一条 break语句。

之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句。实际开发增加分支时,避免相互影响!

2.3 default 语句

       如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?你可以在语句列表中增加一条default子句,把下面的标签default:写在任何一个 case 标签可以出现的位置。当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置。其实就是处理输入的异常值,给用户一个提醒,方便反馈!

#include<stdio.h>
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;
}

假如我们输入8,这时候没有case 8可以匹配,则会与default匹配输出default下的语句:

编程好习惯!

      在每个switch语句中都放一条default子句是个好习惯,甚至可以在后面再加上一个break。 

三:分支语句小结

 以上便是详细总结的分支语句的全部内容,可以留下你们点赞、关注、评论,您的支持是对我极大的鼓励,下期再见!

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

未来可期,静待花开~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值