c语言二维数组 c语言中什么是二维数组

二维数组A[m][n],这是一个m行,n列的二维数组。设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个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。

--

Math

80

61

59

85

76

C

75

65

63

87

77

English

92

71

70

90

c语言二维数组 c语言中什么是二维数组

85

可设一个二维数组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: %dnC Languag: %dnEnglish: %dn", v[0], v[1], v[2]); printf("Total:%dn", 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: %dnC Languag: %dnEnglish: %dn", v[0], v[1], v[2]); printf("Total:%dn", average); return 0;}

运行结果:

Math: 72

C Languag: 73

English: 81

Total:75

  

爱华网本文地址 » http://www.aihuau.com/a/213061/355183212.html

更多阅读

js,jquery,数组操作小结 jquery 二维数组操作

----------------------------------------------------------定义数组----------------------------------------------------------$(function(){var aArray = {};//定义一个数组aArray['name'] = "张三";aArray['sex'] = "男";aA

二维数组与数组指针的用法 二维数组指针传递

二维数组与数组指针的用法 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构

一维数组的定义、初始化和引用 一维数组初始化为0

一维数组的定义、初始化和引用一维数组的定义、初始化和引用1.一维数组的定义方式为:类型说明符 数组名[常量表达式](1)数组名的命名方法与变量名相同,遵循标识符命名规则;(2)数组是用方括号括起来的常量表达式,不能用圆括号;(3)常量表达式表

二维数组行列互换 WPS(EXCEL)如何实现二维表的行列互换

WPS(EXCEL)如何实现二维表的行列互换――简介表格中如何实现行列转换呢,其实很简单WPS(EXCEL)如何实现二维表的行列互换――方法/步骤WPS(EXCEL)如何实现二维表的行列互换 1、在实际工作,我们常常需要根据要求设计各类表格,有时按领导的意图

声明:《c语言二维数组 c语言中什么是二维数组》为网友温暖手心的少年分享!如侵犯到您的合法权益请联系我们删除