一文带你掌握C语言的分支结构

这篇具有很好参考价值的文章主要介绍了一文带你掌握C语言的分支结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言分支结构详解

1. if 语句

在本篇博客文章中,我们将深入探讨C语言中的if语句及其相关用法。if语句是一种用于条件判断的分支语句,它允许我们根据条件的真假来执行不同的代码块。

1.1 if 语句的基本语法和用法

if语句的基本语法如下所示:

if (条件) {
    // 条件为真时执行的代码块
}

在这个语法结构中,条件是一个布尔表达式,如果条件的值为真(非零),则执行if语句块中的代码。

1.2 else 语句和 else if 语句的使用

除了 if 语句,我们还可以使用 else 语句和 else if 语句来处理条件的不同情况。else 语句在 if 条件以及 else if 条件(假设存在)均为假时执行,而 else if 语句用于在多个条件之间进行判断。

ifelse if 均需条件,从 if 往下遍历条件,若所有条件不符合,执行 else 后的代码。

int num = 10;

if (num > 0) {
    printf("数字是正数\n");
} else if (num < 0) {
    printf("数字是负数\n");
} else {
    printf("数字是 0\n");
}

在这个示例中,我们根据 num 的值输出不同的结果。如果 num 大于0,我们打印"数字是正数";如果 num 小于0,我们打印"数字是负数";如果 num 等于0(不大于0且不小于0,就是0),因此我们打印"数字是 0"。

1.3 if 语句的嵌套和多重条件判断

在C语言中,我们可以嵌套if语句,这意味着在一个 if 语句块内部包含另一个if语句块。这样可以实现更复杂的条件判断逻辑。

int num = 10;

if (num > 0) {
    if (num % 2 == 0) {
        printf("数字是正偶数\n");
    } else {
        printf("数字是正奇数\n");
    }
} else if (num < 0) {
    printf("数字是负数\n");
} else {
    printf("数字是 0\n");
}

在这个示例中,我们首先判断num是否大于0,如果是,则进一步判断num是否为偶数或奇数。根据条件的不同,我们输出相应的结果。

1.4 悬空 else 问题及其解决方法

在C语言中,else 语句总是与最近的 if 语句配对,这就导致了一个被称为"悬空 else"的问题。当我们有多个嵌套的if语句时,可能会出现 else 语句与我们预期的 if 语句不匹配的情况。

为了解决悬空 else 问题,可以使用花括号(代码块)来明确 if 语句的范围,从而避免 else 语句与错误的 if 语句配对。

首先请看这个示例,初学者可能发现预期的输出和实际的输出有出入。

int num = -10;

if (num > 0)
    if (num % 2 == 0)
        printf("数字是正偶数\n");
else
    printf("数字是负数\n");

在这个示例中,初学者会下意识的根据缩进格式来判断,理所当然的认为上述代码打印"数字是负数",实际情况是什么都不会打印!!!因为else 语句总是与最近的 if 语句配对

一文带你掌握C语言的分支结构

我们使用了花括号将 if 语句的范围明确标记出来,从而避免了悬空 else 问题。

int num = -10;

if (num > 0) {
    if (num % 2 == 0) {
        printf("数字是正偶数\n");
    }
} else {
    printf("数字是负数\n");
}

2. 关系操作符

在本节中,我们将介绍C语言中常用的关系操作符。在C语言中,任何非零值都被视为真(true),而零值被视为假(false)。关系运算符的结果大致上可以认为返回的是 bool 类型的 true 或者 false,但是,严格来说是int类型的1(表示真)或0(表示假)。

2.1 关系操作符的种类和用法

C语言中的关系操作符包括以下几种:

  • ==:等于
  • !=:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于

我们可以使用这些操作符在条件判断中比较两个值的大小关系。

2.2 关系操作符的返回值类型

关系操作符的返回值类型是布尔类型,即 int 型的0或1。当关系成立时,返回1(真),否则返回0(假)。

2.3 关系操作符在条件判断中的应用

关系操作符常常用于条件判断语句中,例如 if 语句、while 循环等。通过比较两个值的大小关系,我们可以根据条件的真假来执行不同的代码块。

下面是一个使用关系操作符的示例:

int a = 5, b = 10;

if (a == b) {
    printf("a 与 b 相等\n");
} else if (a < b) {
    printf("a 比 b 小\n");
} else {
    printf("a 比 b 大\n");
}

在这个示例中,我们比较了变量a和b的值,并根据比较结果输出不同的结果。

3. 条件操作符

条件操作符(也称为三元运算符、三目运算符)是C语言中一种简洁的条件表达式。它允许我们根据条件的真假选择不同的值。

3.1 条件操作符的语法和用法

条件操作符的语法如下所示:

条件 ? 表达式1 : 表达式2

如果条件为真,则返回表达式1的值;如果条件为假,则返回表达式2的值。

