(保姆级)一篇搞懂分支语句

C语言是结构化的程序设计语言,这里的结构指的是顺序结构选择结构循环结构,C语言能够通过语句实现这三种结构,其实就可以通过这三个结构来实现我们的代码。


选择结构(分支结构):我们可以通过 if、switch 语句来实现我们分支结构


 循环结构:我们可以通过for、while、do while 语句实现我们的循环语句。


 1.if 语句(分支语句)

1.1 if

if语句的语法形式:

if(表达式)
    语句;

如果表达式为真,执行语句;如果表达式为假,语句不执行。

这个时候我们可以输入简单的代码,来实现我们的分支语句:

#include <stdio.h>
int main()
{
    //先给我们的 a 赋上3的值。
    int a = 3;
    // if 语句来判断a是否等于1。很显然a = 3,那么结果就会打印hehe.
    if( a == 3 )
        printf("hehe");
    return 0;
}

结果:hehe

# 其中 if( a == 3) 中的 == 是表判断,a 是否等于3.
#而 = 为赋值,而非判断,如果我们写成if(a = 0)
#那么 a 会被赋值0.

 在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。

那我们来看例子:

#include <stdio.h>
int main()
{
    if(0)
        printf("hehe");
    return 0;
}

 结果:

并没有打印hehe;

#include <stdio.h>
int main()
{
    if(1)
        printf("hehe");
    return 0;
}

结果:hehe 

所以如果我们将 == 不小心写成了 = ,那么结果就很容易出现问题

1.2 else

if...else...语句让我们实现分支,语法形式:

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

 如果表达式为真,我们就直接执行语句1;如果表达式为假,我们就执行语句2;

#include <stdio.h>
int main()
{
    //给一个变量初始化
    int a = 0;
    //我们通过输入一个值,如何将这个值赋给a,下面就是执行程序。
    scanf("%d",&a); 
    //分支语句,如果 a 不是0 ,那么就是打印好好学习C语言,如果 a 是 0 ,那么就是打印我要睡懒觉
    if(a)
        printf("好好学习C语言");
    else
        printf("我要睡懒觉");
    return 0;
}

1.3 分支中包含多条语句

默认在ifelse 语句中默认都只能控制一条语句。什么意思呢?

无论 if 后面的表达式是否为真,第三行的表达式都会执行。   

1|if(表达式)
2|    printf("hehe");
3|    printf("haha");
#include<stdio.h>
int main()
{
    int age = 0;
    //输入
    scanf("%d",&age);
    if(age >=18)
        printf("成年了\n");//\n为换行符,相当于enter回车;
        printf("可以交女朋友了\n");
     return 0;   
}

无论我们输入的年龄是多少,都会给我们打印可以交女朋友了。

输入:16       

结果:可以交女朋友了           

输入:18

结果:成年了

           可以交女朋友了        

我们可以看到 printf("可以交女朋友了\n"); 这条语句是根本不受到 if 语句的控制的。

那么我们来介绍一个可以将它们两条语句进行管控的东西

程序块:{ }

通过程序块,将两个语句括在一起,就能将它们看作一个整体,进行判断执行。

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d",&age);
    if(age>=18)
    {
        printf("成年了\n");
        printf("可以交女朋友了\n");
    }
    else
    {
        printf("未成年\n");
        printf("不可以早恋喔\n");
    }
    return 0;
}

1.4 嵌套if

else  if :

如果我们的分支语句只有两种可能,用 if 和 else来进行两种选择的判断,那是不是太单调了。

我们需要有更多的选择。

        

#include<stdio.h>
int main()
{
    int num = 0;
    scanf("%d",&num);
    if(num == 0)
        printf("输入的数字是0\n");
    else if(num>0)
        printf("输入的数字是正数\n");
    else
        printf("输入的数字是负数\n");

    return 0;
}

 我们其中出现了3个语句:if         else if      else

