【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] = {1, 2, 3, 4, 5, 6};
系统会根据输入的总个数分配存储空间,易知这个二维数组有二行;
以下部分转自: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"); } }
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); }
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); }
参考文章:
https://www.cnblogs.com/zhugesiying/p/array.html
http://c.biancheng.net/view/1829.html
https://wenku.baidu.com/view/7280fe769a6648d7c1c708a1284ac850ad020432.html