C语言基础【分支语句】

目录

分支语句

if -else语句:

if - else语句多分支: 

if -else语句书写形式: 

else的匹配:

switch语句: 

switch基本语法:

switch语句中的break和continue: 

default子句:


分支语句

       在我们的日常生活中,经常会面临着许多的选择,而往往这些不同的选择也伴随着不同的结果,例如在大学中,如果你好好学习,毕业时会有一份好的工作,而如果你不思进取,荒废学业,那么最终在毕业时也会面临失业。

       在C语言中就有这么一种语句来描述这些选择以及最终产生的结果。

       C语言中的分支语句有两种分别为  if-else语句和switch语句

if -else语句:

首先介绍 if -else语句:

 if-else语句的书写格式为

     if (条件表达式)

     {

           语句1;

     }

     else

     {

           语句2;

     }

  • 语句执行的说明:首先判断if括号中条件表达式的值,若为真,则执行语句1,如果条件表达式的值为假,则执行语句2
  • 注意: if -else语句中的语句1和语句2,其中只能有一个被执行,也就是说,若执行了语句1,语句2不会再被执行,反之亦然。
  • 在条件表达式值中的真或假:非0即为真,是0则为假。
  • if -else语句支持嵌套使用。

 用一段简单的代码描述:

#include<stdio.h>
int main()
{
      int choice = 0;
      printf("你会努力写代码吗? (选择1 or 0)\n");
      scanf("%d", &choice);
      if(choice == 1)
      {
          printf("好offer");
      }
      else
      {
          printf("失业");
      }
      
      return 0; 
}

 此段代码运行结果如下:

当输入1时

 输入0时:

if - else语句多分支: 

 另外,if -else 语句可以实现多分支,其格式为

if ( 表达式 1 )
    语句 1 ;
else if ( 表达式 2 )
    语句 2 ;
else
    语句 3 ;

这里也以一段代码为例:

#include<stdio.h>
int main()
{
      int grade = 0;
      printf("请输入成绩 0-100");
      scanf("%d", &grade);
      if(grade < 60)
      {
          printf("不及格");
      }
      else if(grade >= 60 && grade < 85)
      {
          printf("良好");
      }
      else 
      {
          printf("优秀");
      }

      return 0;
}

同样在VS2019中运行结果如下:

  

 

if -else语句书写形式: 

那么在以上的示例中,if -else中所执行的语句都为单个语句,但是单个语句并不能满足我们的需求,当我们要在其中执行多条语句时,可以使用代码块来实现。

#include <stdio.h>
int main ()
{
    if ( 表达式 )
  {
        语句列表 1
  }
    else
  {
        语句列表 2
  }
    return 0 ;
}
  • 建议:在使用 if -else语句时,无论需要执行单个语句还是多条语句,都可以用一对{ }将你所要执行的语句括起来,避免出错。

 这里一对{ } 就是一个代码块,这种格式就为我们使用if -else提供了更多选择.

else的匹配:

请读者看下面这段代码

#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;
     
}

在这里,很多读者可能认为,在执行第一条if语句时,a == 1为假 ,所以执行else中的语句,输出haha.而实际情况却并不是如此,当我们将这段代码在编译器中运行后,会发现,它什么也不会输出,为什么会这样?

这是因为else的匹配原则,else会与离它最近的if相匹配,即会与第二个if语句匹配,这时我们会发现,由于a == 1为假,程序不会执行到第二个if语句,那么下面的else语句也就更不会执行了,所以它什么也没有输出。

这时我们可以将程序的格式稍作变化:

#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;
}

当我们将程序以代码块的格式书写后,会发现此时程序的内容一目了然.

所以 

  • 适当的使用{}可以使代码的逻辑更加清楚。
  • 代码风格很重要

switch语句: 

switch基本语法:

接下来介绍switch语句:

switch语句也是一种分支语句,常常用于多分支的情况:

例如:

输入 1 ,输出星期一
输入 2 ,输出星期二
输入 3 ,输出星期三
输入 4 ,输出星期四
输入 5 ,输出星期五
输入 6 ,输出星期六
输入 7 ,输出星期日

为什么我们不用if -else if -....来实现呢:形式太过复杂 

那C语言给我们提供了另外一种语句来帮助我们实现这些功能.

switch语句语法:

switch(整型表达式)

     {

          语句项;

     }

什么是语句项呢?

如下:

       case:整型常量表达式:

                         语句;

switch语句中的break和continue: 

 在switch语句中,我们必须搭配break语句才能实现真正的分支:

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

而有时候,我们会改变需求:

1.输入1-5,输出的是"weekday "

2.输入6-7,输出的是"weekend"

我们的代码也应该加以改变:

#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
        case 2:
        case 3:  
        case 4:    
        case 5:
            printf("星期五\n");
            break;
        case 6:
        
        case 7:
            printf("星期天\n");    
            break;
   }
    return 0;
}

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

default子句:

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

 具体实现如下:

#include <stdio.h>
int main()
{
    int day = 0;
    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("输入错误");
            break;
   }
    return 0;
}

  • 39
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沉默.@

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

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

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

打赏作者

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

抵扣说明:

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

余额充值