盘复分支语句和循环语句的那些知识

发布于:2023-02-14 ⋅ 阅读:(424) ⋅ 点赞:(0)

目录

1.分支语句

一.if语句

        if语句的语法结构

        多分支

                  悬空else

二.switch

        switch的语法结构

          小结:

         2.3种循环语句

     1.while()

          小结

     2.for循环

         for循环中的一些变形

     3.do-while 循环

总结


1.分支语句

分支语句又叫做条件判断语句,由if语句switch语句构成

一.if语句

if语句的语法结构

if(表达式)//单分支

语句;

1.注意事项

()内部放表达式,判断的结果,为真,则执行,为假则跳过。在c语言中,非零即为真。

我们来看一道题:“if语句中,0为假,1为真。” ---> 答案是错误的。 1为真是没错,但是呢,它不全,以偏概全了。不能说除了1以外的数字就不是真的。

2.注意事项

if语句后面呢,只能跟一个语句,如果要多个语句,需要用{}。

多分支

第一类:

if(表达式) //满足条件进入if语句中

{

      语句;

}

else //不满足条件进入else语句中

{

      语句;

}

9f618697d40363e5df5dad3b924bd9ac.png

第二类:

if(表达式)

{

   语句;

}

   else if(表达式)

{

   语句;

}

//  .... (还可以继续用 else if)

   else

{
   语句;
}

要注意的是else if后面还需要增加表达式。 

91fb96f6f849266c952245589cdcce2c.png

悬空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;

}

你认为结果是什么呢?可以思考下

答案呢

什么都没执行。

463151844b8d2878c72218518e0cb7cf.png

当我们用VS2019的时候,我们可以发现,else与离它最近的if对齐了。

这就是悬空else的匹配原则。

我们在回过来说上面的代码,如果按照它的代码,第一个if与else的对齐。本意上是想:如果 a==1的时候,进去判断b是否等于2,是则打印,不是则跳过,当a != 1 的时候,则打印 haha。

我们可以加上大括号来实现

int main()

{
    int a = 0;

    int b = 2;

    if(a == 1)

    {
        if(b == 2)
 
        {

         printf("hehe\n");

        }
 
    }

    else

   {

      printf("haha\n");

   }

      return 0;

}

运行结果:

2471c9b87ed1eb760ad48365b40457be.png

二.switch

switch 常用于多分支

switch的语法结构

switch(整型表达式)

{

     case 整形表达式:
                     语句;

     case 整形表达式:
                     语句;

     case 整形表达式:
                     语句;

     case 整形表达式:
                     语句;

}

整形有 char ,int, long , short ,以及无符号的这些类型

我们来看个练习

用switch语句实现

比如:

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

那答案是否是这样呢?

