C语言数组试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章 数组
4.1内容概述
本章主要介绍了数值数组和字符数组的定义、初始化、元素引用和数组数据的输入与输出,字符数组实现字符串、字符串函数的实现与调用。指针数组与数组指针定义、元素引用。利用一维数组实现如挑数、排序、求和等实际应用问题。利用二维数组实现矩阵的应用问题。利用字符数组实现字符串的各种操作。本章知识结构如图4.1所示。
图4.1 第4章知识结构图
考核要求:掌握一维数组、二维数组、字符数组和指针数组的定义和初始化;掌握数组元素存储地址计算;掌握数组元素的下标法、指针法引用;掌握字符数组与字符串的区别与联系;掌握有关字符串处理函数的使用方法;能利用一维数组、二维数组解决向量、矩阵等实际应用问题。
重点难点:本章的重点是一维数组、二维数组和字符数组的定义、初始化、元素引用,字符串处理函数的使用。本章的难点是字符串与字符数组的区别,指针数组和数组元素的指针法引用。
核心考点:数组的定义、初始化和数组元素的引用方法,一维数组、二维数组和字符数组的实际应用,字符串的处理方法。
4.2 典型题解析
【例4.1】以下对一维数组a 的定义中正确的是( )。
A. char a(10);
B. int a[0..100];
C. int a[5];
D. int k=10;int a[k];
解析:一维数组定义的一般形式为:
类型标识符 数组名[常量表达式]
其中,常量表达式可以是任意类型,一般为算术表达式,其值表示数组元素的个数,即数组长度。 答案:C
【例4.2】以下对一维数组的定义中不正确的是( )。
A. double x[5]={2.0,4.0,6.0,8.0,10.0};
B. int y[5]={0,1,3,5,7,9};
C. char ch1[ ]={'1', '2', '3', '4', '5'};
D. char ch2[ ]={'\x10', '\xa', '\x8'};
解析:可以对一维数组的全部元素或部分元素赋初值。在对全部数组元素初始化时,数组长度可以省略。若数组长度没有省略,则初始化列表中值的个数不能超过数组的长度。
答案:B
【例4.3】以下对二维数组的定义中正确的是( )。
A .int a[4][]={1,2,3,4,5,6}; B. int a[][3];
C .int a[][3]= {1,2,3,4,5,6}; D. int a[][]={{1,2,3},{4,5,6}};
解析:定义二维数组时,若按一维格式初始化,则第一维的长度可以省略,此时,系统可根据初始化列表中值的个数及第二维的长度计算出省略的第一维长度,但无论如何,第二维的长度不能省略。没有初始化时,每一维的长度都不能省略。
数组
数值数组 定义 初始化 元素引用 数组元素输入和输出 指针数组 定义 初始化 应用
字符数组 定义 初始化 元素引用 数组元素输入和输出
答案:C
【例4.4】假定一个int型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是()。
A. 3
B. 6
C. 10
D. 20
解析:一维数组在内存中所占的字节数为:数组长度×sizeof(元素类型)。
答案:D
【例4.5】以下程序的输出结果是()。
main()
{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);
}
A. 0650
B. 1470
C. 5430
D. 输出值不定
解析:定义的数组a为4行4列,且前三行三列元素已初始化,根据C语法规定,未初始化的元素值为0。
答案:A
【例4.6】以下程序的输出结果是()。
main()
{ int m[][3]={1,4,7,2,5,8,3,6,9};int i,j,k=2;
for(i=0;i<3;i++){ printf("%d ",m[k][i]);}
}
A. 4 5 6
B. 2 5 8
C. 3 6 9
D. 7 8 9
解析:根据初始化列表中值的个数和第二维的长度,可求得第一维长度为3。第一行的元素值依次为1,4,7;第二行元素值依次为2,5,8;第三行元素值依次为3,6,9。循环执行三次,依次输出行标为2的三个元素,即第三行的3个元素。
答案:C
【例4.7】以下程序的输出结果是()。
main()
{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)
t=t+b[i][b[j][j]];
printf("%d\n",t);
}
A. 3
B. 4
C. 1
D. 9
解析:程序中,引用的b数组元素的行下标为循环变量i,列下标为数组元素b[j][j]。外层循环共进行3次,对于每次外循环,内层循环只执行一次(即j=i),所以变量t 的值为元素b[0][b[0][0]]、b[1][b[1][1]]、b[2][b[2][2]]的和。由于数组元素b[0][0]、b[1][1]、b[2][2]的值分别为0、1、2,所以t的值为:0+0+1+2=3。
答案:A
【例4.8】若有定义:int a[2][4];,则引用数组元素正确的是()。
A. a[0][3]
B. a[0][4]
C. a[2][2]
D. a[2][2+1]
解析:引用二维数组元素时,行下标范围为0~行数-1,列下标范围为0~列数-1。
答案:A
【例4.9】若有定义:int aa[8];,则不能代表数组元素aa[1]地址的是()。
A. &aa[0]+1
B. &aa[1]
C. &aa[0]++
D. aa+1
解析: &aa[1]、&aa[0]+1和aa+1都是数组元素aa[1]的地址。由于&aa[0]是地址值常量,不能进行自加、自减运算,所以选项C不能代表aa[1]地址。
答案:C
【例4.10】下列程序执行后的输出结果是()。
main()
{ int a[3][3], *p,i;p=&a[0][0];
for(i=0;i<9;i++) p[i]=i+1;
printf("%d \n",a[1][2]);
}
A. 3
B. 6
C. 9
D. 随机数