1.一维数组
1.1一维数组的定义
一位数组是指用以存储一维数列中数据的集合,其结构类型为:
类型说明符 数组标识符[常量表达式];
类型说明符表示数组中所有元素的类型
数组标识符表示该数组变量的名称(命名规则与变量名一致)
常量表达式表示数组中存放的数据元素的个数,即数组长度
1.2一维数组的引用
如果要使用数组中的元素,我们可以通过引用数组元素的方式实现
数组标识符[下标];
注:下标可以是整型常量或整型表达式,一维数组元素的下标是从零开始的
下面我们通过一个实例来了解一维数组的引用:使用数组保存用户输入的数据,当输入完毕后逆向输出数据
#include <stdio.h>
int main()
{
int arr[5] = {0};
int i = 0;
int temp = 0;
printf("please enter a arr:\n");
for (i = 0; i < 5; i++)
{
scanf("%d", &arr[i]);
}
printf("Original arr is:\n");
for (i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
for (i = 0; i < 2; i++) //将数组中元素的前后位置互换
{
temp = arr[i];
arr[i] = arr[4 - i];
arr[4 - i] = temp;
}
printf("Now arr is:\n");
for (i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
在本实例中,我们使用temp实现了数据间的转换,其运行结果为:
1.3一维数组的初始化
对于一维数组的初始化,可以用以下3种方法实现:
(1)在定义数组时直接对数组元素赋初值
(2)只给一部分元素赋值,未赋值的部分元素值为0
(3)在对全部数组元素赋初值时可以不指定数组的长度
2.二维数组
2.1二维数组的定义
二维数组与一维数组很相似,其结构类型为:
数据类型 数组名[常量表达式1][常量表达式2]
2.2二维数组的初始化
在给二维数组赋初值时,有以下四种情况需要我们注意:
(1)可以将所有数据写在一个大括号内,按照数组元素排列顺序对元素赋值
int arr[2][2]={1,2,3,4};
(2)在为所有元素赋初值时,可以省略行下标(不可省略列下标)
int arr[][3]={1,2,3,4,5,6};
(3)也可以分行给数组元素赋值
int arr[2][3]={{1,2,3},{4,5,6}};
在分行赋值时,可以只对部分元素赋值
int arr[2][3]={{1,2},{4,5}}
(4)二维数组也可以直接对数组元素赋值
int arr[2][3];
a[0][0]=1;
a[0][1]=2;
下面我们还是通过一个实例了解二维数组赋初值的应用,例:通过键盘为二位数组元素赋值,显示二维数组,求出二维数组中最大元素和最小元素的值及其下标,将二维数组转换为另一个二维数组并显示
#include <stdio.h>
int main()
{
int a[2][3];
int b[3][2];
int max, min;
int h, l, i, j;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
printf("a[%d][%d]=", i, j);
scanf("%d", &a[i][j]);
}
}
printf("输出二维数组:\n");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
/*求数组中的最大元素及其下标*/
max = a[0][0];
h = 0;
l = 0;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
if (max < a[i][j])
{
max = a[i][j];
h = i;
l = j;
}
}
}
printf("数组中最大元素是:\n");
printf("max:a[%d][%d]=%d\n", h, l, max);
/*求数组中的最大元素及其下标*/
min = a[0][0];
h = 0;
l = 0;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
if (min > a[i][j])
{
min = a[i][j];
h = i;
l = j;
}
}
}
printf("数组中最小元素是:\n");
printf("min:a[%d][%d]=%d\n", h, l, min);
/*将数组a转换后存入数组b中*/
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
b[j][i] = a[i][j];
}
}
printf("输出转换后的二维数组:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 2; j++)
{
printf("%d\t", b[i][j]);
}
printf("\n");
}
return 0;
}
我们来看一下运行结果:
2.3二维数组的应用
举例:输入任意一个3行3列的二维数组,求对角元素之和
(1)分析:要实现对角元素之和最主要的是我们如何把数组对角线上的元素相加起来。我们知道位于对角线元素的坐标都有一个共同的特点:行列相同。
所以我们可以利用if语句判断:是否i==j
(2)代码实现:
#include <stdio.h>
int main()
{
int a[3][3];
int i = 0;
int j = 0;
int sum = 0;
printf("please input:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("a[%d][%d]=", i, j);
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (i == j)
{
sum = sum + a[i][j];
}
}
}
printf("the result is:%d\n", sum);
return 0;
}
(3)运行结果: