『C语言从入门到进阶』第 ② 期 - 循环语句

简介: 『C语言从入门到进阶』第 ② 期 - 循环语句

image.png

目录


什么是循环

while循环

do while循环

for循环

循环结构中的break与continue

break

continue

goto语句


文章导读


本篇文章主要内容为学习C语言中的循环结构,并掌握whiledo whilefor三种形式的循环,并认识关键字breakcontinue以及goto语句。


正文


什么是循环


什么是循环?简单定义,循环就是不断地重复做一件事情。在一段程序中,同样也能实现循环。C语言为我们提供了三个关键字来实现三种不同形式的循环:

  • while
  • for
  • do while

虽然有三种不同形式的循环,但它们也仅仅是长的样子不同罢了。不管是哪一种循环方式,都是由两个基本结构组成的:

  • 循环的内容
  • 进入循环的条件

首先来看看while循环。


while循环


while的语法结构很简单:

while(表达式)
{
  ...//循环语句
}
  • 表达式:进入循环的条件若表达式的结果为真,则执行循环语句;若为假,则不执行
  • 循环语句: 循环的内容

举个例子,若是我们需要在屏幕上打印 0—9 的数字,只需这样写:

int main()
{
    int i = 0;
    while (i < 10)
    {
        printf("%d ", i);
        i=i+1;
    }
    return 0;
}


这段代码的运行逻辑是:

  • 判断表达式是否为真,若为真,则进入循环,执行循环语句
  • 执行完循环语句,再次判断表达式是否为真,若为真,就继续执行循环语句,如此往复

再来看看while循环的兄弟——do while。


do while循环


do while循环的语法结构是这样的:

do
{
  //...(循环语句)
}while(表达式);


  • 表达式:进入循环的条件若表达式的结果为真,则执行循环语句;若为假,则不执行
  • 循环语句: 循环的内容

do while循环与while循环非常相似,只有一点不同:

  • while先判断表达式,再执行循环语句
  • do while先执行循环语句,再判断表达式

若我们还想在屏幕上打印 0—9 ,则需要这样写:

int main()
{
    int i = 0;
    do
    {
        printf("%d ", i);
        i = i + 1;
    } while (i < 10);
    return 0;
}


22.png


再来认识一下for循环。


for循环


for循环的语法结构:

for(表达式1; 表达式2; 表达式3)
{
  ...//循环语句;
}


  • 表达式1:用于初始化循环变量
  • 表达式2:用于判断进入循环的条件是否为真
  • 表达式3:用于控制循环遍历

什么是循环变量

  • 用于控制循环的变量,例如上面两个例子中的变量i;

for循环所说与while循环长相差异有点大。但是对比一下就会发现相似的地方:

  • while循环的循环变量定义在{}的外面,for循环可以定义在()外面,也可以定义在()里面。
  • 1,2两种写法其实并没有本质区别,只不过第一种写法是C99标准才支持的。
1.定义在里面(C99支持)
for (int i = 0; i < 10; i++);
2.定义在外面
int i = 0;
for (i = 0; i < 10; i++);
  • while循环的判断是否进入循环的表达式在()中,for循环的判断为表达式2
  • while循环控制循环变量的语句{}内,for循环中为表达式3

利用for循环在屏幕上打印 0—9 的数字,应该这样写:

for (int i = 0; i < 10; i++)
{
    printf("%d ", i);
}

23.png


循环结构中的break与continue


为了好的控制循环,C语言还为我们提供了两个关键字breakcontinue,以适应各种复杂的情况。


break


这里的break与上一章分支语句中的switch语句中的break作用相似。

break的作用:

  • 在循环结构中当程序执行到break时,就立即停止循环并彻底结束循环

用法示例:

在打印0—9的过程中,加入break语句,看看是什么效果:

int main()
{
    int i = 0;
    while (i<10)
    {
        if (i == 5)
        {
            break;
        }
        printf("%d ", i);
        i = i + 1;
    }
    return 0;
}

24.png

这段程序的运行逻辑是:

  • 在循环的过程中,当 i 的值为5时。满足进入if的条件,执行break,循环就不会在往下执行
  • 注意,这时i的值是5.屏幕上打印1—4

break在三种循环中的作用都是相同的,这里就不再一一举例。


continue


continue的作用:

  • 在循环结构中,当程序执行到continue语句时,不再执行本次循环,直接进入下一次循环。注意,不是彻底结束循环,而仅仅是结束本次循环

用法示例:

打印 0—9 的数字时,不想打印5:

int main()
{
    int i = 0;
    for (int i = 0; i < 10; i++)
    {
        if (i == 5)
        {
            continue;
        }
        printf("%d ", i);
    }
    return 0;
}

25.png


goto语句


C语言中提供了可以随意滥用的 goto 语句和标记跳转的标号。从理论上 goto 语句是没有必要的,实践中没有 goto 语句也可以很容易的写出代码。

但是某些场合下 goto 语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

  • 例如,一次跳出两层或多层循环

多层循环这种情况使用 break 是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto 语言真正适合的场景如下:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
error:
     ...// 处理错误情况

如上,程序中不管嵌套了多少层循环,只要遇到goto语句,就会跳到goto语句标记(例如error)的地方并继续向下执行。


目录
相关文章
|
1天前
|
C语言
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)(下)
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)
6 0
|
1天前
|
程序员 编译器 C语言
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(中)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
11 0
|
1天前
|
存储 编译器 C语言
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose(下)
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose
7 0
|
1天前
|
存储 数据库 C语言
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose(上)
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose
8 0
|
1天前
|
C语言 C++
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(中)
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free
8 0
|
1天前
|
编译器 数据库 C语言
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(上)
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free
9 0
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(上)
|
1天前
|
存储 C语言
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)(下)
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)
8 0
|
1天前
|
存储 C语言
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)(中)
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)
8 0
|
1天前
|
编译器 C语言 C++
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)(上)
C语言进阶⑮(自定义类型)(结构体+枚举+联合体)(结构体实现位段)
7 0
|
1天前
|
C语言 C++
C语言进阶⑭(内存函数_以字节操作)momcpy+mommove+memcmp+memset
C语言进阶⑭(内存函数_以字节操作)momcpy+mommove+memcmp+memset
5 0