文档介绍:第5章数组
二维数组的定义和使用
字符数组与字符串
程序举例
一维数组定义的一般形式为:
类型说明符数组名[整型常量表达式];
其中,类型说明符指数组中每个元素的类型。数组名是一个标识符,和普通变量命名规则一样,它代表了数组中第一个元素的地址。整型常量表达式表示数组元素的个数,即数组长度。
例如语句
#define M 20
int a[8];
float b[9];
char ch[M];
定义a是有8个整型元素的数组,b是有9个单精度型元素的数组,ch是有20个字符型元素的数组。
说明:
(1)数组名后为下标运算符[ ]而不是圆括号( )。下面用法不对:
int a(10);
(2)整型常量表达式可以包括普通常量和符号常量,
不能包含变量。也就是说,C不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的:
int m;
scanf("%d",&m);
int a[m];
数组必须先定义,然后使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。
引用数组元素的一般形式为:
数组名[下标]
下标必须从0开始,可以是整型常量或整型表达式。
下标是数组元素到数组开始的偏移量。第1个元素的偏移量是0,第2个元素的偏移量是1,依次类推。由此,数组是一系列大小相同的连续项,每项到公共基点的偏移量是固定的。
例如 int a[5];
定义a是有5个元素的数组,对它们的引用分别是a[0],a[1],a[2],a[3],a[4]。注意不能使用数组元素a[5]。
【】数组元素的应用
main( )
{
int i, a[10];
for(i=0;i<=9;i++)
a[i]=2*i;
for(i=9;i>=0;i--)
printf("%d ",a[i]);}
程序运行结果为:
18 16 14 12 10 8 6 4 2 0
程序使a[0]到a[9]的值为0~18,然后按逆序输出。
对数组元素的初始化可以用以下方法实现:
(1) 在定义数组时对数组元素赋初值。例如:
int a[6]={0,1,2,3,4,5};
将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后,a[0]=0,a[1]=1, a[2]=2,a[3]=3,a[4]=4,a[5]=5。
(2) 可以只给一部分元素赋值。例如:
int a[7]={1,2,3};
定义a数组有7个元素,但花括弧内只提供3个初值。这表示只给前3个元素赋初值,后4个元素全为0。
(3) 用循环语句对数组赋值。例如:
int a[5];
for(i=0;i<5;i++)
a[i]=2*i+1;
定义a数组有5个元素,用循环语句赋值后,a[0]=1,a[1]=3,a[2]=5,a[3]=7,a[4]=9。
(4) 在对所有数组元素赋初值时,可以不指定数组
长度。例如:
int a[8]={1,2,3,4,5,6,7,8};
可以写成
int a[ ]={1,2,3,4,5,6,7,8};
在第二种写法中,花括弧内有8个数,系统就会据此自动定义a数组的长度为8。
【】用冒泡排序法对10个数排序(从小到大)
分析:假设有N个数据需要排序。
1)首先比较第一个数和第二个数,如果第一个数大于第二个数,交换两数;然后比较第二个数和第三个数,如果第二个数大于第三个数,交换两数;依此类推,直到第N-1个数与第N个数比较、交换为止。如此经过一趟排序,使得最大的数被放到最后。
2)对前面N-1个数重复以上过程,则次大数被放在第N-1位置上。
3)重复以上过程,直到前面只剩下1个数据为止。这时,已确定N-1个数据位于其最终位置,显然就是N个数据已排序。