10天学会嵌入式技术之C语言-day-3

1、21 天学会 Java 2:开启编程之旅 本博客提供了一个21天系统学习Java编程语言的详细计划,涵盖Java基础语法、面向对象编程、Java类库应用以及高级编程技术如网络通信、数据库处理和服务器端开发。适合编程新手和有经验的开发者,帮助读者通过理论与实践结合,逐步掌握Java核心知识和应用技巧。 阅读详情

第七章 运算符

7.1 运算符基础

7.1.1 什么是运算符

运算符是一种特殊的符号,用以用于数据的运算、赋值和比较等。

7.1.2 表达式

表达式指的是一组运算数、运算符的组合,表达式一定具有值,一个变量或一个常量就
是一个表达式,变量、常量与运算符也可以组成复杂一些的表达式。

7.1.3 运算符分类

(1)按照操作数个数分类:
    一元运算符(一目运算符)
    二元运算符(二目运算符)
     三元运算符(三目运算符)
(2)按照功能分类:
      算术运算符
      赋值运算符                                                                                                                                          关系运算符                                                                                                                                         逻辑运算符
      位运算符

7.1.4如何掌握运算符

掌握一个运算符,关注以下几个方面:
(1)运算符的含义。
(2)运算符操作数的个数。
(3)运算符所组成的表达式值。
(4)运算符有无副作用,副作用指运算后是否会修改操作数的值。

7.2 算数运算符

算术运算符是对数值类型的变量进行运算的,在 C 程序中使用的非常多。

(1)正好和符号

#include<stdio.h>

int main()
{
	int x = 12;
	int x1 = -x,x2 = +x;

	int y = -67;
	int y1 = -y, y2 = +y;

	printf("x1=%d,x2=%d\n", x1, x2);
	printf("y1=%d,y2=%d\n", y1, y2);
	
	return 0;
}

x1=-12,x2=12
y1=67,y2=-67

D:\c-code\Project2\x64\Debug\3-15.exe (进程 27276)已退出,代码为 0 (0x0)。
按任意键关闭此窗口. . 

(2)加,减,乘,除

#include<stdio.h>

int main()
{

	int a = 5 + 2.5;
	printf("%d\n", a*a);

	double b = 6 / 4;
	printf("%f\n", b);

	double c = 6.0 / 4;
	printf("%f\n", c);

	return 0;
}

49
1.000000
1.500000

D:\c-code\3-15\x64\Debug\3-15.exe (进程 22056)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

注意:整数之间做除法时,结果只保留整数部分而舍弃小数部分。

(3)取余

#include<stdio.h>

int main()
{
	int res1 = 10 % 3;
	printf("%d\n", res1);

	int res2 = -10 % 3;
	printf("%d\n", res2);

	int res3 = 10 % -3;
	printf("%d\n", res3);

	int res4 = -10 % -3;
	printf("%d\n", res4);

	return 0;
}

1
-1
1
-1

D:\c-code\3-15\x64\Debug\3-15.exe (进程 28764)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

注意:运算结果的符号与被模数也就是第一个操作数相同。

)自增和自减
(1)自增、自减运算符可以写在操作数的前面也可以写在操作数后面,不论前面还是
后面,对操作数的副作用是一致的。
(2)自增、自减运算符在前在后,对于表达式的值是不同的。 如果运算符在前,表达
式的值是操作数自增、自减之后的值;如果运算符在后,表达式的值是操作数自增、自减之前的值。

#include<stdio.h>

int main()
{
	int i1 = 10, i2 = 20;
	int i = i1++;
	printf("%d\n", i);//10
	printf("%d\n", i1);//11

	i = ++i1;
	printf("%d\n", i);//12
	printf("%d\n", i1);//12

	i = i2--;
	printf("%d\n", i); //20
	printf("%d\n", i2);//19

	i = --i2;
	printf("%d\n", i);//18
	printf("%d\n", i2);//18

	return 0;

10
11
12
12
20
19
18
18

D:\c-code\3-15\x64\Debug\3-15.exe (进程 28676)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

7.3 关系运算符(比较运算符)

演示案例:

#include<stdio.h>

int main()
{
	int a = 8;
	int b = 7;

	printf("a>b的值:%d\n", a > b);
	printf("a>=b的值:%d\n", a >= b);
	printf("a<b的值:%d\n", a < b);
	printf("a<=b的值:%d\n", a <= b);
	printf("a==b的值:%d\n", a == b);
	printf("a!=b的值:%d\n", a != b);

	return 0;
}

a>b的值:1
a>=b的值:1
a<b的值:0
a<=b的值:0
a==b的值:0
a!=b的值:1

D:\c-code\3-15\x64\Debug\3-15.exe (进程 19452)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

7.4 逻辑运算符

(1)逻辑与&&

       1)如果两个操作数都为真(非零),那么表达式的值为真,否则为假。
       2)如果第一个操作数为假,第二个操作数没有计算的必要了,这种现象称为短路现
