内容正文:
第7章 数 组
本章要点:
一 维 数 组
二 维 数 组
字符数组
用一组具有相同名字、不同下标的下标变量来代表一组具有相同性质的一组数据,这就是数组。
数组是同类型数据的集合,集合中的每个数据称为数组元素或下标变量,数组元素的类型相同、个数确定。
下标变量中如果只用一个下标,则称为一维数组,用两个下标则称之为二维数组,用三个下标称之为三维数组,依此类推。
基本概念
7.1一 维 数 组
7.1.1 一维数组的定义
定义形式为:
[存储类别] 类型标识符 数组名[常量表达式], …;
例如:int a[6],b[3*4];
double x[100],y[100];
说明:
类型标识符”表明了数组元素的数据类型,称为数组的基类型。
常量表达式是由常量、符号常量和运算符组成的表达式,它的值规定了数组中数组元素的个数(数组的长度 )
常量表达式中不能含有变量。
int n;
scanf("%d",&n);
int a[n];
数组在内存中占据一片连续的存储单元,数组中的每个数组元素在这片连续的存储单元中按序存储。C语言规定数组名表示该连续存储单元的首地址(首字节编号)。
a
a[0] a[1] a[2] a[3] a[4] a[5]
图7.1 数组的存储结构
数组的定义语句给每个数组元素分配了一定的存储单元,和简单变量一样它们的值是不确定的、是随机的,只有通过赋值或赋初值才能得到确定的值。
同类型的数组的定义和普通变量的定义可以出现在同一个定义语句中。
如: int a[6],b[20],i,j;
数组初始化的一般形式为:
[存储类别] 类型标识符 数组名[常表]={初值表};
数组初始化常见的几种形式:
对所有数组元素赋初值,此时数组定义中表示数组长度的常量表达式可以省略。
例如,int a[6]={0,1,2,3,4,5};
例如,int a[]={5,6,7,8};
可以只给一部分数组元素赋初值,此时数组长度一般不省略。例如:
int a[6]={0,1,2};
后面3个元素由C编译系统自动赋值为0。
7.1.2 一维数组的初始化
引用形式为:
数组名[下标表达式]
例如:
a[0]=123;
scanf(“%d”,&a[3]);
printf(“%d”,a[5]);
a[i++]=2*a[i+j];
7.1.3 一维数组元素的引用
【例7.1】输入10个整型数据,然后分别按顺序和逆序的方式输出。
#include "stdio.h“
#define N 10
main( )
{
int i,a[N];
for(i=0;i<N;i++)
scanf("%d",&a[i]);/*顺序输入*/
for(i=0;i<N;i++)
printf("%d",a[i]);/*顺序输出*/
printf("
");
for(i=N-1;i>=0;i--)
printf("%d",a[i]);/*逆序输出*/
}
在引用数组元素时应注意:
① 引用数组元素时,下标表达式的值是确定的。
② 数组元素本身可以看作是一个普通变量,代表内存中的一个存储单元。因此数组元素可以在任何相同类型简单变量允许使用的位置引用。
③ 数组引用时,下标值应该在已定义的数组大小范围内。常出现的错误是:
int a[100];
a[100]=4;
应严格区分定义数组时使用的a[100]和引用数组元素时使用的a[100]
7.1.4 一维数组应用
【例7.2】从键盘输入10个整数存放在数组中,输出其中最大的一个数和它在数组中的位序。
#include "stdio.h“
#define N 10
main( )
{ int a[N],i, max, id;
printf("Enter data:
");
for(i=0;i<N;i++)
scanf("%d", &a[i]);
max=a[0]; id=0;
for(i=1;i<N;i++)
if(a[i]>max)
{ max=a[i]; id=i; }
printf(“最大数是%d,位序为:%d
", max,id);
}
i<n
输出max和id
a[i] >max
定义:int a[1