5.1一维数组
5.1.1找最小数
【例5-1】输入10个整数,找出其中的最小数,然后输出这10个数和最小数。
参考程序如下:
/*程序5-1.c*/
#include<stdio.h>
int main()
{
int i,min,a[10];/*定义数组*/
printf("Enter data:");/*提示输入*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);/*输入10个数*/
min=a[0];/*假设下标为0的元素最小*/
for(i=1;i<10;i++)/*找最小值a[i]*/
if(a[i]<min)min=a[i];
for(i=0;i<10;i++)
printf("%2d",a[i]);
printf("\nmin=%d\n",min);
return0;
}
运行结果
Enter data:3251094161837
3251094161837
min=1
数组的功能很明确,输入10个数,找出最小数,然后输出这10个数和最小数。
这就要求保存输入数据,并对它们进行处理,程序中用了一个整型数组,而不是若干个整型变量来存放它们。
定义一个整型数组a后,在内存中开辟了10个连续的单元,用于存放数组的10个元素a[0]~a[9]的值,这些元素的类型都是整型,有数组名a和下标唯一确定每个元素。
这些元素在内存中连续存放。
在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来相互区分。
5.1.2一维数组的定义
定义一个数组,需要明确数组变量名,数组元素的类型和数组的大小。
定义一维数组的形式为:
类型说明符数组名[常量表达式];
例如:
int a[5];
它表示数组名为a,此数组有5个元素,每个元素都是整型。
编译系统为该数组在内存中分配5个连续的存储单元,这5个数组元素为a[0],a[1],a[2],a[3],a[4]。
a[0]a[1]a[2]a[3]a[4]
说明:
⑴数组名的定义规则与变量名相同,遵循标识符定名规则。
⑵常量表达式表示数组元素的个数,即数组长度,数组元素的编号从0开始。
常量表达式中可以包括常量和符号常量,但必须是整数,不能包含变量。
也就是说,不允许对数组进行动态定义。
例如:
int a[n];/*非法数组定义,因为n是一个变量*/
⑶类型说明符可以是int、float、double和char等,例如:
char c[20];/*定义一个字符型数组*/
float f[10];/*定义一个实型数组;*/
⑷数组的下标表示元素在数组中的位置,它是一个整数,可以用常量、变量或表达式来表示。
包含N个元素的数组的合法下标为0,1,2,…,N-1,其中最大的下标是N-1。
对于一个数组a[10],数组中最后一个元素为a[9]。
注意:不能使用数组元素a[10]。
⑸带有一个方括号的数组称为一维数组,带有两个方括号的数组称为二维数组,例如:
int a[2];float b[2][3];
表示数组a是一维数组,b是二维数组。
5.1.3数组的初始化
数组定义时可以对各元素指定初始值,称为数组的初始化。
形式如下:
int x[5]={0,1,2,3,4};
表示对一个整型数组赋初值,使x[0]=0,x[1]=1,x[2]=2,x[3]=3,x[4]=4。
01234
a[0]a[1]a[2]a[3]a[4]
说明:
1.普通数组如果不初始化,其元素值为所分配内存中的垃圾值;
2.对static数组元素不赋初值,系统会自动赋以0值;
3.只给部分数组元素赋初值,例如:
int fib[10]={0,1};
对数组的前两个元素赋初值,其余元素的值为0。
4.当全部数组元素赋初值时,可不指定数组长度,例如:
int b[]={2,4,6,8,10};
上述初始化语句等价于:
int b[5]={2,4,6,8,10};
5.1.4数组的引用
由于数组有多个分量,对数组的使用只能逐个引用数组元素,不能一次引用整个数组。
其引用形式为:
数组名[下标];
下标可以是整型常量,也可以是整型表达式。
例如:
a[2]=1;
a[2+1]=2;
a[i+j];(i和j为整型变量)
【例5-2】将数组array的10个元素赋初值,并输出。
/*程序名:5_2.c*/
/*程序功能:输出数组元素的值*/
/#include<stdio.h>
int main()
{
int i,array[10];
for(i=0;i<10;i++)//初始化数组
array[i]=i;
for(i=0;i<10;i++)
printf("%2d",array[i]);
printf("\n");
}
运行结果:
0123456789。