1.1数组分配的空间
int a[10]={1,2,3,4,5,6,7,8,9,10};//分配空间 元素类型大小int4*元素个数10=40byte
元素之间空间连续
数组名代表数组首元素地址;a 取的是a[0]的地址;&a 是整个数组的地址
说明:
数组首元素地址:
0号元素的地址属性
数组名代表首元素地址
a+1:首字母的地址,偏移一个元素
数组的地址:
数组的地址属性表示整个数组的地址:&a
从地址编号上是一样的,但偏移量是不一样的
&a+1数组的地址,偏移整个数组长度地址
1.2数组初始化
说明:数组初始化就是给数组中每个元素赋初值
规则:
元素个数可以省略 a[]={10,20,30};
初始化个数可以少于元素个数a[10]={10,20,30};//没初始化默认0
数组初始化必须在定义语句中完成
1.3访问下标
1.3.1 数组下标的使用
下标:数组中的元素从0开始编号一直到(数组元素个数-1)
通过数组的下标来锁定数组元素,从而达到操作具体元素的作用
格式:数组名[下标号] //数组元素相应编号的内容
元素内容与地址:
数组名[编号]; //某号元素的内容
&数组名[编号]; //某号元素的地址
1.3.2数组名访问数组元素
数组名代表数组首元素地址
(数组名+i)的形式表示数组i号元素的地址
*(数组名+i)的形式 表示i号元素的内容
1.3.3通过指针的形式访问数组的元素
说明:通过指针来操作数组中的元素,首先要定义一个指针
指针指向对象类型 是元素的数据类型 数组的类型
int *p;
通过指针操作数组的话用 int (*p)[5];
//获取首元素地址
p=&a[0]; //(p=a;)
//下一个元素的地址及内容
p++;
//指针可能会偏移,需要指针重新指向首元素
1.4数组的应用
1.4.1数组元素累加
需求:定义一个10个元素的数组,每个元素是int类型,用户输入十个整型数据,求平均值。
分析:1通过循环结构将数据输入数据
int sum=0;
int val;
printf();
for(i=0;i<=10;i++)
{
scanf("%d",&a[i])
}
for(i=0;i<=10;i++)
{
sum+=a[i];
}
val=sum/10.0;
printf("%d",val);
2对数组累加和
3求平均值打印
1.4.2数组排序--冒泡排序
可以将数组中的数据进行从大到小或者从小到大排序
排序原理:
通过与后面各个位数据比较将最大/最小的值找出来。
若需要将数组从大到小进行排序,通过两两比较的方式将最小的数据排到最后,然后是次小.....
考虑循环的次数,和遍历的数量。
在第一次循环时,最小的数被排到了最后,因此在下一次排序时不需要遍历到最后一位,其他以此类推......因此遍历的数量为 数据个数-轮数
循环的最后一次,应该是最大和次大的数进行比较,因此所需要循环的循环次数为 数据个数-1
两层循环:
for(i=1;i<数据个数;i++)
{
for(j=0;j<数据个数-轮数;j++)
{
//从小到大
if(a[j]<a[j+1])
{
数据交换
/*这样排序不是将第一个数变成最大数,而是想将最后一个数变成最小数*/
}
}
}
1.4.3选择排序
相对于冒泡排序,选择排序更为直接,通过与后面各个数进行比较后将符合的放在最前面的位置
第一次循环将第一位数据换成我们需要的值....下一次循环的起点应该从下一个数据开始遍历
最后一次为最小数和次小数间比较因此循环次数为.....数据个数-1
如果我要找一个十个数据中的最大值,定义一个a变量让他的值与数组其中一个元素相等
然后让他和数组中其他元素进行比较,若遇到更大的数则得到改值继续往后比较,最终打印a即可
int t[10]={1,5,7,4,6,5,4,4,5,3,}
int a=t[0];
for(i=0;i<10;i++)
{
if(a<t[i+1])
{
a=t[i+1];
}
}
printf("%d",a);
同样的,我可以不定义a,直接用a[0]来接收最大值
int t[10]={1,5,7,4,6,5,4,4,5,3,}
for(i=0;i<10;i++)
{
if(t[0]<t[i+1])
{
t[0]=t[i+1];
}
}
printf("%d",t[0]);
但是这样只是让第一个元素复制了其中最大的值,因此需要中间变量使数组进行交换
int t[10]={1,5,7,4,6,5,4,4,5,3,};
int a;
for(int i=0;i<10;i++)
{
if(t[0]<t[i+1])
{
i=t[0];
t[0]=t[i+1];
t[i+1]=i;
}
}
printf("%d",t[0]);
这样第一个数就是最大数,接着后几位按照这个方式循环比较
int t[10]={1,5,7,4,6,5,4,4,5,3,};
int a;
for(int j=0;j<10-1;j++)
{
for(int i=0;i<10;i++)
{
if(t[j]<t[i+1])
{
a=t[j];
t[j]=t[i+1];//这样会把第一个值变为我们最需要的值
t[i+1]=a;
}
}
}