C语言【基础篇】之流程控制——掌握三大结构的奥秘
流程控制
- 🚀前言
- 🦜顺序结构
- 💯 定义
- 💯执行规则
- 🌟选择结构
- 💯if语句
- 💯switch语句
- 💯case穿透规则
- 🤔循环结构
- 💯for循环
- 💯while循环
- 💯do - while循环
- 🖊️总结
🚀前言
大家好!我是EnigmaCoder。本文收录于我的专栏 C,感谢您的支持!
- 前文我们介绍了C语言中一些简单语法。
链接: C语言【基础篇】之简单语法——构建程序大厦的基石解析- 本文我们介绍C语言中三大流程控制结构,分别为顺序结构、选择结构和循环结构。

🦜顺序结构
💯 定义
顺序结构是最简单的程序结构。在顺序结构程序中,程序按照代码书写的顺序依次执行。就好比一个人走在直路上,并且一条路走到黑。C语言中,程序由主函数入口开始执行, 然后逐条语句执行,直到程序结束。
#include<stdio.h>
int main()
{int a=1;//语句1int b=2;//语句2int c=a+b;//语句3printf("%d",c);//语句4return 0;
}
- 程序从语句1开始,定义一个整型变量a,再将1赋值给a。
- 语句2同理,将2赋值给b。
- 语句3将a和b相加并赋值给c。
- 语句4打印c的值。
可见,顺序结构程序的执行路径是线性的,其执行顺序完全由代码的书写顺序决定。
💯执行规则
- 计算机从程序的第一条语句开始,逐句执行后续语句,直到遇到程序结束的标志(return或程序自然结束)。
- 每条语句在执行时,必须保证语句完整(
;)以及语句符合逻辑。

接下来,我们介绍选择结构。
🌟选择结构
在C语言中,选择结构主要有if语句和switch语句。
💯if语句
- 基本if语句:形式为
if(条件表达式) { 语句块; }。当条件表达式的值为真(非0)时,就会执行语句块中的内容。例如if (a > 10) { printf("a大于10"); },这里如果变量 a 的值大于10,就会输出相应的文字。 - if - else语句:格式是
if(条件表达式) { 语句块1; } else { 语句块2; }。条件表达式为真时执行语句块1,为假(0)时执行语句块2。比如比较两个数大小,if (a > b) { printf("a大"); } else { printf("b大"); }。 - if - else if - else语句:用于多条件判断,像
if(条件表达式1) { 语句块1; } else if(条件表达式2) { 语句块2; } else { 语句块3; }。会按顺序判断条件表达式,当某个条件为真时,执行对应的语句块,若都不满足则执行else中的语句块。例如,根据分数划分等级:
if (score >= 90) {printf("A");
} else if (score >= 80) {printf("B");
} else if (score >= 70) {printf("C");
} else if (score >= 60) {printf("D");
} else {printf("E");
}

💯switch语句
- 基本形式是 :
switch(表达式) { case 常量表达式1: 语句块1; break;
case 常量表达式2: 语句块2; break;
... default: 语句块n; }- 首先计算表达式的值,然后与case后的常量表达式的值进行匹配。如果匹配成功,就执行对应的语句块,直到遇到break语句跳出switch结构。如果没有匹配的case,则执行default中的语句块。例如:
switch (day) {case 1:printf("星期一");break;case 2:printf("星期二");break;// 其他cases...default:printf("输入错误");
}

注意,在使用选择结构时,要注意条件表达式的书写正确,并且在switch语句中不要遗漏break语句(除非有意让程序继续执行下一个case),否则可能会出现不符合预期的结果。
💯case穿透规则
- 在C语言的switch语句中,“case穿透”是一个重要特性。
当switch表达式的值与某个case后的常量表达式匹配成功后,就会执行这个case后的语句块。如果这个语句块中没有break语句,程序就不会跳出switch结构,而是继续执行下一个case中的语句,这就是“case穿透”。
- 例如:
switch (num) {case 1:printf("One");case 2:printf("Two");break;case 3:printf("Three");break;default:printf("Other");
}
-
如果 num 的值是1,会先输出 One ,由于没有遇到break,接着会输出 Two 。如果 num 的值是2,只会输出 Two ,因为这个case中有break,执行完后就跳出了switch语句。
-
这种规则在某些情况下很有用,比如多个case需要执行相同的操作时,可以有意利用case穿透来减少代码量。不过,在大多数情况下,为了保证程序执行逻辑符合预期,每个case执行完后都要加上break语句。
🤔循环结构
在C语言中,循环结构主要有三种:for循环、while循环和do - while循环。
💯for循环
- 基本语法是
for(初始化表达式; 条件表达式; 更新表达式) { 循环体语句; }。初始化表达式用于初始化循环变量,条件表达式用于判断是否继续循环,更新表达式用于更新循环变量。 - 例如,计算1到100的整数和:
int sum = 0;
for(int i = 1; i <= 100; i++) {sum += i;
}
printf("1到100的和为:%d", sum);
在这个例子中, int i = 1 是初始化表达式, i <= 100 是条件表达式, i++ 是更新表达式, sum += i 是循环体语句。
💯while循环
- 语法为
while(条件表达式) { 循环体语句; }。只要条件表达式的值为真(非0),就会一直执行循环体语句。 - 例如,打印出小于10的正整数:
int num = 1;
while(num < 10) {printf("%d ", num);num++;
}
这里 num < 10 是条件表达式, printf("%d ", num); 和 num++; 是循环体语句。
💯do - while循环
- 语法是
do { 循环体语句; } while(条件表达式);。它先执行一次循环体,然后再判断条件表达式是否为真,为真则继续循环,为假则结束循环。 - 例如:
int count = 0;
do {printf("Hello\n");count++;
} while(count < 3);
此代码会先打印一次 Hello ,然后因为 count < 3 为真,再循环两次,一共打印三次 Hello 。这种循环保证了循环体至少被执行一次。

