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. 利用pytorch自定义CNN网络(一):torchvision工具箱

    本文是利用pytorch自定义CNN网络系列的第一篇,主要介绍 torchvision工具箱及其使用,关于本系列的全文见这里. 笔者的运行设备与软件:CPU (AMD Ryzen 5 4600U) + ...

  2. maven系列:基本命令(创建类、构建打包类、IDEA中操作)

    目录 一.创建类命令 创建普通Maven项目 创建Web Maven项目 发布第三方Jar到本地库中 二.构建打包类命令 编译源代码 编译测试代码 编译测试代码 打包项目 清除打包的项目 清除历史打包 ...

  3. 一次搞定:借助Hutool封装代码快速解决webservice调用烦恼

    前言 相信很多同行哪怕学了许多主流技术,但工作上依然免不了和传统企业打交道,而这样的企业往往还在用webservice做接口交互. 本文是作者近两年和医疗行业的厂家打交道研究出来的一点调用webser ...

  4. Hugging News #0821: Hugging Face 完成 2.35 亿美元 D 轮融资

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  5. CodeForces 1367F2 Flying Sort (Hard Version)

    题意 给一个长度为\(n\)的数组,你可以有两种操作 将某一个数放置在数组开头 将某一个数放置在数组结尾 问最小操作多少次可以得到一个非递减数列 (比\(F1\)难在\(n\)变大,且数组中元素可以有 ...

  6. 避坑|在读取excel.xlsx文件中的内容时发现明明只有3行,但跑起来却认为有13行,导致有10行None,UI自动化测试代码空跑了10次;|UI自动化测试|数据驱动

    在读取excel.xlsx文件中的内容时发现明明只有3行,但跑起来却认为有13行,导致有10行None,UI自动化测试代码空跑了10次: 原因:excel.xlsx内容清除时用delete快捷键导致, ...

  7. git clone时报错:Permission denied

    一.问题简述: 执行git clone git@github.com:T-Better/Soft_test.git时报错:\302\226git@github.com: Permission deni ...

  8. 《微服务架构设计》——Eventuate Tram框架订阅/消费模式源码解析

    Eventuate Tram框架官方文档: https://eventuate.io/docs/manual/eventuate-tram/latest/getting-started-eventua ...

  9. PLC通过Modbus转Profinet网关与合康变频器Modbus通讯案例

    PLC通过Modbus转Profinet网关(XD-MDPN100)与合康变频器Modbus通讯,实现了两个设备之间的数据交互.Profinet是一种基于以太网的实时工控网络协议,而Modbus是一种 ...

  10. 如何快速找到win10系统中的开机启动文件所在路径

    在网站系统开发过程中,我们会遇到一些服务器下线导致的网站无法打开的情况,就需要重启服务器,如果每次手动去操作,实在是很繁琐,所以咱们可以利用开机自启的方式.而要这样设置的话,就需要找到开机自启的目录, ...