【C语言】深入了解分支和循环语句

news2025/6/29 13:16:55

🍁 博客主页:江池俊的博客

🍁收录专栏:C语言——探索高效编程的基石

🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞

💫“每一天都是一个全新的机会,用积极的心态去迎接挑战吧!”

目录

前言 

一、什么是语句?

二、分支语句(选择结构)

2.1.if语句

2.1.1 悬空else 

2.1.2 if书写形式的对比

2.2 switch语句

2.2.1 在switch语句中的 break 

2.2.2 default子句 

三、循环语句

3.1 while循环 

3.1.1 while语句中的break和continue

3.2 for循环

3.2.1 语法

3.2.2 break和continue在for循环中

3.2.3 for语句的循环控制变量

建议: 

3.2.4 一些for循环的变种

3.3 do...while()循环

3.3.1 do语句的语法:

3.3.2 执行流程

3.3.3 do语句的特点 

3.3.4 do while循环中的break和continue 

四、goto语句


前言 

今天的分享是C语言的分支和循环语句,下面我将带大家深入了解它们。

🌴分支语句

   🔘if  

   🔘switch

🌴循环语句

   🔘while

   🔘for

   🔘do while

🌴goto语句

一、什么是语句?

C语句可分为以下五类:

1. 表达式语句

2. 函数调用语句

3. 控制语句

4. 复合语句

5. 空语句

这里我要介绍的的是控制语句。

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。

可分成以下三类:

1. 条件判断语句也叫分支语句:if语句、switch语句;

2. 循环执行语句:do while语句、while语句、for语句;

3. 转向语句:break语句、goto语句、continue语句、return语句。

二、分支语句(选择结构)

2.1.if语句

if语句的语法结构是怎么样的呢?

语法结构:
if(表达式)
    语句;
if(表达式)
    语句1;
else
    语句2;
//多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

 下面我们用具体的代码来演示一下:

#include <stdio.h>
//代码1
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
}

//代码2
#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
    else
   {
        printf("成年\n");
   }
}

//代码3
#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("少年\n");
   }
    else if(age>=18 && age<30)
   {
        printf("青年\n");
   }
    else if(age>=30 && age<50)
   {
    printf("中年\n");
   }
    else if(age>=50 && age<80)
   {
        printf("老年\n");
   }
    else
   {
        printf("老寿星\n");
   }
    
}

代码1打印结果:

代码2打印结果: 

代码3打印结果: 

 解释一下: 

 if语句:

🔥如果条件为真,则执行if语句块中的代码。

🔥如果条件为假,则跳过if语句块,继续执行后续的代码。

 在C语言中如何表示真假?

 0表示假,非0表示真。

如果条件成立,要执行多条语句,怎应该使用代码块。 

#include <stdio.h>
int main()
{
    if(表达式)
   {
        语句列表1;
   }
    else
   {
        语句列表2;
   }
    return 0;
}

 这里的一对 { } 就是一个代码块。

 if-else语句:

🔥如果条件为真,则执行if语句块中的代码。

🔥如果条件为假,则执行else语句块中的代码。

2.1.1 悬空else 

当你写了这个代码:

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

改正: 

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0;
}

else的匹配:else是和它离的最近的if匹配的。 

2.1.2 if书写形式的对比

//代码1
if (condition) {
    return x;
}
return y;
}

//代码2
if(condition)
{
    return x;
}
else
{  
  return y;
}

//代码3
int num = 1;
if(num == 5)
{
    printf("hehe\n");
}

//代码4
int num = 1;
if(5 == num)
{
    printf("hehe\n");
}

代码2和代码4更好,逻辑更加清晰,不容易出错。 

2.2 switch语句

switch语句也是一种分支语句。

常常用于多分支的情况。

比如:

⚫️输入1,输出星期一

⚫️输入2,输出星期二

⚫️输入3,输出星期三

⚫️输入4,输出星期四

⚫️输入5,输出星期五

⚫️输入6,输出星期六

⚫️输入7,输出星期日

那我没写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。 这就是switch 语句。 

switch(整型表达式)
{
    语句项;
}

语句项是什么呢?

//是一些case语句:
//如下:
case 整形常量表达式:
    语句;

这里的整型常量表达式分为以下四种:

1.字面整数常量

2.枚举常量

3.宏定义

4.常量表达式

2.2.1 在switch语句中的 break 

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

比如:

#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n");
            break;    
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;
   }
    return 0;
}

有时候我们的需求变了

1. 输入1-5,输出的是“weekday”

2. 输入6-7,输出“weekend ”

所以我们的代码就应该这样实现了:

#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:  
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0;
}

break语句的实际效果是把语句列表划分为不同的分支部分。

break的作用:

🌴终止case分支:每个case标签后的代码块被执行后,如果没有使用break语句,程序将继续执行下一个case分支的代码。

