上次作业,
1,P1414_4.17
#define low(x) (x)+32
2,P141_4.18
#define swap(x,y) {int t ;t=x;x=y;y=t;}
本次课内容:一维数组
教学目的:掌握一维数组的定义、初始化,数组的引用、数组作
为函数参数及数据排序、查找等处理方法。
重点:一维数组的定义、初始化及数组的引用。
难点:利用数组的数据处理(排序、查找等问题处理),地址传
递。
一、一维数组的定义
一般形式,类型标识符 数组名 [ 元素个数 ];
如,int a[5];
说明, (1)元素序号从 0起始。
(2)元素个数也称数组长度。
(3)定义了 n个连续的存储单元(每个单元字节数由数据类型
决定)。
(4)数组名是第一个单元的地址。
2字节
2字节
2字节
2字节
2字节
a{0}
a{1}
a{2}
a{3}
a{4}
内存空间
1010
1011
1012
1013
1014 1015
1016
1017
1018
1019
地址 元素 元素占字节
a
二、一维数组的初始化
在数组定义时指定元素的初始值,称初始化。
如,static int a[5]={1,2,3,4,5};
static char ch[2]={‘a’,’b’};
说明, (1) 元素定义的初值个数不足时,用零补齐。
如 static int a[ 5]={1,2,3};
等价于,static a[5]={1,2,3,0,0};
int s[8]={0};
s[0] ~ s[7]中的值均为零。
(2)元素定义时赋初值,可以不指定数组个数;
如 static int a[ ]={1,2,3,4,5];
此时将以初值个数决定数组长度。
(3)静态和外部存储类型的数组不进行初始化,隐含的初
值为零或空字符,自动类型数组未初始化,其值不确定。
static char ch1[5]; /*ch1[0]~ch1[4]中的值为空,即
‘’ */
static int m[5]; /*m[0]~m[4]中的值为零 */
float p[5]; /*p[0]~ p[4]中的值不确定 */
三、数组元素的引用
数组定义后即可以引用。
如,a[1]=3 ; a[2]=a[1]+1;
注,C编译不检查下标“出界”,若引用出界下标,将引用数组
以外的(下面存储单元内容)数据引用,造成错误。
数组元素引用,一般采用循环结构。
如,for ( i=1 ; i<5 ; i++ ) a [ i ] = i ;
四、数组作为函数参数
数组数据传送到函数的两种方法,
1、数组元素作为参数(值传递)
如,
,
are=fun(a[0],a[1],a[2]);
,
float fun(float a,float b,float c)
{
,
}
2、数组名作为函数参数(地址传递)
,
int fun(int x[3]);
int a[3]={12,34,54,};
int ave;
ave=fun(a);
,
}
int fun(int x[3])
{
int sum;
sum=x[0]+x[1]+x[2];
return (sum);
}
特点:实参和形参共占同一段内存单元,形参变化,实参
也随之变化。
例,P145_交换
12
34
54
a[0]
a[1]
a[0]
x[0]
x[1]
x[2]
1212
1214
1210
五、应用举例
1,P146_例 5.1 数据处理问题
分析,(1)数组定义(主函数中)
(2)建立数组(定义一个函数,向数组元素中输入数据)
(3)数组处理(定义一个函数,求元素中的平均值)
(4)数组输出(定义一个函数,输出低于平均分的值)
(5)主函数调用上述各函数。
2,P147_例 5.2 排序问题
方法:比较交换法、选择法、起泡法、插入法等。
起泡法基本思想,
将相邻两数 a[0]与 a[1]比较,将两数排好序,再将 a[1]与 a[2]
比较,依此处理,直到将最后两个数比较并处理完毕。此时将最
大数换到最后。
a[0] a[1] a[2] a[3] a[4]
10 5 7 3 6
5 10 7 3 6
5 7 10 3 6
5 7 3 10 6
5 7 3 6 10
数据处理函数,
void bubble(int a[ ],int n )
{
int i,j,t trmp;
for ( i=1 ; i<=n-1;i++)
{
t=n-i;
for (j=0;j<=t-1;j++)
if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
return;
}
如果 a[j]>a[j+1](前项
大于后项),将 a[j]和
a[j+1]交换
/*外循环:共循环 n-1次,为内循环
提供循环终值( t=n-i) */
/*内循:负责找出最大数送至最后 */
3,P151_例 5.3
查找问题
查找有多种算法,如顺序查找、索引查找和折半查找等。
折半查找效率高,速度快。但前提是数据已按一定顺序排列好。
基本思路是:先检索当中的一个数据,看它是否为所需用的数
据,如果不是,则判断要找的数据是在当中数的哪一边,下次就在
这个范围内查找。
设,top=0,bot=9,a[9], x (要查找的值 )
mid =(top+bot)/2
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7 a[8]
8 13 21 28 35 41 52 63 71
(1) top mid bot
(2) top mid bot
if a[mid]>x 成立,则查找的数据在 mid的左侧。因此,bot=mid
重新计算 mid, mid =(top+bot)/2
查找成功,a[mid]=x
查找失败,top>bot
小结,
1、数组定义
2、数组初始化
3、数组引用
4、数组名或元素作为函数实参
5、数组应用:数据处理、数据排序、数据查找。
作业,P175_5,3
1,P1414_4.17
#define low(x) (x)+32
2,P141_4.18
#define swap(x,y) {int t ;t=x;x=y;y=t;}
本次课内容:一维数组
教学目的:掌握一维数组的定义、初始化,数组的引用、数组作
为函数参数及数据排序、查找等处理方法。
重点:一维数组的定义、初始化及数组的引用。
难点:利用数组的数据处理(排序、查找等问题处理),地址传
递。
一、一维数组的定义
一般形式,类型标识符 数组名 [ 元素个数 ];
如,int a[5];
说明, (1)元素序号从 0起始。
(2)元素个数也称数组长度。
(3)定义了 n个连续的存储单元(每个单元字节数由数据类型
决定)。
(4)数组名是第一个单元的地址。
2字节
2字节
2字节
2字节
2字节
a{0}
a{1}
a{2}
a{3}
a{4}
内存空间
1010
1011
1012
1013
1014 1015
1016
1017
1018
1019
地址 元素 元素占字节
a
二、一维数组的初始化
在数组定义时指定元素的初始值,称初始化。
如,static int a[5]={1,2,3,4,5};
static char ch[2]={‘a’,’b’};
说明, (1) 元素定义的初值个数不足时,用零补齐。
如 static int a[ 5]={1,2,3};
等价于,static a[5]={1,2,3,0,0};
int s[8]={0};
s[0] ~ s[7]中的值均为零。
(2)元素定义时赋初值,可以不指定数组个数;
如 static int a[ ]={1,2,3,4,5];
此时将以初值个数决定数组长度。
(3)静态和外部存储类型的数组不进行初始化,隐含的初
值为零或空字符,自动类型数组未初始化,其值不确定。
static char ch1[5]; /*ch1[0]~ch1[4]中的值为空,即
‘’ */
static int m[5]; /*m[0]~m[4]中的值为零 */
float p[5]; /*p[0]~ p[4]中的值不确定 */
三、数组元素的引用
数组定义后即可以引用。
如,a[1]=3 ; a[2]=a[1]+1;
注,C编译不检查下标“出界”,若引用出界下标,将引用数组
以外的(下面存储单元内容)数据引用,造成错误。
数组元素引用,一般采用循环结构。
如,for ( i=1 ; i<5 ; i++ ) a [ i ] = i ;
四、数组作为函数参数
数组数据传送到函数的两种方法,
1、数组元素作为参数(值传递)
如,
,
are=fun(a[0],a[1],a[2]);
,
float fun(float a,float b,float c)
{
,
}
2、数组名作为函数参数(地址传递)
,
int fun(int x[3]);
int a[3]={12,34,54,};
int ave;
ave=fun(a);
,
}
int fun(int x[3])
{
int sum;
sum=x[0]+x[1]+x[2];
return (sum);
}
特点:实参和形参共占同一段内存单元,形参变化,实参
也随之变化。
例,P145_交换
12
34
54
a[0]
a[1]
a[0]
x[0]
x[1]
x[2]
1212
1214
1210
五、应用举例
1,P146_例 5.1 数据处理问题
分析,(1)数组定义(主函数中)
(2)建立数组(定义一个函数,向数组元素中输入数据)
(3)数组处理(定义一个函数,求元素中的平均值)
(4)数组输出(定义一个函数,输出低于平均分的值)
(5)主函数调用上述各函数。
2,P147_例 5.2 排序问题
方法:比较交换法、选择法、起泡法、插入法等。
起泡法基本思想,
将相邻两数 a[0]与 a[1]比较,将两数排好序,再将 a[1]与 a[2]
比较,依此处理,直到将最后两个数比较并处理完毕。此时将最
大数换到最后。
a[0] a[1] a[2] a[3] a[4]
10 5 7 3 6
5 10 7 3 6
5 7 10 3 6
5 7 3 10 6
5 7 3 6 10
数据处理函数,
void bubble(int a[ ],int n )
{
int i,j,t trmp;
for ( i=1 ; i<=n-1;i++)
{
t=n-i;
for (j=0;j<=t-1;j++)
if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
return;
}
如果 a[j]>a[j+1](前项
大于后项),将 a[j]和
a[j+1]交换
/*外循环:共循环 n-1次,为内循环
提供循环终值( t=n-i) */
/*内循:负责找出最大数送至最后 */
3,P151_例 5.3
查找问题
查找有多种算法,如顺序查找、索引查找和折半查找等。
折半查找效率高,速度快。但前提是数据已按一定顺序排列好。
基本思路是:先检索当中的一个数据,看它是否为所需用的数
据,如果不是,则判断要找的数据是在当中数的哪一边,下次就在
这个范围内查找。
设,top=0,bot=9,a[9], x (要查找的值 )
mid =(top+bot)/2
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7 a[8]
8 13 21 28 35 41 52 63 71
(1) top mid bot
(2) top mid bot
if a[mid]>x 成立,则查找的数据在 mid的左侧。因此,bot=mid
重新计算 mid, mid =(top+bot)/2
查找成功,a[mid]=x
查找失败,top>bot
小结,
1、数组定义
2、数组初始化
3、数组引用
4、数组名或元素作为函数实参
5、数组应用:数据处理、数据排序、数据查找。
作业,P175_5,3