理解一维数组的精髓,二维数组更容易掌握了。
先来复习一维数组程序应用,请填空统计全班某门功课的平均分数和最高分数 (设全班55人)。
问题分析:求全班某门课的平均分和最高分
模式识别:平均分为累加求和,再除以人数即可。求最高分可用“打擂台”方法求最大值。
模式归纳:用数组表示全班成绩,用循环求平均分和采用打擂台算法求最高分。用printf语句输出结果。
程序实现:
# define N 55
main()
{ int i,sum=0,max,score[N];
float average;
printf(“input everyone’s score:\n”);
for( _____________;_________;_________ )
scanf(“%d”,__________);
for(______;______;_______ )
{sum+=_______;
if(score[i]>max) max=________;}
average=_________;
printf(“average=%f\n”,average);
printf(“max=%d\n”,max);
}
答案:
在处理有些问题时需要用到二维数组来处理。例如,有4个小分队,每队有5名队员,要把这些队员的游泳成绩用数组保存起来,这就需要用到二维数组,如图。如果建立一个数组score,它应当是二维的,第一维用来表示第几分队,第二维用来表示第几个队员。如score2,3表示2分队队员3的成绩,她的值是87.
队员1 | 队员2 | 队员3 | 队员4 | 队员5 | |
1分队 | 87 | 75 | 93 | 82 | 89 |
2分队 | 91 | 84 | 87 | 92 | 90 |
3分队 | 76 | 79 | 84 | 88 | 80 |
4分队 | 91 | 95 | 92 | 83 | 85 |
一、怎样定义二维数组
(一)二维数组的定义
二维数组定义基本概念与方法和一维数组相似,一般形式为:
类型符 数组名[常量表达式][常量表达式];
如int a[3][4],b[4][M];(M为符号常量)
定义a为3*4(3行4列)的整型数组
b为4*M(4行M列)的整型数组
C语言对二维数组采用这样的定义方式,是的二维数组可被看作一种特殊的一维数组:她的元素又是一个一维数组。例如,可把a看作一种特殊的一维数组,它有3个元素:a[0],a[1],a[2]
每个元素又是一个包含4个元素的一维数组,如图:
可以把a[0],a[1],a[2]看作一维数组名。上面定义的二维数组可以理解为定义了三个一维数组,即相当于:
Int a[0][4],a[1][4],a[2][4];
此处把a[0],a[1],a[2]看作一维数组名。C语言用这种处理方法在数组初始化和用指针表示时显得很方便,这在以后会体会到。
(二)二维数组的存储
C语言中,二维数组中元素排列的顺序是按行存放的,记载内存总顺序存放第1行的元素,接着在存放第2行的元素。
如 int a[3][2];a[3][2]中的元素在内存中按行连续排放,如图.
注意:二维数组在逻辑上,有行列关系。但在内存中,各个元素是连续存放的,是线性的,而非二维的。这点务必请明确。
二、怎样引用二维数组的元素
同一维数组,二维数组的表示形式为:
数组名[下标][下标]
下标应是整型表达式。
如:int a[2][4];
二维数组下标的有效范围同一维数组,均从0开始,最大值为定义时下标减1。
如a数组元素的下标下限值是a[0][0],上限值是a[1][3]。这点要特别注意。
数组元素也可以出现在表达式中,也可以被赋值,例如:
b[1][2]=a[1][3]/2;
三、二维数组的初始化
可用“初始化列表”对二维数组初始化。如果不给二维数组初始化,则系统默认二维数组各元素为0.
网站内容来自网络,如有侵权请联系我们,立即删除!
Copyright © 黑兔子百科网 琼ICP备2024032622号-19