🖊️总结
本文我们主要介绍了C语言中的流程控制结构,分别为顺序结构、选择结构以及循环结构。希望能帮助到您。
相关文章:
C语言【基础篇】之流程控制——掌握三大结构的奥秘
流程控制 🚀前言🦜顺序结构💯 定义💯执行规则 🌟选择结构💯if语句💯switch语句💯case穿透规则 🤔循环结构💯for循环💯while循环💯do -…...
Node.js下载安装及环境配置教程 (详细版)
Node.js:是一个基于 Chrome V8 引擎的 JavaScript 运行时,用于构建可扩展的网络应用程序。Node.js 使用事件驱动、非阻塞 I/O 模型,使其非常适合构建实时应用程序。 Node.js 提供了一种轻量、高效、可扩展的方式来构建网络应用程序࿰…...
【PySide6拓展】QCalendarWidget 日历控件
文章目录 PySide6拓展:QCalendarWidget 日历控件前言什么是QCalendarWidget?特点: 如何使用QCalendarWidget?1. 基本用法2. 获取当前选中的日期 QCalendarWidget 常用函数分类介绍1. 日期选择与管理函数2. 日期格式与显示函数3. 日…...
新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战
生成式人工智能的发展既带来了有益的生产力转型机会,也提供了被恶意利用的机会。 最近,Abnormal Security的研究人员发现了一个专门为网络犯罪创建的无审查AI聊天机器人——GhostGPT,是人工智能用于非法活动的新前沿,可以被用于网…...
【文星索引】搜索引擎项目测试报告
目录 一、项目背景二、 项目功能2.1 数据收集与索引2.2 API搜索功能2.3 用户体验与界面设计2.4 性能优化与维护 三、测试报告3.1 功能测试3.2 界面测试3.3 性能测试3.4 兼容性测试3.5 自动化测试 四、测试总结4.1 功能测试方面4.2 性能测试方面4.3 用户界面测试方面 一、项目背…...
【PostgreSQL内核学习 —— (WindowAgg(一))】
WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊…...
Maya快捷键
旋转 ALT鼠标左键 平移 ALT鼠标中键 缩放 ALT鼠标右键 / 滑动鼠标滚轮 切换视图 空格键 [Q] 选择状态 [W] 移动状态 [E] 旋转状态 [R] 绽放状态 1正常显示 2正常也圆滑同时显示 3圆滑显示 4线框显示 5材质显示 6贴图显示 7灯光显示 CTRLZ 撤销命令…...
Go反射指南
概念: 官方对此有个非常简明的介绍,两句话耐人寻味: 反射提供一种让程序检查自身结构的能力反射是困惑的源泉 第1条,再精确点的描述是“反射是一种检查interface变量的底层类型和值的机制”。 第2条,很有喜感的自嘲…...
深入理解 C 语言函数指针的高级用法:(void (*) (void *)) _IO_funlockfile
深入理解 C 语言函数指针的高级用法 函数指针是 C 语言中极具威力的特性,广泛用于实现回调、动态函数调用以及灵活的程序设计。然而,复杂的函数指针声明常常让即使是有经验的开发者也感到困惑。本文将从函数指针的基本概念出发,逐步解析复杂…...
【观察】甲骨文:以AI为中心,开启企业级平台架构“新革命”
知名科技杂志《连线》创始主编凯文凯利曾预测:“在未来的 100 年里,人工智能将超越任何一种人工力量,将人类引领到一个前所未有的时代。” 可以看到,随着近两年AIGC与大模型的快速爆发,AI在千万行业中的重要性愈发突出…...
react native在windows环境搭建并使用脚手架新建工程
截止到2024-1-11,使用的主要软件的版本如下: 软件实体版本react-native0.77.0react18.3.1react-native-community/cli15.0.1Android Studio2022.3.1 Patch3Android SDKAndroid SDK Platform 34 35Android SDKAndroid SDK Tools 34 35Android SDKIntel x…...
C语言从入门到进阶
视频:https://www.bilibili.com/video/BV1Vm4y1r7jY?spm_id_from333.788.player.switch&vd_sourcec988f28ad9af37435316731758625407&p23 //枚举常量 enum Sex{MALE,FEMALE,SECRET };printf("%d\n", MALE);//0 printf("%d\n", FEMALE…...
Python案例--养兔子
兔子繁殖问题是一个经典的数学问题,最早由意大利数学家斐波那契在13世纪提出。这个问题不仅在数学领域具有重要意义,还广泛应用于计算机科学、生物学和经济学等领域。本文将通过一个具体的Python程序,深入探讨兔子繁殖问题的建模和实现&#…...
Mybatis——sql映射文件中的增删查改
映射文件内的增删查改 准备工作 准备一张数据表,用于进行数据库的相关操作。新建maven工程, 导入mysql-connector-java和mybatis依赖。新建一个实体类,类的字段要和数据表的数据对应编写接口编写mybatis主配置文件 public class User {priva…...
goframe 博客分类文章模型文档 主要解决关联
goframe 博客文章模型文档 模型结构 (BlogArticleInfoRes) BlogArticleInfoRes 结构体代表系统中的一篇博客文章,包含完整的元数据和内容管理功能。 type BlogArticleInfoRes struct {Id uint orm:"id,primary" json:"id" …...
人工智能在医疗领域的应用有哪些?
人工智能在医疗领域的应用十分广泛,涵盖了诊断、治疗、药物研发等多个环节,以下是一些主要的应用: 医疗影像诊断 疾病识别:通过分析 X 光、CT、MRI 等影像,人工智能算法能够识别出肿瘤、结节、骨折等病变,…...
学习第七十六行
提高github下载速度方法 1.github转码云 2.https://github.com.cnpmjs.org com后面加东西 对于面试笔试,最好方法刷力扣,1000题包进大厂的...
C#System.Threading.Timer定时器意外回收注意事项
System.Threading.Timer定时器使用时会出现意外回收的情况。具体解释如下: 只要在使用 Timer,就必须保留对它的引用。对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。即使 Timer 仍处在活动状态,也会被回收。 实例对比测试 实例 定义两个类,其中一个…...
若依基本使用及改造记录
若依框架想必大家都了解得不少,不可否认这是一款及其简便易用的框架。 在某种情况下(比如私活)使用起来可谓是快得一匹。 在这里小兵结合自身实际使用情况,记录一下我对若依框架的使用和改造情况。 一、源码下载 前往码云进行…...
Java基础教程(007):方法的重载与方法的练习
文章目录 6.5 方法的重载6.6 方法练习数组遍历数组最大值 6.5 方法的重载 在 Java 中,方法的重载是指在同一个类中定义多个方法,这些方法具有相同的名称,但参数列表不同。方法的重载是一种实现多态的方式,允许一个方法名以不同的…...
Day27-【13003】短文,线性表两种基本实现方式空间效率、时间效率比较?兼顾优点的静态链表是什么?如何融入空闲单元链表来解决问题?
文章目录 本次内容总览第四节,两种基本实现方式概览两种基本实现方式的比较元素个数n大于多少时,使用顺序表存储的空间效率才会更高?时间效率比较?*、访问操作,也就是读运算,读操作1、插入,2、删…...
Linux 小火车
1.添加epel软件源 2.安装sl 3. 安装完成后输入: sl...
论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(四)
Understanding Diffusion Models: A Unified Perspective(四) 文章概括学习扩散噪声参数(Learning Diffusion Noise Parameters)三种等效的解释(Three Equivalent Interpretations) 文章概括 引用…...
python 统计相同像素值个数
目录 python 统计相同像素值个数 最大值附近的值 python 统计相同像素值个数 import cv2 import numpy as np import time from collections import Counter# 读取图像 image cv2.imread(mask16.jpg)# 将图像转换为灰度图像 gray_image cv2.cvtColor(image, cv2.COLOR_BGR2…...
YOLOv8:目标检测与实时应用的前沿探索
随着深度学习和计算机视觉技术的迅速发展,目标检测(Object Detection)一直是研究热点。YOLO(You Only Look Once)系列模型作为业界广受关注的目标检测框架,凭借其高效、实时的特点,一直迭代更新…...
docker配置mysql并使用mysql connector cpp编程
mysql 配置mysql使用docker 这里使用docker安装了,比较简洁,不想使用了直接就可以把容器删掉,首先获取下镜像,如下命令 docker pull container-registry.oracle.com/mysql/community-server这里直接默认使用最新版本的mysql了 …...
go理论知识——Go Channel 笔记 [特殊字符]
go理论知识——Go Channel 笔记 📝 1. 基本概念 🧠 1.1 Channel 是什么? Channel 是 Go 语言中用于在不同 Goroutine 之间进行通信的机制。Channel 是类型安全的,意味着你只能发送和接收特定类型的数据。 1.2 Channel 的创建 …...
论文阅读笔记:MambaOut: Do We Really Need Mamba for Vision?
论文阅读笔记:MambaOut: Do We Really Need Mamba for Vision? 1 背景2 创新点3 方法4 模块4.1 Mamba适合什么任务4.2 视觉识别任务是否有很长的序列4.3 视觉任务是否需要因果token混合模式4.4 关于Mamba对于视觉的必要性假设 5 效果 论文:https://arxi…...
games101-(3/4)变换
缩放: 对称 切变 旋转 考虑(1.0)这个点 同理考虑(0,1)点即可 齐次方程 考虑在二维的坐标点后面增加一个维度 所有的仿射变换都可以写成齐次坐标的形式 a b c d 是线性变换 tx ty 是平移; …...
【Linux】磁盘
没有被打开的文件 文件在磁盘中的存储 认识磁盘 磁盘的存储构成 磁盘的效率 与磁头运动频率有关。 磁盘的逻辑结构 把一面展开成线性。 通过扇区的下标编号可以推算出在磁盘的位置。 磁盘的寄存器 控制寄存器:负责告诉磁盘是读还是写。 数据寄存器:给…...
