首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C语言】分支和循环(下)

【C语言】分支和循环(下)

作者头像
Yue丶越
发布2025-12-17 16:28:20
发布2025-12-17 16:28:20
2140
举报
文章被收录于专栏:C语言C语言

前言:

在上一篇博客中,我们介绍了“分支与循环结构”中的顺序结构和选择结构。今天,我们将继续介绍其中剩余的循环结构。


一、循环结构的分类

C语言主要提供了三种主要的循环结构


二、while循环

基本语法:

while(判断表达式) // 如果为真,执行循环体,如果为假,跳出循环 {    循环体 }

while 语句执行的流程
在这里插入图片描述
在这里插入图片描述

首先判断表达式:若值为 0,循环直接结束;若值非 0,则执行循环体,执行完毕后再次判断表达式,依此循环往复。

示例代码

例子:输入一个正整数,逆序打印出这个正整数的每⼀位。

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int n = 0;
    scanf("%d", &n);
    
    while (n) 
    {
        printf("%d", n % 10);  // 获取最低位
        n = n / 10;           // 去掉最低位
    }
    
    return 0;
}
题目解析
  1. 获取 n 的最低位,可通过 n%10 运算实现,所得余数即为最低位(如 1234%10=4)。
  2. 若想要去掉最低位,则只需通过 n=n/10(如 1234/10=123)来进行实现,此时再用新的 n 执行 %10 运算,即可得到倒数第二位(如 123%10=3)。
  3. 重复上述两步,直到 n 变为 0,则能依次获取 n 的所有位。

三、for循环

基本语法:

for(表达式1; 表达式2; 表达式3) {     循环体 }

表达式1:用于循环变量的初始化 表达式2:用于循环结束条件的判断 表达式3:用于循环变量的调整更新

while 语句执行的流程
在这里插入图片描述
在这里插入图片描述

首先执行表达式1初始化循环变量(此过程仅执行一次);随后执行表达式2进行判断:若结果为0,循环结束;若结果不为0,则执行循环语句,循环语句完成后,再去执行表达式3调整循环变量,然后再回到表达式2重新执行判断。此后便在表达式2循环语句表达式3之间循环执行,直至表达式2的判断结果为0时终止循环。

示例代码

例子:计算1~100之间3的倍数的数字之和。

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int sum = 0;
    
    // 方法1:遍历所有数字,判断是否为3的倍数
    for (int i = 1; i <= 100; i++) {
        if (i % 3 == 0) {
            sum += i;
        }
    }
    
    // 方法2:直接生成3的倍数,更高效
    for (int i = 3; i <= 100; i += 3) {
        sum += i;
    }
    
    printf("%d\n", sum);
    
    return 0;
}
while循环跟for循环的区别
代码语言:javascript
复制
// for循环(初始化、判断、调整集中)
for (int i = 1; i <= 10; i++)
 {
    printf("%d ", i);
 }

// while循环(初始化、判断、调整分散)
int i = 1;          // 初始化
while (i <= 10)
 {   // 判断
    printf("%d ", i);
    i++;            // 调整
 }

for 循环和 while 循环在实现循环的过程中都有“”初始化、判断、调整“”这三个部分,但是 for 循环的三个部分都非常集中,比较便于代码的维护,而如果在代码比较多的时候, while 循环的三个部分会显得比较分散,所以从形式上 for 循环会显得更优一些 。


四、do-while循环

无论如何,先执行一次循环体,然后再判断循环是否应该继续下去。

基本语法:

do{     循环体 } while (判断表达式);

do while 语句执行的流程
在这里插入图片描述
在这里插入图片描述

do while循环的执行逻辑为:先执行循环体中的语句,执行完毕后再判断表达式。若表达式结果“不等于”0,循环继续;若结果“等于”0,循环终止。

这一机制决定了do while循环的核心特点——循环体至少会执行一次

示例代码

例子:打印1-10的数字.

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int i = 1;
    
    do {
        printf("%d ", i);
        i = i + 1;
    } while (i <= 10);
    
    return 0;
}
输出结果

1 2 3 4 5 6 7 8 9 10


五、循环嵌套

循环之间可以互相嵌套(一个循环包含另一个循环),多用于实现一些复杂的逻辑。

基本语法:

for(初始化; 条件; 更新) {     // 外层循环 for (初始化; 条件; 更新)     {         // 内层循环     } }

示例代码

例子:出100~200之间的素数。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 100; i <= 200; i++)//用for循环产生100~200之间的整数
	{
		int n = 0;
		int flag = 1;//假设i为素数
		for (n = 2; n < i; n++)//n 为2~i-1之间不等于i的整数,只要这之间的数都不能整除i,则i为素数
		{
			if (i % n == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

六、break语句

立即强制跳出当前循环。

示例代码
代码语言:javascript
复制
#include <stdio.h>

int main() {
    // while循环中的break
    int i = 1;
    while (i <= 10) {
        if (i == 5) {
            break;  // 终止循环
        }
        printf("%d ", i);
        i++;
    }
    // 输出:1 2 3 4
    
    // for循环中的break
    for (int j = 1; j <= 10; j++) {
        if (j == 5) {
            break;  // 终止循环
        }
        printf("%d ", j);
    }
    // 输出:1 2 3 4
    
    return 0;
}

七、continue语句

跳过当前循环的剩余部分,直接开始下一次循环。

示例代码
代码语言:javascript
复制
#include <stdio.h>

int main() {
    // for循环中的continue
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            continue;  // 跳过后续代码,直接i++
        }
        printf("%d ", i);
    }
    // 输出:1 2 3 4 6 7 8 9 10
    
    // while循环中的continue
    int j = 0;
    while (j < 10) {
        j++;
        if (j == 5) {
            continue;  // 跳过后续代码,直接判断j<10
        }
        printf("%d ", j);
    }
    // 输出:1 2 3 4 6 7 8 9 10
    
    return 0;
}

八、goto 语句

跳转到程序中的指定标签位置。

示例代码
代码语言:javascript
复制
#include <stdio.h>

int main() {
    printf("开始\n");
    
    goto label;
    printf("这行不会执行\n");
    
label:
    printf("跳转到这里\n");
    
    return 0;
}

goto语句若使用不当,会导致函数内部跳转混乱,扰乱程序执行流程,因此建议尽量避免使用;但不过它并非毫无价值,在我们多层循环场景中,用它来快速跳出循环会非常便捷。

示例代码
代码语言:javascript
复制
#include <stdio.h>

int main() {
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            for (int k = 0; k < 10; k++) {
                if (i * j * k == 120) {
                    goto found;  // 直接跳出三层循环
                }
            }
        }
    }
    
    printf("未找到\n");
    return 0;
    
found:
    printf("找到满足条件的值\n");
    return 0;
}

以上就是本期博客的全部内容了,感谢各位的阅读以及关注。如有内容存在疏漏或不足之处,恳请各位技术大佬不吝赐教、多多指正。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 一、循环结构的分类
  • 二、while循环
  • 三、for循环
  • 四、do-while循环
  • 五、循环嵌套
  • 六、break语句
  • 七、continue语句
  • 八、goto 语句
    • 以上就是本期博客的全部内容了,感谢各位的阅读以及关注。如有内容存在疏漏或不足之处,恳请各位技术大佬不吝赐教、多多指正。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档