第五章 数组
- 格式:ppt
- 大小:846.00 KB
- 文档页数:80


第五章 数组
一、单项选择
1.若要定义一个具有5个元素的整型数组,以下错误的定义语句是( C)
2.下列选项中,能正确定义数组的语句是( D)
3.下面是有关C语言字符数组的描述,其中错误的是( D)
4.有以下程序,程序运行时若输入:how are you? I am fine则输出结果是( C)
#include int main() { char a[30],b[30];
scanf("%s",a);
gets(b);
printf("%s\n %s\n",a,b);
return 0;
}
5.以下选项中正确的语句组是( D)
6.若有定义语句:int m[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是( A )
7.以下数组定义中错误的是( A)
8.下列选项中,能够满足"若字符串s1等于字符串s2,则执行ST"要求的是 ( A )
9.有以下程序,程序运行后的输出结果是( C)
#include
#include
int main()
{
char x[]="STRING";
x[0]='0';x[1]='\0';x[2]=0;
printf("%d %d\n",sizeof(x),strlen(x)); return 0;
10.有以下程序,程序运行后的输出结果是( B )
#include
#include
int main()
{
char a[20]=”ABCD\0EFG\0”,b[]=”IJK”;
strcat(a,b); printf(“%s\n”,a);
return 0;
二、程序设计
1./* 编写程序,实现矩阵(3行3列)的转置(即行列互换)。
例如,输入下面的矩阵:
100 200 300
400 500 600
700 800 900
程序输出:
《数据结构与算法》第五章 数组和广义表
本章介绍的数组与广义表可视为线性表的推广,其特点是数据元素仍然是一个表。本章讨论多维数组的逻辑结构和存储结构、特殊矩阵、矩阵的压缩存储、广义表的逻辑结构和存储结构等。
5.1 多维数组
5.1.1 数组的逻辑结构
数组是我们很熟悉的一种数据结构,它可以看作线性表的推广。数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型,比如:一维数组可以看作一个线性表,二维数组可以看作“数据元素是一维数组”的一维数组,三维数组可以看作“数据元素是二维数组”的一维数组,依此类推。图5.1是一个m行n列的二维数组。
5.1.2 数组的内存映象
现在来讨论数组在计算机中的存储表示。通常,数组在内存被映象为向量,即用向量作为数组的一种存储结构,这是因为内存的地址空间是一维的,数组的行列固定后,通过一个映象函数,则可根据数组元素的下标得到它的存储地址。
对于一维数组按下标顺序分配即可。
对多维数组分配时,要把它的元素映象存储在一维存储器中,一般有两种存储方式:一是以行为主序(或先行后列)的顺序存放,如BASIC、PASCAL、COBOL、C等程序设计语言中用的是以行为主的顺序分配,即一行分配完了接着分配下一行。另一种是以列为主序(先列后行)的顺序存放,如FORTRAN语言中,用的是以列为主序的分配顺序,即一列一列地分配。以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变,…,从右向左,最后是左下标。以列为主序分配的规律恰好相反:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变,…,从左向右,最后是右下标。
例如一个2×3二维数组,逻辑结构可以用图5.2表示。以行为主序的内存映象如图5.3(a)所示。 分配顺序为:a11 ,a12 ,a13 ,a21 ,a22 ,a23 ; 以列为主序的分配顺序为:a11 ,a21 ,a12 ,a22 ,a13 ,a23 ; 它的内存映象如图5.3(b)所示。
1. 标准数组:全1数组,全0数组,单位矩阵,随机矩阵,对角矩阵以及
元素为指定常数的数组。
2.全1数组用ones函数,全0数组用zeros函数。
对于ones和zeros函数,当只有一个输入参数时,即ones(n)或
zeros(n),Matlab就分别生成一个n×n的全1或者全0数组。当有两个
输入参数时,即ones(r,c)或者zeros(r,c),Matlab就分别生成r
行c列的全1或者全0数组。要想生成一个与其他数组相同维数的全1或者
全0数组,用户只要在ones或者zeros的参数中调用size函数就可以了。
测试数组:ones(4),m = ones(4,8)
zeros(4),zeros(3,5),size(m),zeros(size(m))。
3.单位矩阵用eye函数。该函数用与ones和zeros函数相同的语法格式来
生成单位矩阵。单位矩阵或数组是具有如下取值的矩阵或数组:除
A(i,i)之外,所有其他元素都为0,其中i=min(r,c),min(r,c)
是矩阵A中的行数和列数的最小数。
4.随机矩阵用rand函数。函数rand生成均匀分布的随机数组,其元素取
值介于0-1之间。直接调用rand产生一个随机数,随机数组用
rand(n)。另外randn函数将生成均值为0,方差为1的正态分布矩阵。
rand和randn用法和ones相同。
5.对角矩阵用diag函数。在该数组中,一个向量可以被放在与数组的主
对角线平行的任何位置。验证:a = 1:5 diag(a) diag(a,1)
diag(a,-2)
6.几种生成所有元素都相同的数组的方法,先令d=pi
(1)d*one(3,4) slowest method
(2)d+zeros(3,4) slower method
(3)d(ones(3,4)) fast method
(4)repmat(d,3,4) fastest method
数组的数据量较小时,4种方法都可以。随着数组维数的增大,含有
第五章数组习题
1、假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=( )。
A、808 B、818 C、1010 D、1020
2、数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。
A、1175 B、1180 C、1205 D、1210
3、若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(i
A、i*(i-1)/2+j B、j*(j-1)/2+i C、i*(i+1)/2+j D、j*(j+1)/2+i
4、对稀疏矩阵进行压缩存储目的是( )。
A、便于进行矩阵运算 B、便于输入和输出
C、节省存储空间 D、降低运算的时间复杂度
5、已知广义表L=((x,y,z), a, (u,t,w)),从L表中取出原子项t的运算是( )。
A、head(tail(tail(L))) B、tail(head(head(tail(L))))
C、head(tail(head(tail(L)))) D、head(tail(head(tail(tail(L)))))
6、已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是( )。
A、head(tail(LS)) B、tail(head(LS))
C、head(tail(head(tail(LS))) D、head(tail(tail(head(LS))))
7、多维数组之所以有行优先顺序和列优先顺序两种存储方式是因为( )。
A、数组的元素处在行和列两个关系中