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. 《CTFshow-Web入门》05. Web 41~50

    @ 目录 web41 题解 原理 web42 题解 原理 web43 题解 原理 web44 题解 原理 web45 题解 原理 web46 题解 原理 web47 题解 web48 题解 web49 ...

  2. ELK环境部署-基础环境安装(一)

    ELK简介 ElasticSearch工作原理以及专用名词 ELK是Elasticsearch(ES) , Logstash, Kibana的结合,是一个开源日志收集软件. Elasticsearch ...

  3. redhat7查找已接网线但是还未配置IP的网卡接口

    方法一:nmcli 输出中参数WIRED-PROPERTIES.CARRIER为on即为接网线网卡 #nmcli device show |grep -i -E "device|carrie ...

  4. Spring Event 观察者模式, 业务解耦神器

    观察者模式在实际开发过程中是非常常见的一种设计模式. Spring Event的原理就是观察者模式,只不过有Spring的加持,让我们更加方便的使用这一设计模式. 一.什么是观察者模式 概念: 观察者 ...

  5. C# 使用Windows身份验证连接Sql Server

    C# 使用Windows身份验证连接Sql Server 使用Windows身份验证连接Sql Server 的字符串为: server=.;database=test_user;Trusted_Co ...

  6. ChatGPT API Transition Guide

    ChatGPT API Transition Guide How to get started Written by Joshua J.. Updated over a week ago Prompt ...

  7. mysql之简单的多表查询

    最简单的多表查询需要用到连操作符(join) 1.笛卡儿积 形式为table1 join table2.如: select e.fname,e.lname,d.name from employee e ...

  8. Vue:watch的多种使用方法

    好家伙, 补了一下watch的多种用法 1.属性: 方法(最常用) 使用最广泛的方式是将watch选项设置为一个对象,对象的属性是要观测的数据属性,值是一个回调函数,该回调函数会在属性变化时触发.例如 ...

  9. camerabin error:"Internal data stream error,使用QT打开MIPI摄像头

    使用QT自带的QCamera打开MIPI摄像头 遇到:camerabin error:"Internal data stream error 降低分辨率为640*480 TRANSLATE ...

  10. 数据结构与算法(LeetCode)第一节:认识复杂度,对数器,二分法与异或运算

    一.认识复杂度 1.评估算法优劣的核心指标: 时间复杂度:当完成了表达式的建立,只要把最高阶项留下即可.低阶项都去掉,高阶项的系数也去掉,记为O(去掉系数的高阶项): ​ 时间复杂度是衡量算法流程的复 ...