目录
- 前言
- 一、数组的定义
- 二、数组的使用
- 三、一维数组的推广
- 总结
前言
当我们需要一次定义很多相同类型的变量时,可以用int a,b……。但是如果需要定义的变量比较多,那这个方法就不适用了,这时就需要用到数组了。
一、数组的定义
定义:数组是有序的元素序列,且可以用于储存多个相同数据类型的集合。
简单来说数组就是一种可以放各种相同数据的容器
数组的形式:<类型>变量名称[元素数量] (元素数量必须为整数)
元素数量也叫下标或索引
例如:int a[10] , double see[10]
以int a[10]为例
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
这里面就放了10个int类型的数据
特点:(1)所有的元素都具有相同的数据类型
(2)数组一旦创建就不能改变大小
(3)数组中的元素在内存中是连续依次排列的
数组的赋值:数组变量本身不能被赋值,要把一个数组的所有元素交给另一个数组,必须采用遍历
int a[]=0,1,2,3,4,5,6,7,8,9;
int b[]=a;
//这样的赋值方式是错误的
//正确的赋值方法————遍历
for(i=0;i<10;i++)
{
b[i]=a[i];
}
数组的赋值还有a[2]=a[1]+6
对于这个赋值是把a[1]里面的元素先+6,然后赋值给a[2]
二、数组的使用
在了解数组的定义之后,我们就知道了对于要定义多个变量可以使用数组来简化代码
例如求平均数,在学习数组之前
#include<stdio.h>
int main()
{
int x;
double sum = 0;
int cnt = 0; //定义变量
scanf_s("%d", &x); //接收用户输入的数字
while (x != -1)
{
sum += x;
cnt++;
scanf("%d", &x);
} //求出总和和个数
if (cnt > 0)
{
printf("%f\n", sum / cnt);
} //输出平均数
return 0;
}
但是当需要输出大于平均数的数,那么这个代码就不能再使用了,这时候就需要用到数组来记录用户输出的值
#include<stdio.h>
int main()
{
int x;
int i;
double sum = 0;
int cnt = 0;
int number[100]; //定义数组
for(a=0;a<100;a++)
{
number[a]=0;
} //遍历数组
scanf_s("%d", &x);
while (x != -1)
{
number[cnt] = x; //对数组赋值
sum += x;
cnt++;
scanf("%d", &x);
}
if (cnt > 0)
{
printf("%f\n", sum / cnt);
for (i = 0; i < cnt; i++)
{
if (number[i] > sum / cnt)
{
printf("%d\n", number[i]); //输出大于平均数的值
}
}
}
return 0;
}
还可以用数组来进行简单的两数,三数求和
#include<stdio.h>
int main()
{
int i=0;
int x;
int sum;
int nums[] = { 2,7,11,15 };
int target = 9;
while(i<4)
{
for (x = 0; x < 4; x++)
{
sum = nums[i] + nums[x];
if (sum == target)
{
printf("%d ",i);
}
}
i++;
}
return 0;
}
三、一维数组的推广——二维数组
在前面我们使用的都是一维数组,即数组只有一行,从a[0]到a[9]依次排列。既然有了一维数组,那么就肯定有二维数组,三维数组……这里用二维数组为例来对一维数组进行推广
数组形式:<类型>变量名称[元素数量][元素数量]
例如:
a[0][0] | a[0][1] | a[0][2] | a[0][3] | a[0][4] |
a[1][0] | a[1][1] | a[1][2] | a[1][3] | a[1][4] |
a[2][0] | a[2][1] | a[2][2] | a[2][3] | a[2][4] |
a[3][0] | a[3][1] | a[3][2] | a[3][3] | a[3][4] |
a[4][0] | a[4][1] | a[4][2] | a[4][3] | a[4][4] |
这个矩阵可以用数组理解为int a[5][5],一个5行5列的矩阵
对于二维数组有以下这些特点
(1)列数是必须给出的,行数可由编译器来数
(2)每行一个{},逗号分隔
(3)最后的逗号可以存在也可以不存在
(4)如果省略,表示补零
int a[][5]={
{0,1,2,3,4},
{2,3,4,5,6},
};
二维数组也需要进行遍历,它的遍历与一维数组类似但又有些不同,它需要对行列都进行遍历
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
a[i][j]=i*j;
}
}
二维数组的使用也和一维数组一样,在需要使用二维数组的时候使用
总结
通过数组的学习,我们解决问题的能力变强了,但也需要我们能熟练运用数组,在需要使用数组时使用它,当需要更高维度的数组时,也可以通过一维数组去进行推导了。