位置:首页 > C > C语言分支与循环入门:if、switch 和三种循环该怎么用

C语言分支与循环入门:if、switch 和三种循环该怎么用

时间:2026-08-25  |  作者:云端旅人  |  阅读:0

目录

  1. 顺序结构:程序默认是怎样执行的
  2. 分支结构:什么时候该让程序走不同路径
  3. 循环结构:重复执行一段代码时怎么选
  4. 怎么理解三种循环和两类分支的使用场景

前言

C 语言里的分支和循环看上去只是几组语法,但真正让初学者出错的,往往是条件真假、else 匹配关系,以及三种循环到底谁先判断、谁至少执行一次。本文从顺序结构讲起,依次梳理 if、switch 和 for/while/do-while 的使用方式,帮助你在写代码时更快判断该选哪一种控制结构。

C 语言程序并不只是“从上往下执行”这么简单。写到判断、重复处理或多分支选择时,真正决定程序行为的是流程控制结构。本文按“先看执行顺序,再看分支判断,最后看循环重复”的路径,把入门阶段最容易混淆的语法和规则拆开说明,并用示例帮助你判断什么时候该用 if、switch、for、while 或 do-while。

顺序结构:程序默认是怎样执行的

C 语言是一门结构化程序设计语言,常见的程序结构可以分为顺序结构选择结构循环结构。其中,顺序结构是最基础的一种:语句按照书写顺序依次执行,中间没有跳转、分支或循环介入。

在 C 语言中,每条语句通常以分号 ; 结束,多个语句也可以放进同一个代码块,并用一对大括号 {} 包起来。只要没有流程控制语句,程序就会从上到下逐条执行。

#include 

int main() {
    int a, b, sum;
    printf("请输入两个整数:");
    scanf("%d%d", &a, &b);
    sum = a + b;
    printf("它们的和为:%d", sum);
    return 0;
}

这个程序的执行顺序是固定的:先提示输入,再读取两个整数,接着计算 sum = a + b;,最后输出结果。它没有任何条件判断,也不会重复执行某段代码,因此就是典型的顺序结构。

分支结构:什么时候该让程序走不同路径

当程序需要“根据条件决定做什么”时,就要用到分支结构。C 语言里最常见的两类分支语句是 ifswitch。前者适合做条件判断,后者适合对单个表达式的多个固定取值进行分派。

if:条件成立才执行

if 语句用于在条件满足时执行指定代码块,基本语法如下:

if (表达式) {
    // 如果条件为真,执行这里的代码块
}

如果 if 后面只有一条语句,大括号可以省略,但入门阶段更建议保留,便于阅读和维护。还要注意一个基础规则:在 C 语言里,0 表示假,非 0 表示真。也就是说,表达式结果为 0 时不执行,为非 0 时执行。

#include 

int main(){
	int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    if (num > 0) {
        printf("这是一个正数。n");
    } 
    return 0;
}

这个例子里,只有在 num > 0 成立时,程序才会输出“这是一个正数”。如果输入 0 或负数,if 语句中的代码块就不会执行。

if...else:两种结果二选一

如果条件成立和不成立时都要给出处理逻辑,可以使用 if...else

if (表达式) {
    // 如果条件为真,执行这里的代码块
} else {
    // 如果条件为假,执行这里的代码块
}

它表示程序一定会在两个分支里选择一个执行,适合“满足条件”和“不满足条件”两种结果都需要明确处理的场景。

#include 

int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    if (num > 0) {
        printf("这是一个正数。n");
    } else {
        printf("这是0或者负数。n");
    }
    return 0;
}

在这个程序中,输入正数时输出“这是一个正数”;输入 0 或负数时,则进入 else 分支,输出“这是0或者负数”。

多重判断与嵌套 if

当判断结果不止两种时,可以把 else 和新的 if 连起来,形成多重判断,也就是常见的 else if 结构。

#include 

int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    if (num > 0) 
        printf("这是一个正数。n");
    else if (num < 0) 
        printf("这是一个负数。n");
    else 
        printf("这是零。n");
    return 0;
}

这样就能把一个整数分成三种情况:大于 0、小于 0、等于 0。相比只用一个 if...else,这种写法更适合处理连续的条件分支。

需要特别注意的是,分支一多,就容易出现所谓的悬空 else 问题。规则其实很简单:else 总是和离它最近、且尚未匹配的 if 结合

#include 
int main()
{
	int a = 0;
	int b = 2;
	if(a == 1)
 		if(b == 2)
 			printf("hehen");
 	else
 		printf("hahan");
 	return 0;
 }

这段代码看起来好像 else 和第一个 if 对齐,但实际匹配的是第二个 if(b == 2)。因此,只要第一个条件 a == 1 不成立,内部那组 if...else 就根本没有执行机会,最后什么都不会打印。

把缩进改得更清楚后,这种匹配关系会更容易看出来:

#include 
int main()
{
	int a = 0;
	int b = 2;
	if(a == 1)
 		if(b == 2)
 			printf("hehen");
 		else
 			printf("hahan");
 	return 0;
 }

如果你的真实意图是让 else 对应第一个 if,最直接的方法就是加上大括号,显式划定代码块范围:

#include 
int main() {
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("hehen");
	}
	else
	{
		printf("hahan");
	}
	return 0;
}

这个例子说明了一件很实用的事:缩进只是给人看,真正决定匹配关系的是语法结构。初学时尽量不要省略大括号,能少踩很多坑。

switch:对固定取值做多分支选择

如果判断对象是“同一个表达式的多个可能值”,用 switch 往往比一长串 if...else if 更清晰。它的基本语法如下:

