一文带你掌握C语言的循环结构
C语言循环结构详解
在C语言中,循环结构是一种重要的控制结构,它允许我们重复执行一段代码,以达到特定的目的。循环结构可以帮助我们简化重复性的任务,提高代码的效率。本篇文章将深入探讨C语言中的循环结构,包括 while 循环、for 循环、do-while 循环以及循环中的控制语句。
1. while 循环
1.1 while 循环的基本语法
while 循环是C语言中最基本的循环结构之一。它的基本语法如下:
while (条件) {
// 循环体代码
}
在这个语法结构中,条件是一个布尔表达式,当条件为真时,循环体中的代码将被执行。如果条件为假,则跳过循环体,继续执行后续的代码。
1.2 while 循环的执行流程
- 首先,计算条件的值。
- 如果条件为真,则执行循环体中的代码。
- 执行完循环体后,再次计算条件的值。
- 如果条件仍为真,则继续执行循环体,重复步骤
3
。 - 如果条件为假,则跳出循环,继续执行后续的代码。
1.3 if 和 while的混淆处
在使用 while 循环时,有时候容易与if语句混淆。尤其是当条件的判断较为复杂时,我们需要仔细区分两者的使用场景。
if 语句用于在特定条件下执行一段代码,而 while 循环用于重复执行一段代码,直到条件不满足为止。
在使用 while 循环时,需要确保循环体内部的代码能够改变条件的值,以免陷入无限循环
的情况。
2. for 循环
2.1 for 循环的基本语法
for 循环是C语言中常用的循环结构,它的基本语法如下:
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体代码
}
在这个语法结构中,初始化表达式用于初始化循环变量,条件表达式用于判断循环是否继续执行,更新表达式用于更新循环变量的值。
2.2 for 循环的执行流程
- 首先,执行初始化表达式,初始化循环变量。
- 然后,计算条件表达式的值。
- 如果条件为真,则执行循环体中的代码。
- 执行完循环体后,执行更新表达式,更新循环变量的值。
- 再次计算条件表达式的值。
- 如果条件仍为真,则继续执行循环体和更新表达式,重复步骤
5
。 - 如果条件为假,则跳出循环,继续执行后续的代码。
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。
- 如果条件为假,则跳出循环,继续执行后续的代码。
与 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 语句,以保持代码的可读性和可维护性。
- 确保跳转的目标位置在当前作用域内,以避免跨作用域的问题。
- 注意避免形成死循环或无限循环,以免程序无法正常结束。
本文来自博客园,作者:顾平安,转载请注明原文链接:https://www.cnblogs.com/gupingan/p/17868332.html