自学嵌入式DAY7:数组

一、一维数组的定义

1.1定义方式:

类型说明符  数组名 【常量表达式】

eg: float s[10000]   int  a[10]

注意:①类型说明符指类型的类型符(定义的若干个元素都为同样的数据类型,但空类型不被允许!

②数组名应该符合标识符规则

③常量表达式为数值,应该至少有一个元素且此处为整型常量表达式

    注意:允许使用变量来指定数组元素

    eg : int  n = 10;           int  a[n];

1.2 一维数组元素的引用

C语言中规定只能逐个引用数组元素而不能一次引用整个数组

表示形式:   数组名【下标】    (下标为该数组中元素的编号)

eg : a[0]   a[7]        

int a[i];

a[i] = 1;

a[i]= 7 ;

....

定义a[10],元素编号为a[0] a[1]......a[8] a[9]

 此时,a[i]称为数组元素的引用,数据类型为整型

“【 】”含义:

对数组定义时:【 】为类型说明符,作用仅仅说明 a 是个数组

对数组引用时:【 】为下标运算符,优先级一级

注意:①数组当中在存储元素时具有连续性(a[0]a[1]...a[9]在存储时内存中无间断)

           ②数组元素存储时具有有序性(下标越小的地址越靠前,越大越靠后)

           ③数组在内存存储时具有单一性(所有元素的数据类型与所定义的数据类型相同)

特别提醒 !!!

数组的越界访问

eg : int a[10];

        a[-1] = 100;

       a[15]= 100;

此时程序执行时数据类型符合运算规则,系统不报算,可执行以上语句

但a[-1]a[15]等类似元素内容并非定义的数组a[10]中的实际访问内容,因此将会改动其他地址所存的内容,在计算机运行过程中一旦造成越界访问将造成不可预估的后果!!!

注:

数组不可被整体引用          eg:    a = 1000

原因:①不可确定到底将所需数值赋值给了a中哪个元素

          ②对于赋值运算符左右两边来说数据类型不匹配且不兼容,(左边为数组型,右边为整型)

         如何判断该数组是什么类型?

        去掉变量名即为类型名

          ③C语言当中数组的数组名是有值的,其值表示数组的首元素地址

             // a  < = >  &a[ 0 ]

数组的初始化:

a[10] = {0,1,2,3,4,5,6,7,8,9}

>  a[10] = {0,1,2,3,4,5,6,7,8,9,10} (初始化数值多于数组元素)      此时10的值将会出现越界访问!

>  a[10]={1,2, 3,4,5}  (初始化数值少于数组元素)

    此时a[10]中后五个元素的初始化数值一定是0!

   a[10] = {0} 数组所有元素的值都为0

> 套用初始化列表器以后,在使用数组的时候可以省略数组的维度 eg: a[ ] ={0,1,2,3,4}

   动态计算a[ ]中元素的个数

int main(void)
{
 int a[] = {1,2,3,4,5,6,7,8,9,0,1,53,2,3,54,6,5,7,74,74};
 int i;
 int len = sizeof(a) / sizeof(a[0]);

   for(i = 0;i < len;++i)
   {
        printf("%d\n",a[i]);
   }
 return 0;
}

注意:数组在定义时,如果使用变量来指定数组元素个数,则不能按照上述sizeof代码运行,而是使用循环来初始化

重要算法练习:

1.逆序  【算法复杂度:n】

2. 排序

按照一定的大小关系进行排序,从小到大进行排序称为升序排序,从大到小称为降序排序,一般情况下无特殊说明默认为升序排序

2.1选择排序:

在合适的位置上放上合适的数   【算法复杂度:n^2】

 注意:①比较算法时二者必须能够进行比较才可使用

降序排序时,将163行代码改为:  if(a[i] < a[j]);  即可

已知升序的情况下要整理为降序,有两种方法:

①改为降序排序 ②进行逆序

选择直接逆序效率更高(原因:逆序时间复杂度为n,降序时间复杂度为n^2)

2.2 冒泡排序:

相邻两个元素两两比较,小的放前,大的放后   【复杂度:n^2】

3.插入法排序:       【算法复杂度:n^2】

待排数组a[ ],创建数组b[ ],要求b数组长度大于等于a数组,即

int a[] = {......};

int len = sizeof (a) / sizeof(a[0]);

int b[len];

要求b数组当中的第一个元素与a数组当中的第一个元素相同,即

int b[len];                              //此时b中为随机数

b[0] = a[0];

将a数组当中的元素逐个向b数组当中进行插入操作  ,每插入一个元素,要让 b数组当中的已插入元素成为一种有序序列,最终b数组中即为数组a中有序排列的复制品.

 优化:(原地插入排序)

4.二分查找法 (找中间值)   【算法复杂度:log n】

数据集介绍:野生动物与家畜多目标检测数据集 数据集名称:野生动物与家畜多目标检测数据集 数据规模: - 训练集:1,540张图片 - 验证集:377张图片 - 测试集:316张图片 分类类别: Brown-bear(棕熊)、Chicken(鸡)、Fox(狐狸)、Hedgehog(刺猬)、Horse(马)、Mouse(老鼠)、Sheep(绵羊)、Snake(蛇)、Turtle(龟)、Rabbit(兔)及通用object(物体)共11个类别 标注格式: YOLO格式标注,包含归一化坐标与类别索引,支持目标检测模型训练 数据特性: 涵盖航拍与地面视角,包含动物个体及群体场景,适用于复杂环境下的多目标识别 农业智能化管理: 通过检测家畜(鸡/马/绵羊等)数量及活动状态,辅助畜牧场自动化管理 生态监测系统: 支持野生动物(棕熊/狐狸/刺猬等)识别与追踪,用于自然保护区生物多样性研究 智能安防应用: 检测农场周边危险动物(蛇/狐狸),构建入侵预警系统 动物行为研究: 提供多物种共存场景数据,支持动物群体交互行为分析 高实用性标注体系: - 精细标注包含动物完整轮廓的边界框 - 特别区分野生动物与家畜类别,支持跨场景迁移学习 多维度覆盖: - 包含昼间/复杂背景/遮挡场景 - 涵盖陆地常见中小型动物与禽类 - 提供通用object类别适配扩展需求 工程适配性强: - 原生YOLO格式适配主流检测框架(YOLOv5/v7/v8等) - 验证集与测试集比例科学,支持可靠模型评估 生态价值突出: - 同步覆盖濒危物种(龟类)与常见物种 - 支持生物多样性保护与农业生产的双重应用场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值