当前位置: 首页 > 文档资料 > C 语言程序设计 >

二维数组

优质
小牛编辑
152浏览
2023-12-01

二维数组

#include <stdio.h>
#include <stdlib.h>

//01.二维数组:
//  1.二维数组的内存存储原理:
//      所有数组,无论一维数组,二维数组,多维数组,在内存当中的
//      存储实质都是采取的连续存储方式
//  2.二维数组的规律赋值方式:
//      先进行行遍历,在进行列遍历,再逐个进行逐个数组元素的具体赋值操作
//  3.如何求取任何数组的内存尺寸?
//      都是采用sizeof();关键字进行的求取
int main01(void)
{
    int a[5][5];
    //1, 2, 3, 4, 5, 6, 7, 8, 9, 10:总共25个数组元素
    printf("%d \n", sizeof(a));//sizeof(数组名);-->求取数组整体的内存尺寸5*5*4
    printf("%p \n", a);

    int num = 1;
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            //a[i][j] = num;
            //++num;
            //printf("%4d", a[i][j]);
            printf("%4d", a[i][j] = num++);//复合语句
        }
    }

    system("pause");
}

//02.二维数组知识详解:
//  1.初始化方式:
//      统一初始化:
//          int a[5][4] = {0};-->巧用0
//      前置初始化:
//          int a[5][4] = {1}-->特用除0以外的数字
//      注:
//      1.统一初始化方式的实质还是前置初始化方式,由于采用特殊的数字
//          0进行初始化,所以整体被统一的初始化为了0
//      2.所有数组的初始化方式特点:
//          只要数组当中前置元素有数字前置初始化,那么后面的数组元素
//              本身都会被默认的初始化为0
//  2.多维数组的特殊初始化方式:
//      多维数组转化为低维数组进行初始化
//      int a[5][4] = {
//          {1, 2},
//          {1, 2, 3}
//      };
//  3.确定数组内存尺寸的两大要素:
//      数组元素个数+数组元素尺寸
//   注:维度的省略情况分析:自动推演
//      一维数组的一维可以省略
//      二维数组的一维不可以省略
//      三维数组的二维不可以省略
int main02(void)
{
    //int a[5][4] = { 1 };//全部初始化为0
    //printf("%p \n", a);
    //int a[5][4] = { 1, 2, 3, 4, 5 };//数组的前面赋值,后面赋值为0,默认是一行一行的进行赋值操作
    //int a[5][4] = { {1, 2, 3, 4}, {1, 2} };//二维数组的初始化方式
    //int a[5][4] = {0};//全部初始化为0
    int a[5][4];//解释:5个一维数组,每个一维数组当中存储有4个数组元素
    int b[2][4] = { {1,2},{3,4} };//第一个名曲有几个一维数组,可以进行忽略
    //行坐标可以进行忽略,但是列坐标不可以进行忽略
    int num = 1;
    for (int i = 0; i < 2; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            b[i][j] = num++;
        }
    }
    printf("\n\n");
    for (int i = 0; i < 2; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            printf("%4d", b[i][j]);
        }
    }

    system("pause");
}

//03.二维数组的线性初始化方式:
//  奥数规律方式
//      元素个数+求模(变化慢)+求余(变化快)+被除数是(列数)
int mai03n(void)
{
    int intArrArr[3][4];
    //规律初始化方式:
    //  00 0        01 1         02 2       03 3
    //  10 4        11 5         12 6       13 7
    //  20 8        21 9         22 10  23 11
    for (int i = 0; i < 12; ++i)//i:决定元素个数
    {
        intArrArr[i / 4][i % 4] = i;//行:变化慢;列:变化快
    }
    for (int i = 0; i < 3; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            printf("%3d", intArrArr[i][j]);
        }
        printf("\n");
    }

    system("pause");
}

二维数组中的查找

二维数组matrix中,每一行都从左到右递增排序,每一列都从上到下递增排序,输入一个整数,判断数组中是否含有该整数。

//  1   2   8   9
//  2   4   9   12
//  4   7   10  13
//  6   8   11  15
bool Find(int* matrix, int rows, int columns, int number)
{
    bool found = false;

    if(matrix != NULL && rows > 0 && columns > 0)
    {
        int row = 0;
        int column = columns - 1;
        while(row < rows && column >=0)
        {
            if(matrix[row * columns + column] == number)
            {
                found = true;
                break;
            }
            else if(matrix[row * columns + column] > number)
                -- column;
            else
                ++ row;
        }
    }

    return found;
}