嵌入式开发学习(阶段二 C语言基础)

news2025/5/11 19:56:47

C语言:第05天笔记

内容提要

  • 分支结构
    • 条件判断
    • 用if语句实现分支结构
    • 用switch语句实现分支结构

分支结构

条件判断

条件判断:根据某个条件成立与否,决定是否执行指定的操作。

在这里插入图片描述

条件判断的结果是逻辑值,也就是布尔类型值,其结果为真(非0)或者假(0)

面试题:
①C语言中,条件表达式(作为分支或者循环条件的表达式称之为条件表达式)
支持任意类型的表达式,包括如关系、逻辑、赋值、算术等表达式,但实质上有意义的表达式只有关系表达式和逻辑表达式。
②C语言中,条件表达式的结果是逻辑值,使用非0表示真,使用0表示假,但是底层是使用1和0来表示真假。

关系运算符及其表达式
问题抛出

我们在程序设计往往会遇到问题如下面的函数的计算:

在这里插入图片描述

也就是我们必须通过一个条件的结果来选择下一步的操作,算上属于一个分支结构,C语言实现分支结构主要使用if语句。

其中的条件需要用关系表达式来表示:x!=0 就是一种关系表达式。

关系运算符及其优先级次序

关系运算符是用来进行比较符号,C语言提供了6中关系运算符

在这里插入图片描述

举例:

int a = 5, b = 6;
printf("%d\n", a > 5 != b > 5); // 解释:a > 5结果和b > 5的结果进行比较
关系表达式

关系表达式=关系运算符+表达式(操作数)

在这里插入图片描述

逻辑运算符及其表达式
问题抛出

