一.教学重点、难点
知识点 一维数组的定义及引用 一维数组的初始化 二维数组的定义及引用 二维数组的初始化 通过赋初值定义二维数组 所占分值 1-3 1-2 3-4 1-2 1-2 考核几率 80% 80% 90% 90% 60% 专家点评 简单,重点掌握 简单,重点掌握 偏难,重点掌握重点理解 简单,重点掌握 偏难,重点理解
二.教学讲点
8.1一维数组的定义和引用 8.1.1一维数组的定义
格式:类型名 数组名[常量表达式]; 例如:int a[8]; 注意:
1.数组名属于用户标识符,必须满足用户标识符的命名规则。 如:int do[5]; float 3com[10]; char a-b[5]; 都是非法的定义
2.定义数组时,方括号必不可少,方括号中的表达式不能含有变量,且表达式的值必须是大于0正整数,表示数组元素的个数,也成为数组的长度。
如:int a[5.3]; int a[-4]; int a[n]; int a[0]; {int N=5; int a[N];} 都是非法的定义 #define M 5 int a[M];
3.同一数组元素在内存中所占的存储空间是依次连续的,每个数组只能有一个下标,数组下标是从0开始,到数组长度减4结束。 例如:int a[5]; a[0] a[1] a[2] a[3] a[4]
8.1.2一维数组元素的引用
格式:数组名[下标表达式] 如:double a[10];/*定义数组*/
int b=a[4];/*引用数组元素a[4]*/
int b=a[2*2]; /*引用数组元素a[4]*/ 说明:
1. 数组中的元素其实就是一个变量,占一个存储单元。如数组b中的变量就是int型的变量。
2. 引用数组元素时,下标表达式的值的上限为定义是常量表达式减一,下限为0.在引用时保证下标不能超过定义时的常量表达式减一,即下标不能越界。 3. 数组是一个构造类型,是集合的概念,因此不能整体引用数组里面的所用元素。企图简单地通过数组名b体代表其中的4个int类型的变量是不行。 注意:不能对数组进行整体引用,只能单独引用其元素。 int a[10];
int b[10]=a;/*错误的*/
int b[10]=a[10];/*错误的,没有元素a[10]*/ float a[10],b[10];
b=a;/*错误,a代表整个数组,不能整体引用*/ b[0]=a[0];b[1]=a[1];等 for(i=0;i<100;i++)
a[i]=b[i];
8.1.3一维数组的初始化
在定义一维数组的同时可以将各元素的初值依次放在一对{}中赋给数组,初值之间用逗号隔开。
例如:int a[10]={1,2,3,4,5,6,7,8,9,10}; int a[5]=1,2,3,4,5; 错
int a[5]={1;2;3;4;5}; 错 注意:
(1)若{}中的初值个数多于数组元素的个数(即数组长度),则出错;若初值个数少于数组元素的个数,则将初值依次赋给前面的元素,而未得到初值的元素自动赋零。
例如:int a[5]={1,2,3,4,5,6};
int a[5]={1,2,3}; int a[4]={2*2}; int a[3]={0};
(2)可以通过赋初值来定义数组的大小。此时数组的长度可以省略。若定义时,未赋初值,则长度绝不能省略。
例如:int a[ ]={1,2,3,4}; 数组的长度是4。 int a[ ]; 是非法的。
(3)只能在定义时可以用{}给数组整体赋值,不是定义时,则只能单独给每个数组元素赋值。 例如:int a[4];
a={1,2,3};或a[4]={1,2,3,4};是非法的。 int a[4]={1,2,3};
本节习题:
下列一维数组定义中正确的是( )。 A.int a[n]; B.int a[ ]; C.int a();
D.int _abc[100*2]; E.int a[2]={1,3,4}; F.int a[0]={0}; G.int a[5]={0};
H.int a[5]; a[5]={123,456}; I.int a[5]; a={1,2,3,4,5}; J.int a[N=5];
K.{int n=5; int a[n];} L.int a[2*3];
M.int a[3]={1,2,34};
8.2 二维数组 8.2.1二维数组的定义
格式:类型名 数组名[常量表达式1][常量表达式2],…. 例如:int a[2][3]; a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 在内存中的存放形式:(依次连续) a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 8.2.2二维数组元素的引用
格式:数组名 [下标表达式1][ 下标表达式2] 注意:
1.不论是一维数组还是二维数组都不能整体引用。 例如:int a[3][4];
int b[3][4]=a;/*是非法的*/
int a[3][4]={0},int b,n=2; b=a[2][n];
执行上述语句后,问b的值是多少?
2.引用数组元素时,下标可以是C语言中任何合法的表达式,且可以含有变量。 int a[2][3]={1,2,3,4,5,6}; int b;
b=a[10.5%5][2];/*错误*/
8.2.3二维数组初始化
1.直接赋值
int a[3][4]={1,2,3,4,5,6,7,8,9}; 问a[2][0]的值是多少?9 a[2][2]的值是多少?0 int a[2][2]={0,0,0,0,0};/*非法的*/
2.按行赋值 int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 注意:
1.其中里层的{}的对数不能多于行数。花括号内初值个数不能多于列数。不能出现空花括号{}对。
int a[3][4]={{1,2,3,4},{5,6,7,8,9},{10,11,12,13}}; int a[3][4]={{1,2,3,4},{5,6,7,8,9},{10,11,12,13},{1,2}}; int a[3][4]={{1,2,3,4},{},{10,11,12,13}};
int a[3][4]={1,2,3,4},{5,6,7,8,},{10,11,12,13}; 以上定义均是非法的。
2.若在定义二维数组的同时进行初始化,则定义时可以不写第一维的长度,第二维则不能省略。若定义时未赋初值,则各维的长度均不能省略。 例如:int a[ ][3]={1,2,3,5,4,6};
int a[ ][3];或int a[3][ ];都是非法的。
例:有如下程序 main( )
{int a[3][3]={{1,2},{3,4},{5,6}}; int i,j,s=0;
for(i=1;i<3;i++) for(j=0;j
printf(“%d\\n”,s); }
输出结果是?
三.试题分析
1.2008年4月考试试题分析 (24)以下错误的定义语句是 A)int x[][3]={{0},{1},{1,2,3}};
B)int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; C)int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; D)int x[][3]={1,2,3,4};
相关推荐: