文档介绍:算法与数据结构
任课教师:戴韡
1一维数组的定义和引用
问题:有如下几组数据,它们分别该如何存储呢?
是一组具有相同数据类型的数据的有序集合。
数组
一个班学生的学习成绩
一行文字
一个矩阵
这些数据的特点是:
1、具有相同的数据类型
2、使用过程中需要保留原始数据
C语言为这些数据,提供了一种构造数据类型:数组。
1、一维数组的定义格式为:
类型说明符数组名[常量表达式];
例如: int a[10];
它表示定义了一个整形数组,数组名为a,此数组有10个元素。
一维数组的定义
2、说明:
(1)数组名定名规则和变量名相同,遵循标识符定名规则。
(2)在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。例如,指定a[10],表示a数组有10个元素,注意下标是从0开始的,这10个元素是,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。请持别注意,按上面的定义,不存在数组元素a[10]。
(3)常量表达式中可以包括常量和符号常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的:
宝宝数学很好,2岁就可以从1数到10了。后来,我告诉他0比1还小。
今天吃饺子,我说:“宝宝,你数数你想吃几个饺子?”
“0,1,2,3。”一边说着一边拿起一个饺子,“这是第0个。”
老婆怒吼:“下一代还是做程序员的命!”
举例: int n;
scanf(“%d″,&n); /*在程序中临时输入数
组的大小*/
int a[n];
① float a[0]; /* 数组大小为0没有意义*/
② int b(2)(3); /* 不能使用圆括号*/
③ int k, a[k]; /* 不能用变量说明数组大小*/
数组说明中其他常见的错误
3、一维数组在内存中的存放
每个数据元素占用的字节数,就是基类型的字节数
一个元素占4个字节
一维数组: float mark[100];
mark[0]
mark[1]
mark[2]
mark[3]
.
.
.
mark[99]
75
.
.
.
低地址
高地址
数组名[下标]
下标可以是整型常量或整型表达式。例如:
a[0]=a[5]+a[7]-a[2*3]
定义数组时用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别的。
例如∶ int a[10]; /* 定义数组长度为10 */
t=a[6]; /* 引用a数组中序号为6的元
素。此时6不代表数组长度*/
注意
2一维数组元素的引用
1、数组元素的引用方式:
2、一维数组元素引用的程序实例
#include <>
void main()
{
int i,a[10];
for (i=0; i<=9;i++)
a[i]=i;
for(i=9;i>=0; i--)
printf("%d ″,a[i]);
printf("\n″);
}
运行结果如下:
9 8 7 6 5 4 3 2 1 0
程序使a[0]到
a[9]的值为0~9,然后按逆序输出。
1、对数组元素初始化的实现方法:
(1)在定义数组时对数组元素赋以初值。例如:
int a[10]={0,1,2,3,4,5,6,7,8,9};
将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。
3一维数组的初始化