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

5. 流程控制语句

一、条件判断语句(if 语句)

1. if 语句

用于根据条件执行某段代码。

语法:
if (条件表达式) {// 条件为真时执行的代码
}
示例:
int age = 20;
if (age >= 18) {printf("你已成年。\n");
}

2. if-else 语句

根据条件判断,选择执行两个不同的代码块。

语法:
if (条件表达式) {// 条件为真时执行的代码
} else {// 条件为假时执行的代码
}
示例:
int score = 65;
if (score >= 60) {printf("及格。\n");
} else {printf("不及格。\n");
}

3. if-else if-else 多条件判断

用于多个条件判断的情况。

if (条件1) {// 条件1为真时执行
} else if (条件2) {// 条件2为真时执行
} else {// 所有条件都不满足时执行
}
示例:
int score = 85;
if (score >= 90) {printf("A\n");
} else if (score >= 80) {printf("B\n");
} else if (score >= 70) {printf("C\n");
} else {printf("D\n");
}

二、分支语句(switch-case)

用于根据一个变量的值进行多分支选择。

语法:
switch (表达式) {case 值1:// 匹配值1时执行break;case 值2:// 匹配值2时执行break;...default:// 没有匹配时执行
}

⚠️ 注意:每个 case 分支后面最好加上 break,否则会继续执行下一个 case,称为“穿透”(fall-through)。

示例:
int day = 3;
switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;default:printf("无效的日期\n");
}

三、循环语句

循环语句用于重复执行某段代码。


1. for 循环

适用于已知循环次数的情况。

语法:
for (初始化; 条件判断; 更新表达式) {// 循环体
}
示例:
for (int i = 1; i <= 5; i++) {printf("%d ", i);
}
// 输出:1 2 3 4 5

2. while 循环

适用于不知道循环次数,但知道循环条件的情况。

语法:
while (条件表达式) {// 循环体
}
示例:
int i = 1;
while (i <= 5) {printf("%d ", i);i++;
}
// 输出:1 2 3 4 5

3. do-while 循环

while 类似,但先执行一次循环体,再判断条件。

语法:
do {// 循环体
} while (条件表达式);
示例:
int i = 1;
do {printf("%d ", i);i++;
} while (i <= 5);
// 输出:1 2 3 4 5

四、跳转语句(break、continue、goto)

1. break 语句

用于跳出当前循环或 switch 语句。

示例:
for (int i = 1; i <= 10; i++) {if (i == 5)break;printf("%d ", i);
}
// 输出:1 2 3 4

2. continue 语句

跳过当前循环的剩余部分,进入下一轮循环。

示例:
for (int i = 1; i <= 5; i++) {if (i == 3)continue;printf("%d ", i);
}
// 输出:1 2 4 5

3. goto 语句(不推荐使用)

用于无条件跳转到程序中的某个标签位置。

示例:
int i = 1;
loop:
if (i <= 5) {printf("%d ", i);i++;goto loop;
}
// 输出:1 2 3 4 5

⚠️ goto 会使程序结构混乱,建议尽量避免使用。


五、总结对比表

控制结构用途是否需要条件是否循环
if单条件判断
if-else二选一
if-else if-else多条件判断
switch-case多分支选择✅(整型)
for已知次数的循环
while条件驱动的循环
do-while至少执行一次的循环
break跳出循环或 switch
continue跳过当前循环体继续下一轮
goto无条件跳转(不推荐)

示例:嵌套循环打印星号三角形

#include <stdio.h>int main() {int i, j, rows;printf("请输入要打印的行数:");scanf("%d", &rows);// 外层循环控制行数for (i = 1; i <= rows; i++) {// 内层循环控制每行打印的星号个数for (j = 1; j <= i; j++) {printf("* ");}// 每行打印完后换行printf("\n");}return 0;
}

 示例说明:

  • 外层 for 循环(i)控制总共有多少行。
  • 内层 for 循环(j)控制每一行打印多少个 *
  • 每打印完一行就换行(printf("\n"))。

 示例输出(假设用户输入 5):

*
* *
* * *
* * * *
* * * * *
使用标志变量的例子:
#include <stdio.h>int main() {int shouldBreak = 0;for (int i = 1; i <= 3 && !shouldBreak; i++) {printf("外层循环: %d\n", i);for (int j = 1; j <= 3; j++) {if (j == 2) {printf("准备跳出所有循环。\n");shouldBreak = 1;break;}printf("内层循环: %d\n", j);}}return 0;
}

这个例子中,我们引入了一个名为 shouldBreak 的标志变量,在需要跳出所有循环时将其设为 1,并在外层循环条件中检查该变量的值。

 

http://www.dtcms.com/a/299649.html

相关文章:

  • 哈希指针与数据结构:构建可信数字世界的基石
  • 记一次腾讯云临时密钥接管存储桶
  • obd运维OceanBase数据库的常见场景
  • C++11特性详解(上)
  • 解决使用vscode连接服务器出现“正在下载 VS Code 服务器...”
  • 实现网页访问/接口调用KernelMemory
  • cacti的命令执行和回显
  • 八股文整理——计算机网络
  • 【数据结构】队列和栈练习
  • HTTPS的基本理解以及加密流程
  • Nestjs框架: 基于Mongodb的多租户功能集成和优化
  • 顶顶通呼叫中心系统之创建与注册分机
  • 矩阵乘法计算
  • 安德鲁·卡帕西:深入探索像ChatGPT这样的大语言模型
  • 免费 PDF 转 Word 工具:无水印 / 支持批量转换,本地运行更安全【附工具下载】
  • Ubuntu系统 系统盘和数据盘扩容具体操作
  • 【第二章-数据的表示和运算】
  • vulhub Web Machine(N7)靶场攻略
  • 详解力扣高频SQL50题之1193. 每月交易 I【简单】
  • 数据恢复与备份
  • RS485转Profinet网关配置指南:高效启动JRT激光测距传感器测量模式
  • SpringMVC相关基础知识
  • HTML5 Canvas 绘制圆弧效果
  • Centos安装HAProxy搭建Mysql高可用集群负载均衡
  • 力扣112. 路径总和
  • 面试150 回文数
  • React状态管理——Dva
  • React入门指南——指北指南(第二节)
  • LeetCode——面试题 05.01 插入
  • Vue3组件通信方法清单