数组是一组有序数据的集合,并且这些数据具有相同的数据类型。即数组用来存放一组相同类型的数据。
1、一维数组的定义
类型说明符 数组名[常量表达式];
类型说明符:表示数组中存放的数据的类型。
数组名:即数组的名称,必须遵循标识符定名规则。
常量表达式:表示数组长度,指定数组元素的个数,可为常量和符号常量,不能为变量。
例如: int a[10];
该语句定义了a为整型数组,数组长度为10,即该数组可存放10个整数。
错误的定义形式: int a[n];
int a[0];
int a(10);
2、 一维数组元素的引用
引用方式: 数组名[下标]
下标可以是整型常量或整型表达式。
注意:定义数组时的常量和引用数组元素时常量的区别。
例如∶ int a[10]; 数组长度为10,可存放10个整数
a[0]=10; 下标
在引用数组元素时,应确保数组的下标在定义的范围内,如写成a[10] =20,虽不报错,但a[10]并非数组中的元素。
3、 一维数组的初始化
1)定义数组时对数组元素赋初值:将数组元素的初值依次放在一对花括弧内,各数据间用逗号隔开。
例如:int a[10]={0,1,2,3,4,5,6,7,8,9};
可给一部分元素赋值。
例如: int a[10]={0,1,2,3,4};
a数组有10个元素,给前面5个元素赋初值,后5个元素值为0。
可不指定数组长度。
如: int a[]={1,2,3,4,5};
等价于 int a[5]={1,2,3,4,5};
根据大括弧内数据的个数确定数组的长度。
除了在定义时给数组元素赋初值外,还可采用其他方式可以对数组进行初始化。
2)循环结构和赋值语句,给数组元素赋初值;
for (i=0;i<10;i++)
a[i]=i;
3)通过循环结构配合输入函数,给数组元素赋初值。
for (i=0;i<10;i++)
scanf(”%d”,&a[i]);
4、一维数组的应用
(1)将a数组中所有数组元素输出。
程序:
#include<stdio.h>
void main()
{ int a[10]={0,1,2,3,4,5,6,7,8,9}; 在定义数组时给全部数组元素赋初值
for (i=0;i<10;i++)
printf(“%d ”,a[i]);}
改成printf(“%d ”,&a[i]);输出每个数组元素在内存中的存放地址;
分析得出:1. VC给一个整型数据分配4个字节;
2.编译系统给数组分配的空间是连续的;
3.各数组元素在内存中存放是有顺序的。
(2)用起泡法对一组数由小到大进行排序。
起跑法的思路:每次从第一个元素开始,将相邻的两个数比较,将小的数调到前面。
1) 第一趟将6个数中每相邻的两个数比较:第一次前两个数9和8比较,将8调到前面,然后,将第二和第三个数9和5比较,交换……经过第一趟比较,最大的数9已沉底,小的数上升,共进行5次比较和交换;
代码:for(i=0;i<5;i++)
if (a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1];a[i+1]=t; }
2) 接下来第二趟对余下的前面5个数做相同操作.从第一个数开始比较,共比较4次,8
沉下来;
代码:for(i=0;i<5;i++)
if (a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1];a[i+1]=t; }
......
分析:6个数比较5趟,
第一趟比较5次;
第二趟比较4次;
第三趟比较3次;
第四趟比较2次;
第五趟比较1次。
5段代码类似,只比较交换的次数不同,所以,将5段代码整合在一个循环里:
for(j=0;j<5;j++)
for(i=0;i<5-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
思考:对10个数进行排序。
*EASY图形编程.一维数组的应用
利用数组,来产生 100 个随机下落的点。并且每个点落到底部后,就回到顶部重新往下落:
#include<graphics.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
void main()
{
srand( (unsigned)time(NULL) );
initgraph(640, 480);
// 定义点的坐标数组
intx[100]; // 点的 x 坐标
int y[100]; // 点的 y 坐标
int i;
// 初始化点的初始坐标
for (i=0; i<100; i++)
{
x[i] = rand() % 640;
y[i] = rand() % 480;
}
while(!kbhit())
{
for(i=0; i<100; i++)
{
// 擦掉前一个点
putpixel(x[i], y[i], BLACK);
// 计算新坐标
y[i]+=3;
if (y[i]>= 480) y[i] = 0;
// 绘制新点
putpixel(x[i], y[i], WHITE);
}
Sleep(10);
}
closegraph();
}
章节测验:

