学习啦 > 知识大全 > 知识百科 > 百科知识 > c语言中什么是二维数组

c语言中什么是二维数组

时间: 欧东艳656 分享

c语言中什么是二维数组

  二维数组A[m][n],这是一个m行,n列的二维数组。以下是由学习啦小编整理关于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:\n"); 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: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]); printf("Total:%d\n", 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: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]); printf("Total:%d\n", average); return 0;}

  运行结果:

  Math: 72

  C Languag: 73

  English: 81

  Total:75


看过“c语言中什么是二维数组”的人还看了:

1.c语言数组的用法

2.在c语言中什么是二维数组

3.数组在c语言中是什么

4.java中什么是二维数组

5.c语言中table的用法

243521