C语言分支与循环语句详解

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

四、总结

  1. 分支语句
    • if-else灵活处理多条件判断,适合范围性条件(如score >= 90);
    • switch适合固定值匹配(如菜单选择),需注意break避免穿透。
  1. 循环语句
    • while:先判断后执行,适合循环次数不确定;
    • do-while:先执行后判断,适合循环体至少执行一次;
    • for:结构清晰,适合循环次数确定。
  1. 循环控制
    • break:跳出整个循环;
    • continue:跳过本次循环,进入下一次。

掌握分支与循环语句,是编写 C 语言程序的基础,建议通过多写示例(如计算阶乘、打印图形)加深理解。

  •  

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值