第5章
一、选择题
1. 引用数组元素时,数组下标的数据类型允许是()。
A. 整型常量
B. 整型表达式
C. 整型常量或整型表达式
D. 任何类型表达式
2. 有定义“int a[2];”,以下正确的描述是()。
A. 定义一维数组a,包含a[1]和a[2]两个元素
B. 定义一维数组a,包含a[0]和a[1]两个元素
C. 定义一维数组a,包含a[0]、a[1]和a[2]三个元素
D. 定义一维数组a,包含a(0)、a(l)和a(2)三个元素
3.说明了一维数组int a[10],则对a数组元素的正确引用是()。
A. a[10]
B. a[3,5]
C. a(5)
D. a[10-10]
4. 对一维数组正确初始化的语句是()。
A. int a[10]=(0,0,0,0,0);
B. int a[]={};
C. int a[]={0};
D. int a[10];a={10*1};
5. 若有说明“int a[3][4]={0};”,则下面正确的叙述是()。
A. 只有元素a[0][0]可得到初值0,其它元素没有初始值
B. 说明语句不正确
C. 数组a 中各元素都可得到初值,但其初值不一定全是0
D. 数组a 中各元素都可得到初值0
6. 对数组s进行初始化,其中不正确的是()。
A. char s[5]={"abc"};
B. char s[5]={’a’,’b’,’c’};
C. char s[5]="";
D. char s[5]="abcdefg";
7. 判断字符串s1是否大于字符串s2,应当使用()。
A. if(s1>s2)
B. if(a==b)
C. if(strcpy(s2,s1)>0)
D. if(stcmp(s1>s2)>0)
8. 下列定义的数组哪一个是不正确的()。
A. char a[3][10]={"China","American","Asia"};
B. int x[2][2]={1,2,3,4};
C. float x[][]={1,2,4,6,8,10};
D. int m[][3]={1,2,3,4,5,6};
9. 定义数组int a[3][2]={1,2,3,4,5,6},下列表述中正确的是()。
A. 数组元素a[3][2]的值为6
B. 数组元素a[6]的值为6
C. 数组元素a[0]的值为1
D. a[0]不是数组元素
10. 对字符数组错误的描述是()。
A. 字符数组可以存放字符串
B. 字符数组中的字符串可以整体输入、输出
C. 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D. 不可以用关系运算符对字符数组中的字符串进行比较
11. 定义“int i;int x[3][3]={1,2,3,4,5,6,7,8,9};”,则“for(i=0;i<3;i++) printf("%d",x[i][2-i]);”的输出结果是()。
A. 1 5 9
B. 1 4 7
C. 3 5 7
D. 3 6 9
12. 定义“char x[]="abcdefg";char y[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’};”,则
下面正确的描述为()。
A. 数组x和数组y等价
B. 数组x和数组y的长度相同
C. 数组x的长度大于数组y的长度
D. 数组x的长度小于数组y的长度
13. 函数strcmp("Int","int"))的返回值为()。
A. 0
B. 大于零的值
C. 小于零的值
D. 不确定
14. 对说明语句“float a[7]={3,5,8};”的正确解释是()。
A. 将3个初值依次赋给元素a[1]至a[3]
B. 赋初值个数与数组元素个数不同,有语法错误
C. 初值类型与数组元素类型不一致,出现错误
D. 将3个初值依次赋给元素a[0]至a[2]
15. 在引用数组元素时,下标表达式的类型必须是()。
A. 字符型
B. 整型
C. 整型或字符型
D. 实型
16. 若有初始化“int a[5]={1,2,3,4,5};”,则值为4的表达式是()。
A. a[4]
B. a[a[2]+l]
C. a[a[2]]
D. a [3]+1
17. 若有语句“float a[]={1,2,3,4,5};",则以下叙述中错误的是()。
A. 因所提供的初值都是整数,与定义的数组a类型不一致,所以有错误
B. a数组在内存中占据20个字节
C. 数组中的最后一个元素是a[4]
D. 元素a[2]的值是3.0
18. 以下有关数组的说明中,不正确的是()。
A. 数组可以整体引用,例如通过数组名对数组进行整体输入或输出
B. 数组中各数组元素依次占据内存中连续的存储空间
C. 同一数组中的元素具有相同的名称和数据类型
D. 在使用数组前必须先对其进行定义
19. 以下叙述中,不正确的是()。
A. 数组由一组类型相同的元素组成
B. 数组元素中下标表达式越界时,会产生编译错误
C. C语言不自动给所定义的数组元素赋初始值
D. 数组类型决定了数组元素所占内存单元的字节数
20. 以下叙述中,不正确的是()。
A. 数组名是用户标识符,应符合用户标识符的命名规则
B. 对数组全部元素赋初值,则定义多维数组时可以不指定第一维的长度,但必须指定其它维的长度
C. 二维数组中的各元素在内存中以“列主序”的顺序依次排列
D. 二维数组中第1个下标称为“行下标”,第2个下标称为“列下标”
二、填空题
1. 数组是一组具有__________元素的有序集合,在内存中存放时按数组元素的_____进行存储。二维数组在内存中按_____(行顺序/列顺序)存储。
2. 数组是用一个统一的名称来标识数组元素,这个名称为_____,访问和处理数组元素是通过_____实现的。
3. 二维数组可以看成一个矩阵,二维数组的第一维决定矩阵的_____,第二维决定矩阵的_____。
4. 对于没有定义存储类别的一维数组赋初始化时,如果没有足够的数据赋给数组元素,则对于整型/实
型数组未赋值的数组元素值为_____。而对于static类别的整型/实型数组元素未赋值的值为_____,对于字符数组为’\0’。
5. 字符串用一维字符数组形式进行存储,它以_____结尾。
6. 字符数组ch[10]用于存储一个字符串,它最多可包含_____个字符。
7. ’a’与"a"的区别是__________。
8. 除了puts和gets外,大多数字符串处理函数包含在_____文件中。
9. 对于字符数组c[],scanf("%s",c)语句中c不能用取地址符&,即不能写成&c,因为c本身就是字符数组c的_____。
三、判断题
1. 定义了数组a[100],则在程序中可以使用数组元素a[100]。()
2. 定义了数组b[10],下标0不能使用,即只能用数组元素b[1]~b[10]。()
3. 数组是一种由数目固定、类型相同的若干有序变量构成的构造数据类型。()
4. 数组定义时一定要给出各维的大小,并且一定要对数组进行初始化。()
5. 数组下标可以从0开始,也可以从1开始。()
7. 可以用字符串常量给一维字符数组初始化。()
8. 数组名可以和本程序中其它变量同名。()
9. 数组长度不能动态定义,即定义数组大小时可以使用变量。()
10. 二维数组数据存放排列顺序是按行存放的。()
11. "A"和’A’都表示一个字符常量。()
四、问答题
1. 什么是数组,为什么要引入数组?
2. 数组的初始化有哪几种方式?
3. 设一维数组a[10],则下列对数组元素的引用哪些是正确的。
a[3],a[2+3],a[3/1.0],a[12],a[5+8],a[9-9],a[3.4]
4. 阅读以下程序,写出程序运行结果。
#include <stdio .h>
main()
{ int i,a[4]={5,16,7,14};
for(i=0;i<4;i++) a[i]+=i;
for(i=3;i>=0;i--)  printf("%d",a[i]);
}
5. 有已排好序的字符串a,下面的程序是将字符串s中每个字符按序插入到a中,请将下面程序填写完整。
#include <stdio.h>
main()
{ char a[20]="cehjknptw";
char s[]="fdla";
int i,j,k;
for(k=O;s[k]!=’\0’;k++)
{ j=0;
while (s[k]>=a[j]&&a[j]!=’\0’)j++;
for(__________)
__________;
a[j]=s[k];
}
i=0;
while (a[i]!= ’\0’)
{ putchar(a[i]);
i++;
}
}
五、编程题
1. 用冒泡排序法对输入的20个数进行降序排序并存入数组中。然后输入一个数,查该数是否在数组中存在,若存在,打印出该数在数组中对应的下标值。
2. 求一个3×3矩阵对角线元素之和。
3. 编写程序,打印杨辉三角形(要求打印10行)。
1
1  1
字符串比较函数实现1  2    1
1  3    3    1
1  4    6    4    1
1  5    10  10  5  1
……
4. 将一个数组中的元素逆序存放,如原来数组的元素是23,59,26,48,14。要求改为:14,48,26,59,23。
5. 输入一个字符串,统计数字、空格、字母和其它字符各自出现的次数。
6. 编一3×5矩阵的转置程序,利用新的数组存放转置后的矩阵。
7. 编写程序求两个3×5矩阵相加,相加的结果放到第三个矩阵中。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。