第四部分
数组
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
//a是数组的名字,5表示数组元素的个数,并且这5个元素分别用a[0]a[1]...a[4]表示
int i;
for(i=0;i<5;++i)
printf("%d\n",a[i]); //输出1 2 3 4 5 a[i]表示第i+1个元素
printf("%d\n",a[100]); //输出1 2 3 4 5 4176 没有a[100]这个元素,输出了没有给它分配的空间
return 0;
}
/*----输出结果-----------
1
2
3
4
5
4176
-------------------------*/
为什么需要数组
为了解决大量同类型的使用数据的存储和使用问题
为了模拟现实世界
数组的分类
一维数组
a[i] 数组名[个数]
怎样定义一维数组
为n个变量连续分配存储空间 不连续一定不是数组
所有的变量数据类型必须相同
所有变量所占的字节大小必须相同
例子:
int a[5]
一组数组名不代表数组中所有的元素
一维数组名代表数组第一个元素的地址
有关一维数组的操作:
初始化
完全初始化
int a[5]={1,2,3,4,5};
不完全初始化
不完全初始化,未被初始化的元素自动为零
int a[5]={1,2,3};
不初始化
不初始化,所有元素是垃圾值
int a[5];
清零
int a[5]={0};
注意的三个错误写法
错误写法1
int a[5];
a[5]={1,2,3,4,5}//错误
故:只有在定义数组的同时才可以整体赋值,其他情况下整体赋值都是错误的。
只有在定义时,[]里的数字是个数,其他地方[]里的数字为下标
错误写法2
int a[5]={1,2,3,4,5};
a[5]=100; //错误 没有a[5]这个元素,最大到a[4]
错误写法3
int a[5]={1,2,3,4,5};
int b[5]; //错误 没有a[5]这个元素,最大到a[4]
//若要即将a数组中全部的值复制给b数组,
//b=a ; 错误写法
for(i=0;i<5;++i)
b[i]=a[i];
赋值
#include <stdio.h>
int main()
{
int a[5];
scanf("%d\n",&a[0]);
printf("a[0]=%d\n",a[0]);
scanf("%d\n",&a[3]);
printf("a[3]=%d\n",a[3]);
int i;
for(i=0;i<5;++i)
printf(" %d\n",a[i]);
return 0;
}
排序
求最值
倒置
//把一个数组的元素全部给倒过来
#include <stdio.h>
int main()
{
int a[7]={1,2,3,4,5,6,7};
int i,j;
int t;
i=0;
j=6;
while(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
--j;
}
for(i=0;i<7;++i)
printf("%d\n",a[i]);
return 0;
}
/*----输出结果-----------
7
6
5
4
3
2
1
-------------------------*/
查找
...
二维数组
int a[3][4];
总共是12个元素,可以当做3行4列来看待
这12个元素的名字依次是
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
所以 a[i][j]表示第i+1行 第j+1列的元素
int [m][n];该二维数组右下角位置的元素只能是a[m+1][n-1]
初始化
写法一:
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},
};
//写法二一定注意格式
输出二维数组内容:
#include <stdio.h>
int main()
{
int a[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
};
int i,j;
for(i=0;i<3;++i)
{
for(j=0;j<4;++j)
printf("%d ",a[i][j]); //若想要对齐,可写为%-5d 负数表示左对齐
printf("\n");
}
return 0;
}
/*----输出结果-----------
1 2 3 4
5 6 7 8
9 10 11 12
-------------------------*/
对二维数组排序
求每一行的最大值
判断矩阵是否对称
多维数组
是否存在多维数组
不存在
因为内存是线性一维的
n维数组可以当做每个元素是n-1数组的一维数组
比如:
int a[3][4];
该数组是含有3个元素的一维数组
只不过每个元素都可以再分成4个小元素
int a[3][4][5];
该数组是含有3个元素的一维数组
只不过每个元素都是4行5列的二维数组
int a[3][4][5][6];
该数组是含有3个元素的一维数组
只不过每个元素都是个三维数组