int main()
{
     int i = 0;
     scanf("%d", &i);
     switch (i)
     {
          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;

}

运行结果:

1d9be8212f9c4a028b8fa312edb46567.png

这并不是我们想要的。

switch(i) ,i 输入多少,相当于是我们从哪个入口(case 整形表达式)进入我们的switch语句中。按照顺序结构一行一行的执行下去。例如这里,我们输入 2 ,找到 case 2 这个入口,进去switch语句中,一步一步的走下去。

如果想要 输入2,输出结果只有星期二,我们就要用到 break。

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

我们还需要想一个问题,如果输入的数字,不是1-7中的,我们是不是也需要处理一下。这时我们需要用到default。

default子句

default子句可以写在switch语句中的任意位置。

当switch中表达式的值,与case 标签(所对应的整形的值) 不匹配的时候,就会进入default子句。

一个switch语句中只能有一个default子句

那我们改一下代码看看结果如何:

int main()

{
    int i = 0;
    scanf("%d", &i);
    switch (i)
    {
        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("输入错误,重新输入");
}
    return 0;
}

fac6fc6124886f4fbaa8cd5375bfe863.png

9c988da4f7cde1b5b2c163743f53e6dc.png

小结:

分支语句有2类,if语句和switch语句

else的匹配原则:离else最近的if相匹配

if(表达式)

     语句;

switch(整形表达式)
{
    case 整形表达式:
            语句;
            break;
    case 整形表达式:
            语句;
            break;
     default :
            语句;
}

2.3种循环语句

循环语句中,有三个关键的东西:1.循环变量 2.条件判断部分(用于循环的终止) 3.调整部分(调整循环变量使其达到循环终止的条件)

1.while()

while循环流程图:

ce65497ae0cb7f5b2e5871bb46628198.png

语法结构

while(表达式)     //表达式-->循环条件

{

       循环语句;  //循环语句中要有,循环变量调整的部分

}                 //循环变量,在进入while循环之前设置好

我们来看break和continue在循环中的作用

int main()

{

      int arr[] = {1,2,3,4,5,6,7,8,9,10};//定义一个数组

      int n = 0;     //循环变量

      while (n <10)  //循环判断条件

     {

          printf("%d",arr[n]);

          if (n == 6)

          break;

           n++;  //循环调整部分

      }

    return 0;

}

0be6f7810bcd84c3d4bb5e471b83f994.png

在看看continue

int main()

{

      int arr[] = {1,2,3,4,5,6,7,8,9,10};//定义一个数组

      int n = 0; //循环变量

      while (n <10)//循环判断条件

      {

          printf("%d",arr[n]);

          if (n == 6)

          continue;

          n++;//循环调整部分

     }

      return 0;

}

715424ff3c2b38968845557497836e4c.png

我们来分析下:

break 在循环中的作用呢,是跳出循环。

continue在循环中的作用,是结束当前条件下的循环,continue下面的语句都不在执行,直接回到判断条件那,重新进入循环。

第二个代码,能不能不死循环呢,成功打印出1234568910呢,

肯定可以的,将我们循环调整部分,放到continue的上面就可以成功打印了。

65f54a0566e57af415820501d99e949f.png

需要将我们的 三要素进行调整一下。

小结

while循环中,条件判断的次数总比执行循环语句的次数多一次。

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。

break是直接结束循环。

2.for循环

语法结构

for(表达式1;表达式2;表达式3)

{

     循环语句;

}

表达式1 --> 循环变量

表达式2 --> 条件判断部分

表达式3 --> 调整部分

for循环流程图

expr -- 表达式

d5b8e2eb81545045609007325c2850bd.png

这里的break和我们while循环中的break是一样的;

continue呢存在一点差异。

break:

a742f38c48d0bc848568b3959050e15a.png

continue:

cd88b544d1c2ce635f64c9be96fdb99f.png

在for循环中,使用continue不会遇到死循环,因为我们n++永远是在continue的上面,我们看流程图也是可以发现这一点的

for循环中的一些变形

int main()

{

     //代码1

    for(;;)

    {

        printf("hehe\n");

    }

  //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。



    //代码2

    int i = 0;

    int j = 0;

    //这里打印多少个hehe?

   for(i=0; i<10; i++)

   {

       for(j=0; j<10; j++)

      {

         printf("hehe\n");

      }

    }



  //代码3

   int i = 0;
 
   int j = 0;

    //如果省略掉初始化部分,这里打印多少个hehe?

   for(; i<10; i++)

   {

       for(; j<10; j++)

      {
 
          printf("hehe\n");

      }

   }



  //代码4-使用多余一个变量控制循环

    int x, y;

    for (x = 0, y = 0; x<2 && y<5; ++x, y++)

    {

        printf("hehe\n");

    }

        return 0;

}

大家可以尝试的去看看,我们只要增加一个变量 count 来计数就行了。

3.do-while 循环

语法结构

do

{

    循环语句;

}while(表达式);

do-while流程图

5ace730f631349f5d146af97045b0869.png

do-while循环中,不管满不满足条件,都会执行一次。

在来看看break和continue在do-while循环中的作用

break:

8bed4a31fbb2a6c4341125ec498a95eb.png

和上面两种循环中一样,跳出循环。

continue:

bfc11e2211fb9779580c2dd01163aefb.png

和我们while循环中一样。我们要将循环调整部分放在continue的上面,我们才能不死循环。

改变后

78ee1d12cacfa35aaf1bd3ca6522d9fe.png

同样将我们的循环三要素改变。

总结

回顾了分支语句和循环语句。

分支语句 2类,if语句,switch语句

if语句的单分支,多分支以及else的匹配原则。

switch语句与break和default连用

循环语句 3类

while(表达式), for(表达式1;表达式2;表达式3), do-while(表达式)

循环语句中break和continue在各自循环的作用。

本文含有隐藏内容,请 开通VIP 后查看