C语言-一维数组及综合案例

数组

数组的概念

什么是数组

数组是相同类型,有序数据的集合

数组的特征
  • 数组中的数据被称之为数组的元素(数组中的每一个匿名的变量空间),是同样的
  • 数组中的元素存放在内存空间建(char player_name[6]:申请在内存中开辟6块连续的基于char类型的变量空间)

衍生概念:下标(索引)

  • 下标或者索引代表了数组中元素距离第一个元素的(首地址所在元素)偏移量。举例:第一个元素距离第一个元素的偏移量为0,所以数组的下标是从0开始的

  • 数组中元素的地址值,下标越大,地址值越大。(每一块内存空间都有一个独有的内存地址,内存中每8个bit也就是1字节编一个号,这个号就是我们所说的内存地址)

  • 数组的下标是从0开始的。

一维数组

数组的定义

语法:

c 复制代码
类型说明符/数据类型 数组名[数组容量]

说明:

  • 数组的类型说明符由数组中的元素来决定,类型说明符也就是数 据类型,元素是什么类型,数组就是什么类型。同一个数组中,所有元素的类型都是一致的。
  • 数组名也是标识符,我们所说的数组(名),大家可以理解为数据类型是数组的变量(名)。命名规则与变量名相同,遵循标识符命名规则(标识符命名规则:不能以数字开头,只能有数字、字母、下划线)。
  • 数组容量也可以叫做常量表达式或者元素个数,其值必须为整型,可以包含常量和符号常量,但不能是变量
c 复制代码
int size = 10;
int arr[size];

size = 22;

printf("%d",size);

举例:

c 复制代码
#define SIZE 4;//符号常量

写法1,符号常量:int arr[SIZE];
写法2,常量:int size = 10; int arr[size];
写法3,常量:int arr[4]; int lcd[800*480];

类型:

​ 代表了数组中元素的类型

容量:

​ 数组中能存储多少个元素,数组容量可以是一个常量、常量表达式,还可以是符号常量,但必须是整型。

深入理解:

  • 定义一个数组,相当于申请了一个可以容纳所指定元素数量的内存单元。所申请的内存单元室连续的。
  • 定义一个数组,相当于定义了多个匿名的变量,这些变量可以通过数组名[下标]来访问

范例:

c 复制代码
//定义一个数组
int arr[10];//此时只是在内存中申请了10个元素所对应的空间,此时里面的值是随机值,大概率是0
//上面数组中,最小下标是0,最大下标是9

经过上面案例,分析得到:

c 复制代码
数组的最大下标 = 数组元素个数(数组容量-1)
数组元素的访问

原则:数组中的元素不能一次性访问所有,只能 一个一个的访问。

访问方式:

c 复制代码
数组名[下标];

举例:

c 复制代码
//定义一个容纳10个元素的int型数组 
int arr[10];
//给数组的第一个元素进行赋值   存数据
arr[0] = 89;
//访问数组中的第一个元素   取数据
int a = arr[0];


int c = arr[9];//0
int b = arr[10];//error:下标越界异常,所以使用数组的过程中一定要做一个下标越界校验,否则报错

注意:数组元素的访问一定不能越界

案例:

  • 需求:利用循环结构给数组元素a[0]-a[9]赋值0-9,并且逆序输出。

  • 代码:

    c 复制代码
    /*************************************************************************
      > File Name:    demo01.c
      > Author:       dachui
      > Description:  一维数组的案例
      > Created Time: 2025年02月14日 星期五 10时53分16秒
     ************************************************************************/
    
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
        
        //创建一个数组,用来存放0-9的数字
        int a[10];
        
        //使用for循环给数组元素赋值(一般数组配套的都是for循环)
        //C语言中,没有提供数组的大小,需要我们自己计算,数组大小 = 数组总字节数/ 一个元素的字节数
        int len = sizeof(a) / sizeof(a[0]);//sizeof返回字节大小 等价与 int len = sizeof(a)/sizeof(int);
        for(int i = 0;i < len;i++)
        {
            a[i] = i;
        }
        //逆序输出
        //遍历:通过循环将数组中的元素一个一个取出来
        for(int j = len -1;j >= 0;j--)
        {
            printf("%4d",a[j]);
        }
        
        printf("\n");//纯换行
        return 0;
    }
  • 运行结果

