一、 数组的基本概念
- 数组是可以在内存中连续存储多个元素的结构
- 数组中的所有元素必须属于相同的数据类型
二、 数组的特点
- 只能存放一种类型的数据,比如int类型的数组、float类型的数组
- 里面存放的数据称为“元素”
三、 声明和使用数组
- 声明数组的类型
- 声明数组的元素个数(需要多少存储空间)
1) 格式
元素类型 数组名[元素个数];
比如:int ages[3];
2) 简单使用
简单初始化:int ages[5] = {19, 19, 20, 21, 25};
元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始
数组元素的访问:a[i]
3) 初始化
初始化方式
int a[3] = {10, 9, 6};
int a[3] = {10,9};
int a[] = {11, 7, 6};
l 常见错误
int a[];
int[4] a;
int a[b];
a = {10, 11};
a[4] = {10,9,8,5};
示例:
//声明数组: 数据类型 数组名[数组长度] ; int scores[5]; //为数组赋值: 数组名[下标]=值; --->下标从0开始 scores[0]=10; scores[1]=20; scores[2]=30; scores[3]=40; scores[4]=50; //获取数组中的元素: 数组名[下标]; printf("%d,%d,%d,%d,%d ",scores[0],scores[1],scores[2],scores[3],scores[4]); //声明赋值一步完成: 数据类型 数组名[长度]={值1,值2....};注意:对应的值的个数应该与长度对应 int nums[5]={1,2,3,4,5}; printf("%d,%d,%d,%d,%d ",nums[0],nums[1],nums[2],nums[3],nums[4]); int arr[10] = {9,8,7,5};//正确,6个元素未赋值将使用默认值(0)!!!! int arr[] = {9,8,7};//正确 ,未指定数组的长度(数组长度取决于元素的个数)
示例2:让用户输入5个成绩,根据用户输入的成绩计算最高分,最低分和平均分
int scores[5];//声明一个数组用于存储用户输入的成绩 int sum=0,avg;//总成绩和平均成绩 int max;//最高分 int min;//最低分 int i; //循环获取用户输入的成绩,并将其输入成绩保持到数组中 for(i=0;i<5;i++){ printf("请输入第%d个人成绩:",i+1); scanf("%d",&scores[i]); sum+=scores[i]; //计算总成绩 } avg=sum/5;//计算平均成绩 min=max=scores[0];//假设第一个人的成绩是最高分,最低分 for(i=1;i<5;i++){ if(scores[i]>max){//获取最高分 max=scores[i]; } if(scores[i]<min){//获取最低分 min=scores[i]; } } printf("平均分为:%d,最高分是%d,最低分%d ",avg,max,min);
- 二维数组可以看作是由一维数组的嵌套而构成的
二维数组: 一维数组中的值为一个数组.
声明: 数据类型 数组名[rowsize][colsize];
int nums[4][2];
声明并赋值:
int nums[4][2]={{10,11},{20,21),{30,31},{40,41}}; 正确
int nums[][2]={{10,11},{20,21),{30,31},{40,41}}; 正确
int nums[4][]={{10,11},{20,21),{30,31},{40,41}}; 错误
示例:声明一个三行三列的二维数组用于保持用户输入的整型数据,打印用户输入的数据并计算对角线之和
int nums[3][3]; int i,j,sum=0; //循环获取用户输入的数据,并将其数据保存到二维数组中 for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("请输入第%d行第%d列数据 ",i+1,j+1); scanf("%d",&nums[i][j]); } } //循环遍历二维数组的数据,并打印成矩形 for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("%d ",nums[i][j]); if(i==j){ sum+=nums[i][j]; } } printf(" "); } printf("二维数组对角线之和为%d",sum);