通常来讲,是可以支持多条三元运算嵌套的,然而在我看来这并不是写代码的良好习惯,可读性太差!

3.2 条件操作符与if语句的对比

条件操作符提供了一种简洁的条件判断方式,它可以替代简单的 if 语句。使用条件操作符可以使代码更加简洁和易读。

下面是一个使用条件操作符的示例:

int age = 18;
char* result = (age >= 18) ? "你是成年人" : "你是未成年";

printf("%s\n", result);

在这个示例中,我们根据年龄的值选择不同的结果。如果年龄大于等于18岁,我们输出"你是成年人";否则,我们输出"你是未成年"。

4. 逻辑操作符

逻辑操作符用于在条件判断中组合多个条件,并根据逻辑关系的真假进行逻辑运算。

4.1 逻辑操作符的种类和用法

C语言中常用的逻辑操作符包括以下几种:

  • &&:逻辑与(AND)
  • ||:逻辑或(OR)
  • !:逻辑非(NOT)

逻辑与操作符(&&)在两个条件都为真时返回真,逻辑或操作符(||)在两个条件中至少一个为真时返回真,逻辑非操作符(!)用于取反。

4.2 逻辑操作符的短路运算特性

逻辑操作符具有短路运算的特性,即在某个条件已经确定的情况下,将不再计算后续的条件。

下面是一个逻辑操作符短路运算的示例:

int num = 10;

if (num > 0 && num < 100) {
    printf("Number is between 0 and 100\n");
}

在这个示例中,如果 num 大于0,才会继续判断 num 是否小于100。如果 num 小于等于0,后续的条件判断将被短路,不再执行。

逻辑与:左假则右不执行,因为一假则假,既然都是假的了,何必浪费时间往右继续判断?

逻辑或:左真则右不执行,因为一真则真,既然都是真的了,那就不用在继续判断啦!

5. switch 语句

现在,让我们来探讨C语言中另一个重要的分支语句:switch 语句。

5.1 switch 语句的基本语法和用法

switch 语句是一种用于多分支选择的语句,它根据表达式的值选择不同的执行路径。

switch 语句的基本语法如下所示:

switch (表达式) {
    case 值1:
        // 执行语句块1
        break;
    case 值2:
        // 执行语句块2
        break;
    ...
    default:
        // 默认执行语句块
        break;
}

在这个语法结构中,表达式的值将与每个 case 的值进行比较,如果匹配,则执行相应的语句块。如果没有匹配的 case,则执行 default 语句块(可选)。

下面是一个使用 switch 语句的示例:

int choice = 2;

switch (choice) {
    case 1:
        printf("You chose option 1\n");
        break;
    case 2:
        printf("You chose option 2\n");
        break;
    case 3:
        printf("You chose option 3\n");
        break;
    default:
        printf("Invalid choice\n");
        break;
}

在这个示例中,根据变量choice的值,我们选择不同的菜单项进行输出。

5.2 switch语句中的执行顺序问题

在 switch 语句中,case 的执行顺序是从上到下的,即匹配到的第一个 case 执行后,会继续执行后续的 case 语句块,直到遇到 break 语句或 switch 语句结束。

如果在 case 语句块中没有使用 break 语句,将会发生case穿透现象,即执行完一个case后,会继续执行下一个case语句块,直到遇到break语句或switch语句结束。

下面是一个"case穿透"的示例:

int num = 2;

switch (num) {
    case 1:
        printf("Number is 1\n");
    case 2:
        printf("Number is 2\n");
    case 3:
        printf("Number is 3\n");
    default:
        printf("Invalid number\n");
}

在这个示例中,如果num的值为2,将会输出"Number is 2"、"Number is 3"和"Invalid number"。这是因为没有在每个case语句块中使用break语句,导致执行顺序继续向下执行。

为了避免case穿透问题,我们可以在每个case语句块的末尾添加break语句,或者使用合适的控制流语句(如if语句)来控制执行流程。

5.3 switch语句的应用场景

switch语句在实际应用中非常常见,特别适用于根据不同的选择执行不同的操作。

例如,在菜单选择、状态机等场景中,我们可以使用switch语句来处理多个固定的选项。

下面是一个使用switch语句的示例:

int choice;

printf("Please enter your choice (1-3): ");
scanf("%d", &choice);

switch (choice) {
    case 1:
        printf("You chose option 1\n");
        break;
    case 2:
        printf("You chose option 2\n");
        break;
    case 3:
        printf("You chose option 3\n");
        break;
    default:
        printf("Invalid choice\n");
        break;
}

在这个示例中,根据用户输入的choice值,我们选择不同的菜单项进行输出。文章来源地址https://www.toymoban.com/news/detail-747589.html

5.4 switch 语句与 if 语句比较

