当前位置: 首页 > ops >正文

C/C++复习--最易懂的C语言分支与循环语句--详解

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

本文全面解析C语言中的分支语句(ifswitch)和循环语句(whilefordo-while),结合代码示例详细说明其语法、执行流程及常见应用场景,并附实战案例和常见错误分析。


一、分支语句

1. if 语句

if 语句用于根据条件执行不同代码块。其基本语法如下:

单分支结构
#include <stdio.h>
int main() {int age = 20;if (age >= 18) {printf("成年\n");}return 0;
}
  • 功能:若条件为真(非0),执行代码块;否则跳过。
双分支结构(if-else
#include <stdio.h>
int main() {int age = 15;if (age >= 18) {printf("成年\n");} else {printf("未成年\n");}return 0;
}
  • 注意else 总是与最近的 if 匹配。
多分支结构(if-else if-else
#include <stdio.h>
int main() {int age = 35;if (age < 18) {printf("少年\n");} else if (age < 30) {printf("青年\n");} else if (age < 60) {printf("中年\n");} else {printf("老年\n");}return 0;
}
  • 执行流程:按顺序判断条件,第一个满足条件的分支执行后,后续分支不再检查。

2. switch 语句

switch 适用于多分支选择,需结合 casebreak 使用。

基本语法
#include <stdio.h>
int main() {int day = 3;switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;// ... 其他casedefault:printf("输入错误\n");}return 0;
}
  • 关键点
    • case 后必须是整型常量表达式。
    • break 用于跳出 switch,否则会“穿透”执行后续 case
    • default 处理未匹配的情况,可放在任意位置。
合并多个 case
#include <stdio.h>
int main() {int day = 6;switch (day) {case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;}return 0;
}

二、循环语句

1. while 循环

while 循环在条件为真时重复执行代码块。

基本语法
#include <stdio.h>
int main() {int i = 1;while (i <= 10) {printf("%d ", i);i++;}return 0;
}
  • 输出1 2 3 4 5 6 7 8 9 10
breakcontinue
  • break:终止整个循环。
    while (i <= 10) {if (i == 5) break;printf("%d ", i);  // 输出:1 2 3 4i++;
    }
    
  • continue:跳过本次循环剩余代码,进入下一轮判断。
    while (i <= 10) {if (i == 5) {i++;continue;}printf("%d ", i);  // 输出:1 2 3 4 6 7 8 9 10i++;
    }
    

2. for 循环

for 循环将初始化、条件判断和调整部分集中在一行,适合已知循环次数的场景。

基本语法
#include <stdio.h>
int main() {for (int i = 1; i <= 10; i++) {printf("%d ", i);  // 输出:1 2 3 4 5 6 7 8 9 10}return 0;
}
  • 执行顺序:初始化 → 条件判断 → 循环体 → 调整部分 → 条件判断…
breakcontinue
for (int i = 1; i <= 10; i++) {if (i == 5) break;      // 输出:1 2 3 4if (i % 2 == 0) continue; // 跳过偶数,输出:1 3 5 7 9printf("%d ", i);
}

3. do-while 循环

do-while 循环至少执行一次循环体,再进行条件判断。

基本语法
#include <stdio.h>
int main() {int i = 1;do {printf("%d ", i);  // 输出:1 2 3 4 6 7 8 9 10i++;} while (i <= 10);return 0;
}

三、实战案例

案例1:计算阶乘和

#include <stdio.h>
int main() {int sum = 0;for (int n = 1; n <= 10; n++) {int factorial = 1;for (int i = 1; i <= n; i++) {factorial *= i;}sum += factorial;}printf("阶乘和为:%d\n", sum);  // 输出:4037913return 0;
}

案例2:二分查找

#include <stdio.h>
int main() {int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int key = 7;int left = 0, right = sizeof(arr)/sizeof(arr[0]) - 1;while (left <= right) {int mid = (left + right) / 2;if (arr[mid] < key) {left = mid + 1;} else if (arr[mid] > key) {right = mid - 1;} else {printf("找到元素,下标为:%d\n", mid);  // 输出:下标6break;}}return 0;
}

四、常见错误与注意事项

1. if 语句的悬空 else

if (a == 1)if (b == 2)printf("hehe\n");
else  // 实际匹配最近的if(b == 2)printf("haha\n");
  • 修正:使用花括号明确代码块范围。

2. switch 中遗漏 break

switch (day) {case 1:printf("星期一");// 无break,会继续执行case 2case 2:printf("星期二");break;
}

3. 循环变量修改不当

for (int i = 0; i < 10; i++) {if (i == 5) i = 8;  // 可能导致无限循环
}

五、总结

  • 分支语句if 适用于简单条件,switch 适合多分支且条件为整型值的场景。
  • 循环语句while 适合未知循环次数,for 适合已知次数,do-while 确保至少执行一次。
  • 控制关键字break 终止循环,continue 跳过本次循环。

通过结合代码示例和实际应用场景,可以更深入理解分支与循环的逻辑,提升代码编写效率和可读性。

http://www.xdnf.cn/news/5241.html

相关文章:

  • 卫星导航算法程序设计——单点定位测速(SPV)
  • C语言_函数hook方案
  • Java学习手册:Spring Cloud 组件详解
  • 8.3.监控与日志体系
  • LAMMPS分子动力学基于周期扰动法的黏度计算
  • Spring事务融入(REQUIRED)具体实现步骤解析
  • 使用openlayers计算两个经纬度之间的距离 ,单位有米和千米
  • 区间 DP 详解
  • Java注解:深入探究理解与实践应用
  • SpringMVC-简介及入门
  • linux中常用的命令(三)
  • Java MCP 实战 --> AI玩转贪吃蛇
  • BUCK基本原理学习总结-20250509
  • JVM调优
  • python tkinter 实现 带界面(GUI)的RSA加密、签名
  • Linux终端展示效果优化:【whiptail】使用教程
  • 【目录】学习如何使用dify建设专业知识库
  • 【AI提示词】金字塔模型应用专家
  • 3.优惠券秒杀
  • c++类【高潮】
  • MySQL开篇
  • C++Primerplus编程练习 第八章
  • 生产级AI/ML特征存储平台:Feast全面使用指南 — Use Cases Third party integrations FAQ
  • java: Compilation failed: internal java compiler error 报错解决方案
  • 【Java学习日记32】:面向对象,类和对象
  • matlab介绍while函数
  • 计算机网络:怎么理解WIFI穿墙?
  • SSRF服务端请求伪造
  • 2025python学习笔记
  • 用tinyb210实现srsran小基站