象。
 

#include<stdio.h>

int main()
{
	double score = 70;//成绩

	if (score >= 60 && score <= 80)
	{
		printf("ok1");
	}
	else
	{

		printf("ok");
	}

	int a = 10, b = 99;
	if (a < 2 && ++b>99)
	{
		printf("ok100");
	}
	else
	{
		printf("b=%d", b);
	}

	return 0;
}

ok1b=99
D:\c-code\3-15\x64\Debug\3-15.exe (进程 21392)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

(2)逻辑或||

1)只要有一个操作数为真,表达式的值就为真;两个操作数都为假,表达式的值为
假。
(2)如果第一个操作数为真,第二个操作数没有计算的必要了,这种现象称为短路现象。

#include<stdio.h>

int main()
{
	double score = 70;

	if (score >= 70 || score <= 80)
	{
		printf("ok1\n");
	}
	else
	{
		printf("ok2\n");
	}

	int a = 10,b = 99;

	if (a > 5 || b++ > 100)
	{
		printf("ok100\n");
	}
	
		printf("b=%d\n", b);

	return 0;
}

ok1
ok100
b=99

D:\c-code\3-15\x64\Debug\3-15.exe (进程 36896)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
 

7.5 赋值运算符

注意:
(1)赋值运算符的第一个操作数(左值)必须是变量的形式,第二个操作数可以是任何形式的表达式。

(2)赋值运算符的副作用针对第一个操作数。

#include<stdio.h>

int main()
{
	int a = 10, b = 20, c = 30;

	c += 3;//等同于c=c+3,33
	c += b;//等同于c=c+b,53
	a += 1.7;//等同于a=a+1.7,11

	printf("a=%d b=%d c=%d", a, b, c);

	return 0;
}

a=11 b=20 c=53
D:\c-code\3-15\x64\Debug\3-15.exe (进程 23956)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
 

7.6 位运算符

注意:操作数进行位运算的时候,以它的补码形式进行运算。

(1)按位与、按位或、按位异或

#include<stdio.h>

int main()
{
	int a = 17;
	int b = -12;

	printf("a&b=%d\n", a & b);
	printf("a|b=%d\n", a | b);
	printf("a^b=%d\n", a ^ b);


}

a&b=16
a|b=-11
a^b=-27

D:\c-code\3-15\x64\Debug\3-15.exe (进程 10716)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

(2)按位取反

#include<stdio.h>

int main()
{
	int a = 17;
	int b = -12;
	printf("~a=%d\n", ~a);
	printf("~b=%d\n", ~b);

	return 0;
}

~a=-18
~b=11

D:\c-code\3-15\x64\Debug\3-15.exe (进程 8204)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

(3)按位左移,按位右移

lude<stdio.h>

int main()
{
	int a = 17;
	int b = -12;

	printf("a<<2=%d\n", a << 2);
	printf("b<<2=%d\n", b << 2);

    printf("a>>3=%d\n", a >>3);
	printf("b>>3=%d\n", b >>3);


	return 0;

}

a<<2=68
b<<2=-48

a>>3=2

b>>3=-2

D:\c-code\3-15\x64\Debug\3-15.exe (进程 10508)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

7.7 三元运算符

(1)基本语法
        条件表达式? 表达式 1: 表达式 2;
(2)表达式最终取值
        1)如果条件表达式为非 0(真),整个表达式的值是表达式 1;
        2)如果条件表达式为 0(假),整个表达式的值是表达式 2;

#include<stdio.h>

int main()
{
	int a = 10;
	int b = 99;
	int res = a > b ? a++ : b--;
	int n1 = a > b ? 1.1 : 1.2;

	printf("a=%d\n", a);
	printf("b=%d\n", b);
	printf("res=%d\n", res);

	return 0;
}

a=10
b=98
res=99

D:\c-code\3-15\x64\Debug\3-15.exe (进程 29892)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

