一维数组的初始化与遍历
因为数组是连续存储,所以它支持随机访问,即随便给出一个数组的下标i,就能够很快访问到对应的元素a[i],访问速度快。
一些常见的一维数组初始化:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 };
int a[10]={0,1,2,3,4};//10个元素,只显示初始化了前5个元素,后面的默认为0
int a[]={1,2,3,4,5};//未指定数组元素个数,实际上为5个元素
数组如何存放结构体?
typedef struct _person
{
char name[20];
char sex;
int age;
}Person, *PPerson;
Person a[10];
strcpy(a[0].name, “tom”);
a[0].sex = ‘M’;
a[0].age = 25;
for(int i=0;i <sizeof(a)/sizeof(Person); i++)
{
}
对于一个长度为n的整型数组,应该如何去访问它的每一个元素呢?
for(int i = 0; i < n; i++)
{
printf(“a[%d]=%d\n”, i, a[i]);
}
数组的下标是从零开始计算的而不是从1开始计算的,这点对于初学者来说尤其要引起注意。比如,对于一个元素个数为N的数组a,那么它的所有成员为:
a[0],a[1],a[2],…,a[N-1]
所以,该数组的最后一个元素为a[N-1]而不是a[N]。如果试图去访问a[N],那么访问就越界了。越界访问一个数组,其行为未定义。如果这个地方的内存不存在,那么可能会造成程序崩溃。而C语言的数组,是不会帮助你检测这个越界行为的。
在C语言程序中,数组有着广泛的应用。数组作为一种数据结构,一般就是用来存放程序运行中的各种待处理的数据。
数组用来计算斐波那契数列
斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
这个数列从第三项开始,每一项都等于前两项之和。
#include <stdio.h>
void main(void)
{
int a[20],i;
a[0]=1;a[1]=1;
for(i=2;i<20;i++)
{
a[i]=a[i-1]+a[i-2];
}
for(i=0;i<20;i++)
{
printf("%d ",a[i]);
}
}
数组统计平均成绩
int _tmain(int argc, _TCHAR* argv[])
{
int a[10];
int sum =0;
for(int i = 0; i<10;i++)
{
printf("Please input the score for %d:\n",i+1);
scanf_s("%d", &a[i]);//这是数组元素的输入方法,a[i]是数组的第i个元素,所以需要使用&求出它的地址。
}
for(int i = 0;i<10;i++)
{
sum+=a[i];
}
printf("The sum is:%d, and average score is :%f\n", sum,(float)sum/10);
return 0;
}
冒泡法排序:
冒泡法的排序思想是:从第n个元素(a[n-1])开始,扫描数组,比较相邻两个元素,如果次序相反则交换。如此反复,直到没有任何两个违反相反原则的元素。
void bubble_sort(int a[], size_t n);//a为数组名,n为数组元素个数
{
for(int i = 0;i<n-1;i++)
{
for(int j=n-1;j>i;j--)
{
if(a[j-1]>a[j])
{
int tmp = a[j-1];
a[j-1]=a[j];
a[j]=tmp;
}
}
}
}