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

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语言【基础篇】之流程控制——掌握三大结构的奥秘

流程控制 &#x1f680;前言&#x1f99c;顺序结构&#x1f4af; 定义&#x1f4af;执行规则 &#x1f31f;选择结构&#x1f4af;if语句&#x1f4af;switch语句&#x1f4af;case穿透规则 &#x1f914;循环结构&#x1f4af;for循环&#x1f4af;while循环&#x1f4af;do -…...

c++小知识点

抽象类包含至少一个纯虚函数&#xff0c;不能实例化对象。派生类必须实现基类的所有纯虚函数才能成为非抽象类&#xff0c;从而可以实例化对象。可以使用抽象类的指针或引用指向派生类对象&#xff0c;实现多态性调用。抽象类虽然不能直接实例化&#xff0c;但可以拥有构造函数…...

团体程序设计天梯赛-练习集——L1-022 奇偶分家

前言 这几道题都偏简单一点&#xff0c;没有什么计算&#xff0c;10分 L1-022 奇偶分家 给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数…...

vue项目中,如何获取某一部分的宽高

vue项目中&#xff0c;如何获取某一部分的宽高 在Vue项目中&#xff0c;如果你想要获取某个DOM元素的宽度和高度&#xff0c;可以使用原生的JavaScript方法或者结合Vue的特性来实现。以下是几种常见的方法&#xff1a; 使用ref属性 你可以给需要测量宽高的元素添加一个ref属…...

LeetCode - #195 Swift 实现打印文件中的第十行

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

机试题——最小矩阵宽度

题目描述 给定一个矩阵&#xff0c;包含 N * M 个整数&#xff0c;和一个包含 K 个整数的数组。 现在要求在这个矩阵中找一个宽度最小的子矩阵&#xff0c;要求子矩阵包含数组中所有的整数。 输入描述 第一行输入两个正整数 N&#xff0c;M&#xff0c;表示矩阵大小。 接下…...

香港维尔利健康科技集团重金投资,内地多地体验中心同步启动

香港维尔利健康科技集团近期宣布&#xff0c;将投资数亿港元在内地多个城市建立全新的健康科技体验中心。这一战略举措旨在进一步拓展集团在内地市场的布局&#xff0c;推动创新医疗技术的普及和应用。 多地布局&#xff0c;覆盖主要城市 据悉&#xff0c;维尔利健康科技集团将…...

ZYNQ-IP-AXI-GPIO

AXI GPIO 可以将 PS 端的一个 AXI 4-Lite 接口转化为 GPIO 接口&#xff0c;并且可以被配置为单端口或双端口&#xff0c;每个通道的位宽可以独立配置。 通过使能三态门可以将端口动态地配置为输入或输出。 AXIGPIO 是 ZYNQ PL 端的一个 IP 核&#xff0c;可以将 AXI-Lite Mas…...

Netty的心跳机制怎么实现的?

大家好&#xff0c;我是锋哥。今天分享关于【Netty的心跳机制怎么实现的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Netty的心跳机制怎么实现的&#xff1f; Netty的心跳机制主要是通过在客户端和服务器之间定期发送特殊的数据包&#xff08;比如空消息或自定义的控…...

java基础——专题一 《面向对象之前需要掌握的知识》

目录 Δ前言 一、拾枝杂谈 1.Java是什么&#xff1f; 2.计组前瞻&#xff1a; 3.JDK&#xff0c;JRE&#xff0c;JVM&#xff1f; 二、环境搭建 1.JDK安装和配置&#xff1a; 1.1 人话 1.2 JDK的配置 1.3 如何切换JDK的版本&#xff1f; 2.DOS的简单使用&#xff1a; 2.1 介…...

Python 数据清洗与处理常用方法全解析

在数据处理与分析过程中&#xff0c;缺失值、重复值、异常值等问题是常见的挑战。本文总结了多种数据清洗与处理方法&#xff1a;缺失值处理包括删除缺失值、固定值填充、前后向填充以及删除缺失率高的列&#xff1b;重复值处理通过删除或标记重复项解决数据冗余问题&#xff1…...

BFS算法的实现(例题)

这是C算法基础-搜索与图论专栏的第X篇文章&#xff0c;专栏详情请见此处。 引入 上篇博客&#xff0c;我们学习了BFS算法的大体套路&#xff0c;这次&#xff0c;我将会通过两个例题来更详细的讲解。 下面我们就来讲BFS算法&#xff08;例题&#xff09;的实现。 过程 例题1&a…...

clean code阅读笔记——如何命名?

命名的原则 1. “小处诚实非小事“ 有个词叫做”以小见大“。以建筑作喻&#xff0c;宏大建筑中最细小的部分&#xff0c;比如关不紧的门、未铺平的地板&#xff0c;甚至时凌乱的桌面&#xff0c;都会将整个大局的魅力毁灭殆尽&#xff0c;这就是整洁代码之所系。 2. 有意义…...

MacOS 如何解决无法打开 ‘xxx’,因为 Apple 无法检查其是否包含恶意软件

背景 在安装软件时&#xff0c;遇到“无法打开 ‘xxx’&#xff0c;因为 Apple 无法检查其是否包含恶意软件” 的提示&#xff0c;许多用户可能会感到困惑&#xff0c;不知道该如何处理。遇到这个问题时&#xff0c;按以下步骤操作即可解决。 首先&#xff0c;这个警告提示的出…...

Java并发学习:进程与线程的区别

进程的基本原理 一个进程是一个程序的一次启动和执行&#xff0c;是操作系统程序装入内存&#xff0c;给程序分配必要的系统资源&#xff0c;并且开始运行程序的指令。 同一个程序可以多次启动&#xff0c;对应多个进程&#xff0c;例如同一个浏览器打开多次。 一个进程由程…...

省市区三级联动

引言 在网页中&#xff0c;经常会遇到需要用户选择地区的场景&#xff0c;如注册表单、地址填写等。为了提供更好的用户体验&#xff0c;我们可以实现一个三级联动的地区选择器&#xff0c;让用户依次选择省份、城市和地区。 效果展示&#xff1a; 只有先选择省份后才可以选择…...

springboot 动态配置定时任务

要在Spring Boot中动态配置定时任务&#xff0c;可以使用ScheduledTaskRegistrar类来实现。 首先&#xff0c;创建一个定时任务类&#xff0c;该类需要实现Runnable接口。例如&#xff1a; Component public class MyTask implements Runnable {Overridepublic void run() {/…...

数据结构与算法学习笔记----求组合数

数据结构与算法学习笔记----求组合数 author: 明月清了个风 first publish time: 2025.1.27 ps⭐️一组求组合数的模版题&#xff0c;因为数据范围的不同要用不同的方法进行求解&#xff0c;涉及了很多之前的东西快速幂&#xff0c;逆元&#xff0c;质数&#xff0c;高精度等…...

Arouter详解・常见面试题

前言&#xff1a;ARouter是一个用于 Android App 进行组件化改造的路由框架 —— 支持模块间的路由、通信、解耦。 一、路由简介&#xff1a; 路由&#xff1a;就是通过互联的网络把信息从源地址传输到目的地址的活动。完成路由这个操作的实体设备就是 路由器&#xff08;Rout…...

全志开发板 视频输入框架

笔记来源于百问网出品的教程。 1.VIN camera驱动框架 • 使用过程中可简单的看成是vin 模块 device 模块af driver flash 控制模块的方式&#xff1b; • vin.c 是驱动的主要功能实现&#xff0c;包括注册/注销、参数读取、与v4l2 上层接口、与各device 的下层接口、中断处…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...