🌴跳出switch语句:使用break关键字可以跳出整个switch语句。

🌴default情况下的break:在处理switch语句中的默认情况时,使用break可以结束分支的执行。

编程好习惯

在最后一个 case 语句的后面加上一条 break语句。

(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

2.2.2 default子句 

default: 

📌写在任何一个 case 标签可以出现的位置。

📌当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。

📌但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

编程好习惯

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

三、循环语句

3.1 while循环 

我们已经掌握了,if语句:

if(条件)
     语句;

当条件满足的情况下,if语句后的语句执行,否则不执行。 但是这个语句只会执行一次。由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢?

C语言中给我们引入了: while 语句,可以实现循环。

//while 语法结构
while(表达式)
 循环语句;

while语句执行的流程: 

比如我们实现:

//在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

打印结果: 

上面的代码已经帮我了解了 while 语句的基本语法,那我们再了解一下:  

3.1.1 while语句中的break和continue

break介绍

//break 代码实例
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
    if(i == 5)
       break;
    printf("%d ", i);
    i = i+1;
 }
 return 0;
}

打印结果: 

当满足条件i=5时,break使得while循环提前终止,同时break后面的语句也不再执行。

总结:

break在while循环中的作用:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。

continue介绍 

//continue 代码实例1
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 continue;
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

打印结果:

i=5时跳过本次循环,此时i还是等于5 ,一直死循环,但不执行其他操作。

//continue 代码实例2
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		i = i + 1; 
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

打印结果:

因为i=i+1在if前面,所以当i=5时,跳过printf这条语句,i=5进入循环后,执行i=i+1这条语句,此时i=6,以此类推,直到i=10进入循环,打印出11。

总结:

continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

3.2 for循环

我们已经知道了while循环,但是我们为什么还要一个for循环呢?

首先来看看for循环的语法: 

3.2.1 语法

for(表达式1; 表达式2; 表达式3)
 循环语句;

表达式1

表达式1为初始化部分,用于初始化循环变量的。

表达式2

表达式2为条件判断部分,用于判断循环时候终止。

表达式3

表达式3为调整部分,用于循环条件的调整。 

实际的问题:

//使用for循环 在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
 int i = 0;
 //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
 for(i=1; i<=10; i++)
 {
 printf("%d ", i);
 }
 return 0;
}

打印结果: 

for循环的执行流程图: 

现在我们对比一下for循环和while循环。

int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
 printf("hehe\n");
 i = i+1;//调整部分
}

//实现相同的功能,使用for
for(i=1; i<=10; i++)
{
 printf("hehe\n");
}

可以发现在while循环中依然存在循环的三个必须条件(即初始化部分,判断部分,调整部分),但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

3.2.2 break和continue在for循环中

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。

但是还是有些差异:

//代码1
#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 break;
 printf("%d ",i);
 }
 return 0;
}

//代码2
#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;
 printf("%d ",i);
 }
 return 0;
}

代码1打印结果: 

代码2打印结果: 

3.2.3 for语句的循环控制变量

建议: 

1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}

//两边都是闭区间
for(i=0; i<=9; i++)
{}

3.2.4 一些for循环的变种

#include <stdio.h>
int main()
{
 //代码1
 for(;;)
 {
 printf("hehe\n");
 }
    //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
题。
    

    //代码2
    int i = 0;
    int j = 0;
    //这里打印多少个hehe?
    for(i=0; i<10; i++)
   {
        for(j=0; j<10; j++)
       {
 printf("hehe\n");
       }
   }

    
    //代码3
    int i = 0;
    int j = 0;
    //如果省略掉初始化部分,这里打印多少个hehe?
    for(; i<10; i++)
   {
        for(; j<10; j++)
       {
 printf("hehe\n");
       }
   }
    

 //代码4-使用多余一个变量控制循环
 int x, y;
    for (x = 0, y = 0; x<2 && y<5; ++x, y++)
   {
        printf("hehe\n");
   }
 return 0;
}

3.3 do...while()循环

3.3.1 do语句的语法:

do
 循环语句;
while(表达式);

3.3.2 执行流程

3.3.3 do语句的特点 

循环至少执行一次,使用的场景有限,所以不是经常使用。

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
 printf("%d\n", i);
 }while(i<10);
 return 0;
}

3.3.4 do while循环中的break和continue 

//代码1
#include <stdio.h>
int main()
{
 int i = 10;
    
 do
 {
        if(5 == i)
            break;
 printf("%d\n", i);
 }while(i<10);
    
 return 0;
}

//代码2
#include <stdio.h>
int main()
{
 int i = 10;
    
 do
 {
        if(5 == i)
            continue;
 printf("%d\n", i);
 }while(i<10);
    
 return 0;
}

四、goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。

例如:一次跳出两层或多层循环。

多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto语言真正适合的场景如下:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 处理错误情况

