嵌入式开发学习(阶段二 C语言基础)
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) |
逻辑表达式
a | b | !a | !b | a&&b | a||b |
---|---|---|---|---|---|
1 | 1 | 0 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 | 0 |
**定义:**用逻辑运算符将关系表达式或者关系表达式或者逻辑表达式链接起来的构成有意义的算式称作逻辑表达式。
逻辑表达式各种优先级顺序如下:
①!(逻辑非)
②算数运算符(
*、/、%、、+、-
)③关系运算符(
\>、>=、<、<=
>==、!=
)④逻辑与逻辑或(
&&、||
)⑤赋值运算符(
=、+=、-=、*=、/=、%=
)
C编译系统在表示逻辑运算符结果时,返回也是逻辑值,用1表示真,用0表示假。
案例
假设a=4,b=5则;
表达式 | 结果 | 说明 |
---|---|---|
!a | 0 | 这里是对非0取反 |
a&&b | 1 | &&两边都是非0 |
a||b | 1 | ||左边是非0,触发短路效果 |
!a||b | 1 | ||右边是非0 |
4&&0||2 | 1 | 同级 |
小贴士:
实际上,逻辑运算符两侧的运算对象不但可以是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和minint 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);elseprintf("%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;
elseif (表达式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;]
[elseif (..) 语句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~7int 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;
}
相关文章:
嵌入式开发学习(阶段二 C语言基础)
C语言:第05天笔记 内容提要 分支结构 条件判断用if语句实现分支结构用switch语句实现分支结构 分支结构 条件判断 条件判断:根据某个条件成立与否,决定是否执行指定的操作。 条件判断的结果是逻辑值,也就是布尔类型值&#…...
【沉浸式求职学习day35】【Tomcat安装、配置】【Http简述】
😩😩😩,真的每天忙死,感觉自己精神上压力真的很大,希望我的努力能够激励到你们~ 沉浸式求职学习 Tomcat1.安装2.Tomcat启动和配置3.配置高难度面试题 4.发布一个web网站5.Http1.什么是HTTP2.两个时代3.Htt…...
基于大模型的新型隐球菌脑膜炎智能诊疗全流程系统设计与实现的技术方案文档
目录 一、术前风险预测系统1. 多模态融合模型架构2. 风险预测流程图(Mermaid)二、麻醉剂量预测系统1. 靶控输注(TCI)模型2. 麻醉方案优化流程图(Mermaid)三、术后并发症预测模型1. 时序预测模型(LSTM)2. 并发症预测流程图(Mermaid)四、健康教育管理模块1. 移动健康(…...
如何实现PLC远程编程
1. 什么是PLC编程 PLC编程是指为可编程逻辑控制器(Programmable Logic Controller,PLC)编写控制逻辑的过程。PLC是一种工业自动化控制设备,广泛应用于制造业、机械控制、流水线、电力系统等领域,用于替代传统的继电器…...
Go基于plugin的热更新初体验
背景 对于一个部署在生产环境的项目来说,我们希望当代码出现bug的时候,可以不用重启进程而达到动态修改代码的目的—— 这就是代码热部署! 使用java做游戏服务器,最大的好处是,当代码出现bug,可以直接热…...
【STM32 学习笔记】I2C通信协议
注:通信协议的设计背景 3:00~10:13 I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强, 不需要USART、CAN等通讯协议的外部收发设备,现在被广…...
RAG与语义搜索:让大模型成为测试工程师的智能助手
引言 AI大模型风头正劲,自动生成和理解文本的能力让无数行业焕发新生。测试工程师也不例外——谁不想让AI自动“看懂需求、理解接口、生成用例”?然而,很多人发现:直接丢问题给大模型,答案貌似“懂行”,细…...
Nakama:让游戏与应用更具互动性和即时性
在现代游戏和应用程序开发中,实现社交互动和实时功能已成为用户体验的核心需求。为满足这种需求,许多开发者正转向分布式服务器技术,在这些技术中,Nakama 构建起了一座桥梁。Nakama 是一个开源的分布式服务器,专门为社…...
[Spring AOP 7] 动态通知调用
动态通知调用 本笔记基于黑马程序员 Spring高级源码解读 更美观清晰的版本在:Github 注意:阅读本章内容之前,建议先熟悉静态通知调用的内容 在静态通知调用一节中,我们还有一个悬而未决的问题。 我们谈到了调用链MethodInvocation…...
Redis 集群
集群基本介绍 广义的集群,只要是多个机器构成了分布式系统,都可以称为是一个“集群”(主从模式,哨兵模式) 狭义的集群,Redis 提供的集群模式,在这个模式下主要解决的是存储空间不足的问题&…...
【Redis】基础命令数据结构
文章目录 基础命令keysexistsdelexpirettltype 数据结构和内部编码 在介绍数据类型前先介绍一下 Redis 的基础命令,方便理解 基础命令 keys 返回所有满足样式(pattern)的 key keys pattern 当前有如下 key PS:实际开发环境和生…...
C++(6):逻辑运算符
目录 1. 代码示例 示例 1:基础用法 示例 2:条件判断 2. 短路求值(Short-Circuit Evaluation) 代码示例 3. 实际应用场景 场景 1:输入合法性验证 场景 2:游戏状态判断 4. 注意事项 逻辑运算符用于组…...
项目管理从专家到小白
敏捷开发 Scrum 符合敏捷开发原则的一种典型且在全球使用最为广泛的框架。 三个角色 产品负责人Product Ower:专注于了解业务、客户和市场要求,然后相应地确定工程团队需要完成的工作的优先顺序。 敏捷教练Scrum Master:确保 Scrum 流程顺…...
AI绘画灵感觉醒指南:从灵感源泉到创意输出
目录 一、引言 二、灵感来源 2.1 现实生活 2.2 其他艺术作品 2.3 文学作品 三、灵感转化为输入提示 3.1 明确主题与核心元素 3.2 细化描述 3.3 使用修饰词与专业术语 3.4 组合与优化提示词 四、案例分析 4.1 从现实生活获取灵感 4.2 从其他艺术作品获取灵感 4.3 …...
【Java学习】枚举(匿名类详解)
目录 一、匿名类 1.形式 2.性质 2.1匿名性 2.1.1同步性 使用场景 2.1.2复用性 2.1.3向上转型 2.2实现性 3.传参 3.1构造传全参 3.1.1过程 3.1.2效果 2.1.4原子类构造无参 4.权限 二、枚举类 1.枚举常量 2.性质 2.1多态性 2.2单例性 2.2.1private保护 2.2…...
力扣题解:2、两数相加
个人认为,该题目可以看作合并两个链表的变种题,本题与21题不同的是,再处理两个结点时,对比的不是两者的大小,而是两者和是否大于10,加法计算中大于10要进位,所以我们需要声明一个用来标记是否进…...
PyTorch API 9 - masked, nested, 稀疏, 存储
文章目录 torch.randomtorch.masked简介动机什么是 MaskedTensor? 支持的运算符一元运算符二元运算符归约操作查看与选择函数 torch.nested简介构造方法数据布局与形状支持的操作查看嵌套张量的组成元素填充张量的相互转换形状操作注意力机制 与 torch.compile 的配…...
linux测试硬盘读写速度
#!/bin/bash # 文件名: disk_rate.sh # linux测试硬盘读写速度 TEST_FILE"disk_speed_test.tmp" TEST_SIZE"1024M" echo "开始测试磁盘写入速度..." WRITE_RESULT$(dd if/dev/zero of$TEST_FILE bs$TEST_SIZE count1 oflagdirect 2…...
单片机系统设计不同开发方式的优缺点(面包板,洞洞板,PCB板)
目录 快速验证代码逻辑 涉及具体电路较多 涉及高频电路 快速验证代码逻辑 面包板,无焊接,适合快速搭建临时电路。优点应该是使用方便,不需要焊接,可以随时更换元件。但缺点可能是不稳定,接触不良,不适合高…...
数字信号处理|| 快速傅里叶变换(FFT)
一、实验目的 (1)加深对快速傅里叶变换(FFT)基本理论的理解。 (2)了解使用快速傅里叶变换(FFT)计算有限长序列和无限长序列信号频谱的方法。 (3)掌握用MATLA…...
基于CNN卷积神经网络的带频偏QPSK调制信号检测识别算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)…...
数据库索引详解:原理 · 类型 · 使用 · 优化
在关系型数据库中,索引(Index)是提高查询性能的利器。合理设计和使用索引,可以极大地减少 IO 操作,提升查询效率;但滥用或误用索引,却可能带来维护开销和性能瓶颈。我将从以下几个方面ÿ…...
Java大数据可视化在城市空气质量监测与污染溯源中的应用:GIS与实时数据流的技术融合
随着城市化进程加速,空气质量监测与污染溯源成为智慧城市建设的核心议题。传统监测手段受限于数据离散性、分析滞后性及可视化能力不足,难以支撑实时决策。2025年4月27日发布的《Java大数据可视化在城市空气质量监测与污染溯源中的应用》一文,…...
【基于 LangChain 的异步天气查询3】OpenWeather实现实时天气查询
目录 一、项目功能概述 1、城市识别(GeoNames API) 2、天气数据获取(OpenWeather API) 3、AI 分析天气(deepseek-r1) 4、异步运行支持 5、配置文件隔离(.env) 二、注册 OpenW…...
.Net HttpClient 管理客户端(初始化与生命周期管理)
HttpClient 初始化与生命周期管理 HttpClient 旨在实例化一次,并在应用程序的整个生命周期内重复使用。 为实现复用,HttpClient类库默认使用连接池和请求管道,可以手动管理(连接池、配置管道、使用Polly); 结合IoC容器、工厂模式(提供了IHt…...
树莓派4的v4l2摄像头(csi)no cameras available,完美解决
根据2025年最新技术文档和树莓派官方支持建议,no cameras available错误通常由驱动配置冲突或硬件连接问题导致。以下是系统化解决方案: 一、核心修复步骤 强制禁用传统驱动 sudo nano /boot/firmware/config.txt确保包含以下配置(2025年新版…...
VBA将PDF文档内容逐行写入Excel
VBA是无法直接读取PDF文档的,但结合上期我给大家介绍了PDF转换工具xpdf-tools-4.05,先利用它将PDF文档转换为TXT文档,然后再将TXT的内容写入Excel,这样就间接实现了将PDF文档的内容导入Excel的操作。下面的代码将向大家演示如何实…...
【STM32 学习笔记】USART串口
注意:在串口助手的接收模式中有文本模式和HEX模式两种模式,那么它们有什么区别? 文本模式和Hex模式是两种不同的文件编辑或浏览模式,不是完全相同的概念。文本模式通常是指以ASCII编码格式表示文本文件的编辑或浏览模式。在文…...
位图布隆过滤器
1.位图 所谓位图,就是用每一位来存放某种状态,适用于海量数据,整数,数据无重复的场景。通常是用来判 断某个数据存不存在的。 如上例子,10个整数本应该存放需要40个字节,此时用位图只需要3个字节。 下面代…...
【Web】使用Vue3开发鸿蒙的HelloWorld!
文章目录 1、简介2、效果3、环境3.1、开发环境3.2、运行环境 4、实现4.1、在VSCode上使用Vue开发HelloWorld4.1.1、通过 Vite 快速创建项目4.1.2、修改 src/App.vue4.1.3、模拟Web浏览器运行 4.2、使用DevEco完成手机App端移植4.2.1、构建Vue 3项目为静态文件4.2.2、创建Harmon…...
cv_area_center()
主题 用opencv实现了halcon中area_center算子的功能, 返回region的面积,中心的行坐标和中心的列坐标 代码很简单 def cv_area_center(region):area[]row []col []for re in region:retval cv2.moments(re)area.append(retval[m00])row.append(int(r…...
Python+OpenCV实现手势识别与动作捕捉:技术解析与应用探索
引言:人机交互的新维度 在人工智能与计算机视觉技术飞速发展的今天,手势识别与动作捕捉技术正逐步从实验室走向大众生活。通过Python的OpenCV库及MediaPipe等工具,开发者能够以较低门槛实现精准的手部动作识别,为虚拟现实、智能家…...
【llama-factory】Lora微调和DPO训练
微调参考 DPO参考 llama-factory官网 LoRA微调 数据集处理 数据集格式和注册 Alpaca数据集格式: [{"instruction": "人类指令(必填)","input": "人类输入(选填)","…...
JS较底层的用法,几类简单介绍
JS较底层的用法 在 JavaScript 中,“偏底层”的用法通常是指更接近语言核心、规范、底层机制的特性。这些用法不是日常开发中最常见的,但对理解语言原理、优化性能或构建框架、库非常重要。下面是一些常见的“偏底层”用法或特性 1. 对象属性底层操作&am…...
当可视化遇上 CesiumJS:突破传统,打造前沿生产配套方案
CesiumJS 技术基础介绍 CesiumJS 是一款基于 JavaScript 的开源库,专门用于创建动态、交互式的地理空间可视化。它利用 WebGL 技术,能够在网页浏览器中流畅地渲染高分辨率的三维地球和地图场景。CesiumJS 支持多种地理空间数据格式,包括但不…...
使用python脚本连接SQL Server数据库导出表结构
一. 准备工作 Mac 系统安装freetds brew install freetds 安装pymssql pip3 install pymssql 二.导出指定表的结构: import pymssql# 配置数据库连接参数(根据实际情况修改) server # 内网服务器地址或IP database # 数据库名称…...
Docker基础入门
Docker核心概念 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app&#…...
day011-权限管理专题
文章目录 1. 对比文件内容1.1 diff1.2 vimdiff 2. /etc/skel目录3. 权限基础4. 修改权限4.1 用数字权限修改4.2 用字母修改权限(ugo)4.3 修改文件所有者和用户组 5. 文件与目录权限6. permission denied 权限拒绝7. 特殊权限8. 特殊属性9. 思维导图 1. 对…...
ragflow报错:KeyError: ‘\n “序号“‘
环境: ragflowv 0.17.2 问题描述: ragflow报错:KeyError: ‘\n “序号”’ **1. 推荐表(输出json格式)** [{"},{},{"},{} ]raceback (most recent call last): May 08 20:06:09 VM-0-2-ubuntu ragflow-s…...
基于FPGA的PID控制器verilog实现,包含simulink对比模型
目录 1.课题概述 2.系统测试效果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 根据PID控制器的原理,设计FPGA的总体架构。通常包括误差计算模块、比例运算模块、积分运算模块、微分运算模块、加法器模块以及控制信号输出模块等。同时通过simul…...
互联网大厂Java面试实录:Spring Boot与微服务架构在电商场景中的应用解析
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通 😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏…...
前端开发实战:用React Hooks优化你的组件性能
问题背景 在前端开发中,React组件的性能优化是一个常见挑战。尤其是当组件逻辑复杂或数据频繁更新时,性能问题尤为突出。本文将介绍如何利用React Hooks(如useMemo和useCallback)来优化组件性能。 解决方案 useMemo:用…...
Kotlin 内联函数深度解析:从源码到实践优化
一、内联函数核心概念 1. 什么是内联函数? 内联函数通过 inline 关键字修饰,其核心思想是:在编译时将函数体直接插入到调用处,而非进行传统的函数调用。这意味着: 消除了函数调用的栈帧创建、参数传递等开销。对 La…...
模拟太阳系(C#编写的maui跨平台项目源码)
源码下载地址:https://download.csdn.net/download/wgxds/90789056 本资源为用C#编写的maui跨平台项目源码,使用Visual Studio 2022开发环境,基于.net8.0框架,生成的程序为“模拟太阳系运行”。经测试,生成的程序可运行…...
python中的继承和多态
Python中的继承 继承中的一些基础的定义 继承是面向对象编程的三大特性之一,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用(继承的主要目的)和扩展。父类…...
【计算机视觉】3DDFA_V2中表情与姿态解耦及多任务平衡机制深度解析
3DDFA_V2中表情与姿态解耦及多任务平衡机制深度解析 1. 表情与姿态解耦的技术实现1.1 参数化建模基础1.2 解耦的核心机制1.2.1 基向量正交化设计1.2.2 网络架构设计1.2.3 损失函数设计 1.3 实现代码解析 2. 多任务联合学习的权重平衡2.1 任务定义与损失函数2.2 动态权重平衡策略…...
vue访问后端接口,实现用户注册
文章目录 一、后端接口文档二、前端代码请求响应工具调用后端API接口页面函数绑定单击事件,调用/api/user.js中的函数 三、参考视频 一、后端接口文档 二、前端代码 请求响应工具 /src/utils/request.js //定制请求的实例//导入axios npm install axios import …...
MySQL 从入门到精通(五):索引深度解析 —— 性能优化的核心武器
目录 一、索引概述:数据库的 “目录” 1.1 什么是索引? 1.2 索引的性能验证:用事实说话 实验环境准备 无索引查询耗时 有索引查询耗时 索引的 “空间换时间” 特性 二、索引的创建:三种核心方式 2.1 方式 1:C…...
湖北理元理律师事务所:债务优化如何实现还款与生活的平衡?
债务压力往往让债务人陷入“还款还是生存”的两难选择。湖北理元理律师事务所通过案例实践发现,科学规划的核心在于平衡法律义务与基本生活保障,而非单纯追求债务缩减。本文结合实务经验,解析债务优化的可行路径。 刚性需求优先:…...
Day21 奇异值分解(SVD)全面解析
一、奇异值分解概述 奇异值分解是线性代数中一个重要的矩阵分解方法,对于任何矩阵,无论是结构化数据转化成的“样本 * 特征”矩阵,还是天然以矩阵形式存在的图像数据,都能进行等价的奇异值分解(SVD)。 二…...