(4)课堂案例1:计算两个数的最大值(a,b)

#include<stdio.h>

int main()
{
	int a = 10;
	int b = 100;

	int max = a > b ? a : b;

	printf("a和b中的最大值是:%d", max);

	return 0;
}

a和b中的最大值是:100
D:\c-code\3-15\x64\Debug\3-15.exe (进程 10456)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

(5)课堂案例2:计算三个数的最大值

#include<stdio.h>

int main()
{
	int a = 10;
	int b = 100;
	int c = 199;

	//int max1 = a > b ? a : b;
	//int max2 = max1 > c ? max : c;
	int max = (a > b ? a : b) > c ? (a > b ? a : b) : c;

	printf("a,b,c中的最大值是:%d", max);

	return 0;

a,b,c中的最大值是:199
D:\c-code\3-15\x64\Debug\3-15.exe (进程 37460)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

7.8 运算符优先级

运算符优先级总结:
(1)不要过多的依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量
使用小括号来控制表达式的执行顺序。
(2)不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来成。
(3)运算符优先级不用刻意地去记忆,总体上:一元运算符 > 算术运算符 > 关系运
算符 > 逻辑运算符 > 三元运算符 > 赋值运算符。

第八章 程序控制语句

在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的。
主要有三大流程控制语句:
(1)顺序控制                                                                                                                           (2)分支控制                                                                                                                           (3)循环控制

8.1 顺序控制语句

程序从上到下逐行地执行,表达式语句都是顺序执行的。并且上一行对某个变量的修改
对下一行会产生影响。
 

8.2 分支语句

8.2.1 单向分支

(1)基本语法

if (条件表达式)
{
   执行代码块
}

说明:当条件表达式为真(非 0 时,就会执行代码块语句,条件表达式为假(0)时,不会执行代码块。

(2)单向分支流程图

(3)案例:

//编写一个程序,输入年龄,如果是未成年人,则提示“未成年人请在家长陪同下访问!”
#include<stdio.h>

int main()
{
	int age = 0;
	printf("please input your age::");
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年人请在家长陪同下访问!");
	}else
	{
	
	printf("welcome!");
	}
	return 0;
}

8.2.2 双向分支

(1)基本语句

if(条件表达式)
{
  执行代码块1
}
  else
{
执行代码块2
}

说明:当条件表达式成立(为真),执行代码块 1,否则执行代码块 2。

(2)双向分支流程图

(3)案例:

//输入年龄,如果年龄大于18,则输出“你的年龄大于18,要对自己的行为负责!”。否则输出“你的年龄不大,这次放过你。'
#include<stdio.h>

int main()
{
	int age = 0;
	printf("please input your age:\n");
	scanf("%d", &age);

	if (age > 18)
	{
		printf("你的年龄大于18,要对自己的行为负责");
	}
	else
	{
		printf("你的年龄不大,这次放过你");
	}

	return 0;

8.2.3 多向分支 else if

(1)基本语句

if(条件表达式1)
{
   执行代码块1;
}
else if(条件表达式2)
{
   执行代码块2;
}
...
else
{
  执行代码块n;
}

说明:当条件表达式 1 成立时,即执行代码块 1,如果表达式 1 不成立,才去判断表达
式 2 是否成立,如果表达式 2 成立,就执行代码块 2,以此类推如果所有的表达式都不成立,
则执行 else 的代码块。

(2)流程图

(3)案例:张三参加考试,他和父亲达成协议,如果成绩不到 60 分没有任何奖励;如果成绩 60
分(含)到 80 分,奖励一个肉夹馍;如果成绩 80 分(含)到 90 分,奖励一个 ipad;如果
成绩 90 分及以上,奖励一部华为 mate60 pro。

#include<stdio.h>

int main()
{
	//定义变量记录成绩
	double score;
	printf("please input your score:\n");
	scanf_s("%lf", &score);

	//根据成绩进行判定
	if (score < 60)
	{
		printf("你的成绩不合格,没有奖励。\n");
	}
	else if (score<80)
	{
		printf("奖励你一个肉夹馍。\n");
	}
	else if (score < 90)
	{
		printf("奖励你一个ipad.\n");
	}
	else if (score >= 90)
	{
		printf("奖励你一部华为手机。\n");
	}
	else
	{
		printf("输入无效。\n");
	}
	return 0;
}

8.2.4 多向分支switch

(1)基本语句

switch(表达式)
{
    case 常量值 1;
        语块1;
        break;
    case 常量值 2;
        语块2;
        break;
         ...
    case 常量值 n;
        语块n;
        break;
    default;
        语句块n+1;
}

说明:
(1)switch 后面表达式的值必须是一个整型(char、short, int, long 等)或枚举类型。
(2)case 后面的值必须是常量,而不能是变量。
(3)default 是可选的,当没有匹配的 case 时,执行 default。
(4)break 语句可以使程序跳出 switch 语句块,如果没有 break,会执行下一个 case 语
句块,直到遇到 break 或者执行到 switch 结尾,这个现象称为穿透。

(2)流程图

案例:

编写一个程序,该程序可以接收一个字符,比如:a、b、c、d 其中 a 表示星期一,b 表
示星期二…,根据用户的输入显示相应的信息,要求使用 switch 语句。

流程分析:

#include<stdio.h>

int main()
{
	char c;
	printf("please input noe chare(a,b,c,d):");
	scanf_s("%c", &c);

	switch (c)
	{
	case 'a':
			printf("今天星期一,猴子穿新衣");
			break;
	case 'b':
			printf("今天星期二,猴子当小二");
			break;
	case 'c':
			printf("今天星期三,猴子爬雪山");
			break;
	case 'd':
			printf("今天星期四,猴子有急事");
			break;
		
	   default:
		   printf("没有匹配到任何值~");
	}
	printf("switch结束");
	return 0;
}

(4)案例:

编写程序,输入月份,输出该月份有多少天。说明:1 月、3 月、5 月、7 月、8 月、10
月、12 月有 31 天,4 月、6 月、9 月、11 月有 30 天,2 月有 28 天或 29 天。

/*编写程序,输入月份,输出该月份有多少天。说明:1 月、3 月、5 月、7 月、8 月、10
月、12 月有 31 天,4 月、6 月、9 月、11 月有 30 天,2 月有 28 天或 29 天。*/
#include<stdio.h>

int main()
{
	//定义变量记录月份
	int month;
	printf("please input month:");
	scanf_s("%d", &month);

	//进行switch判断
	switch (month)
	{
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		printf("%d月有31天。\n",month);
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		printf("%d月有30天。\n", month);
		break;
	case 2:
		printf("%d月有28或者29天。\n", month);
	default:
		printf("请输入正确的月份数。\n");
	}
	return 0;
}

(5)switch与if else的比较

        1)如果判断条件是判等,而且符合整型、枚举类型,虽然两个语句都可以使用,建议
使用 swtich 语句。
       2)如果判断条件是区间判断,大小判断等,使用 if else if。

