C语言循环结构详解

在C语言中,循环结构是一种重要的控制结构,它允许我们重复执行一段代码,以达到特定的目的。循环结构可以帮助我们简化重复性的任务,提高代码的效率。本篇文章将深入探讨C语言中的循环结构,包括 while 循环、for 循环、do-while 循环以及循环中的控制语句。

1. while 循环

1.1 while 循环的基本语法

while 循环是C语言中最基本的循环结构之一。它的基本语法如下:

while (条件) {
// 循环体代码
}

在这个语法结构中,条件是一个布尔表达式,当条件为真时,循环体中的代码将被执行。如果条件为假,则跳过循环体,继续执行后续的代码。

1.2 while 循环的执行流程

  1. 首先,计算条件的值。
  2. 如果条件为真,则执行循环体中的代码。
  3. 执行完循环体后,再次计算条件的值。
  4. 如果条件仍为真,则继续执行循环体,重复步骤3
  5. 如果条件为假,则跳出循环,继续执行后续的代码。

1.3 if 和 while的混淆处

在使用 while 循环时,有时候容易与if语句混淆。尤其是当条件的判断较为复杂时,我们需要仔细区分两者的使用场景。

if 语句用于在特定条件下执行一段代码,而 while 循环用于重复执行一段代码,直到条件不满足为止。

在使用 while 循环时,需要确保循环体内部的代码能够改变条件的值,以免陷入无限循环的情况。

2. for 循环

2.1 for 循环的基本语法

for 循环是C语言中常用的循环结构,它的基本语法如下:

for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体代码
}

在这个语法结构中,初始化表达式用于初始化循环变量,条件表达式用于判断循环是否继续执行,更新表达式用于更新循环变量的值。

2.2 for 循环的执行流程

  1. 首先,执行初始化表达式,初始化循环变量。
  2. 然后,计算条件表达式的值。
  3. 如果条件为真,则执行循环体中的代码。
  4. 执行完循环体后,执行更新表达式,更新循环变量的值。
  5. 再次计算条件表达式的值。
  6. 如果条件仍为真,则继续执行循环体和更新表达式,重复步骤5
  7. 如果条件为假,则跳出循环,继续执行后续的代码。

2.3 for 循环的易错之处

首先,需要确保循环变量在循环体内部被更新,以免陷入无限循环的情况。

其次,循环变量的作用范围仅限于for循环内部,如果在循环外部使用循环变量,可能会导致编译错误。

另外,初始化表达式、条件表达式和更新表达式都可以为空,但分号必须保留

2.4 while 循环和 for 循环对比

while循环 for循环
语法 while (条件) {
    // 循环体代码
}
for (初始化表达式; 条件表达式; 更新表达式) {
    // 循环体代码
}
使用场景 循环次数不确定时 循环次数已知或可计算时
循环变量 需要在循环体内部手动更新 在循环结构中自动更新
作用范围 循环外部无法访问循环变量 仅限于for循环内部

3 do-while 循环

3.1 do-while 循环的基本语法

do-while循环是C语言中另一种常用的循环结构,它的基本语法如下:

do {
// 循环体代码
} while (条件);

在这个语法结构中,先执行循环体中的代码,然后再计算条件的值。如果条件为真,则继续执行循环体,重复以上步骤。如果条件为假,则跳出循环,继续执行后续的代码。

3.2 do-while 的执行流程

  1. 首先,执行循环体中的代码。
  2. 然后,计算条件的值。
  3. 如果条件为真,则继续执行循环体,重复步骤1和2。
  4. 如果条件为假,则跳出循环,继续执行后续的代码。

与 while 循环和 for 循环不同的是,do-while 循环保证循环体至少执行一次,即使条件一开始就为假。

3.3 3 种循环如何选择?

在选择使用 while 循环、for 循环还是 do-while 循环时,还是需要根据具体的需求和情况进行判断,以下我列出一个比较常规的判断方式,仅供参考。

  • 如果循环次数不确定至少要执行一次循环体,可以使用 do-while 循环。
  • 如果循环次数已知或可计算,并且需要在循环结构中自动更新循环变量,可以使用 for 循环。
  • 如果仅需要根据条件判断是否执行循环体,可以使用 while 循环。

