C语言(王曙燕)chp6 数组PPT课件
- 格式:ppt
- 大小:1.53 MB
- 文档页数:48


第6章数组
6.1怎样定义和引用一维数组
6.1.1怎样定义一维数组
一般格式:
类型数组名[常量表达式];
如:
int a[10];
说明:
(1) 数组名的命名规则遵循C语言的标识符;
(2) 常量表达式,用来指定该数组中元素的个数,也就是该数组的长度。
该长度必须在这里是一个常量表达式(数字常量、符号常量) ,不能是变量。由
于前面已经指定了类型,指定了元素个数后,该数组一共占用的空间大小就确定 了,^口:上例,a是int型,每个int型在VC中占4字节,而后面又定义了 10 个元素,所以,a共占用了 4*10=40个字节的空间;
(3) 可以使用sizeof运算来求出某个数组占用了多少空间;
特别强调,其中常量表达式不能是变量,如:
int n=10;
int a[n]; //错误,因为n是变量
#defi ne N 10
int b[N]; //正确,因为N是符号常量
int c[N+3]; //正确的,因为N+3是常量表
达式
对于以下定义:
int a[10];
那么,系统就会在内存中划出一片存储空间,女口
右图:
显然,每个元素在内存中都是连续的,从而可以 根据上一个元素的地址,来计算出下一个元素的地址, 假设a的第0个元素存在1000地址上,那么,a[5]的 地址:Add(a[0])+5*4=1020。而对 a[i]的地址:
Add(a[i])=Add(a[0]+i*4)
(4) 数组定义后,元素的排列是从a[0]开始的,因此定义的int a[10] 中, 只有a[0]~a[9],并不存在a[10]这个元素。
(5) 数组定义后,其中的每个元素的值都是不确定的(就是不知道值为多
少,也可以说是随机的),如果想要在定义时就有初值,可以有两种方法:
方法一:用static来修饰,那么,该数组中的每个元素都会被初始化为 0:
static int b[10]; //数组b中的10个元素每个值都是0 1000
1 C语言_数组
-------------------------------------------------------------------------------------------------------
数组是元素的集合,各元素数据按先后顺序存储,数据按照先后顺序连续存放在一起,各元素数据类型相同。 在使用数组前必须先进行定义再使用。一维数组只有一个下标,二维数组有两个下标,多维数组有多个下标。
一维字符数组
定义:类型说明符 数组名 [常量表达式];
例如:unsigned char Name[8];
说明定义了一个无符号字符数组Name,内部有8个元素。
第一个元素表示为Name[0],第8个元素表示为Name[7]。
例:数组连续存放表
char Name[4]; int Name[4];
数组元素 内存地址 数组元素 内存地址
Name[0] 8000 Name[0]
8000
Name[1] 8001 Name[1] 8002
Name[2] 8002 Name[2]
8004
Name[3] 8003 Name[3]
8006
说明:char 数据长度为8位,所有占用一个内存地址。Int 数据长度为16位,所有占用两个内存地址。以此类推其他类型数组占用内存地址情况。
一维数组初始化
1、在定义数组时给数组元素赋初值。
a、全部数组元素赋初值
例如: int Name[3]={1,3,5};
赋值结果:
Name[0] = 1 Name[1] = 3 Name[2] = 5
b、部分数组元素赋初值,其它数组元素自动赋以0值
例如:int Name[3]={1,3 };
赋值结果:
Name[0] = 1 Name[1] = 3 Name[2] = 0
注意:
1)数组元素的值可以是数值型、字符常量或字符串。
2)数组元素的初值必须依次放在一对大括号{ }内,各值之间用逗号隔开。
第六章 数组
学习和解题要点
1.要学习和掌握C语言的数组问题,首先必须形成这么一个观念,当用数组定义语句:
[存储类型] 数据类型 数组名[长度];定义一个数组时,表明请求计算机在内存开辟一个大的空间,该空间的名字即为数组名,同时数组名也是该空间在内存的起始地址。空间的大小由“长度”决定,因此“长度”必须是正整常数明确确定。即使是N,该N也必须在前面的#define N中明确指明是多少。该空间可放“长度”个同一类型的数据。放什么样的数据由数据类型指定。
如:int a[10]; 表明内存地址为a 放10个整数,每个小空间为a[0],a[1],……,a[9]
a
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
↘
2. 有的想用下面的方法定义任意大小的数组:
int n;
scanf(“%d”,&n);
int a[n];
认为从键盘输入一多少大整数给n,则就定义多少大的数组。这也是错误的。因为C语言规定,执行语句以后,就不能再出现定义语句。这种根据程序的需要随时申请空间的称为“动态数据结构”,要用以后的结构类型和指针来解决。
3. 可在定义数组的同时,马上就赋初值。也可由初值的个数决定数组的大小。如:
int a[]={1,2,3,4,5,6,7,8,9,10};
4. 对数值型的数组操作,只能一个元素一个元素的使用,每一的元素的使用都可以看成一个变量的使用,称之为带下标的变量,而决不允许用数组名。如 a[i] 当i为多少时即为那一个元素。在程序中要时时注意现在是对那一个元素操作,如在教材中的“冒泡排序法”和“选择排序法”的程序中要注意现在下标是那一个元素。注意:定义中的int
a[10] 表示共10个元素,而程序中的a[10]表示带下标的变量。
5.二维数组的定义与一维一样,必须有二个正整常数明确确定,我们可以看成多少行和多少列个元素,如果在定义数组的同时赋初值,则第一维的长度可以省略。无论如何,第二维的长度决不能缺省。
95 第4章 数组
数组:一组类型相同的若干变量组成的有序集合。
4.1 一维数组
4.1.1一维数组的定义与初始化
数据类型 数组名[ 整型常量表达式 ];
int a[5];
5个数组元素:a[0]、a[1]、a[2]、a[3] 、a[4]。
注意:数组长度必须是常量。
int n = 5;
int a[n];
数组的初始化:
int a[5]={0,1,2,3,4};
int a[]={0,1,2,3,4};
int a[5]={1,2,3};
int a[5]={0,1,2,3,4,5}; 错!
4.1.2一维数组的引用
不能直接存取整个数组。
数组元素的引用方法:数组名[ 下标 ]
int t;
t=a[0]; a[0]=a[1]; a[1]=t;
scanf("%d",&a[0]);
a[i]的含义:数组首地址(数组名a)与下标i运算,得到第i个元素的值。
【例4.1】初始化数组中的元素。
int main() 96 {
int arr[10]; int i;
for(i=0;i<=9;i++)
arr[i]=i+1;
printf("%s%13s\n","Element","Value");
for(i=0;i<=9;i++)
printf("%7d%13d\n",i,arr[i]);
return 0;
}
4.1.3一维数组应用举例
【例4.2】 输入10个学生的成绩,求最高成绩、最低成绩和平均值。(读数据文件)
【例4.3】 掷1000次骰子,并用数组统计结果。
#include
#include
#include
#define SIZE 7
int main()
{
int value,count;
int freq[SIZE]={0};
srand(time(NULL)); // 设置随机数发生器
for(count=0;count<1000;count++)