C语言——数组及其相关知识

本文详细介绍了数组的概念、定义及使用方法,包括一维数组和二维数组的特点与操作技巧。探讨了数组初始化、遍历及边界问题,并给出了多个实用的编程练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组

什么是数组:变量的组合,是一种批量定义类型相同的变量的方式

定义: 类型名 数组名【】;

int arr[5];

使用:数组名【下标】;

下标:从0开始 范围:0~数量-1

遍历:与for循环配合,使用循环变量当做数组的下标

初始化: 类型名 数组名【数量】 = {1,2,3,4...};

  • 因为数组的值默认是随机的,一般为了安全起见,要对数组进行初始化

  • 如果初始化的数据过多,编译器会产生警告并丢弃多余的数据

  • 初始化的数据不够时,编译器会末尾补0

  • 初始化时数据可以省略,只写大括号,相当于给所有成员初始化为0

  • 这种初始化语法只能在定义数组时使用,并且只能逐个赋值,不能整体赋值(int arr[5] =1 错误)

  • 初始化时,数组的数量可以省略,编译器会自动统计初始化中数据的个数,并告诉数组确定数组的数量,一旦数组数量确定,后面无法改变

    sizeof(arr)/sizeof(arr[0])=数组的个数
    sizeof(arr)  ==  数组的总字节数
    sizeof(arr【0】) == 数组单个成员的字节数

练习2: 定义一个长度为10的数组并初始化,计算出最大值、最小值和平均值

练习3: 定义一个长度为10的数组并初始化,进行升序排序

九、数组越界

为了程序的编译、运行效率,编译器不去检查数组的下标。

数组越界的后果 :

  1. 段错误(核心已转储)

  2. 一切正常

  3. 脏数据

    总结:在使用数组的过程中,要时刻注意不要越界

    练习4: 定义一个长度为10的数组并初始化,找出数组中第二大的数,不允许排序

max_1=arr[0] max_2=arr[0];
for(int i=1;i<10;i++)
{
    if(max_1<arr[i])
    {
        max_2=max_1;
        max_1=arr[i];
    }
    else if(max_2<arr[i])
    {
        max_2=arr[i];
    }
}
printf("max_1=%d max_2=%d",max_1,max_2)

十、二维数组

一维数组相当于把变量排成一排,通过编号访问

二维数组相当于把变量排成一个矩阵,通过行号和列号访问 二维数组实际就是一维数组

  • 定义:类型 数组名【行数】【列数】; 行可以省略,列不能省略!

  • 使用:数组名【行下标】【列下标】;

行下标:0~行数-1

列下标:0~列数-1

  • 遍历:需要与双层for循环配合,一般外层循环负责遍历行,内层循环负责遍历列

  • 初始化:类型 数组名【行数】【列数】 = {{第一行},{第二行},{第三行},...};

    练习5:定义一个5*5的二维数组并初始化,找出数组中最大值的坐标

十一、变长数组

定义数组时使用变量作为数组的长度,在代码编译期间数组的长度是不确定的,当运行到数组的定义语句时数组的长度才最终确定下来,这种数组称为变长数组。

  • 优点:可以根据实际的情况来确定数组的长度,以此节约内存空间

  • 缺点:不能进行初始化,因为初始化发生在程序编译期间

  • 注意:长度一旦确定,后面都无法改变

int N=10;
scanf("%d",&N);
int arr【N】;

练习6:输入两个正整数 m(1<=m<=6) ,(1<=n<=6),然后输入数组arr[m][n】,各个元素的值,然后统计每个元素之和、统计非零元素的个数、计算出所有元素的平均值、大于平均值的元素个数

作业1:定义一个5*5的二维数组并初始化,找出最小值的坐标,计算出最小值周围一圈数据之和;

int sum=0;
for(int i=x-1;i<x+1;i++)
{
    for(int j=y-1;j<y+1;j++)
    {
        if(0<=x && 4>=x && 0<=y && 4>=y)
        {
            sum+= arr[i][j];
        }
    }
}
​

作业2:输入N,显示N层杨辉三角

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

作业3:输入一个日期(yyyy-mm-dd)。计算该日期距离1年1月1日过了多少天?

2022-7-8

int double long char short void float

sizeof union enum struct

auto const static typedef volatile extern register signed unsigned

if else case switch default

do while for

break continue return goto

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoyu1381

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值