4 循环中跳出

4.1 break 语句

在循环结构中,使用 break 语句可以提前跳出循环,即使条件仍然满足。

下面是一个使用 break 语句打印1~4范围数字的示例:

int i;

for (i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
printf("%d ", i);
} // 输出结果:1 2 3 4

在这个示例中,当循环变量i等于5时,执行 break 语句,跳出循环。

4.2 continue 语句

在循环结构中,使用 continue 语句可以提前结束当前循环的迭代,直接进入下一次迭代。

下面是一个使用 continue 语句只打印10以内奇数的示例:

int i;

for (i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue;
}
printf("%d ", i);
} // 输出结果:1 3 5 7 9

在这个示例中,当循环变量 i 为偶数时,执行 continue 语句,跳过当前迭代,直接进入下一次迭代。

使用 break 和 continue 语句可以灵活地控制循环的执行流程,以满足特定的需求。

5 循环嵌套

循环嵌套是指在一个循环结构内部嵌套另一个循环结构。通过循环嵌套,我们可以实现更复杂的循环逻辑。

下面是一个使用循环嵌套打印乘法表的示例:

int i, j;

for (i = 1; i <= 9; i++) {
for (j = 1; j <= i; j++) {
printf("%d * %d = %d\\t", j, i, i * j);
}
printf("\\n");
}

在这个示例中,外层循环控制乘法表的行数,内层循环控制每行的列数。通过嵌套循环,我们可以逐行逐列地打印乘法表的内容。

循环嵌套可以实现更复杂的循环逻辑,但需要注意循环变量的作用范围和循环条件的控制,以避免陷入无限循环的情况。

循环嵌套如果不做出一定的优化,性能上是有很严重的问题的哦,特别是多重嵌套的循环,学过数据结构与算法的朋友应该是明白的。

6 goto 语句

6.1 基本使用

在C语言中,goto 语句可以用于无条件地跳转到程序中的标记位置。它可以在一定程度上改变程序的执行流程,但过度使用 goto 语句可能会导致代码难以理解和维护。

下面是一个使用 goto 语句实现循环打印数字1~10的示例:

int i = 1;

loop:
printf("%d ", i);
i++; if (i <= 10) {
goto loop;
}

在这个示例中,使用 goto 语句将程序跳转到标记位置 loop,实现了循环的效果。

6.2 注意事项

  • 应该避免过度使用 goto 语句,以保持代码的可读性和可维护性。
  • 确保跳转的目标位置在当前作用域内,以避免跨作用域的问题。
  • 注意避免形成死循环或无限循环,以免程序无法正常结束。

