当前位置: 首页 > 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 的嵌套结构。

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

外层条件
内层条件1
执行内层if代码块
执行内层else代码块
执行外层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.dtcms.com/a/562212.html

相关文章:

  • 珠海网站建设制作青岛做网站的公司有哪些
  • 免费制作app的手机软件东莞seo建站广告费
  • ssm框架之Spring(上)
  • 【星闪】Hi2821 | USB HID设备类 + HID键盘例程
  • o2o网站建站wordpress json接口
  • 成都自助建站模板网站建设评审表
  • 边界扫描测试原理 15 -- BSDL 9 应用示例
  • 唐山专业网站建设公司阿里云虚拟主机和云服务器的区别
  • 济南旅游网站建设前程无忧网深圳网站建设类岗位
  • 查企业资质上什么网站东华软件是外包公司吗
  • 整体设计 全面梳理复盘 之15 :整体设计属性体系构建与实体表格落地
  • 自建服务器做网站要备案英文企业网站源码
  • 广州 营销型网站图书宣传推广方案
  • 网站设计教学网页站点设计
  • 东莞在哪里学网站建设嘉兴网站制作计划
  • 计算机图形学·4 OpenGL编程1 背景知识
  • 做外贸的有些什么网站wordpress编辑器不行
  • 各大网站logo图标wap站开发
  • 山西 网站制作旅游网站开发说明
  • springboot基于java的少数民族音乐网站的设计与实现(代码+数据库+LW)
  • 强化学习2.4 MDP作业汇总(持续更新)
  • 使用Requests和正则表达式实现塔读小说网小说爬取
  • Guava TreeRangeSet:区间运算的数学之美!
  • 双指针问题(同向)
  • seo公司哪家便宜宁波关键词排名优化平台
  • 安徽静安集团网站建设网站打不开了怎么办
  • 建设ftp网站怎么创建数据库帮忙做ppt的网站
  • Java 大视界 -- Java 大数据在智能医疗手术风险评估与术前方案制定中的应用探索
  • 做外贸网站推广成都网站建设外包
  • linux命令-压缩-12