1、简单定义:
系统定义一个整型数组a:int a[10],即在内存中开辟了10个连续的单元用于存放数组a的10个元素a[0]-a[9]的值,
数据都为整形,由数组名a和下标唯一地确定每一个元素。这十个数组元素接受输入数据后,相应内存单元对应相应存储内容。
2、数组的优点:
可以让一批相同类型的变量使用同一个数组变量名,用下标来相互区分,表达简洁,可读性好,便于使用循环结构。
3、定义与引用:
需明确的数组内容:数组变量名、数组元素的类型、数组的大小(数组中元素的数量)
即: 类型名 数组名 [数组长度]; 如:double a[26];
类型名:int char float
数组名:a c f
数组长度(是常量):[10] [200] [5]
数组名是一个地址常量,存放数组内存空间的首地址,不允许修改。
引用:
C语言规定,只能引用单个的数组元素,而不能一次引用整个数组
引用形式为:数组名 [下标]
下标可以为整型表达式,其取值范围为[0,数组长度-1] 如定义了a[10]但不能引用a[10]
在编程时,注意不要让下标越界。
数组元素的使用方法与同类型变量完全相同,如: int k,a[10]
定义了整形数组a,就可以在整型变量的任何地方,都可以使用整型数组a的元素,
如:(1)赋值表达式:a[0]=23; a[k-2]=a[0]=1; (2) 输入:scanf ("%d",&a[9]);
4、一维数据的初始化:
与简单变量的初始化一样,在定义数组时,也可以对数组元素赋初值
一般形式为: int a[10] = {1,2,3,4,5,6,7,8,9,10};
其中a[0]为1,a[1]为2,…… ,a[9]为10。
C语言中也可以对静态数组和动态数组进行初始化,如:
static int b[5] = {1,2,3,4,5}; //为静态数组的初始化;
其他的规定:
(1)静态数组若没有初始化,系统默认给所有元素赋0,如:
static int b[5] = {0,0,0,0,0}; 等价于 static int b[5];
(2)数组的初始化也可以只针对(前)部分元素,如:
static int b[5] = {1,2,3}; //b[0]为1,b[1]为2,b[2]为3,b[3]和b[4]都为0
(3)数组初始化时,如果对所有元素都赋了初值,就可以省略数组长度,如:
int a[ ] = {1,2,3,4,5,6,7,8,9,10}; 等价于 int a[10] = {1,2,3,4,5,6,7,8,9,10};
(4)部分元素初始化时,不能省略数组长度。
5、利用数组进行编程:
(1)将数组的下标作为循环变量,如:利用数组计算斐波那契数列的前n个数,
使用简单变量的输入为:
int x1,x2,x;
x1 = x2 = 1;
x = x1 + x2;
x1 = x2;
x2 = x;
使用数组的主要关系为:
f[0] = f[1] = 1;
f[n] = f[n-1] + f[n-2];
编程如下:
此题中的define MAXN 46为宏定义,方便使用函数
(2)利用数组进行顺序查找,如:在数组中查找满足条件的所有你整数,
使用简单变量的输入为:
int number,t_number,i,count,num,Enter_number;
//先计算数位用do-while,结果保存为count
for(i=1;i<=count;i++){
num = number % 10;
if(num == Enter_number){
printf("Yes\n");
}
t_number = number / 10;
if(t_number == 0){
printf("No\n");
break;
}
}
使用数组的主要编程为:
for(i=0;i<n;i++){
if(a[i] == x){
printf("Yes\n");
}
}
编程如下:
练习1:
如果要求输出满足条件的元素的最小下标或者最大下标,应如何分别修改程序?
(以最大下标为例)
练习2:
选择法排序。输入一个正整数n(1<=n<=10),再输入n个整数,用选择法将他们从小到大排序后输出。
例题3:调查电视节目的受欢迎程度。某电视台要调查观众对该台8个栏目(设相应栏目编号为1-8)的受欢迎情况,共调查了n(1<=n<=1000)位观众。统计输出各栏目的得票情况。(可不使用count[0])
例题4:
运用数组二分法查找。设已有一个n(1<=n<=10)个元素的整形数组a,且按值从小到大排序。输入一个整数x,然后在数组中查找x,如果找到,输出对应下标,否则输出“Not Found”。