二维数组

-----------------------二维数组-----------------------------------------------------------------------------

一个"一维数组"里面的元素又是一个一维数组, 这个数组就是二维数组

    

    定义的语法:

        数组元素的类型    数组名 [ 下标1 ] [ 下标2 ];

 

    其中第一个下标表示 ""

    第二个下标表示 ""

 

    初始化

    1, 定义的同时进行初始化

        // 完全初始化

        int nums[2][3] = {

            { 1, 2, 3 }, 

            { 4, 5, 6 }

        };

        int nums[2][3] = {

            1, 2, 3, 

            4, 5, 6

        };

        int nums[2][3] = { 1, 2, 3, 4, 5, 6 };

 

        // 不完全初始化

        int nums[2][3] = { 1, 2 };   // 二维数组的内存分配是怎样的?

 

        // 注意, 二维数组的第一个下标可以省略

        int nums[][3] = { 1, 2, 3, 4, 5, 6 };

 

    2, 先定义后再初始化

        与一维数组一样, 是一个值一个值的赋值



------------------------------列平均--行平均--------------------------------------------------------------------

int main(int argc, const char * argv[]) {

    int nums[3][5] = {

        80, 61, 59, 85, 76,

        75, 65, 63, 87, 77,

        92, 71, 88, 90, 76

    };

    

    // 求行平均

//    for(int i = 0; i < 3; i++) {

//        int sum = 0;

//        // 为每一行的内容

//        for(int j = 0; j < 5; j++) {

//            sum+=nums[i][j];

//        }

//        printf("%d行的平均值为:%lf\n", i+1, sum * 1.0 / 5);

//    }

    

    // 求列平均

    for(int i = 0; i < 5; i++) {

        int sum = 0;

        // 为每一列的行内容

        for(int j = 0; j < 3; j++) {

            sum+=nums[j][i];

        }

        printf("%d列的平均值为:%lf\n", i+1, sum * 1.0 / 3);

    }

    

    return 0;




--------------------------------计算--行-列-----------------------------------------------------------------

 

    int nums[10][20] = { 1, 2, 3 };

    

//    for (int i = 0; i < ROW; i++) {

//        for (int j = 0; j < COL; j++) {

//            

//        }

//    }

//    

    

    int cols = sizeof(nums[0]) / sizeof(int);

    int rows = sizeof(nums) / sizeof(nums[0]);

    

    for (int i = 0; i < rows; i++) {

        for (int j = 0; j < cols; j++) {

            printf("%d\t", nums[i][j]);

        }

        printf("\n");

    }

    

    


-----------------------------打印最大-----------------------------------------------------------------------

#include <stdio.h>

#include <stdlib.h>


int main(int argc, const char * argv[]) {

    

    int nums[5][6];

    

    int cols = sizeof(nums[0]) / sizeof(int);

    int rows = sizeof(nums) / sizeof(nums[0]);

    

    // 初始化数组

    for(int i =0 ; i< rows; i++) {

        for(int j= 0; j < cols; j++) {

            nums[i][j] = arc4random_uniform(1000);

            printf("%d\t", nums[i][j]);

        }

        printf("\n");

    }

    printf("\n\n");

    

    

    // 求最大

    int max = nums[0][0];

    int iMax = 0, jMax = 0;

    for (int i = 0; i < rows; i++) {

        for (int j = 0; j < cols; j++) {

            if(max < nums[i][j]) {

                max = nums[i][j];

                iMax = i;

                jMax = j;

            }

        }

    }

    

    printf("最大的是%d\n", max);

    printf(" %d %d \n", iMax + 1, jMax + 1);

    

    return 0;

}





------------------------------二维数组排序----------------------------------------------------------------------


#include <stdio.h>


int main(int argc, const char * argv[]) {

    int nums[2][3] = {

        1, 4, 6, 5, 3, 2

    };

    

    

    // i   i++

    // 00  01   02

    // 10  11   12

    

    

    // 声明一个一位数组, 长度为 rows * cols

    // 将二维数组中的数据存到一维数组中, 排序一维数组

    // 在将一维数组的数据放回二维数组中

   

    int *p = &nums[0][0];

    // 对它进行排序(指针与数组的用法是一致)

    

    int length = 2 * 3;

    

    for (int i = 0; i < length - 1; i++) {

        for (int j = 0; j < length - 1 - i; j++) {

            if(p[j] > p[j+1]) {

                int temp = p[j];

                p[j] = p[j+1];

                p[j+1] = temp;

            }

        }

    }

    

    

    

    

    return 0;

}



--------------------------二维数组 做参数--------------------------------------------------------------------------


    一维数组作为函数参数

    1, 数组元素作为函数参数

    2, 数组名作为函数参数

 

    二维数组作为函数参数

    1, 数组元素作为函数参数, 例如 nums[0][0]

    2, 将数组看成一维数组, 元素作为函数参数, 例如 nums[0]

    3, 将数组名作为函数参数

 

 

 

    二维数组

    int nums[2][3]

 

    看成"一维数组"

    nums[0]

    nums[1]

 

    这里每一个元素又是一个数组

    int array[3]

    array[0]   array[1]    array[2]

 

    nums[0] array 的地位是一样, 都是一个一维数组

    nums[0][0]  nums[0][1]   nums[0][2]

 

 

 

 

 */



// 一维数组元素作为函数参数, 与变量作为函数参数一致

void func1(int num) {

    printf("%d\n", num);

}


// 一维数组名作为函数参数, 与二维数组看做成一维数组, 元素作为函数参数一致

void func2(int nums[], int length) {

    

}


// 二维数组的数组名作为函数参数

// func(1)   func(int num)

// func('a') func(char ch)

// func(1.2) func(double dNum)

// func(array)  func(int array[10])


void  func3(int nums[][3], int rows, int cols) {


}



----------------------------------------------------------------------------------------------------

#include <stdio.h>

#include <stdlib.h>



// 二维数组的元素作为函数参数, 例如 nums[0][0]    func1(nums[0][0]);

// 值传递

#if 0

void func1(int num) {

    // printf("%d\n", num);

    num *= 2;

}


int main(int argc, const char * argv[]) {

    int nums[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

    for (int i = 0; i < 3; i++) {

        for (int j = 0; j < 4; j++) {

            func1(nums[i][j]);

        }

        printf("\n");

    }

    

    

    for(int i = 0; i < 3; i++) {

        for(int j = 0; j < 4; j++) {

            printf("%d\t", nums[i][j]);

        }

        printf("\n");

    }

    

    return 0;

}

#endif









#if 0

// 把二维数组看做一维数组, 数组元素作为函数参数

// 地址传递, 引用传递, 函数里与函数外, 是一样

void func2(int nums[], int length) {


    for(int i = 0; i < length; i++) {

        nums[i] *= 2;

    }

}


int main(int argc, const char * argv[]) {

    int nums[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

    for (int i = 0; i < 3; i++) {

        

        func2(nums[i], 4);

       

    }

    

    

    for(int i = 0; i < 3; i++) {

        for(int j = 0; j < 4; j++) {

            printf("%d\t", nums[i][j]);

        }

        printf("\n");

    }

    

    return 0;

}

#endif







// 把二维数组的数组名作为函数参数

// 地址传递, 引用传递, 函数里与函数外, 是一样

void func3(int array[][4], int rows, int cols) {

    // 在本函数中操作array,与在main函数中操作nums是一样的

    // 重新初始化

    

    int num = arc4random_uniform(1000);

    

    for(int i = 0; i < rows; i++) {

        for(int j = 0; j < cols; j++){

            array[i][j] = num++;

        }

    }

    

}


int main(int argc, const char * argv[]) {

    int nums[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

    

    

    

    

    

    for(int i = 0; i < 3; i++) {

        for(int j = 0; j < 4; j++) {

            printf("%d\t", nums[i][j]);

        }

        printf("\n");

    }

    

    printf("================\n");

    

    func3(nums, 3, 4);

    

    for(int i = 0; i < 3; i++) {

        for(int j = 0; j < 4; j++) {

            printf("%d\t", nums[i][j]);

        }

        printf("\n");

    }


    

    

    return 0;

}









----------------------------------------------------------------------------------------------------




----------------------------------------------------------------------------------------------------




----------------------------------------------------------------------------------------------------



----------------------------------------------------------------------------------------------------




----------------------------------------------------------------------------------------------------



----------------------------------------------------------------------------------------------------



----------------------------------------------------------------------------------------------------




----------------------------------------------------------------------------------------------------



----------------------------------------------------------------------------------------------------



----------------------------------------------------------------------------------------------------




----------------------------------------------------------------------------------------------------


----------------------------------------------------------------------------------------------------



----------------------------------------------------------------------------------------------------




----------------------------------------------------------------------------------------------------


----------------------------------------------------------------------------------------------------



----------------------------------------------------------------------------------------------------




----------------------------------------------------------------------------------------------------


----------------------------------------------------------------------------------------------------



----------------------------------------------------------------------------------------------------




----------------------------------------------------------------------------------------------------



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值