C语言【基础篇】之流程控制——掌握三大结构的奥秘

news2025/1/30 13:00:52

流程控制

  • 🚀前言
  • 🦜顺序结构
    • 💯 定义
    • 💯执行规则
  • 🌟选择结构
    • 💯if语句
    • 💯switch语句
    • 💯case穿透规则
  • 🤔循环结构
    • 💯for循环
    • 💯while循环
    • 💯do - while循环
  • 🖊️总结

🚀前言

大家好!我是EnigmaCoder。本文收录于我的专栏 C,感谢您的支持!

  • 前文我们介绍了C语言中一些简单语法。
    链接: C语言【基础篇】之简单语法——构建程序大厦的基石解析
  • 本文我们介绍C语言中三大流程控制结构,分别为顺序结构、选择结构和循环结构。

在这里插入图片描述


🦜顺序结构

💯 定义

顺序结构是最简单的程序结构。在顺序结构程序中,程序按照代码书写的顺序依次执行。就好比一个人走在直路上,并且一条路走到黑。C语言中,程序由主函数入口开始执行, 然后逐条语句执行,直到程序结束。

#include<stdio.h>
int main()
{
    int a=1;//语句1
    int b=2;//语句2
    int c=a+b;//语句3
    printf("%d",c);//语句4
    return 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语言中的流程控制结构,分别为顺序结构、选择结构以及循环结构。希望能帮助到您。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2284434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node.js下载安装及环境配置教程 (详细版)

Node.js&#xff1a;是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;用于构建可扩展的网络应用程序。Node.js 使用事件驱动、非阻塞 I/O 模型&#xff0c;使其非常适合构建实时应用程序。 Node.js 提供了一种轻量、高效、可扩展的方式来构建网络应用程序&#xff0…

新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战

生成式人工智能的发展既带来了有益的生产力转型机会&#xff0c;也提供了被恶意利用的机会。 最近&#xff0c;Abnormal Security的研究人员发现了一个专门为网络犯罪创建的无审查AI聊天机器人——GhostGPT&#xff0c;是人工智能用于非法活动的新前沿&#xff0c;可以被用于网…

【文星索引】搜索引擎项目测试报告

目录 一、项目背景二、 项目功能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 函数 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊…

【观察】甲骨文:以AI为中心,开启企业级平台架构“新革命”

知名科技杂志《连线》创始主编凯文凯利曾预测&#xff1a;“在未来的 100 年里&#xff0c;人工智能将超越任何一种人工力量&#xff0c;将人类引领到一个前所未有的时代。” 可以看到&#xff0c;随着近两年AIGC与大模型的快速爆发&#xff0c;AI在千万行业中的重要性愈发突出…

react native在windows环境搭建并使用脚手架新建工程

截止到2024-1-11&#xff0c;使用的主要软件的版本如下&#xff1a; 软件实体版本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语言从入门到进阶

视频&#xff1a;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案例--养兔子

兔子繁殖问题是一个经典的数学问题&#xff0c;最早由意大利数学家斐波那契在13世纪提出。这个问题不仅在数学领域具有重要意义&#xff0c;还广泛应用于计算机科学、生物学和经济学等领域。本文将通过一个具体的Python程序&#xff0c;深入探讨兔子繁殖问题的建模和实现&#…

若依基本使用及改造记录

若依框架想必大家都了解得不少&#xff0c;不可否认这是一款及其简便易用的框架。 在某种情况下&#xff08;比如私活&#xff09;使用起来可谓是快得一匹。 在这里小兵结合自身实际使用情况&#xff0c;记录一下我对若依框架的使用和改造情况。 一、源码下载 前往码云进行…

Java基础教程(007):方法的重载与方法的练习

文章目录 6.5 方法的重载6.6 方法练习数组遍历数组最大值 6.5 方法的重载 在 Java 中&#xff0c;方法的重载是指在同一个类中定义多个方法&#xff0c;这些方法具有相同的名称&#xff0c;但参数列表不同。方法的重载是一种实现多态的方式&#xff0c;允许一个方法名以不同的…

Day27-【13003】短文,线性表两种基本实现方式空间效率、时间效率比较?兼顾优点的静态链表是什么?如何融入空闲单元链表来解决问题?

文章目录 本次内容总览第四节&#xff0c;两种基本实现方式概览两种基本实现方式的比较元素个数n大于多少时&#xff0c;使用顺序表存储的空间效率才会更高&#xff1f;时间效率比较&#xff1f;*、访问操作&#xff0c;也就是读运算&#xff0c;读操作1、插入&#xff0c;2、删…

Linux 小火车

1.添加epel软件源 2.安装sl 3. 安装完成后输入&#xff1a; sl

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(四)

Understanding Diffusion Models: A Unified Perspective&#xff08;四&#xff09; 文章概括学习扩散噪声参数&#xff08;Learning Diffusion Noise Parameters&#xff09;三种等效的解释&#xff08;Three Equivalent Interpretations&#xff09; 文章概括 引用&#xf…

docker配置mysql并使用mysql connector cpp编程

mysql 配置mysql使用docker 这里使用docker安装了&#xff0c;比较简洁&#xff0c;不想使用了直接就可以把容器删掉&#xff0c;首先获取下镜像&#xff0c;如下命令 docker pull container-registry.oracle.com/mysql/community-server这里直接默认使用最新版本的mysql了 …

go理论知识——Go Channel 笔记 [特殊字符]

go理论知识——Go Channel 笔记 &#x1f4dd; 1. 基本概念 &#x1f9e0; 1.1 Channel 是什么&#xff1f; Channel 是 Go 语言中用于在不同 Goroutine 之间进行通信的机制。Channel 是类型安全的&#xff0c;意味着你只能发送和接收特定类型的数据。 1.2 Channel 的创建 …

论文阅读笔记:MambaOut: Do We Really Need Mamba for Vision?

论文阅读笔记&#xff1a;MambaOut: Do We Really Need Mamba for Vision? 1 背景2 创新点3 方法4 模块4.1 Mamba适合什么任务4.2 视觉识别任务是否有很长的序列4.3 视觉任务是否需要因果token混合模式4.4 关于Mamba对于视觉的必要性假设 5 效果 论文&#xff1a;https://arxi…

games101-(3/4)变换

缩放&#xff1a; 对称 切变 旋转 考虑&#xff08;1.0&#xff09;这个点 同理考虑&#xff08;0&#xff0c;1&#xff09;点即可 齐次方程 考虑在二维的坐标点后面增加一个维度 所有的仿射变换都可以写成齐次坐标的形式 a b c d 是线性变换 tx ty 是平移&#xff1b; …

【Linux】磁盘

没有被打开的文件 文件在磁盘中的存储 认识磁盘 磁盘的存储构成 磁盘的效率 与磁头运动频率有关。 磁盘的逻辑结构 把一面展开成线性。 通过扇区的下标编号可以推算出在磁盘的位置。 磁盘的寄存器 控制寄存器&#xff1a;负责告诉磁盘是读还是写。 数据寄存器&#xff1a;给…

ElasticSearch-文档元数据乐观并发控制

文章目录 什么是文档&#xff1f;文档元数据文档的部分更新Update 乐观并发控制 最近日常工作开发过程中使用到了 ES&#xff0c;最近在检索资料的时候翻阅到了 ES 的官方文档&#xff0c;里面对 ES 的基础与案例进行了通俗易懂的解释&#xff0c;读下来也有不少收获&#xff0…

海浪波高预测(背景调研)

#新星杯14天创作挑战营第7期# ps&#xff1a;图片由通义千问生成 历史工作&#xff1a; 针对更高细粒度、更高精度的波浪高度预测任务&#xff1a; Mumtaz Ali 等人提出了一种多元线性回归模型&#xff08;MLR-CWLS&#xff09;&#xff0c;该模型利用协方差加权最小二乘法&a…