侵入式学习笔记C语言阶段--07数组

发布于:2025-06-14 ⋅ 阅读:(23) ⋅ 点赞:(0)

【数组】【重中之重】

1.生活中数组的概念

开发中的定义:存储多个相同类型的数据的连续性空间叫做数组

生活中停车场的案例:

分析停车场案例:

  • 车位都是连续的
  • 每一个区域都有一个编号,而且每个车位也有一个编号
  • 确定具体车位可以根据区域号+数字编号来确定,例如A5 B3 C4

数组分析:

  • 数组空间是连续的
  • 存放的数据,数据类型一致
  • 定位到数组里面的某一个元素,可以通过数组名+编号(下标)来确定
    • 数组名:后续在指针中会着重强调!!!

2.C/C++中数组定义格式

数据类型 数组名[容量]={初始化元素}; // int arry[5]={10,20,30,40,50};

  • 数据类型:规定数组里所存放数据的数据类型 ,注意数据类型一致性问题。
  • 数组名:arry 见名知意,约定俗成,动宾结构
  • 容量:数组所能存储的数据的个数,后续配合数组下标使用,数组的下标从0开始到容量-1结束
  • 初始化赋值:数组定义的时候需要进行初始化赋值,如果不进行初始化赋值,后面会出现野值问题

3.数组定义案例和使用

  int arry[5]={10,20,30,40,50};
    printf("arr[0]=%d\n",arry[0]);
    printf("arr[1]=%d\n",arry[1]);
    printf("arr[2]=%d\n",arry[2]);
    printf("arr[3]=%d\n",arry[3]);
    printf("arr[4]=%d\n",arry[4]);
    
    
    char char_arry[5] = {'H', 'E', 'L', 'L', 'O'};
    printf("char_arry[2]%c\n", char_arry[2]);

    printf("%c", char_arry[0]);
    printf("%c", char_arry[1]);
    printf("%c", char_arry[2]);
    printf("%c", char_arry[3]);
    printf("%c", char_arry[4]);

数组的容量初始化赋值

    int arry[5] = {10, 20, 30, 40, 50};   //规定了数组可以存储5个int类型的数据,而且都进行了初始化赋值
    printf("sizeof(arry)=%lu\n",sizeof(arry));   //20 

    int arry2[]={10,20,30,40,50};     //通过初始化赋值,给数组限定了,可以存储5个int类型的数据
    printf("sizeof(arry2)=%lu\n",sizeof(arry2));//20

    int arry3[];  //绝对不允许!!!

数组的初始化赋值:

int arry[5] ={10,20};   //   10 20 0 0 0 
 int arry[5] ={0};   // 0 0 0 0 0
 int arry[5] ={[2]=5,[3]=4};// 0 0 5 4 0

4.非法下标

  • 数组中使用的所有的下标都需要在 0~容量-1之内,否则就是非法下表
    • 所以后续如果遇到负数下标,一定非法!
    • 如果遇到正数下标,需要考虑是否在容量之内。如果不是,那么非法

5.for循环和数组

for循环与数组天生契合,因为for循环有循环初始化,循环终止条件,步进语句。数组中有起始下标还有结束下标。

举例:利用for循环对数组进行赋值

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int arry[5] = {0};
    int capacity = sizeof(arry) / sizeof(arry[0]);

    for (int i = 0; i < capacity; i++)
    {
        printf("请输入第%d个元素\n ", i);
        scanf("%d", &arry[i]);
    }

    for (int i = 0; i < capacity; i++)
    {
        printf("arr[%d]=%d ", i, arry[i]);
    }
    printf("\n");

    return 0;
}

6.数组作为函数的参数

需求:用户提供一个int类型数组,函数执行完毕后,展示出数组中的每一个元素的值。

需求分析:

  • 返回值:函数执行完毕后,展示出数组中的每一个元素的值,所以仅作打印,不需要返回值
  • 参数:一个是数组(int类型) 另一个是数组容量(int类型)
  • 函数名:show_arry();

函数声明:

void show_arry(int arry[],int capacity);

函数实现:

void show_arry(int arry[], int capacity)
 { 
for (int i = 0; i < capacity; i++) { printf("arry[%d]=%d ", i, arry[i]);
 } 
printf("\n"); }

函数调用:

void show_arry(int arry[], int capacity)
{
    for (int i = 0; i < capacity; i++)
    {
        printf("arry[%d]=%d  ", i, arry[i]);
    }
    printf("\n");
}

7.数组中元素的排序算法

案例1:现有数组 arry[5] ={ 3,5,4,1,2},请你编写代码,将此数组中的元素重新排列,按照从小到大的顺序排列

冒泡排序:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int arry[5] = {3, 5, 4, 1, 2};
    int n = sizeof(arry) / sizeof(arry[0]);
    int count=0;
    int flag=0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n-i-1 ; j++)
        {
            if (arry[j] > arry[j + 1])
            {
                int temp = arry[j];
                arry[j] = arry[j + 1];
                arry[j + 1] = temp;
                flag=1;
            }
        count++;
        }
        if (flag==0)
        {
            break;
        }
    }
    printf("%d\n",count);
    for (int i = 0; i < n; i++)
    {
       printf("%d ",arry[i]);
    }
    




    return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到