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

【C语言】选择结构和循环结构的进阶 - 指南

本篇目录

  • 1. 选择结构的嵌套
    • 1.1 if-else的嵌套:多层级判断
    • 1.2 switch-case的嵌套
    • 1.3 选择结构与逻辑运算符的结合
  • 2. 循环结构的嵌套
    • 2.1 嵌套循环:多层重复执行
    • 2.2 循环控制的技巧
  • 3. 其他
    • 3.1 本篇参考/来源

在学习本篇之前,请巩固上节的知识点

1. 选择结构的嵌套

在很多问题的处理上,单层的选择或者是不断堆积的else会显得格外的低效,这时候我们可以用到嵌套,将复杂的步骤进行简化。

1.1 if-else的嵌套:多层级判断

当需要在一个条件分支中再做细分判断时,可以使用 if-else 的嵌套结构。

其中的逻辑是先判断大条件,再在大条件下判断小条件。

语法架构为

if(外层条件){
//外层为真时执行的代码
if(内层条件1){
//内层条件1为真时执行的代码
}else{
//内层条件1位假时执行的代码
}
}else{
//外层为假时执行的代码
}

其实很好理解,类似一个病人在医院挂号。
医院会先判断“是否为急诊”(外层条件),若为急诊再判断“是否危及生命”(内层条件1);若不是急诊,则按照普通看病流程处理。

在这里插入图片描述
例1. 判断一个数是否为能被3整除的偶数

int num = 6;
if(num%2 == 0){	//可以被2整除就是偶数
if(num%3 == 0){ //能否被3整除
printf("%d是能被3整除的偶数\n",num);
}else{
printf("%d是偶数,但不能被3整除\n",num);
}
}else{
printf("%d不是偶数\n",num);
}

注意事项

  • 嵌套层级建议不超过3层,因为过多的层级会降低代码的可读性,让人难以理解
  • 内层的 if-else 需要严格缩进,明确与外层之间的关系

1.2 switch-case的嵌套

不只是常见的 if-else 支持嵌套, switch-case 也支持嵌套。

而且具有“穿透性”,体现在:省略break时继续执行下一个case。

int a;
switch(a/b){ //将a以b为一组,进行不同层级的划分
case 1:
switch(a){	//根据a的值进行判断
case 1 :printf("..");break;
...
}
case 2:
...
}

当多个case需要执行相同逻辑时,可省略中间case的break,实现“区间批量处理”。

例2.按分数段进行评级(90-100为A,80-89位B…)

int score = 85;
switch(score/10){ // 整除10后,可以划分分数段
case 10:
case 9:printf("等级A\n"); //10和9共享逻辑
case 8:printf("等级B\n");
case 7:printf("等级C\n");
case 6:printf("等级D\n");
default:printf("等级E\n");
}
  • 在电梯的内部,如果我们按下“10楼”和“9楼”都需要停在9楼以上区域,电梯可以连续停靠(穿透),直到触发“9楼”的停靠指令(break)。

在这里插入图片描述

1.3 选择结构与逻辑运算符的结合

在第一节基本语法结构中,我们学习了逻辑运算符&&(与)、||(或)、!(非)。

合理的使用这些逻辑运算符,可以代替部分嵌套结构。

如上节中5和7的最小公倍数中,我们使用了"i % 5 == 0 && i % 7 == 0"去代替了if( i%5==0 )中再嵌套if ( i %7 == 0)的情况。

同理,我们可以将例1的程序简化:

int num = 6;
if(num%2 == 0 && num%3 == 0){	//同时可以被2和3整除的数
printf("%d是能被3整除的偶数\n",num);
}else{
printf("%d不是偶数\n",num);
}

优点

  • 相比较嵌套 if-else 或者 if 的多层嵌套,运用逻辑运算符组合的条件更直观,且执行效率更高。

2. 循环结构的嵌套

循环结构的嵌套是实现矩阵运算、排序算法等的基础。

·矩阵运算涉及到多维数组,在学习到数组的时候会进行讲解。
·排序算法:如对一串数字进行大小排序,诸多算法中常见的。