goto语句是一种控制流语句,用于将程序的执行跳转到代码的另一个位置。它允许程序员通过指定一个标签来指示程序跳转到标签所在的位置。在跳转到标签的位置后,程序将继续按顺序执行下去。

以下是一个使用goto语句的示例代码:

#include <stdio.h>

int main() {
    int num = 0;

    loop:  // 标签
    printf("%d ", num);
    num++;

    if (num < 10) {
        goto loop;  // 跳转到标签所在的位置
    }

    return 0;
}

上述代码中,goto语句被用来跳转到loop标签所在的位置,即在循环中打印从0到9的数字。请注意,过度使用goto语句可能会导致代码可读性和维护性的降低,应谨慎使用。 

打印结果:

下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:

 一个关机程序

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
    char input[10] = {0};
    system("shutdown -s -t 60");//关机
again:
    printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
    scanf("%s", input);
if(0 == strcmp(input, "我是猪"))
   {
        system("shutdown -a");//取消关机
   }
    else
   {
        goto again;
   }
    return 0;
}

而如果不适用goto语句,则可以使用循环:

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
    char input[10] = {0};
    system("shutdown -s -t 60");//关机
    while(1)
   {
        printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
        scanf("%s", input);
        if(0 == strcmp(input, "我是猪"))
       {
            system("shutdown -a");//取消关机
            break;
       }
   }
    return 0;
}

关于shutdown命令的扩展-(请点击此处)🔗 关于shutdown命令的扩展-(请点击此处)

🔥好了今天的分享就到这里,非常感谢你们抽出时间阅读我的博客文章。我希望这些内容能够让你们收获新的知识和启发。

如果你对文章中的任何观点或主题有疑问或意见,我非常欢迎你在评论区与我进行讨论。我相信通过相互交流,我们可以一起学习和成长。

希望我们能够在下一篇文章中再次相遇。祝大家生活愉快,事事顺心!

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

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

相关文章

【优选算法题练习】day7

文章目录 一、35. 搜索插入位置1.题目简介2.解题思路3.代码4.运行结果 二、69. x 的平方根1.题目简介2.解题思路3.代码4.运行结果 三、852. 山脉数组的峰顶索引1.题目简介2.解题思路3.代码4.运行结果 总结 一、35. 搜索插入位置 1.题目简介 35. 搜索插入位置 给定一个排序数组…

浅谈自动化测试工具 Appium

目录 前言&#xff1a; 一、简单介绍 &#xff08;一&#xff09;测试对象 &#xff08;二&#xff09;支持平台及语言 &#xff08;三&#xff09;工作原理 &#xff08;四&#xff09;安装工具 二、环境搭建 &#xff08;一&#xff09;安装 Android SDK &#xff0…

08 - 线性表的类型定义 - 循环双向链表

双向链表可以分为普通双向链表(前面我们已经学习过了)与循环双向链表。 循环双向链表的定义 循环双向链表就是在双向链表的基础之上,头结点的Prev指向尾结点,尾结点的Next指针则指向头结点,从而形成闭环结构。 内存中的结构 双向链表与循环双向链表的区别 双向链表 …

Vue项目中你是如何解决跨域的呢?

一、跨域是什么 跨域本质是浏览器基于同源策略的一种安全手段 同源策略&#xff08;Sameoriginpolicy&#xff09;&#xff0c;是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能 所谓同源&#xff08;即指在同一个域&#xff09;具有以下三个相同点 协议相同&…

微信小程序开发入门指南

微信小程序商城是一种方便快捷的电商平台&#xff0c;让商家能够在微信平台上展示和销售自己的商品。本文将详细介绍如何使用乔拓云平台创建自己的小程序商城。即使是对编程没有任何基础的小白用户&#xff0c;也可以轻松创建自己的微信小程序商城。 第一步&#xff0c;登录乔拓…

上门服务小程序|上门家政小程序开发

随着现代生活节奏的加快和人们对便利性的追求&#xff0c;上门家政服务逐渐成为了许多家庭的首选。然而&#xff0c;传统的家政服务存在着信息不透明、服务质量不稳定等问题&#xff0c;给用户带来了困扰。为了解决这些问题&#xff0c;上门家政小程序应运而生。上门家政小程序…

拓数派荣获 “2023 年杭州市企业高新技术研究开发中心” 认定

近日&#xff0c;拓数派上榜由杭州市科学技术局公布的 “2023 年杭州市企业高新技术研究开发中心名单”&#xff0c;通过专业的技术研发、成果转化和高新技术产业化成绩&#xff0c;获得 “杭州市拓数派数据计算企业高新技术研究开发中心” 认定。 图为&#xff1a;“杭州市拓数…

spring boot 多模块项目非启动模块的bean无法注入(问题记录)

