• 【C语言编程基础】二维数组


    文章转自:https://www.cnblogs.com/zhugesiying/p/array.html

    1.二维数组的定义

    语法:

    <类型标识符> <数组名标识符> [<常量表达式>] [<常量表达式>]

    如:float a [3] [4],b [5] [6];

    a[2][3],a是数组名,后面的两个方括号内分别放行下标列下标。下标的规则如下:

    (1)可以是正的整形变量      e.g a[2][3]

    (2)可以是字符常量       e.g a['A']['B']

    (3)可以是有确定值的表达式     eg:a [i+1] [j+2]、a [ A[1] ] [ A[2] ];

    上面我们把二维数组理解成二维图表,我们也可以将二维数组看成元素是一维数组的一维数组,将维数降低。比如 a [3] [4],我们可以把a看成一个一维数组,里面有三个元素:a [0]、a [1]、a[2],每个元素又包含4个元素。

     在C语言中,二维数组中元素排列的顺序是按行存放的,就是说先排列第一行的数据,再排列下第二行的数据,以此类推。如图:

    2.二维数组的初始化

    (1)分行给二维数组赋值

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

    此语句先将第一行元素依次赋值为:1、2、3,然后将第二行元素赋值为:4、5、6,因此说是按行赋值。

    (2) 可以只有一个花括号,按二维数组元素的排列顺序对各元素依次赋值

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

    (3)对部分元素赋初值

    int a [2] [3] = {{2}, {4}};

    此语句表示只给第一行第一个元素赋值为2,第二行第一个元素赋值为4,而其他元素都为0。

    int a [2] [3] = {{1, 2, 3}};

    此语句表示只给第一行三个元素分别赋值为:1、2、3。

    int a [2] [3] = {{},{1, 2, 3}};

    此语句表示只给第二行三个元素分别赋值为:1、2、3。

    4)定义数组时对第一维的长度可以不定义,但必须定义第二维的长度

    int a [] [3] = {123456};

    系统会根据输入的总个数分配存储空间,易知这个二维数组有二行;

    以下部分转自:http://c.biancheng.net/view/1829.html

    注意:在C语言中,二维数组是按行排列的。也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 个元素也是依次存放。数组 a 为 int 类型,每个元素占用 4 个字节,整个数组共占用 4×(3×4)=48 个字节。

    3.简单示例:

    3.1将二维数组(5行5列)的右上半部分置零。

    #include <stdio.h>
    void main() {
        int a[5][5]= {{1,2,3,4,5},
        {6,7,8,9,10},
        {11,12,13,14,15},
        {16,17,18,19,20},
        {21,22,23,24,253}};
        int i,j;
        for(i=0;i<5;i++)
        {
            for(j=0;j<5;j++) 
            {
                if(i<j)
                {
                    printf("%3d",0);
                } else 
                {
                  printf("%3d",a[i][j]);
                }
            }
        printf("
    ");
        }
    }
    View Code

    3.2求二维数组(3行3列)的对角线元素的和

    #include <stdio.h>
    void main() {
        int a[3][3]={{10,12,13},{14,15,16},{17,18,19}},sum=0;
        int i,j;
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++) 
            {
                if(i==j)
                {
                    sum=sum+a[i][j];
                } 
            }
        
        }
        printf("%d",sum);
    }
    View Code

    3.3求二维数组(5行5列)中最大元素值及其行列号

     View Code

    3.4一个学习小组有 5 个人,每个人有 3 门课程的考试成绩,求该小组各科的平均分和总平均分。(转自:http://c.biancheng.net/view/1829.html)

     

     对于该题目,可以定义一个二维数组 a[5][3] 存放 5 个人 3 门课的成绩,定义一个一维数组 v[3] 存放各科平均分,再定义一个变量 average 存放总平均分。

    #include <stdio.h>
    void main() {
        int i, j;  //二维数组下标
        int sum = 0;  //当前科目的总成绩
        int average;  //总平均分
        int v[3];  //各科平均分
        int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};  //用来保存每个同学各科成绩的二维数组
         for(i=0; i<3; i++){
            for(j=0; j<5; j++){
                sum += a[j][i];  //计算当前科目的总成绩
            }
            v[i]=sum/5;  // 当前科目的平均分
            sum=0;
        }
        average = (v[0] + v[1] + v[2]) / 3;
        printf("Math: %d
    C Languag: %d
    English: %d
    ", v[0], v[1], v[2]);
        printf("Total: %d
    ", average);
    }
    View Code

    参考文章:

    https://www.cnblogs.com/zhugesiying/p/array.html

    http://c.biancheng.net/view/1829.html

    https://wenku.baidu.com/view/7280fe769a6648d7c1c708a1284ac850ad020432.html

    转载文章链接已标明,如有侵权请告知。文章仅作为知识记忆所用,如有错误,敬请指正。
  • 相关阅读:
    paper 30 :libsvm的参数说明
    paper 29 :CV会议+领先研究室+专家+代码网址
    paper 28 :一些常见常用数据库的下载网站集锦
    paper 27 :图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)
    paper 25 :SVM支持向量机是什么意思?
    paper 24 :matlab的cat函数
    paper 23 :Kullback–Leibler divergence KL散度(2)
    paper 22:kl-divergence(KL散度)实现代码
    paper 21 :Libsvm的安装和使用
    paper 20 :color moments
  • 原文地址:https://www.cnblogs.com/YorkZhangYang/p/14190555.html
Copyright © 2020-2023  润新知