switch (表达式) {
    case value1:
        // 如果表达式的值等于value1,执行这里的代码块
        break;
    case value2:
        // 如果表达式的值等于value2,执行这里的代码块
        break;
    // 更多的case语句
    default:
        // 如果表达式的值不等于任何一个value,执行这里的代码块
}

switch 会先计算表达式的值,再和各个 case 后面的常量逐一比较。匹配成功就从对应位置开始执行;如果都不匹配,则执行 default,而 default 是可选的。

#include 

int main() {
    int num;
    printf("请输入一个数字:");
    scanf("%d", &num);
    switch (num) {
        case 1:
            printf("这是数字1。n");
            break;
        case 2:
            printf("这是数字2。n");
            break;
        case 3:
            printf("这是数字3。n");
            break;
        default:
            printf("这是其他数字。n");
    }

    return 0;
}

这个例子中,程序会根据 num 的值输出不同结果。如果是 1、2、3,就进入对应的 case;否则执行 default

这里最容易漏掉的是 break。如果某个 case 末尾没有写 break,程序在执行完当前分支后还会继续往下执行后面的 case,这就是常说的“贯穿”或“穿透”行为。除非你明确需要这种效果,否则通常都应该在每个 case 后加上 break

另外,switch 的表达式通常支持整数类型字符类型枚举类型,但不支持浮点数类型和字符串类型。还有一个细节:case 和后边的数字之间必须有空格。

循环结构:重复执行一段代码时怎么选

当程序需要把同一组操作执行多次时,就应该使用循环结构。C 语言里最常见的三种循环分别是 forwhiledo-while。它们都能实现重复执行,但控制方式和适用场景并不完全一样。

对比 for、while、do-while 三种循环的执行顺序、判断时机和至少执行次数的白底信息图
三种循环的执行差异把三种循环放在同一张图里比较,最容易看清“先判断”与“先执行”的区别,也方便初学者按场景选型。

for 循环:次数明确时最常用

for 循环是最常见的循环结构之一,尤其适合“已知大概要循环多少次”的情况。语法如下:

for (初始化表达式; 循环条件; 更新表达式) {
    // 循环体语句
}

这三部分各有明确分工:

  • 初始化表达式:在循环开始前执行,一般用于变量初始化。
  • 循环条件:每次循环前先判断,条件为真时继续,条件为假时结束。
  • 更新表达式:每轮循环结束后执行,通常用于更新循环变量。
#include 

int main() {
    int i = 0;
    for (i = 0; i < 5; i++) {
        printf("i = %dn", i);
    }
    return 0;
}

执行顺序可以理解为:先执行表达式 1 初始化变量;然后检查表达式 2;如果结果为 0,循环结束;如果结果不为 0,就执行循环体;循环体执行完后,再执行表达式 3 更新变量,之后回到表达式 2 继续判断。

其中,初始化部分只执行 1 次,后续反复参与循环的是“条件判断、循环体、更新表达式”这三步。这也是 for 看起来紧凑、适合计数循环的原因。

while 循环:先判断,再决定是否进入

while 循环也是基础而常用的一种形式,它更强调“只要条件成立,就一直执行”。基本语法如下:

while (表达式)
    语句;  // 如果循环体想包含更多的语句,可以加上括号

它的执行逻辑是先判断表达式,如果值为真(非 0),就执行循环体;如果值为假(0),则直接结束循环。因此,while 有一个非常重要的特点:条件一开始不成立时,循环体一次都不会执行

while 的流程可以概括为:

  • 先计算表达式的值;
  • 如果结果为假(0),结束循环;
  • 如果结果为真(非 0),执行循环体;
  • 回到条件判断,重复上述过程。

在实际使用中,通常会借助循环计数器或状态变量来控制退出时机,也可以在循环体内部配合 breakcontinue 调整执行流程。

#include 
int main() {
    int i = 1;
    while (i <= 10) {
        printf("%d ", i);
        i++;
    }
    return 0;
}

这个例子中,变量 i 从 1 开始,只要满足 i <= 10,就输出当前值并执行 i++。一旦 i 增长到 11,条件不再成立,循环结束。

do-while 循环:先执行一次,再检查条件

有些场景下,循环体至少要先跑一次,之后再决定是否继续。这时就该用 do-while。它的语法如下:

do {
    // 循环体
} while (循环条件);

do 表示先执行循环体,while 再负责检查是否继续循环。和普通 while 最大的区别在于:do-while 能保证循环体至少执行一次,即便条件从一开始就是假的,也会先执行首轮。

#include 
int main() {
    int i = 1, sum = 0;
    do {
        sum += i;
        i++;
    } while (i <= 10);
    printf("1+2+...+10=%dn", sum);
    return 0;
}

这段代码使用 sum 记录累加结果,使用 i 记录当前加到哪个数。每次先把 i 加入 sum,再让 i 自增,最后检查是否仍满足 i <= 10。因此它可以完成 1 到 10 的累加,并输出结果。

怎么理解三种循环和两类分支的使用场景

把这些语法放到一起看,思路会更清晰:

  • 只是按顺序执行,就用顺序结构。
  • 只在条件成立时做事,用 if
  • 条件成立和不成立都要分别处理,用 if...else
  • 同一个表达式需要对应多个固定值分支时,用 switch
  • 循环次数较明确,适合用 for
  • 是否继续主要取决于某个条件,适合用 while
  • 循环体必须先执行一次,再判断是否继续,用 do-while

对初学者来说,流程控制最关键的不是死记语法,而是先判断程序到底需要“顺着执行”“分开处理”还是“重复处理”。只要先把这个问题想明白,再去选 ifswitch 或三种循环,代码结构就会自然很多。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多