【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM