c语言中什么是二维数组

二维数组A[m][n],这是一个m行,n列的二维数组。以下是由应届毕业生小编整理关于C语言二维数组的内容,希望对大家有所帮助!更多相关内容请关注应届毕业生考试 网。

c语言中什么是二维数组

 c语言的二维数组

设a[p][q]为A的第一个元素,即二维数组的行下标从p到m,列下标从q到n,按“行优先顺序”存储时则元素a[i][j]的.地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((i p) * n + (j q)) * t

按“列优先顺序”存储时,地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((j q) * m + (i p)) * t

存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节

二维数组又称为矩阵,行列数相等的矩阵称变方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵的所有非零元素都集中在主对角线上.

二维数组在概念上是二维的,但在内存中地址是连续的,也就是说存储器单元是按一维线性排列的。那么,如何在一维存储器中存放二维数组呢?有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。

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

【示例】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。

可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下:

#include int main(){ int i, j; //二维数组下标 int sum=0; //当前科目的总成绩 int average; //总平均分 int v[3]; //各科平均分 int a[5][3]; //用来保存每个同学各科成绩的二维数组 printf("Input score:"); for(i=0; i<3; i++){ for(j=0; j<5; j++){ scanf("%d", &a[j][i]); //输入每个同学的各科成绩 sum+=a[j][i]; //计算当前科目的总成绩 } v[i]=sum/5; // 当前科目的平均分 sum=0; } average =(v[0]+v[1]+v[2])/3; printf("Math: %dC Languag: %dEnglish: %d", v[0], v[1], v[2]); printf("Total:%d", average); return 0;}

运行结果:

Input score:

80

61

59

85

76

75

65

63

87

77

92

71

70

90

85

Math: 72

C Languag: 73

English: 81

Total:75

程序中首先用了一个双重循环。在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内循环后再把该累加成绩除以5送入v[i]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v[0]、v[1]、v[2]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。

 二维数组的初始化

二维数组的初始化可以按行分段赋值,也可按行连续赋值。

例如对数组a[5][3],按行分段赋值可写为:

int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };

按行连续赋值可写为:

int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};

这两种赋初值的结果是完全相同的。

【示例】求各科平均分和总成绩平均分。

#include int 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: %dC Languag: %dEnglish: %d", v[0], v[1], v[2]); printf("Total:%d", average); return 0;}

运行结果:

Math: 72

C Languag: 73

English: 81

Total:75