Switch语句 If语句
用途 多分支选择,适用于固定值的比较 复杂条件判断,适用于灵活的条件逻辑
匹配方式 根据表达式的值与case值进行匹配 根据条件表达式的真假进行匹配
执行顺序 从匹配到的case开始执行,直到遇到break语句或switch结束 从上到下依次执行,根据条件的真假执行相应的代码块
默认执行 可选的default语句块在没有匹配的case时执行 可选的else语句块在条件为假时执行
代码结构 可以将多个选项组织在一起,结构清晰 适用于灵活的条件判断,代码结构较自由
使用场景 处理多个固定选项的选择 处理复杂的条件逻辑,需要灵活的条件判断
示例 根据菜单选项执行不同的操作 根据年龄和性别判断是否满足某个条件

到了这里,关于一文带你掌握C语言的分支结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于C语言的数据结构之顺序表——带你熟练掌握顺序表基本操作!!超级详细!!

    目录 前言: 1.源代码如下 2.数据结构——顺序表    2.1.顺序表的特点    2.2顺序表的分类     2.2.1.动态分配内存的顺序表     2.2.2.静态分配内存的顺序表    2.3.定义一个顺序表 3.顺序表的基本操作    3.1初始化顺序表     不用将顺序表中可能存在的原有元素初始化吗?

    2024年04月26日
    浏览(41)
  • 【Linux】一文带你掌握Linux权限!

    最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门

    2024年02月05日
    浏览(49)
  • 【SQL】一文带你掌握SQL基础语法

    英文:Structured Query Language,简称 SQL 结构化查询语言,一门操作关系型数据库的编程语言 定义操作所有关系型数据库的统一标准 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言” SQL 语句可以单行或多行书写,以 分号结尾 。 如上,

    2023年04月15日
    浏览(55)
  • 【JavaScript速成之路】一文带你掌握DOM基础

    📃个人主页:「小杨」的csdn博客 🔥系列专栏:【JavaScript速成之路】 🐳希望大家多多支持🥰一起进步呀! 小杨在上一篇带着大家一起学习了JavaScript中的内置对象,JavaScript基础的语法就结束了,下面我们将继续学习JavaScript中的DOM,希望大家通过阅读此文快速掌握DOM。 1.

    2023年04月26日
    浏览(38)
  • 【Matplotlib】一文带你掌握Matplotlib绘制各种图形

    😉大家好,我是向阳花,CSDN全栈领域新星创作者一枚😉。 在上一节中我们讲到了使用 Matplotlib绘图配置的各项配置 ,如果没有看这篇文章的朋友,建议先学习这篇文章:一文搞定Matplotlib绘图配置(大三学长的万字笔记) 那么接下来,我们就开始 使用 Matplotlib 进行各种基础

    2024年02月10日
    浏览(45)
  • 【MySQL】一文带你掌握聚合查询和联合查询

    概念: 聚合函数是一种用于处理数据集合的函数,它将多个数据行作为输入,执行特定的计算,然后返回单个结果。聚合函数通常用于统计和汇总数据,例如计算平均值、总和、最大值、最小值等。 常见的聚合函数包括: COUNT - 统计数据行数 SUM - 计算数据总和 AVG - 计算数据

    2024年02月08日
    浏览(42)
  • 【Python】一文带你掌握数据容器之集合,字典

    思考:我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景为何又需要学习新的集合类型呢? 通过特性来分析: (1)列表可修改、 支持重复元素且有序 (2)元组、字符串不可修改、 支持重复元素且有序 大家有没有看出一些局限? 局限就在于:

    2024年02月05日
    浏览(47)
  • 【二分查找】一文带你掌握二分法 (附万能模板)

    一、简介 哪怕没有学过编程的同学,也许不知道二分法这个名字,但也一定接触过它的核心思想。不了解的同学也没关系,我用一句话就能概括出它的精髓: 将一个区间一分为二,每次都舍弃其中的一部分。 二分法能够极大地降低我们在解决问题时的时间复杂度。假如你要

    2024年01月19日
    浏览(58)
  • 不再迷茫!一文带你掌握服务器硬件那些事儿

    大家好,这里是程序猿代码之路!在信息技术日益发展的今天,服务器作为支撑网络服务的核心设备,其稳定性和性能直接关系到整个IT系统的运行效率。了解服务器的硬件组成和特性,对于系统管理员、IT专业人员乃至对计算机硬件有兴趣的爱好者都是非常重要的。本文将深

    2024年04月11日
    浏览(61)
  • jQuery(JS库) | 一文带你掌握jQuery的使用

    目录   一:开篇基础 1. 为什么使用 jQuery 2. DOM 对象 3. JS对象和 jQuery 对象 4. 获取 jQuery 5. 牛刀小试 6. DOM 对象和 jQuery 对象 二:选择器 1. 基本选择器 2. 表单选择器 三:过滤器 1. 基本过滤器 2. 表单对象属性过滤器 四:函数 1. 第一组:val、text、attr 2. 第二组:hide、show、

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包