一维数组的使用
一维数组的定义方式如下:
类型说明符 数组名 [常量表达式]
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;
}