C语言之顺序结构、选择结构和循环结构(break和continue的不同作用)

所有语言的结构总共有三种,分别是顺序结构、选择结构和循环结构,C语言也不例外。

一、顺序结构

  • 所谓顺序结构就是按照语句的书写顺序,一步一步运行。
//例题:
 #include <stdio.h>
 #include <stdlib.h>

 int main()
 {
     int a = 0;
     int b = 2;
     printf("%d\n", a + b);
     system("pause");
     return 0;
 }

二、选择结构(分支语句)

人生中,我们会面临很多种选择,不同的选择就会造成不同的结果。而在C语言中就可以用分支语句将这些选择与结果表达出来。

/*例如,如果我们选择好好学习,结果就是找到份好工作。
如果选择不好好学习,结果就是每天乞讨。
*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a = 0;
    printf("你会选择好好学习吗?(0/1)");
    scanf("%d", &a);
    if(1 == a)
    {
        printf("找到份好工作!\n");
    }
    else
    {
        printf("每天乞讨!\n");
    }
    system("pause");
    return 0;
}

根据上面的简单演示,我们可以简单了解到分支语句的使用,接下来我们来深入了解。

  • 分支语句主要有两种 if 语句和 switch 语句。

1.if语句

  • if语句的语法结构:

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

  • 对于①,如果表达式为真,就执行语句,为假就不执行。

  • 对于②,如果表达式为真,就执行语句1,否则不执行语句1,执行语句2。

  • 对于③,如果表达式1为真,就执行语句1;如果表达式1为假就看表达式2,如果表达式2为真,就执行语句2,如果表达式2也为假,就执行表达式3。

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

  • 当语句是多条语句时要用“{ }”将其结合在一起。

//例题
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int sum = 0;
    int a = 0;
    int b = 0;
    printf("请输入a的值(1~3):\n");
    scanf("%d", &a);
    if(1 == a)
    {
        b = 2;
        sum = a + b;//sum = 1 + 2 =3
        printf("sum = %d\n", sum);
    }
    else if(2 == a)
    {
        b = 10;
        sum = a + b;//sum = 2 + 10 = 12
        printf("sum = %d\n", sum);
    }
    else
    {
        b = 12;
        sum = a + b;//sum = 3 + 12 = 15
        printf("sum = %d\n", sum);
    }
    system("pause");
    return 0;
}

2.switch语句

  • switch语句常常用于多个分支的情况(有很多种选择的时候)。

  • 相当于多个if… else if…else if…的语句。

  • switch语句的语法结构:
    switch (整型表达式)
    {
          case 整型常量表达式:
                     语句;
    }

  • 实际上单独的switch语句是无法实现分支的作用的,在switch语句中实现分支的是关键字break,故我们要搭配break关键字。

  • 若我们输入的选择所有case的语句项中都没有。则需要用default子句来执行,所有在case中找不到的值,都可以通过执行default后面的语句来使程序不会报错和崩溃。每个switch语句中只有一条的default子句。

//例题
#include <stdio.h>
#include <stdlib.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://当day不是1~7的值时执行default后面的语句。
           printf("输入的day不符合规定!");
           break;
    }
    system("pause");
    return 0;
}
  • 其实不是每个case语句项中都要加break关键字,加break关键字主要为了实现分支,使选择的结果分类。就如同可能我们做出了两三个不同的选择,但其最终的结果是一样的,此时这两三个不同的选择就不需要分支,就不需要break关键字。
//例题:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int day = 0;
    scanf("%d", &day);
    switch(day)
    {
        case 1:
        case 2: 
        case 3: 
        case 4:  
        case 5: 
           printf("工作日\n");
           break;
        case 6:
        case 7: 
           printf("休息日\n");
           break;
        default://当day不是1~7的值时执行default后面的语句。
           printf("输入的day不符合规定!");
           break;
    }
    system("pause");
    return 0;
}

三、循环结构

  • C语言中循环语句主要有三种分别是 while 语句、do while 语句和 for 语句。

1. while循环语句(先判断再执行)
(1)while循环语句的基本了解

  • while语句的语法结构:
    while (表达式)
    {
            循环语句;
    }
//例题:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 0;
    while(i <= 5)
    {
        printf("我爱敲代码!\n");
        ++i;
    }
    system("pause");
    return 0;
}
  • 上面例题的执行结果就是输出6次“我爱敲代码!”
  • 根据上面的例题可以得到while循环语句的过程是,先判断while(表达式)中的表达式是否为真,若为真就进入循环体,执行循环语句,之后再进行判断表达式,若为真则继续执行循环语句,就这样一直循环下去,但是若表达式为假,就结束循环。

(2)break和continue在while循环中的作用

  • break表示停止循环,即从break处终止接下来的所有循环,直接永久终止循环。
  • continue是停止本次循环,从continue处停止本次循环直接进入下一次循环,本次循环中continue之后的语句不再执行。
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int i = 0;
   while(i <= 10)
   { 
       ++i;
       if(i == 6)
           break;
       printf("%d ", i);
   }
   system("pause");
   return 0;
}
  • 该代码执行后的结果为 1 2 3 4 5
  • 当i = 6的时候,执行break,跳出本次循环并且终止以后的所有循环。
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int i = 0;
   while(i <= 10)
   { 
       ++i;
       if(i == 6)
           continue;
       printf("%d ", i);
   }
   system("pause");
   return 0;
}
  • 该代码执行后的结果为 1 2 3 4 5 7 8 9 10 11
  • 当i = 6的时候,continue也会跳出本次循环,但会直接执行下一次循环,本次循环中continue之后的代码都不会执行,所以6是没有被输出。

2. do while 循环语句(先执行再判断)
(1)while循环语句的基本了解

  • do while循环的语法结构:
    do
    {
           循环语句;
    }while(表达式);
  • do while 循环与while循环大致一样,唯一区别在于do while循环无论如何都要先执行一次循环语句,然后再判断表达式,若表达式为真,则继续执行循环语句,继续判断,若表达式为假,则结束循环。
//例题:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 0;
    do
    {
        printf("我爱敲代码!\n");
        ++i;
    }while(i <= 5);
    system("pause");
    return 0;
}
  • 上面的例题执行的结果是输出6次“我爱敲代码!”
  • 先执行一次循环语句输出一次“我爱敲代码!”,再判断 i 是否小于等于5。

(2)do while和while的区别

#include <stdio.h>
#include <stdlib.h>

//代码1
int main()
{
    int i = 1;
    do
    {
        printf("我爱敲代码!\n");
        ++i;
    }while(i <= 0);
    system("pause");
    return 0;
}

//代码2
int main()
{
    int i = 1;
    while(i <= 0)
    {
        printf("我爱敲代码!\n");
        ++i;
    }
    system("pause");
    return 0;
}

  • 代码1执行的结果是 输出 1 次“我爱敲代码!”
  • 代码2执行的结果是 输出 0 次“我爱敲代码!”
  • 因为do while 无论如何都要先执行一次循环语句,再判断表达式是否为真,而while是先判断了表达式为假,直接结束了循环,不进入循环中。

3. for 循环语句

  • for循环的语法结构:
    for(表达式1;表达式2;表达式3)
    {
             循环语句;
    }

  • 表达式1是变量进行初始化的部分,表达式2是条件判断部分,表达式3是调整部分。

//例题
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 0;
    for(i = 0; i <= 5; ++i)
    {
        printf("我爱敲代码!\n");
    }
    system("pause");
    return 0;
}
  • 上面例题的执行结果依旧是输出6次“我爱敲代码!”。
  • for循环的执行过程是,第一次先执行表达式1将变量进行初始化后,再执行表达式2进行判断,若表达式2为真,则执行循环语句,然后再执行表达式3,之后执行表达式2进行再次判断,若表达式2为真,则执行循环语句,然后再执行表达式3,就此循环下去。若表达式2为假,则结束循环。

(2)break和continue在for循环中的作用

  • break和continue在for循环中的作用和在while循环中的作用大致相同。但还是有一丢丢的区别。
``c
//例题:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 0;
    while(i <= 5)
    {
        printf("我爱敲代码!\n");
        ++i;
    }
    system("pause");
    return 0;
}
  • 上面例题的执行结果就是输出6次“我爱敲代码!”
  • 根据上面的例题可以得到while循环语句的过程是,先判断while(表达式)中的表达式是否为真,若为真就进入循环体,执行循环语句,之后再进行判断表达式,若为真则继续执行循环语句,就这样一直循环下去,但是若表达式为假,就结束循环。

(2)break和continue在for循环中的作用

  • break表示停止循环,即从break处终止接下来的所有循环,直接永久终止循环。
  • continue是停止本次循环,从continue处停止本次循环直接进入下一次循环,本次循环中continue之后的语句不再执行。
  • break在for循环和while循环中没有人和区别,而continue是有区别的,区别如下
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int i = 0;
   while(i <= 10)
   { 
       if(i == 6)
           continue6;
       printf("%d ", i);
       ++i;
   }
   system("pause");
   return 0;
}
  • 该代码执行的结果为0 1 2 3 4 5 6死循环。
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int i = 0;
   for(i = 0; i <= 10; ++i)
   { 
       if(i == 6)
           continue;
       printf("%d ", i);
   }
   system("pause");
   return 0;
}
  • 改代码执行的结果为0 1 2 3 4 5 7 8 9 10,并不会造成死循环。
  • 根据上面两个相同的例题和while循环的例题对比发现,其实break和continue在两个循环中的意义是一样的,但是两种循环最终输出的结果不一样是由于for循环和while循环的执行过程不一样造成的。for循环内部的continue会跳到调整部分,这样就不会造成死循环了。
  • for循环的出现是为了解决while循环的初始化部分、判断部分和调整部分比较分散的问题。
  • 使用for循环时,一定不可以在循环体内改变循环变量,防止失去控制。
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int i = 0;
   int arr[10] = {1,2,3,4,5,6,7,8,9,10};
   for(i = 0; i <= 12; ++i)
   { 
       printf("我爱敲代码!");
       arr[i] = 0;
   }
   system("pause");
   return 0;
}
  • 该代码的结果是死循环。
  • 因为数组总共就10个元素,i最大应该为9,但是我们for循环中i最大为12,此时会使i和arr[
    12]使同一块空间,然后我们在循环内部将arr[12]只成0了,此时i也变成0了,就会造成死循环。
  • 建议for循环的控制变量采用前闭后开的写法。
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页