8.2.5 嵌套分支

(1)基本介绍
嵌套分支是指,在一个分支结构中又嵌套了另一个分支结构,里面的分支的结构称为内
层分支,外面的分支结构称为外层分支。嵌套分支层数不宜过多,建议最多不要超过 3 层。
(2)基本语法

if ()
{
   if()
   {
   }
   else
   {
     switch()
     {
        case ....
      }
    }
}

(3)应用案例
输入油号(92 或 95)和油量,计算需要支付的金额。92 号汽油每升 4 元,如果油量大
于等于 40 升,每升 3.5 元;95 号汽油每升 5 元,如果油量大于等于 40 升,每升 4.5 元。
流程分析:

/*输入油号(92 或 95)和油量,计算需要支付的金额。92 号汽油每升 4 元,如果油量大
于等于 40 升,每升 3.5 元;95 号汽油每升 5 元,如果油量大于等于 40 升,每升 4.5 元。
流程分析:*/
#include<stdio.h>

int main()
{
	//获取用户输入的油号和油量
	int oilN, oilL;
	printf("请输入油号:");
	scanf_s("%d", &oilN);
	printf("请输入油量:");
	scanf_s("%d", &oilL);

	//定义价格
	double price;

	//嵌套分支
	switch (oilN)
	{
	case 92:
		price = 4;
		if (oilL>=40)
		{
			price = 3.5;
		}
		printf("您本次加油%.2f元\n", price * oilL);
		break;
	case 95:
		price = 5;
		if (oilL>=40)
		{
			price = 4.5;
		}
		printf("您本次加油%.2f元\n", price * oilL);
		break;
	default:
		printf("本加油站没此油号!");
		
	}
	return 0;
}

实战STM32G0驱动DRV8870/AT8870:PWM+DMA精准调速与H桥衰减模式详解 本文详细介绍了如何使用STM32G0单片机结合DRV8870/AT8870电机驱动芯片实现直流有刷电机的精准控制。重点讲解了PWM与DMA结合实现高效调速的硬件配置与软件驱动方法,并深入剖析了H桥快衰减与慢衰减模式的工作原理及应用场景,为嵌入式电机控制项目提供了完整的实战解决方案。 阅读详情

相关推荐

win10删除vmware12后,重新安装失败(遗留注册表问题)解决总结

之前安装过一次VMware虚拟机,后来由于某些已遗忘原因把它卸载了,但是没有卸载完全,为以后安装留下了一些麻烦,现在根据我google很多内容总结后写下了自己的解决办法。 一些我搜的的可以用的VM12的注册码 5A02H-AU243-TZJ49-GTC7K-3C61N ZZ510-DYX47-48ERP-D6XZG-YCKU2 YV5MU-2FX5H-M841P-LZX5X-PYHX8

Jeason的博客 2万+

10天学会嵌入式技术之c语言-day-1

手把手入行嵌入式之10天学会C语言day-1

2301_80748708的博客 2660

ESP32专用E220LoRa库:EBYTE LoRa模块驱动与点对点透传实现

LoRa是一种基于扩频技术的低功耗远距离无线通信协议,广泛应用于物联网终端设备间的数据传输。其核心原理在于通过线性调频(Chirp)信号提升接收灵敏度与抗干扰能力,从而在Sub-GHz频段实现数公里级视距通信。该技术具备高链路预算、强穿透性与多节点并发接入能力,显著降低广域传感网络的部署成本与功耗门槛。典型应用场景包括农业环境监测、工业设备远程诊断、智能表计数据回传等对可靠性与简易集成要求严苛的嵌入式系统。本文聚焦EBYTE E220-400T22D模块在ESP32平台上的工程化落地,深入解析硬件引脚时序约

weixin_36064575的博客 554

10天学会嵌入式技术之C语言-Day-9

手把手入行嵌入式之10天学会C语言day-9

2301_80748708的博客 1222

思科—OSPF多区域配置实验

实验目的:配置OSPF多区域,使得不同网段的PC互相ping通。 网络拓扑如下: R0的配置 Router>en Router#conf t Router(config)#int g0/1 Router(config-if)#ip add 192.168.1.1 255.255.255.0 Router(config-if)#no shut Router(config-if)#exit Router(config)#int g0/0 Router(config-if)#ip add 192.168.

m0_46237205的博客 1万+

R语言下载包报错?可能是IE浏览器在搞鬼!手把手教你修复(附CRAN镜像选择指南)

本文深入解析了R语言下载包时常见的网络报错问题,特别是Windows系统中因Internet Explorer代理设置导致的连接失败。文章提供了从重置IE配置、排查防火墙到优化CRAN镜像选择的完整解决方案,并附有详细的配置指南和自动化诊断脚本,帮助用户彻底解决R包安装难题。

weixin_29056781的博客 742

10天学会嵌入式技术之c语言-Day-10

手把手入行嵌入式之10天学会嵌入式day-10

2301_80748708的博客 1040