数组的初始化

定义数组的同时,用指定数据来给对应的元素赋值

简化数组定义后,需要对元素一一赋值操作

语法规则:

c 复制代码
数据类型 数组名[数组容量] = {常量1,常量2,常量3...};

注意事项:

  • 数组可以部分初始化,也就是可以给数组中前几个元素初始化,未被初始化的元素系统 将大概率自动初始化,大概率是0;如果定义数组时未指定数据容量,则系统会根据初始化元素的个数来决定数组容量

    c 复制代码
    //1.如果定义数组时只给数组前几个初始化,后续剩余元素会自动完成初始化,大概率赋0
    int arr[10] = {11,12,1,3,14,15};//推荐写法,等价于
    int arr[10] = {11,12,13,14,15,0,0,0,0,0};
    
    //2.如果定义数组时未指定数据的容量,根据初始化元素个数决定容量
    int arr[] = {11,12,13,14,15};//推荐写法,等价于
    int arr[5] = {11,12,13,14,15};
  • 柔性数组:

    标准理解:柔性数组的概念是在C99标准,针对结构体的最后一个成员可以是一个未指定大小的数组。

    广义简单理解:数组容量待定或者待确定的数组,举例:int arr[] = {1,2,3,4,5}

一维数组的案例

案例:

  • 需求:斐波那契数列

  • 分析:1+1+2+3+5...就是斐波那契数列

  • 代码:

c 复制代码
/*************************************************************************
  > File Name:    demo02.c
  > Author:       dachui
  > Description:  一维数组案例
  > Created Time: 2025年02月14日 星期五 11时35分54秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    int i;//循环变量
    //定义一个数组用来存储斐波那契数列,默认存储的第1和第2的值是1
    int f[20] = {1,1};


    //获取数组的大小
    int len = sizeof(f) / sizeof(f[0]);

    //使用for循环,将生成的数据存入数组
    for(i = 2;i < len;i++)
    {
        f[i] = f[i-2]+f[i-1];//给数组元素赋值,从数组的第三个元素开始
    }

    //遍历数组
    for(i = 0;i < len;i++)
    {
       //遍历的时候,要求每5个换一行,也就是一行显示5个
        if(i % 5 == 0)
        {
            printf("\n");
        }
        printf("%8d",f[i]);
    }

    printf("\n");
    return 0;
}

运行结果

相关推荐
代码程序猿RIP7 分钟前
C++(22)—内存管理
开发语言·数据结构·c++·算法
灏瀚星空15 分钟前
AI 模型高效化:推理加速与训练优化的技术原理与理论解析
开发语言·人工智能·深度学习·程序人生·机器人·智慧城市·量子计算
孞㐑¥19 分钟前
C++之哈希
开发语言·c++·经验分享·笔记
勇敢牛牛_22 分钟前
【Rust基础】crossbeam带来的阻塞问题
开发语言·笔记·rust
东雁西飞23 分钟前
MATLAB 控制系统设计与仿真 - 34
开发语言·单片机·算法·matlab·工业机器人
奇树谦30 分钟前
C/C++语言常见问题-智能指针、多态原理
c语言·开发语言·c++
_小马快跑_1 小时前
Android Xfermode应用:实现炫酷刮刮卡效果
android
庐阳寒月1 小时前
linux多线(进)程编程——(8)多进程的冲突问题
linux·c语言·嵌入式
桃子叔叔1 小时前
python学习从0到专家(8)容器之列表、元组、字典、集合、字符串小结
开发语言·python·学习
溟洵1 小时前
【C++ Qt】Hello World、初始信号槽、理解对象树 ~~~(通俗易懂 图文并茂)
开发语言·c++·qt