目录
所谓数组就是一组具有相同数据类型的数据的有序集合。这里主要介绍一维数组、二维数组以及字符数组。
一、一维数组
1、一维数组的定义
一般形式:类型说明符 数组名[常量表达式]; 其中,类型说明符指数据的类型,数组名命名规则和变量名相同,遵循标识符命名规则,常量表达式指明数组中元素的个数,必须大于零。 例如:int a[10];float b[10];
2、一维数组初始化
在数组定义时为数组元素赋初值称为数组初始化。初始化方法如下:
- 在定义数组时对数组元素赋以初值。例如,int a[10]={2,3,5,6,7,18,20,45,43,90};
- 可以只给一部分元素赋值,其他的按零来处理。例如,int a[10]={0,1,2,3,4};表示只给前面五个元素赋值,后五个元素值为零。
- 对全部数组元素赋初值时,可以不指定数组长度。例如,int a[ ]={1,2,3,4,5};
- 一维数组赋初值的个数不能超过数组总元素的个数。例如,int a[3]={1,2,3,4};是错误的。
3、一维数组的引用
- C语言规定,只能引用单个数组元素,不能一次引用整个数组。数组元素的引用形式:数组名[下标] 。下标是指在数组中第几个元素,可以是整型常量、整形变量和整型表达式,下标的值是数组元素序号,从0开始到n-1结束。注意区分数组定义和数组元素引用(数组定义时有类型说明符)。
- 可以对数组中任何一个元素进行单独的输入和输出,每个元素等同于一个普通变量。
- 数组的引用离不开循环,将数组的下标作为循环变量,通过循环就可以对数组的所有元素逐个进行处理。
4、一维数组程序举例
例如,用数组来处理求Fibonacci数列问题。程序如下:
#include<stdio.h>
void main()
{
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
{
if(i%5==0) printf("\n");
printf("%12d",f[i]);
}
printf("\n");
}
运行结果如下:
二、二维数组
1、二维数组的定义
- 一般形式:类型说明符 数组名[常量表达式1] [常量表达式2];其中,常量表达式1为行数,常量表达式2为列数,例如:float a[3][4]; int b[5][6];
- 理解:二维数组可被看作一种特殊的一维数组,它的元素又是一个一维数组。
2、二维数组的初始化
二维数组初始化的方法:
- 分行给二维数组赋初值(最清楚直观)。例如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
- 可以将所有的数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
- 可以对部分元素赋初值,也可对各行中的某一元素赋初值。例如:int a[3][4]={{1},{5},{9}};
3、二维数组的引用
- 二维数组引用形式:数组名 [下标1][下标2];其中,下标1和下标2可以是整型常量、整形变量和整型表达式,其编号从零开始。
- 二维数组采用双重循环方式进行输入和输出。
4、二维数组的举例
例:有一个3*4的矩阵,求出其中值最大的那个元素的值,以及其所在的行号和列号。程序如下:
#include<stdio.h>
void main()
{
int i,j,row=0,column=0,max;
int a[3][4]={{1,2,3,4},{5,6,7,8},{-1,2,3,-5}};
max=a[3][4];
for(i=0;i<=2;i++)
{
for(j=0;j<=3;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
row=i;
column=j;
}
}
}
printf("max=%d,row=%d,column=%d",max,row,column);
}
//运行结果为 max=8,row=1,column=3
三、字符数组
1、字符数组的定义
- 用来存放字符数据的数组是字符数组,C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符。
- 一般格式:char 数组名[常量表达式];例如:char a[6];
- 字符串实际占有单元的数量等于字符串长度+1,定义时注意考虑元素总个数应比实际长度多1。
2、字符数组的初始化
- 用单个字符对字符数组初始化。例如:char c[6]={'C','h','i','n','a','\0'};
- 用字符串常量对字符数组初始化。例如:char str[6]={"China"}; char str[6]="China"; char str[]="China";
3、字符数组的输入输出
- 单个字符输入输出(用格式符%c或字符输入函数)
- 字符串整体或部分输入输出(用格式符%s)。例如:char str[6]; scanf("%s",str);
- 注意字符数组输入输出项必须是以字符串的地址形式出现,只能输入不包括空格、\t和\n的字符串,输入时数组名前不加&符号。