之前有说我搭了一个多模块项目&#xff0c;往微服务升级&#xff0c;注入的依赖在zuodou-bean模块中&#xff0c;入jwt拦截&#xff0c; Knife4j ,分页插件等等&#xff0c;但是启动类在system中&#xff0c;看网上说在启动类上加SpringBootApplication注解默认扫描范围为自己…

【HTML】:超文本标记语言的基础入门元素

目录 1️⃣前言2️⃣概述&#x1f331;什么是HTML&#xff1f;&#x1f331;初步认识HTML 3️⃣了解概念✨基本结构✔️元素&#x1f50b; 标签&#x1f4a1;属性 4️⃣基本内容学习标签特殊字符属性图像标签的属性超链接标签的属性 5️⃣锚点链接6️⃣表格表格标签表格标签的属…

(ceph)资源池poll管理

资源池 Pool 管理 前面的文章中我们已经完成了 Ceph 集群的部署&#xff08;ceph部署: 传送门&#xff09;&#xff0c;但是我们如何向 Ceph 中存储数据呢&#xff1f;首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解…

oracle 如何连同空表一起导出成dmp的方法

1、oracle导出dmp文件的时候&#xff0c;经常会出现一些空表&#xff0c;没有一并被导出的情况。 执行sql select alter table ||table_name|| allocate extent; from user_tables where num_rows0 or num_rows is null; 新建一个sql窗口&#xff0c;把查询结果的sql&#…

MySQL-DQL-案例

案例 案例1 根据需求完成员工管理的条件分页查询 具体代码 -- 案例1&#xff1a;按需求完成员工管理的条件分页查询 - 根据输入条件&#xff0c;查询第一页数据&#xff0c;每页展示10条记录 -- 输入条件&#xff1a; -- 姓名&#xff1a;张 -- 性别&#xff1a;男 -- 入职时间…

深入解析5G承载网:驱动下一代通信技术的支柱

移动通信技术的不断演进&#xff0c;使得5G承载网成为驱动下一代通信技术发展的关键组成部分。在这个数字化时代&#xff0c;了解5G承载网的作用和特点对于理解现代通信网络的架构至关重要。 1.5G承载网的组成和功能 5G承载网由核心网和边缘计算组成。 其中&#xff0c;核心网…

Python实现HBA混合蝙蝠智能算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法&#xff0c;是一种搜索全局最优解的有效方法…

一款好用的被动式信息泄漏检测插件

插件介绍 FindSomething由陌陌安全残笑老哥开发的浏览器扩展&#xff0c;是一款优秀的被动式信息收集工具&#xff0c;用于展示浏览器打开的页面相关的网站资产和敏感信息。 关注【Hack分享吧】公众号&#xff0c;回复关键字【230629】获取下载链接 支持收集的信息类型如下&am…

瑞吉外卖总结

瑞吉外卖总结笔记 环境 SpringBoot、Mybatis-Plus 注意&#xff1a;使用Mybatis-Plus时&#xff0c;属性值要与数据库中的列名一致 静态映射 当将使用SpringBoot整合前端html项目时&#xff0c;需要使用静态资源的映射&#xff0c;否则会出现html页面部分效果无法展示 解…

F#奇妙游(15):优雅的WPF程序

WPF but F# 上一篇&#xff0c;写了一个F#的WPF&#xff0c;所有的东西都是随手写出来的&#xff0c;没有经过详细考虑和设计。就是吧&#xff0c;一点也不优雅……咋们虽然头发不多&#xff0c;但是优雅永不过时&#xff01; 实际上能用的开源UI库&#xff08;F#&#xff0c…

【NLP】多头注意力概念(02)

接上文: 【NLP】多头注意力概念(01) 五、计算注意力 将 Q、K 和 V 拆分为它们的头部后,现在可以计算 Q 和 K 的缩放点积。上面的等式表明,第一步是执行张量乘法。但是,必须先转置 K。 展望未来,每个张量的seq_length形状将通过其各自的张量来识别,以确保清晰…

2023年知识库软件爆火的有哪些?

2023年知识库软件爆火的可能性有很多&#xff0c;以下是一些可能的候选者&#xff1a; 一、Baklib&#xff1a;Baklib是一款新兴的知识库软件&#xff0c;它提供了强大的知识管理和组织功能。它能够帮助用户收集、整理和共享知识&#xff0c;并提供智能搜索和推荐引擎&#xf…

DP1042 国产代替TJA1042 CAN总线收发器接口芯片

5V 供电&#xff0c;IO 口兼容 3.3V&#xff0c;70V 总线耐压&#xff0c;待机模式 CAN FD 总线收发器DP1042是一款应用于 CAN 协议控制器和物理总线之间的接口芯片&#xff0c;可应用于卡车、公交、小汽车、工业控制等领域&#xff0c;支持 5Mbps CAN FD 灵活数据速率&#xf…