一维数组的使用
一维数组的定义方式如下:
类型说明符 数组名 [常量表达式]
int a[5];
- 上述定义了一个整型数组,数组名为a。
- 数组a中有5个元素,每个元素都是int型变量。
- 5个元素在内存中的地址是连续分配的。
- 数组中的元素数据类型都相同,所占字节都相同,且在内存中的地址是连续分配的。
- 区分元素:通过给每个元素编进行号来区分不同的元素。元素编号下标是从0开始的。例如上述定义的数组a,有5个元素,即a[0],a[1],a[2],a[3],a[4]。a[0],a[1],a[2],a[3],a[4]分别也是这5个元素的变量名。
- “[]”中必须是常量或者常量表达式,不能是变量。通常情况下,C语言不允许对数组的长度进行动态定义,数组的大小不依赖于程序运行中过程中变量的值。
一维数组的初始化
数组元素初始化的一般形式如下:
类型说明符 数组名[常量或常量表达式]={初值表列};
例如:
float a[4]={2,3,5,6};
上述定义数组时给所有元素赋初值,这叫 “完全初始化”。
只有定义数组时可以整体赋值,其他情况下不可以整体赋值!
且从左往右依次给每个元素赋值,即a[0]=2,a[1]=3,a[2]=5,a[3]=6。
int b[4]={1,2};
整型数组b有四个元素,但花括号内只有两个初值,即“不完全初始化”。这时a[0]=1,a[1]=2,对于a[3],a[4]并没有初始化,默认为0。
int c[6];
上述只是定义了整型数组c,并没有初始化。若在下面编程中没有对任何元素进行初始化,那么这时每个元素c[0],c[1],c[2],c[3],c[4],c[5]就是0了,而是随机数。(如果不初始化,也不能写成“int c[6]={}”)
int d[3]={0};
上述表示给数组清零,即此时数组中每个元素都是0。
int k[]={1,2,3,4,5};
如果定义数组时就给所有的元素赋初值,那么也可以不用写元素的个数。系统会自动分配空间。
等价于:
int k[5]={1,2,3,4,5};
一维数组简单程序
一维数组每个元素的输出
#include <stdio.h> int main (void) { int a[5]={6,7,2,3,1}; int i; for (i=0;i<=4;i++) { printf("%d\n",a[i]); } return 0; }
输出结果
6 7 2 3 1
用scanf函数手动从键盘对每个元素初始化。
一维数组的使用
C语言规定,只能逐个引用数组元素,而不能引用整个数组。
注意:定义数组时“[]”内的常量或者常量表达式表示的是数组的个数。而引用数组时“[]”内的常量或者常量表达式表达的是数组元素的编号。
只有在定义的时候a[常量]表示的是数组,除此之外,程序中任何地方看到的a[常量]都是数组中的一个元素。
int a[4]={1,2,3,4}; //定义数组并完成初始化 t=a[3]; //将“a[3]即4的值赋值给t”
一个错误的程序
int a[4]={9,6,3,7}; a[4]={4,5,7,8};
如果想要给数组重新赋值,只能依次对每个元素完成赋值。
int a[4]={9,6,3,7}; a[0]=4; a[1]=5; a[2]=7; a[3]=8;
获取数组的长度
获取数组的长度,使用关键字sizeof。
用sizeof可以获得数据类型或者变量所占的字节数。
#include <stdio.h> int main (void) { int i=3; int a[5]={1,2,4,5,6}; printf("%d\n",sizeof (i)); printf("%d\n",sizeof (a[2])); printf("%d\n",sizeof (a)); return 0; }
4 4 20
将数组a赋值给数组b
错误的程序:
int a=[1,2,3,4,5]; int b=[5]; b=a;
a和b是数组名,也表示a和b的第一个元素的起始地址。故a和b是常量,常量之间是不能相互赋值的。
应当将a的每一个元素一次赋值给b。
#include <stdio.h> int main (void) { int a[5]={1,2,3,4,5}; int b[5]; int i; for (i=0;i<=4;i++) { b[i]=a[i]; printf("%d\n",b[i]); } return 0; }
1 2 3 4 5
输入n个整数,输出其中最小的数,并指出它是第几个数。
/*输入n个整数,输出其中的最小值,并指出它是第几个数*/ #include <stdio.h> int main (void) { int n,i,min,a[100],index; //index存储最小数的下标 a[100]存储输入的数 printf("Please input n :\n"); scanf("%d",&n); printf("Please input %d integer numbers:\n",n); for (i=1;i<=n;i++) { scanf("%d",&a[i-1]); } min=a[0]; for (i=1;i<n;i++) { if (a[i]<min) min=a[i]; } for (i=0;i<n;i++) { if (a[i]==min) index=i+1; } printf("最小值为%d,它是第%d个数\n",min,index); return 0; }