2.1 嵌套循环:多层重复执行

嵌套循环很好理解,就是一个循环里面中再嵌套另一个循环,外层循环控制着“轮次”,内层循环控制“没轮的重复次数”。

这个流程图可能有些许复杂,我来简单讲一下:

  1. 对一个数先进行判断是否满足外层条件,不满足直接退出外层循环,满足则进行到步骤2
  2. 对这个数再进行内层条件的判断,直到不满足内层条件后,退出内层的循环返回到外层循环
  3. 在外层更新后,判断是否满足外层条件,满足则直接退出外层循环,不满足则重复步骤2、3

在这里插入图片描述
只有外层条件不满足时,整个循环才结束,如上图所示⬆️

例3.打印5行5列的正方形星号

for(int i=0; i<5; i++){	//5行
for(int j=0; j<5; j++){	//每行5个
printf("*");
}
printf("\n");	//每行结束后换行
}
 - * * * *- * * * *- * * * *- * * * *- * * * *

同理,九九乘法表也可以按照这个逻辑进行打印。

2.2 循环控制的技巧

  • break与标志位
    在多层循环中,需要一次性跳出所有的循环时,仅用break是无法实现的(因为只能跳出当前层),我们可以使用标志位来进行跳出(在最外层循环中的条件判断里添加,常与逻辑运算符结合使用)。

标志位:一个记录循环状态的变量,可以是一个布尔值,为真时结束循环。后续会使用到。

  • continue与复杂条件
    continue可以结合逻辑判断,跳过循环中“不需要处理”的迭代,减少无效的计算
  • 减少重复计算
    循环内部的重复计算会降低效率,尤其在多层嵌套循环中,需将“与循环变量无关的计算”移到循环外。

3. 其他

3.1 本篇参考/来源

  • 图片由本人绘制而成
http://www.jsqmd.com/news/58745/

相关文章:

  • 从原型到生产:大型语言模型实践指南
  • 成群结队--冲刺计划
  • 第五天敏捷冲刺
  • Java进阶 多线程
  • Java进阶网络编程,UDP,TCP通信
  • CCPC郑州站 笨蛋题 II
  • IDEA标签窗口好行显示 类注释和方法注释
  • LabVIEW用直线边缘检测实现液位测量 - 教程
  • HEK293细胞:为什么它是重组蛋白表达的黄金标准?
  • kettle从入门到精通 第111课 ETL之kettle webspoon7的docker部署详细教程
  • 树莓派Docker部署AdGuard Home
  • 人工智能发展史简述
  • 第四天敏捷冲刺
  • qy_蓝桥杯编程系列_编程17 好数
  • 读书笔记 XILINX ug1137-Zynq UltraScale+ MPSoC Software Developer Guide 软件开发者指南 Chapter1Chapter2
  • static相关
  • 74_基于深度学习的垃圾桶垃圾溢出检测体系(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • Java创建对象完整流程详解
  • PQ v.Next Beta计划与估计
  • re笔记5
  • 北京陪诊公司陪诊师排行
  • 北京陪诊公司排行:专业服务破解就医难题,三甲机构树立行业标杆
  • 【RAG安全】Pirates of the RAG: Adaptively Attacking LLMs to Leak Knowledge Bases - 指南
  • 20232319 2025-2026-1 《网络与系统攻防技术》实验八实验报告
  • 北京上门收酒茅台五粮液洋酒老酒名酒
  • 北京上门收酒茅台五粮液洋酒老酒名酒董酒习酒
  • this view is read-only (IntelliJ IDEA) - 详解
  • 构建高可靠 OpenEuler 运维体系:从虚拟化部署到 Systemd 自动化核心实践 - 教程
  • 内存管理-55-工具-page_types - Hello
  • 2025 年黑猪批发基地品牌推荐排行榜,黑金刚黑猪批发,国寿黑猪批发,杜洛克黑猪批发,沂蒙黑猪批发,太湖原种黑猪批发,三元仔猪黑猪批发,长白仔猪黑猪养殖,黑猪繁育,黑猪仔猪批发,原种黑猪批发基地推荐