【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("\n");
    }
}
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\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]);
    printf("Total: %d\n", 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

posted @ 2020-12-26 09:33  YorkShare  阅读(1511)  评论(0编辑  收藏  举报