目录
一.数组是什么?
数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标,表示数据在数组中的序号。
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
二.数组的性质:
- 数组中的每一个都属于同一个数据类型。不能把同一个类型的数据放在同一个数组中。
例:int a[10];不能把浮点数据和整型数据同时放在数组a中。
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
2.0 | 3 | 55.1 | 6 | 7.8 | 18 | 20 | 45 | 49 | 60 |
3 | 5 | 6 | 7 | 12 | 40 | 45 | 60 | 78 | 86 |
2.用一个数组名和下标来唯一确定数组中的元素。
例:a[8]表示下标为8元素的值
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
2 | 3 | 4 | 6 | 7 | 9 | 15 | 46 | 78 | 92 |
一维数组
- 常量表达式指明数组中元素的个数,必须大于0.
例:int a[0]; 错误
2.数组名后是用方括号而不是圆括号
例: int b[8]; 错误
错误示范 :
int n; int n=10,a[n];
scanf(“%d”,&n);
{int a[n];……}
3.在数组定义时为数组元素赋初值称为数组初始化
- 在定义数组时对数组元素赋以初值
例:int a[10]={2,3,4,6,7,8,18,46,56,78};
- 可以只给一部分元素赋值,其他按零来处理
例:int a[10]={0,1,2,3,4}; 表示只给前五个元素赋值,后五个元素值为0
- 对全部数组元素赋初值时,可以不指定数组长度
例:int a[5]={1,2,3,4,5};
也可以写成int a[]={1,2,3,4,5};
- 一维数组赋初值的个数不能超过数组总元素的个数
例:int a[3]={1,2,3,4}
注:C语言规定,只能引用单个数组元素,不能一次性引用整个数组
数组引用形式:数组名[下标]
下标
1.下标是指在数组中第几个元素
例:a[3]就是数组中序号为3的元素,它和简单变量地位和作用相似
2.下标可以是整型变量、整形常量、整型表达式
例:a[4]=a[0]+a[i+1];
3.下标的值是数组元素序号,从零开始,到n-1结束
例:int a[10];说明数组a由10个元素,分别为a[0],a[1]……a[9]
注:数组定义时有类型说明符
可以对数组中任何一个元素进行单独输入输出,某个元素等同于一个普通变量
数组的引用离不开循环
将数组的下标作为循环变量,通过循环,就可以对数组的所有元素逐个进行处理
一维数组的输入输出:采用单循环方式进行
数组的输入 数组的输出
#include<stdio.h> #include<stdio.h>
int main() int main()
{ {
int a[10]; int a[10];
int i; int i;
for(i=0;i<10;i++) for(i=0;i<10;i++)
scanf("%d",&a[i]); printf("%d",a[i]
…… ……
return 0; return 0;
} }
例:
储存学生成绩用实型数组 float score{30];
储存一行文字用字符数组 char str[50];
储存一个矩阵用实型数组 float a[10];
其中:score,str,a为数组名
方括号内的数值为数组长度
下标个数为数组维数
数组成员称为数组元素
数组元素的类型称为数组基类型
二维数组
1.定义形式:
类型说明符 数组名[常量表达式1][常量表达式2];
其中:常量表达式1为行数;常量表达式2位列数
例: float a[3][4];,b[4][6];
注:
- 一对方括号内不能写两个下标
例:float a[3,4]
- 数组元素个数必须是常量表达式,不能使用变量
例:int i=1;
int j=2;
int a[i][j]; 错误
- 用于定义数组长度的常量表达式必须为等于零的正整数
例:int a[0][2];
2.二维数组可被看做一种特殊的一维数组:它的元素又是一个一维数组
例:float a[3][4];可以把a看做一个一维数组,它有3个元素:a[0],a[1],a[2],每个元素又是一个包括四个元素的一维数组:
a[0]——a[0][0] a[0][1] a[0][2] a[0][3]
a[1]——a[1][0] a[1][1] a[1][2] a[1][3]
a[2]——a[2][0] a[2][1] a[2][2] a[2][3]
3.可以对部分元素赋初值
例:int a[3][4]={{1},{2},{3}};
1 0 0 0
2 0 0 0
3 0 0 0
也可以对各行中的某一个元素赋初值
例:int a[3][4]={{1},{0,6},{0,0,0,9}};
1 0 0 0
0 6 0 0
0 0 0 9
4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
例:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
等价于:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
在定义时也可以只对部分元素赋初值二省略第一维的长度,但应分行赋初值
例:int a[][4]={{0,0,3},{1},{0,10}};
5.二维数组元素引用与一维数组元素引用一样,也要采用下标法:
- 引用形式:数组名[下标1][下标2]
- 下标1和下标2可以是整型常量、整型变量和整型表达式。其编号从0开始
- 下标不要越界
例:int a[2*4][3*3],i=10;
则使用a[4][0],a[2][i-2]都是合法的
二维数组的输入输出:采用双循环方式进行
数组的输入 数组的输出
#include<stdio.h> #include<stdio.h>
int main() int main()
{ {
int a[2][3]; int a[2][3];
int i; int i;
int j; int j;
for(i=0;i<2;i++) for(i=0;i<2;i++)
{ for(j=0;j<3;j++) { for(j=0;j<3;j++)
{ {
scanf("%d",&a[i][j]); printf(“%5d",a[i][j]);
…… ……
} }
} }
…… ……
return 0; return 0;
} }
例:将一个矩阵a的行和列的元素互换(即行列转置)存到另一个矩阵b中
分析:a[i][j]=b[j][i];即可以完成转换(一般采用双重循环)
#include<stdio.h>
int main()
{
int a[2][3]={{1,2,3,},{4,5,6}};
int b[3][2];
int i,j;
printf("请输入a:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("请输入b:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%5d",b[i][j]);
}
printf("\n");
}
}