有时,只用一个简单的关系表达式无法完整的表示一个条件:
y = { 1 x + 1 a 当  x ≠ 0 , a ≠ 0  时 10000 其他 y = \begin{cases} \frac{1}{x} + \frac{1}{a} & \text{当 } x \neq 0, a \neq 0 \text{ 时} \\ 10000 & \text{其他} \end{cases} y={x1+a110000 x=0,a=0 其他
其中的条件需要用逻辑表达式:x!=0 && a!=0 就是一种逻辑表达式。

逻辑运算及其优先级
  • 逻辑算术符构成成复杂复合的运算符。

C语言中提供了三种逻辑运算符:

符号名称分类说明
&&逻辑与双目运算符两个量都为真时为真(1),否则为假(0)
||逻辑或双目运算符两个量中只要有一个为真即为真(1),只有两个量都为假时才为 假(0)
逻辑非单目运算符运算量真时变为假(0),假时变为真(1)

逻辑表达式

ab!a!ba&&ba||b
110011
100101
011001
001100

**定义:**用逻辑运算符将关系表达式或者关系表达式或者逻辑表达式链接起来的构成有意义的算式称作逻辑表达式。

在这里插入图片描述

逻辑表达式各种优先级顺序如下:

①!(逻辑非)

②算数运算符(*、/、%、、+、-

③关系运算符(\>、>=、<、<= > ==、!=

④逻辑与逻辑或(&&、||

⑤赋值运算符(=、+=、-=、*=、/=、%=

C编译系统在表示逻辑运算符结果时,返回也是逻辑值,用1表示真,用0表示假。

案例

假设a=4,b=5则;

表达式结果说明
!a0这里是对非0取反
a&&b1&&两边都是非0
a||b1||左边是非0,触发短路效果
!a||b1||右边是非0
4&&0||21同级

小贴士:

实际上,逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0,而且也可以是字符型、实型和指针型等。系统最终是以0和非0来判定他们的真假的,例如:

‘c’ &&'d’结果为1

用if语句实现分支结构

单分支:if
概念

语法:

if(条件表达式)
{
    语法;
}

//如果是单语句,可以省略{},以下两种写法完全等价
if(条件表达式) 语句;
    
if (条件表达式)
    语句;

流程图;

在这里插入图片描述

功能;

  • 若表达式为真(非0),则执行表达式后面的语句,执行完该语句后继续执行if语句后其他语句。
  • 若表达式值为假(0),则吧执行表达式后面的语句,执行if语句后面的其他的语句。

说明:

  • 如果表达式后面是复合语句(语句超过1条),则需要使用一对{}

括起来。

案例:

  • 需求:计算并输出下列分段函数的值。
    在这里插入图片描述

  • 流程图:

    在这里插入图片描述

  • 代码:

    /*************************************************************************
      > File Name:    demo02.c
      > Author:       小刘
      > Description:  
      > Created Time: 2025年05月08日 星期四 10时48分57秒
     ************************************************************************/
    
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
        //创建2个变量,存储数据
        int x, y = -2;
    
        //
        printf("请输入一个整数:");
        scanf("%d",&x);
        
        //判断
        if (x >=0 )
        {
            y=2;
        }
        printf("x=%d,y=%d\n",x,y);
        return 0;
    }
    
    
  • 运行结果:

    在这里插入图片描述

案例:

  • 需求:有ab,c三个数,要求从控制台输入,并求出它们中最大数和最小数。

  • 分析:

    ①首先创建5个变量,其中a,b,c用来接收控制台输入,max和min分别用来存储最大和最小

    ②默认a是max和min

    ③让max分别和b、c比较,如果b、c比max大,就将b、c的值赋值给max

    ④计分别和b、c比较,如果b、c比max大,就将b、c的值赋值给max

  • 代码

    /*************************************************************************
      > File Name:    demo03.c
      > Author:       小刘
      > Description:  
      > Created Time: 2025年05月08日 星期四 11时00分10秒
     ************************************************************************/
    
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
        //创建5个变量,a,b,c用来接收控制台输入,max和min
        int a,b,c,max,min;
    
        //控制台输入
        printf("请输入三个整数");
        scanf("%d%d%d",&a,&b,&c);
    
        //最大值
        max = min = a;
        if(max < b) max = b;// b是a,b中的最大值
        if(max < c) max = c;// c是a,b,c中的最大值
        
    	//最小值
        if(min > b) min = b;
        if(min > c) min = c;
        printf("min=%d,max=%d\n",min,max);
        
        return 0;
    }
    
    
  • 运行结果

    在这里插入图片描述

  • 有可能产生的问题:

    • 在变量赋值前使用变量,导致运行结果错误,因为变量未在赋值之前,系统会给变量分配随机 值。

小贴士:

​ 建议的书写规范:

​ if(flag == 1) 建议写做:f(flag)

​ if(flag == 0) 建议写做:if(!flag)

双分支:if…else

语法:

if()
{
    语句1;
}
else
{
    语句2;
}
    
//如果是单语句,可以省略{}以下两种写法完全等价
if (条件表达式)语法1;
else 语句2;

if (条件表达式)
    语句1;
else
    语句2; 

注意:else语句本身不能单独存在,必须和距离自己最近的未配对的if配对。

流程图:

在这里插入图片描述

功能:

​ 若表达式的值为1,则执行语句1;否则执行语句2。不管条件表达式成不成立,都要执行一个语句,其次需要注意的是,语句1和雨具都可以是单语句或者复合语句。
说明:
​ if.else.结构可以实现双分支选择结构。C语言允许if.else.结构嵌套。即在语句1与语句2中又可以包含完整的if语句或者if.else.语句,并且这种嵌套可以多层(为了保证程序的执行效率,建议不超过3~4层)。利用if.else.结构的嵌套,可以实现多分支结构。
案例:

  • 需求:计算输出下列分段函数的值:

    在这里插入图片描述

  • 流程图

    在这里插入图片描述

  • 代码:

/*************************************************************************
  > File Name:    demo04.c
  > Author:       小刘
  > Description:  
  > Created Time: 2025年05月08日 星期四 11时13分32秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    //创建两个变量,用来存放数据
    int x, y;

    //通过控制台给x赋值
    printf("请输入一个整数:");
    scanf("%d",&x);

    //根据条件赋值
    if (x < 0) y = 2;
    else y = -2;
    printf("x=%d,y=%d\n",x,y);
    return 0;
}

  • 运行结果:

在这里插入图片描述

案例

  • 需求:通过控制台,输入一个年份,判断这个年份是闰年还是平年

  • 分析:

    • 判断条件:(year % 4 == 0 && year % 100 !=0 || year % 400 == 0)
  • 代码:

    /*************************************************************************
      > File Name:    demo05.c
      > Author:       小刘
      > Description:  
      > Created Time: 2025年05月08日 星期四 11时44分18秒
     ************************************************************************/
    
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
        int year;
        printf("请输入一个年份:");
        scanf("%d",&year);
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
            printf("%d是闰年\n",year);
        else
            printf("%d是平年\n",year);
        return 0;
    }
    
    
  • 运行结果
    在这里插入图片描述

  • 注意:对于单语句的双分支,我们可以使用三目运算符的写法来简化!

双分支:三目运算符

三目运算符,又被称作三元运算符。

语法:

表达式1?表达式2:表达式3;

说明:

​ ① 如果表达式1的结果为真,就执行表达式2,否则执行表达式3。(表达式2和表达式3只能满 足一个)

​ ② 三目运算符的写法实际上就是单语句的双分支if的简写

案例
  • 需求:将双分支案例改造为三目运算符的写法
  • 代码:
/*************************************************************************
  > File Name:    demo04.c
  > Author:       小刘
  > Description:  
  > Created Time: 2025年05月08日 星期四 11时13分32秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    //创建两个变量,用来存放数据
    int x, y;

    //通过控制台给x赋值
    printf("请输入一个整数:");
    scanf("%d",&x);

    //根据条件赋值
    y = x < 0 ? -2 : 2;
    printf("x=%d,y=%d\n",x,y);
    return 0;
}

案例
  • 需求通过控制台输入a,b,c三个数,求最大值
  • 代码
/*************************************************************************
  > File Name:    demo06.c
  > Author:       小刘
  > Description:  
  > Created Time: 2025年05月08日 星期四 14时26分44秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    int a,b,c,max;

    printf("请输入三个整数:");
    scanf("%d%d%d",&a,&b,&c);

    max=a > b ?(a > c ? a : c):(b > c ? b : c);
    printf("最大值为:%d\n",max);
    return 0;
}

  • 运行结果

在这里插入图片描述

多分支:if …else if…else…

语法;

//写法1;嵌套if..else..(不推荐)
if (表达式1) 语法1;
else
    if (表达式2) 语法2;
else
    ....
    
    
//写法2;并列 if..else..(推荐)
if (表达式1) 语句1;
else if (表达式2) 语句2;
...
else if (表达式n) 语句n;
else 语句 n+1;

注意:多分支的else是可选的,根据自己的需求决定要不要写。

流程图:

在这里插入图片描述

注意;多分支中同一时刻只能满足一个分支

if (){}
if (){}//都有可能执行

if(){}
else if(){}//两者只能执行一个

案例

  • 需求:根据学生的成绩,对学生进行评级;

    • 学生成绩 >=90 A
    • 学生成绩 >=80 B
    • 学生成绩 >=70 C
    • 学生成绩 >=60 D
    • 学生成绩 <60 F
  • 代码

/*************************************************************************
  > File Name:    demo08.c
  > Author:       小刘
  > Description:  
  > Created Time: 2025年05月08日 星期四 15时02分32秒
 ************************************************************************/

#include <stdio.h>


int textscore1()
{
    int score;
    printf("请输入您的成绩:");
    scanf("%d",&score);
    if (score < 0 || score >100)printf("成绩错误\n");
    else if(score >= 90 ) printf("您的成绩为A级\n");
    else if(score >= 80 ) printf("您的成绩为B级\n");
    else if(score >= 70 ) printf("您的成绩为C级\n");
    else if(score >= 60 ) printf("您的成绩为D级\n");
    else printf("您的成绩为E级\n");
    return 0;
}

int textscore2()
{
    int score;
    printf("请输入您的成绩:");
    scanf("%d",&score);
    if (score < 0 || score >100)printf("成绩错误\n");
    else if(score < 60 ) printf("您的成绩为E级\n");
    else if(score < 70 ) printf("您的成绩为D级\n");
    else if(score < 80 ) printf("您的成绩为C级\n");
    else if(score < 90 ) printf("您的成绩为B级\n");
    else printf("您的成绩为A级\n");
    return 0;
}

int main(int argc,char *argv[])
{
    textscore1();
    textscore2();

    return 0;
}

  • 运行结果

在这里插入图片描述

if…else结构注意点
  • if…else结构中的语句1和语句2都可以是复合语句。
  • 在f…else结构中,语句1和语句2都可以是空语句。举例: if(..);else;

在这里插入图片描述

if语句的嵌套

语法:

if (..)
    if (..) 语句1;
   [else   语句2;]
[else
    if (..) 语句3;
    else    语句4;
]

流程图:

在这里插入图片描述

注意:

​ ①else总是与前面最近的if配对使用

​ ②可通过增加{}来确定配对关系

​ ③只要if中包含if,都属于是if语句的嵌套

案例
  • 需求:根据学生的成绩,对学生进行评级;

    • 学生成绩 >=90 A

    • 学生成绩 >=80 B

    • 学生成绩 >=70 C

    • 学生成绩 >=60 D

    • 学生成绩 <60 F

代码:

/*************************************************************************
  > File Name:    demo08.c
  > Author:       小刘
  > Description:  
  > Created Time: 2025年05月08日 星期四 15时02分32秒
 ************************************************************************/

#include <stdio.h>


int textscore1()
{
    int score;
    printf("请输入您的成绩:");
    scanf("%d",&score);
    if (score < 0 || score >100)printf("成绩错误\n");
    else if(score >= 90 ) printf("您的成绩为A级\n");
    else if(score >= 80 ) printf("您的成绩为B级\n");
    else if(score >= 70 ) printf("您的成绩为C级\n");
    else if(score >= 60 ) printf("您的成绩为D级\n");
    else printf("您的成绩为E级\n");
    return 0;
}

int textscore2()
{
    int score;
    printf("请输入您的成绩:");
    scanf("%d",&score);
    if (score < 0 || score >100)printf("成绩错误\n");
    else if(score < 60 ) printf("您的成绩为E级\n");
    else if(score < 70 ) printf("您的成绩为D级\n");
    else if(score < 80 ) printf("您的成绩为C级\n");
    else if(score < 90 ) printf("您的成绩为B级\n");
    else printf("您的成绩为A级\n");
    return 0;
}

int main(int argc,char *argv[])
{
    textscore1();
    textscore2();

    return 0;
}

用swich语句实现分支结构

我们可以使用swich多分支选择结构(多分支也是被多路分支)

语法:

switch (表达式)   // 表达式的结果建议是 字符 或者 整型
{
    case 常量表达式1:   // 这里一般使用字面量、符号常量、枚举
        语句1;
        break;
    case 常量表达式2:   // 这里一般使用字面量、符号常量、枚举
        语句2;
        break;
   ...
   [case 常量表达式n:   // 这里一般使用字面量、符号常量、枚举
        语句n;
        break;
    default:
        语句n+1;
        break;]
}

流程图:

在这里插入图片描述

说明:

①switch后括号内的表达式可以是任意类型的表达式,建议表达式的结果是整型、字符型

②若表达式的值与某个常量表达式的值相等时,执行case后面的语句;若没有相等的值时,执行default后面的语句。

③每个case后面的常量表达式的值必须不相同,否则出现矛盾。

④各个case出现的次序不影响执行结果。

⑤case后面的语句中如果没有break语句,则执行完本case后的语句后会接着执行下面的case,直到遇到下一个break或者switch执行完毕为止,演示:

int num = 1;
switch (num)
{
    case 1:
        printf("A\n");// 注意:这里没有break,会继续执行下一个case,直到遇到break或者执行结束
        break;
     case 2:
        printf("B\n");
        break;
     case 3:
        printf("C\n");
        break;
     case 4:
        printf("D\n");
        break;
     case 5:
        printf("E\n");
        break;
        
}

⑥多个case公用一组语句,演示:

//需求:根据月份判断季节
//分析
//     春季:2~4
//     夏季:5~7

int mouth = 3;
switch (mouth)//月份
{
        case 2;
        case 3;
        case 4;
        	printf("春季\n");
}

案例:

  • 需求:按照考试成绩的等级输出百分制分数段
  • 分析:
    • 若分段原则如下:
      • 90~100 A级
      • 80~89 B级
      • 70~79C级
      • 60~69 D级
      • 其他 E级
  • 代码:
/*************************************************************************
  > File Name:    demo09.c
  > Author:       小刘
  > Description:  
  > Created Time: 2025年05月10日 星期六 22时38分45秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    int score;

    printf("请输入一个整数:");
    scanf("%d",&score);

    if(score < 0 || score >100)
    {
        printf("Error\n");
    }
    else
    {
        switch(score / 10)
        {
            default:
                printf("E级\n");
                break;
            case 10 :
            case 9:
                printf("A级\n");
                break;
            case 8:
                printf("B级\n");
                break;
            case 7:
                printf("C级\n");
                break;
            case 6:
                printf("D级\n");
                break;
        }
    }
    return 0;
}

  • 运行结果:

在这里插入图片描述

案例:

  • 需求:设计一个简易计算器,要求能够实现简单的减减乘除运算

  • 代码:

    /*************************************************************************
      > File Name:    demo02.c
      > Author:       小刘
      > Description:  
      > Created Time: 2025年05月08日 星期四 16时26分32秒
     ************************************************************************/
    
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
        char op;
        double num1,num2;
    
        printf("--------------------\n");
        printf("|    简易计算器    |\n");
        printf("--------------------\n");
        printf("请输入运算符(+ - * \):\n");
        scanf("%c",&op);
        printf("请输入要计算的公式:\n");
        scanf("%d%c%d",&mun1,&op,&num2);
        switch (op)
        {
            case '+':
                printf("%.2lf + %.2f = %.2lf",num1,num2,num1+num2);
                break;
            case '-':
                printf("%.2lf - %.2f = %.2lf",num1,num2,num1-num2);
                break;
            case '*':
                printf("%.2lf * %.2f = %.2lf",num1,num2,num1*num2);
                break;
            case '/':
                b==0 ? printf("0不能为被除数"): printf("%.2lf / %.2f = %.2lf",num1,num2,num1/num2);
                break;
    
        }
        return 0;
    }
    

    int main(int argc,char *argv[])
    {
    char op;
    double num1,num2;

    printf("--------------------\n");
    printf("|    简易计算器    |\n");
    printf("--------------------\n");
    printf("请输入运算符(+ - * \):\n");
    scanf("%c",&op);
    printf("请输入要计算的公式:\n");
    scanf("%d%c%d",&mun1,&op,&num2);
    switch (op)
    {
        case '+':
            printf("%.2lf + %.2f = %.2lf",num1,num2,num1+num2);
            break;
        case '-':
            printf("%.2lf - %.2f = %.2lf",num1,num2,num1-num2);
            break;
        case '*':
            printf("%.2lf * %.2f = %.2lf",num1,num2,num1*num2);
            break;
        case '/':
            b==0 ? printf("0不能为被除数"): printf("%.2lf / %.2f = %.2lf",num1,num2,num1/num2);
            break;
    
    }
    return 0;
    

    }

    
    
    

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

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

相关文章

从人体姿态到机械臂轨迹:基于深度学习的Kinova远程操控系统架构解析

在工业自动化、医疗辅助、灾难救援与太空探索等前沿领域&#xff0c;Kinova轻型机械臂凭借7自由度关节设计和出色负载能力脱颖而出。它能精准完成物体抓取、复杂装配和精细操作等任务。然而&#xff0c;实现人类操作者对Kinova机械臂的直观高效远程控制一直是技术难题。传统远程…

NX949NX952美光科技闪存NX961NX964

NX949NX952美光科技闪存NX961NX964 在半导体存储领域&#xff0c;美光科技始终扮演着技术引领者的角色。其NX系列闪存产品线凭借卓越的性能与创新设计&#xff0c;成为数据中心、人工智能、高端消费电子等场景的核心组件。本文将围绕NX949、NX952、NX961及NX964四款代表性产品…

【Bootstrap V4系列】学习入门教程之 组件-输入组(Input group)

Bootstrap V4系列 学习入门教程之 组件-输入组&#xff08;Input group&#xff09; 输入组&#xff08;Input group&#xff09;Basic example一、Wrapping 包装二、Sizing 尺寸三、Multiple addons 多个插件四、Button addons 按钮插件五、Buttons with dropdowns 带下拉按钮…

VS “筛选器/文件夹”

每天学习一个VS小技巧&#xff1a; 我在VS创建筛选器的时候&#xff0c;想要想要同步计算机上的文件目录&#xff0c;但是发现并未 同步。 例如我在这儿创建了一个筛选器IoManager 但是在UI这个文件夹里并未创建对应的IoManager文件夹 我右击也没有打开文件所在位置 然后我…

powerbuilder9.0中文版

经常 用这个版本号写小软件,非常喜欢这个开发软件 . powerbuilder9.0 非常的小巧,快捷,功能强大,使用方便. 我今天用软件 自己汉化了一遍&#xff0c;一些常用的界面都已经翻译成中文。 我自己用的&#xff0c;以后有什么界面需要翻译&#xff0c;再更新一下。 放在这里留个…

基于C语言的TCP通信测试程序开发指南

一、TCP通信基础原理 1.1 通信流程概述 TCP通信采用客户端-服务器模型&#xff0c;核心流程如下&#xff1a; 服务器端&#xff1a; 创建套接字&#xff08;Socket&#xff09; 绑定地址和端口&#xff08;Bind&#xff09; 开始监听&#xff08;Listen&#xff09; 接受…

教育系统源码如何支持白板直播与刷题功能?功能开发与优化探索

很多行业内同学疑问&#xff0c;如何在教育系统源码中支持白板直播和刷题功能&#xff1f;本篇文章&#xff0c;小编将从功能设计、技术实现到性能优化&#xff0c;带你全面了解这个过程。 一、白板直播功能的核心需求与技术挑战 实时交互与同步性 白板直播的核心是“实时性”。…

再度深入理解PLC的输入输出接线

本文再次重新梳理&#xff1a; 两线式/三线式传感器的原理及接线、PLC的输入和输出接线&#xff0c;深入其内部原理&#xff0c;按照自己熟悉的方式去理解该知识 在此之前&#xff0c;需要先统一几个基础知识点&#xff1a; 在看任何电路的时候&#xff0c;需要有高低电压差&…

k8s(11) — 探针和钩子

钩子和探针的区别&#xff1a; 在 Kubernetes&#xff08;k8s&#xff09;中&#xff0c;钩子&#xff08;Hooks&#xff09;和探针&#xff08;Probes&#xff09;是保障应用稳定运行的重要机制&#xff0c;不过它们的用途和工作方式存在差异&#xff0c;以下为你详细介绍&…

使用jmeter对数据库进行压力测试

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言 很多人提到 jmeter时&#xff0c;只会说到jmeter进行接口自动化或接口性能测试&#xff0c;其实jmeter还能对数据库进行自动化操作。个人常用的场景有以下&…

Kubernetes生产实战(十四):Secret高级使用模式与安全实践指南

一、Secret核心类型解析 类型使用场景自动管理机制典型字段Opaque (默认)自定义敏感数据需手动创建data字段存储键值对kubernetes.io/dockerconfigjson私有镜像仓库认证kubelet自动更新.dockerconfigjsonkubernetes.io/tlsTLS证书管理Cert-Manager可自动化tls.crt/tls.keykube…

05 mysql之DDL

一、SQL的四个分类 我们通常可以将 SQL 分为四类&#xff0c;分别是&#xff1a; DDL&#xff08;数据定义语言&#xff09;、DML&#xff08;数据操作语言&#xff09;、 DCL&#xff08;数据控制语言&#xff09;和 TCL&#xff08;事务控制语言&#xff09;。 DDL 用于创建…

电池热管理CFD解决方案,为新能源汽车筑安全防线

在全球能源结构加速转型的大背景下&#xff0c;新能源汽车产业异军突起&#xff0c;成为可持续发展的重要驱动力。而作为新能源汽车 “心脏” 的电池系统&#xff0c;其热管理技术的优劣&#xff0c;直接决定了车辆的安全性、续航里程和使用寿命。电池在充放电过程中会产生大量…

TransmittableThreadLocal:穿透线程边界的上下文传递艺术

文章目录 前言一、如何线程上下文传递1.1 ThreadLocal单线程1.2 InheritableThreadLocal的继承困境1.3 TTL的时空折叠术 二、TTL核心设计解析2.1 时空快照机制2.2 装饰器模式2.3 采用自动清理机制 三、设计思想启示四、实践启示录结语 前言 在并发编程领域&#xff0c;线程上下…

基于STM32的甲醛检测

一、制作目标 以正点原子的miniSTM32F103RCT6开发板为主控&#xff0c;使用甲醛传感器检测环境空气中的甲醛含量&#xff08;以mg/m^3为单位&#xff09;、C02含量&#xff08;以ppm为单位&#xff09;和总有机挥发物含量TVOC&#xff08;以mg/m^3为单位&#xff09;在OLED显示…

洛图报告中的 FSHD 是什么?—— 解密九天画芯推动的三色光源显示技术

目录 一、洛图报告新焦点&#xff1a;FSHD 为何成为显示产业重要突破方向&#xff1f; &#xff08;一&#xff09;洛图报告核心结论&#xff1a;从技术突围到产业重构 二、技术解析&#xff1a;FSHD 如何重构显示底层逻辑&#xff1f; &#xff08;一&#xff09;物理架构…

【MySQL】事务(重点)

目录 一、什么是事务&#xff1a; 二、事务的前置知识了解 引擎是否支持事务 事务的提交方式 事务操作的前置准备&#xff1a; 三、事务回滚&#xff1a; 四、事务崩溃&#xff1a; 原子性&#xff1a; 持久性&#xff1a; 五、自动提交和手动提交&#xff1a; 六、…

Linux:线程同步与互斥

目录 线程互斥 锁 初始化 销毁 加锁 解锁 线程同步 条件变量 初始化 销毁 等待条件满足 唤醒等待 pthread_cond_signal pthread_cond_broadcast 生产者消费者模型 3种关系 2种角色 1个交易场所 POSIX信号量 初始化 销毁 等待 发布 线程互斥 互斥相关…

每天五分钟机器学习:拉格朗日对偶函数

本文重点 在数学优化领域,拉格朗日对偶函数作为连接原始约束问题与对偶问题的核心纽带,展现了将复杂约束优化转化为无约束优化的方式。 数学表达 原始问题建模 拉格朗日函数构造 此时的目标就是: 先假设w为常数,让拉格朗日函数对橙子变量λ求极大值,消掉λ之后,在对λ求…

AutoGen 框架解析:微软开源的多人 Agent 协作新范式

一、引言 在大语言模型&#xff08;LLM&#xff09;快速发展的今天&#xff0c;复杂任务的自动化协作需求日益增长。微软开源的AutoGen 框架&#xff08;GitHub Star 超 10 万&#xff09;提供了一种基于多智能体对话的协作范式&#xff0c;通过自然语言交互实现多角色 Agent …