C 语言分支与循环语句详解
在 C 语言程序中,分支语句用于实现 “选择执行”,循环语句用于实现 “重复执行”,二者是构建复杂逻辑的基础。本文将分享常用分支与循环语句的语法、用法及注意事项。
一、分支语句:根据条件选择执行路径
分支语句的核心是 “判断条件”,满足不同条件时执行不同代码块,主要包括if-else和switch两种。
1.1 if-else 语句:灵活的多条件判断
if-else是最常用的分支结构,可根据条件复杂度分为单分支、双分支和多分支三种形式。
(1)单分支:满足条件才执行
语法:
if (条件表达式) {
// 条件为真时执行的代码块
}
// 条件为假时,直接跳过代码块
注意:若代码块只有 1 行,{}可省略,但为了可读性和扩展性,建议始终保留。
示例:判断一个数是否为正数
#include <stdio.h>
int main() {
int num = 5;
if (num > 0) { // 条件:num大于0
printf("%d是正数\n", num); // 条件为真,执行此语句
}
return 0;
}
// 输出结果:5是正数
(2)双分支:二选一执行
语法:
if (条件表达式) {
// 条件为真时执行的代码块1
} else {
// 条件为假时执行的代码块2
}
示例:判断一个数是奇数还是偶数
#include <stdio.h>
int main() {
int num = 7;
if (num % 2 == 0) { // 条件:num能被2整除
printf("%d是偶数\n", num);
} else {
printf("%d是奇数\n", num); // 条件为假,执行此语句
}
return 0;
}
// 输出结果:7是奇数
(3)多分支:多条件下选择其一
语法:
if (条件1) {
// 条件1为真时执行
} else if (条件2) {
// 条件1为假、条件2为真时执行
} else if (条件3) {
// 前两个条件为假、条件3为真时执行
} else {
// 所有条件都为假时执行(可选)
}
示例:根据成绩划分等级(0-100 分)
#include <stdio.h>
int main() {
int score = 85;
if (score >= 90) {
printf("等级:A\n");
} else if (score >= 80) {
printf("等级:B\n"); // 85满足此条件,执行此语句
} else if (score >= 60) {
printf("等级:C\n");
} else {
printf("等级:D\n");
}
return 0;
}
// 输出结果:等级:B
1.2 switch 语句:多值匹配的高效分支
switch适用于 “条件表达式为整型或字符型,且需要匹配多个固定值” 的场景,比多分支if-else更简洁。
(1)语法规则
switch (表达式) { // 表达式必须是整型(int、char等),不能是浮点型
case 常量1:
// 表达式值等于常量1时执行的代码
break; // 跳出switch,避免“穿透”(关键!)
case 常量2:
// 表达式值等于常量2时执行的代码
break;
// ... 更多case
default:
// 表达式值不匹配任何case时执行的代码(可选)
break;
}
(2)核心注意点:break 的作用
若缺少break,会发生 “case 穿透”—— 执行完当前 case 后,会继续执行后续所有 case 的代码,直到遇到break或switch结束。
(3)示例:根据输入的数字选择菜单功能
#include <stdio.h>
int main() {
int choice;
printf("请选择功能(1-3):");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("执行功能1:查看信息\n");
break; // 跳出switch,避免穿透
case 2:
printf("执行功能2:修改信息\n");
break;
case 3:
printf("执行功能3:退出程序\n");
break;
default:
printf("输入错误,请重新选择\n");
break;
}
return 0;
}
// 若输入2,输出:执行功能2:修改信息
二、循环语句:重复执行代码块
循环语句用于 “满足条件时重复执行某段代码”,C 语言中常用的有while、do-while和for三种,核心是 “循环条件” 和 “循环体”。
2.1 while 循环:先判断,后执行
while循环的逻辑是 “先判断条件,条件为真则执行循环体,否则退出循环”,适合 “循环次数不确定” 的场景。
(1)语法
while (循环条件) {
// 循环体:条件为真时重复执行的代码
// (需包含“更新条件”的语句,避免死循环)
}
(2)示例 1:打印 1 到 5 的数字
#include <stdio.h>
int main() {
int i = 1; // 初始化循环变量
while (i <= 5) { // 循环条件:i不大于5
printf("%d ", i); // 循环体:打印i
i++; // 更新条件:i自增1(关键,避免死循环)
}
return 0;
}
// 输出结果:1 2 3 4 5
(3)示例 2:死循环(错误示范)
若缺少 “更新条件” 的语句,循环条件会一直为真,导致程序无限循环:
#include <stdio.h>
int main() {
int i = 1;
while (i <= 5) {
printf("%d ", i);
// 缺少i++,i始终为1,循环条件永远为真
}
return 0;
}
// 结果:无限打印1,需强制关闭程序
2.2 do-while 循环:先执行,后判断
do-while循环的逻辑是 “先执行一次循环体,再判断条件;条件为真则继续循环,否则退出”,适合 “循环体至少需要执行一次” 的场景(如输入验证)。
(1)语法
do {
// 循环体:先执行一次
// (需包含“更新条件”的语句)
} while (循环条件); // 注意:末尾有分号
(2)示例:输入密码,直到输入正确为止
#include <stdio.h>
#include <string.h> // 用于strcmp函数(字符串比较)
int main() {
char password[20];
do {
printf("请输入密码:");
scanf("%s", password);
// 若输入的密码不等于"123456",则继续循环
} while (strcmp(password, "123456") != 0);
printf("密码正确,登录成功!\n");
return 0;
}
// 运行过程:
// 若输入"abc",提示“请输入密码:”;
// 若输入"123456",输出“密码正确,登录成功!”
2.3 for 循环:结构清晰的循环
for循环将 “初始化循环变量”“循环条件”“更新条件” 整合在一行,结构清晰,适合 “循环次数确定” 的场景(如遍历数组、固定次数循环)。
(1)语法
for (初始化表达式; 循环条件; 更新表达式) {
// 循环体
}
- 初始化表达式:仅执行一次,用于初始化循环变量(如int i = 1);
- 循环条件:每次循环前判断,为真则执行循环体;
- 更新表达式:每次循环体执行后执行,用于更新循环变量(如i++)。
(2)示例 1:计算 1 到 10 的累加和(1+2+...+10)
#include <stdio.h>
int main() {
int sum = 0;
// 初始化i=1;条件i<=10;每次循环后i+1
for (int i = 1; i <= 10; i++) {
sum += i; // 等价于sum = sum + i
}
printf("1到10的累加和:%d\n", sum);
return 0;
}
// 输出结果:1到10的累加和:55
(3)示例 2:打印 99 乘法表
#include <stdio.h>
int main() {
// 外层循环控制行数(1到9)
for (int i = 1; i <= 9; i++) {
// 内层循环控制每行的列数(1到当前行数i)
for (int j = 1; j <= i; j++) {
printf("%d×%d=%d\t", j, i, j*i);
}
printf("\n"); // 每行结束后换行
}
return 0;
}
// 输出结果:
// 1×1=1
// 1×2=2 2×2=4
// ...
// 1×9=9 2×9=18 ... 9×9=81
三、循环控制语句:break 与 continue
break和continue用于在循环中控制执行流程,二者作用不同:
3.1 break:强制跳出循环
break的作用是 “立即跳出当前所在的循环(或 switch)”,后续循环不再执行。
示例:找到 100 以内第一个能被 7 整除的数,找到后退出循环
#include <stdio.h>
int main() {
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
printf("100以内第一个能被7整除的数:%d\n", i);
break; // 找到后跳出for循环
}
}
return 0;
}
// 输出结果:100以内第一个能被7整除的数:7
3.2 continue:跳过本次循环,进入下一次
continue的作用是 “跳过当前循环体中剩余的代码,直接进入下一次循环的条件判断”,不会跳出整个循环。
示例:打印 1 到 10 中的奇数(跳过偶数)
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 若为偶数,跳过后续打印语句,进入下一次循环
}
printf("%d ", i);
}
return 0;
}
// 输出结果:1 3 5 7 9
四、总结
- 分支语句:
-
- if-else灵活处理多条件判断,适合范围性条件(如score >= 90);
-
- switch适合固定值匹配(如菜单选择),需注意break避免穿透。
- 循环语句:
-
- while:先判断后执行,适合循环次数不确定;
-
- do-while:先执行后判断,适合循环体至少执行一次;
-
- for:结构清晰,适合循环次数确定。
- 循环控制:
-
- break:跳出整个循环;
-
- continue:跳过本次循环,进入下一次。
掌握分支与循环语句,是编写 C 语言程序的基础,建议通过多写示例(如计算阶乘、打印图形)加深理解。
1807

被折叠的 条评论
为什么被折叠?