我们新出来的else if 我们可能不明白它的意思,但是我再写个代码你们就明白了。

#include<stdio.h>
int main()
{
    int num = 0;
    scanf("%d",&num);
    if(num == 0)
        printf("输入的数字是0\n");
    else 
    {
        if(num>0)
            printf("输入的数字是正数\n");
        else
            printf("输入的数字是负数\n");
    }
    return 0;
}

 原来elseif 其实就是if 语句嵌套在了else语句当中。由于为了方便,我们写成elseif方便我们书写。

#include <stdio.h>
int main()
{
     int age = 0;
     scanf("%d", &age);
     if(age<18)
         printf("少年\n");
     else if(age<=44)
         printf("⻘年\n");
     else if(age<=59)
         printf("中⽼年\n");
     else if(age<=90)
         printf("⽼年\n");
     else
         printf("⽼寿星\n");
     return 0;
}

我们使用多个elseif 都是没有问题的,我们可以运用elseif 来实现多个选择的分支结构。 

1.5 悬空else问题

如果有多个if 和else,可以记得这样一条规则,else总是和更最接近的 if匹配。

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

我们看到else是和 if(a == 1)对齐的,如果说else和 if(a == 1)是匹配的,那么结果就打印haha,

 结果是什么都没有打印,为什么会这样呢?

else总是和更最接近的 if匹配。

 这个代码实际上是这样子的,下面的else和上面的第一个 if 相匹配

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

2.switch 语句(分支语句)

2.1 switch语句和 if 语句的区别

if 语句和switch语句的区别:在多分支中,switch语句相对较为直观,可读性高。

通过题目来比较 if 语句和switch语句的不同:

输入一个1~7的数字,对应打印对应的星期几

if 语句:

#include <stfio.h>
int main()
{
    int day = 0;
//输入
    scanf("%d",&day);    
    if(day==1)
        printf("星期一\n");
    else if(day==2)
        printf("星期二\n");
    else if(day==3)
        printf("星期三\n");
    else if(day==4)
        printf("星期四\n");
    else if(day==5)
        printf("星期五\n");
    else if(day==6)
        printf("星期六\n");
    else (day==7)
        printf("星期七\n");
    return 0;
}

switch 语句:

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

 2.2 switch语句中的case

switch的语法形式:

switch(变量)
{
 case 值:
    语句 1;
    break;  
 case 值:
    语句 2; 
    break; 
default:
    语句 3;
    break;
}
  • switch语句中的case用来判断day的值,

如果day为1,那么就会打印下面的语句

  • case与后面的值要隔一个空格喔
switch(day)
{
case 1:
   printf("星期一");
   break;
}

day=1

打印:星期一

2.3 switch语句中的break

switch语句中的case后面不需要用程序块{}

如果case表达式为真,后面的语句全部执行

如果case表达式为假,直接跳到下一个case表达式


  •  如果case表达式为真,后面的语句全部执行:
#include<stdio.h>
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
        printf("星期一\n");
    case 2:
        printf("星期二\n");
    }
    return 0;
}

输入:1

结果:星期一

           星期二


  • 这个时候我们就需要有个break来帮助我们跳出switch语句。
  • #include<stdio.h>
    int main()
    {
        int day = 0;
        scanf("%d",&day);
        switch(day)
        {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        }
        return 0;
    }

    输入:1

       结果:星期一


2.4 switch语句中的default

如果前面的case表达式都不满足的话,就会跳到default,执行default后面的表达式。

#include <stdio.h>
int main()
{    int day = 0;
     scanf("%d", &day);
 
     switch(day)
     {
     case 1:
     case 2:
     case 3:
     case 4:
     case 5:
     printf("⼯作⽇\n");
     break;
     default:
         printf("休息⽇\n");
         break;
     }
     return 0;
}

其实defaultif 语句中的 else有类似之处。

猜你喜欢

转载自blog.csdn.net/2302_79491024/article/details/134151436
今日推荐