一文带你掌握C语言的循环结构的更多相关文章

  1. C语言之循环结构

    程序结构: 顺序结构 条件结构(分支结构) if结构,if-else结构 ,多重if分支结构,switch结构 循环结构:做重复的事情 while循环,do..while循环和for循环. 写循环结构 ...

  2. 【C语言】-循环结构-while语句

    while语句: while循环可实现"当型"循环,即当条件成立时,执行循环体.适合无法确定循环执行次数的情况. while (表达式) { 循环语句 } 注意: 表达式为循环控制 ...

  3. 【学习笔记】【C语言】循环结构-for

    1.使用: for (语句1; 条件; 语句2) {     循环体 }   语句1:初始化语句 语句2:增量语句(执行完循环体后再执行的语句)   1.for一开始就会执行一次语句1(整个for循环 ...

  4. 【学习笔记】【C语言】循环结构-do while

    用法: while (条件) {     } do {   } while(条件);   while和do-while的区别 1.很多情况下,while和do while可以互换   2.while特 ...

  5. 【学习笔记】【C语言】循环结构-while

    1. 简单使用 while ( 条件 ) {     语句1;     语句2;     .... } 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号{}中的内容).然后再次 ...

  6. 【C语言】-循环结构-for语句

    for语句: for (表达式1;表达式2;表达式3) { 循环语句 } 表达式1 给循环变量赋初值 表达式2 为循环条件 表达式3 用来修改循环变量的值,称为循环步长. for语句的执行流程: 例: ...

  7. C语言之循环结构 for(二)

    一 for循环的嵌套使用 for循环的嵌套语法: for(int i =0;i<10;i++){ for(int j=0;j<5;j++){ } } 一般用来打印平面,或者控制平面,或者说 ...

  8. C语言之循环结构 for(一)

    一 for循环的介绍 语法: for(表达式1;表达式2;表达式3){ 循环体; } 循环步骤: A.执行表达式1,执行完毕跳转到B B.判断表达式2的结果是否为真,如果为真,跳转到C,否则跳转到E ...

  9. C语言基础-循环结构

    循环结构while while循环-图例 while循环-格式 while ( 条件 ) { 语句1; 语句2; .... } 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号 ...

  10. C语言--单层循环结构

    一.PTA实验作业 题目1:最佳情侣身高 1.实验代码 int N, i; float height; char sex; printf("输入用户个数:\n"); scanf(& ...

随机推荐

  1. [python]格式化字符串的几种方式

    目录 方式一:C风格%操作符 方式二:内置的format函数与str类的format方法 方式三:插值格式字符串 python中有以下几种方法可以格式化字符串 方式一:C风格%操作符 这种方法偏C语言 ...

  2. js判断h5页面地址的打开方式(微信、pc、移动端)

    1 function isOpenMode(){ 2 //平台.设备和操作系统 3 var system = { 4 win: false, 5 mac: false, 6 xll: false, 7 ...

  3. U盘目录穿越获取车机SHELL - 分析与复现

    github上破解日系车机的文章 - https://github.com/ea/bosch_headunit_root 其中有利用 U 盘获取车机 shell 的操作 主要根据下面这篇文章进行环境搭 ...

  4. 应用管理平台Walrus开源,构建软件交付新范式

    今日,数澈软件Seal(以下简称"Seal")宣布正式开源 Walrus,这是一款基于平台工程理念的应用管理平台,致力于解决应用交付领域的深切痛点. 借助 Walrus 将云原生的 ...

  5. 如何利用AI智能聊天机器人10秒钟做出一个故事绘本的神奇插件

    原文链接:如何利用AI智能聊天机器人10秒钟做出一个故事绘本的神奇插件 ChatGPT以下称为AI智能聊天机器人 一.AI智能聊天机器人4中集成"Stories"插件 对于已经熟悉 ...

  6. Mybatis插件功能

    1 插件的作用 在Mybatis执行SQL的生命周期中,会使用插件进行埋点,主要包括Executor.StatementHandler.ParameterHandler和ResultSetHandle ...

  7. 聊一聊 Go 的内存对齐

    前言 在一次工作中,需要使用 Go 调用 DLL 文件,其中就涉及到内存对齐的相关知识,如果自定义的结构体内存布局和所调用的 DLL 结构体内存布局不一致,就会无法正确调用.所以,一旦涉及到较为底层的 ...

  8. 《Kali渗透基础》14. 无线渗透(四)

    @ 目录 1:相关工具 1.1:Aircrack-ng 1.1.1:airmon-ng 1.1.2:airodump-ng 1.1.3:aireplay-ng 1.1.4:airolib-ng 1.1 ...

  9. minio 支持object搜索方案

    minio支持上传时对object打标签,查询时可以根据标签做筛选.但是有ftp上传文件的需求,导致无法给object打标签.并且也不清楚minio对于根据标签的筛选性能如何,因此我们打算将objec ...

  10. vue3探索——5分钟快速上手大菠萝pinia

    温馨提示:本文以vue3+vite+ts举例,vite配置和ts语法侧重较少,比较适合有vuex或者vue基础的小伙伴们儿查阅. 安装pinia yarn yarn add pinia npm npm ...