C 语言循环语句详解:从入门到熟练,搞定重复操作不再难
前言
初学 C 语言时,你是不是也遇到过这样的场景:需要打印 100 遍「Hello World」,如果逐行写printf("Hello World");,不仅要写 100 行代码,还容易出错;需要计算 1 到 100 的累加和,手动计算既麻烦又不灵活。
这时候,「循环语句」就成了我们的「救星」—— 它能让程序重复执行某一段代码,大大简化工作量,提高代码效率和可维护性。
今天这篇文章,我们就来全面吃透 C 语言中的 3 大循环语句:for、while、do-while,包括它们的语法、用法、区别以及实战场景,新手也能轻松上手。
什么是循环语句
在C语言中,循环语句是流程控制语句的一种,其核心作用是:在满足指定条件的前提下,重复执行某一段代码快(称为:循环体)。
在生活中,也有很多与循环有关的场景,比如:
1.每天早上 7 点起床→洗漱→吃早餐→上班,直到周末(条件:非周末);
2.往杯子里倒水,直到水面到达杯口(条件:水杯未满);
3.打印1到10的数字,重复执行(打印数字 + 数字+1)的操作,直到数字大于10。
C语言中有三种最基本的循环语句,分别是for,while,do-while,分别对应不同的场景,接下来让我们来逐一拆解。
三大循环语句详解
一、while循环:简洁直观(适合未知循环次数,但知道终止条件的场景)
语法格式:
初始化表达式:
while(条件判断表达式)
{
循环体代码://条件为真时执行
更新表达式;//修改循环变量,避免死循环
}
执行流程
1.先执行循环外的初始化表达式(仅一次)
2 执行while后的 [条件判断表达式] ,判断是否为真
3如果条件为真,则进入循环,并执行循环体代码;如果条件为假,则跳出循环
代码演示
#include<stdio.h>
int main()
{
int n = 1;
while (n <= 10)
{
printf("%d ", n);
n++;
}
return 0;
}
代码运行结果:
这段代码的作用是从1打印到10.
提醒
-
while循环的初始化在循环体外,更新表达式在循环体内,一定要记得写(更新循环体)的代码,否则循环将无法终止,容易造成死循环(比如:上述代码如果没有n++;则该段代码将陷入死循环,无限打印0)
-
当然更新表达式这一步骤可以根据情况写在while括号后面的条件判断表达式中
-
当循环体只有一行代码时,大括号”{ }‘可以省略,但是并不推荐这样做,这会导致代码不方便阅读
二、for循环:最常用,最灵活的循环(适合已知循环次数的场景)
for循环吧(初始化,循环条件,更新变量)集中在一行,结构清晰,是使用频率最高的循环。
语法格式
for(初始化表达式;条件判断表达式;更新表达式)
{
循环体代码//条件为真时,重复执行
}
执行流程
- 执行初始化表达式(仅执行一次,用于初始化循环变量)
- 执行条件判断表达式(返回布尔值:真 / 假,C语言中用(非0表示真,0表示假)
- 如果条件为“真 ”,执行 [循环体代码] ; 如果条件为 “假” , 直接跳出循环,结束for循环
- 循环体代码执行完毕后,执行更新表达式
- 回到步骤2,重复执行,直到条件为假
代码演示
int main()
{
int n = 0;
for (n = 1; n <= 10; n++)
{
printf("%d ",n);
}
return 0;
}
代码运行结果:
这段代码先初始化n = 0;然后开始进入for循环,首先先将n初始化为1,然后进行条件判断n <= 10,发现条件满足,然后进入循环体开始执行循环语句,打印n的值,循环体代码执行完毕后,再进行更新表达式这一步骤,即n++,让n的值自增1;然后不断循环直到 [条件判断表达式] 为假,然后结束循环。
提醒
- 初始化表达式可以定义多个变量,每个变量间用逗号隔开,更新表达式也可以修改多个变量,比如(for(int i = 0, j = 10; i <= 10; i++, j--);
- 循环体如果只有一行代码,大括号“{ }”可以省略,但是不推荐这样做,这会导致代码的可读性差,容易出错;
- for()的“()”后面不要加“ ;”,否则的话会导致无法正常进入循环体,而是先执行完 [更新表达式] 里面的代码后,再进入循环体内;
- 对比while循环,for循环更适合 [已知循环次数] ,而while循环更适合 [未知循环次数] ,但二者可以根据情况相互转换。
三、do-while循环:先执行后判断
do-while循环是 “先执行循环体,再判断条件”,无论条件是否为真,循环体都会至少执行一次,使用场景较少,但在某些特定场景下不可替代。
语法格式
// 语法格式
初始化表达式; // 循环变量初始化
do {
循环体代码; // 先执行1次,再判断条件
更新表达式; // 修改循环变量
} while (条件判断表达式); // 注意:末尾有分号
执行流程
- 先执行循环外的 [初始化表达式];
- 进入do-while循环,先执行 [循环体代码] ,无论条件是否为真,都先执行一次;
- 执行 [更新表达式] ,修改循环变量;
- 执行while后面的 [条件判断表达式] ,判断是否为真。
- 如果条件为真:回到步骤2,继续进行循环。如果条件为假:则跳出循环。
代码演示
#include <stdio.h>
#include <string.h> // 用于strcmp()函数:比较两个字符串是否相等
int main() {
// 示例:用户登录验证,默认密码为"123456",至少提示1次输入密码
char password[20]; // 定义字符数组,存储用户输入的密码
printf("=== 用户登录 ===\n");
do {
printf("请输入登录密码:");
scanf("%s", password); // 读取用户输入的密码(无需&,字符数组名本身是地址)
// strcmp(a, b):比较字符串a和b,相等返回0,不相等返回非0
if (strcmp(password, "123456") == 0) {
printf("密码正确,登录成功!\n");
} else {
printf("密码错误,请重新输入!\n");
}
} while (strcmp(password, "123456") != 0); // 终止条件:密码正确
return 0;
}
代码运行结果:
根据代码运行结果可以看出,无论输入的密码是否正确,都会进入一次循环,并执行一次循环体的内容。
提醒
- do-while循环中,while的“ ()”后面必须加 [ ; ],这是C语言语法的要求。
- 循环体至少执行一次,这一点与for循环和while循环不同。
- 使用场景有限,仅在必须先执行一次循环体的情况下才会使用
循环跳转关键字(break/continue)
我们已经掌握了三种循环的基础用法,但在实际开发中往往还需要在循环执行的过程中 [提前终止整个循环] 或 [跳过本次循环的剩余内容]。这时我们就需要 break 和 continue 这两个关键字来解决上述问题,下面我们就来详细拆解他们的用法和区别。
break
break的作用是提前终止整个循环,当代码运行到break时,break会使整个循环提前终止,跳出循环。
代码演示
#include<stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
if (i == 6)
{
break;
}
printf("%d ", i);
i++;
}
return 0;
}
代码运行结果:
观察上述代码的运行结果,我们发现最后的结果并不是从0打印到10,为什么会出现这样的情况?
这是因为当 i 自增到6时会进入if的判断语句,i == 6,执行break,break使得循环强制终止,跳出循环,不再进入后面的循环。因此这段代码的运行结果是0 1 2 3 4 5.
continue
continue的作用是当代码执行到continue时,continue会使得程序跳过本次循环后面的语句,进入下一次循环中。
代码演示
#include<stdio.h>
int main()
{
int i = 0;
while (i < 10)
{
i++;
if (i == 6)
{
continue;
}
printf("%d ", i);
}
return 0;
}
代码运行结果
由代码运行结果可以看出,这段代码从1到10依次打印却跳过了6,这是为什么呢?
究其原因是因为当 i 自增到6时,进入if语句中,i == 6;执行continue语句,continue使得本次循环强制终止,并进入到下一次循环中,因此当 i = 6时,printf("%d ",i)这个语句被跳过了,并没有被执行,因此屏幕上并没有打印6.
提醒
使用continue时,一定要确保循环变量在continue之前完成更新,否则的话会进入死循环。
实战练习
题目 1:使用for循环,打印 99 乘法表(经典练习题,考察循环嵌套,可选做);
题目 2:使用while循环,计算 1 到 100 中所有偶数的和
题目 3:使用do-while循环,实现一个简单的菜单(选择 1 打印当前时间、选择 2 退出,至少显示 1 次菜单)。
总结
今天我们全面讲解了 C 语言中的 3 大循环语句:for、while、do-while,核心总结如下:
- 循环语句的核心作用是「重复执行某段代码」,简化工作量,提高代码效率;
- for循环适合已知循环次数,while循环适合未知循环次数,do-while循环适合循环体至少执行 1 次;
- 三者可以相互转换,但优先根据场景选择最简洁、可读性最高的循环; 4,开发中要避免无意造成的死循环,记得写「更新表达式」。
循环语句是 C 语言的基础,也是后续学习「循环嵌套」「数组遍历」「算法实现」的前提,建议大家多动手练习,熟能生巧。
如果你有任何问题,欢迎在评论区留言,我们一起交流学习!