Ubuntu无桥接模式或连不上网(详细解决方法

目录 问题1:Ubuntu没有未桥接的主机网络适配器 解决方法 1.打开VMware安装目录下的文件 ​编辑2.右键安装以上三个文件 3.打开网络状态属性,找到VMware bridgeProtocol,点击安装 问题2.Ubuntu桥接模式连不上网 1.win+r打开cmd终端,输入ipconfig /all 2.记录以下数据 3.打开VMware网络设置 问题1:Ubuntu没有未桥接的主机网络适配器 VMWare安装之后,虚拟网络一直使用默认配置 VMnet0为...

m0_65592409的博客 6062

10天学会嵌入式技术之C语言-day-4

手把手入行嵌入式之10天学会C语言day-4

2301_80748708的博客 1314

SAP采购含税价转换的底层逻辑解析:ABAP例程如何实现价税分离计算

本文深入解析SAP系统中采购含税价与不含税价的转换机制,重点介绍VOFM例程和ABAP代码实现价税分离计算的方法。通过详细讲解数学原理、税率体系及SAP定价引擎架构,为开发人员提供完整的解决方案,帮助提升采购业务中的价格处理效率和准确性。

weixin_29237635的博客 450

RK3588 平台imx334 驱动调试记录

rk3588调试imx334

xiaoning132的专栏 1790

10天学会嵌入式技术之C语言-day-5

手把手入行嵌入式之10天学会C语言day-5

2301_80748708的博客 1426

工业视觉实战:用摄像头+AI高精度测量钢板尺寸(附深度分析)

摘要: 钢铁制造业正加速采用基于摄像头与深度学习的视觉测量技术,以取代传统人工测量,实现钢板长、宽、高(厚)的非接触、高精度在线检测。核心方案包括单目视觉(低成本但受限于变形)、双目/多目立体视觉(可精确测量变形钢板)及3D激光扫描(微米级精度)。系统精度受硬件(相机分辨率、镜头)、算法(亚像素技术)及环境稳定性共同影响,综合精度可达±0.1mm。实战中需重点解决热膨胀(需红外测温实时补偿)和钢板变形(必须采用三维方案)两大挑战,并通过工程化设计(散热、防振)确保系统可靠运行。该技术需融合光学、机械与算法,

数字人生 391

10天学会嵌入式技术之C语言-day-2

手把手入行嵌入式之10天学会C语言day-2

2301_80748708的博客 947

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

10天学会嵌入式技术之C语言-day-7

手把手入行嵌入式之10天学会C语言day-7

2301_80748708的博客 829

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

10天学会嵌入式技术之c语言-Day-8

手把手入行嵌入式之10天学会C语言day-8

2301_80748708的博客 1343

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

10天学会嵌入式技术之C语言-day-6

手把手入行嵌入式之10天学会C语言day-6

2301_80748708的博客 1093

10天学会嵌入式技术之51单片机-day-1

手把手入行嵌入式之10天学会51单片机day-1

2301_80748708的博客 1332

21天C语言速通计划:清华教授设计的每日突破关卡

C语言作为计算机编程领域的经典语言,以其高效性、灵活性和对底层硬件的强大操控能力,在系统软件、嵌入式开发、游戏开发等众多领域都有着广泛的应用。然而,对于许多初学者来说,掌握C语言并非易事。为了帮助大家在短时间内快速掌握C语言的核心知识和技能,清华教授精心设计了这份21天C语言速通计划,为你打造每日突破关卡,让你在21天内实现C语言的快速入门和提升。

星辰夜语的博客 1266

5天学会Linux C高级

软件名_版本号.次版本号-修订次数_架构.后缀函数是一个完成特定功能的代码模块,其程序代码独立变量名=值val=10注:等号两边都不能有空格。CC=gcc取shell变量的值:$变量名在shell编程中通常定义的变量名用大写,变量的调用:$变量名Linux Shell/bash从右向左赋值如:Y=yyX=$Yecho $X //输出yy使用unset命令删除变量的赋值如:X=xxunset Xecho $X //没有任何输出。

qq_52049228的博客 1590

cc的21天C语言入门

从0开始快速入门c语言

qq_57463493的博客 587

十天学会C语言(day 1)

程序类似算账,是对数据和操作的描述。数据描述靠数据结构,操作描述依赖算法。

m0_61541056的博客 539

21天学会C++_Day1----C++的发展史

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。

金哥的博客 896

21天学会C++:Day1----C++的发展史

21天学会C++:Day1

m0_73096566的博客 1055

【0基础嵌入式学习日志】Day10:状态机 FSM、系统模式切换与模块封装,Day11:状态机升级、当前状态判断与状态转移日志

FSM 是 Finite State Machine 的缩写,中文一般叫有限状态机。系统在不同状态之间按照一定条件进行切换。SYS_MODE_INIT 初始化模式SYS_MODE_RUN 正常运行模式SYS_MODE_FAULT 故障模式这就是一个最简单的状态切换过程。理解了状态机 FSM 的基本思想;学会了新增独立的状态机模块;编写了和;将系统模式切换逻辑从fault.c中拆分出来;理解了fault.c和的职责区别;在main.c中加入了;验证了FAULT和RUN。

duhong2026的博客 389

8天学会C语言?Day1入门+VSCode全配置,零基础也能上手

一、C语言真能8天入门?别被焦虑带偏在编程圈,“3天精通Python”“7天学会Java”的速成口号随处可见,C语言作为出了名的“入门难、后劲足”的语言,竟也有8天速成的说法。

2601_95052618的博客 216
上一篇: 10天学会嵌入式技术之C语言-day-2
下一篇: 10天学会嵌入式技术之C语言-day-4
昊昊昊昊昊明
博客等级 码龄3年 285粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值