1、国家二级 C语言机试(数组)模拟试卷 1及答案与解析 一、选择题 1 以下叙述中正确的是( )。 ( A)每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元 ( B)一条语句只能定义一个数组 ( C)数组说明符的一对方括号中只能使用整型常量,而不能使用表达式 ( D)在引用数组元素时,下标表达式可以使用浮点数 2 以下叙述中正确的是( )。 ( A) char c1, c2, *c3, c440;是合法的变量定义语句 ( B)数组下标的下限由数组中第一个非零元素的位置决定 ( C)数组下标的下限由数组中第一个被赋值元素的位置决定 ( D)数组下标的下限是 1 3 以下叙述中
2、正确的是( )。 ( A)语句 int a8 = 0; 是合法的 ( B)语句 int a = 0;是不合法的,遗漏了数组的大小 ( C)语句 char a2 = “A“, “B“; 是合法的,定义了一个包含两个字符的数组 ( D)语句 char a3; a = “AB“; 是合法的,因为数组有三个字符空间的容量,可以保存两个字符 4 以下叙述中正确的是( )。 ( A)在逻辑上, 可以把二维数组看成是一个具有行和列的表格或矩阵 ( B)语句 int a43 = 1,2,4,5; 是错误的初始化形式 ( C)语句 int a3 = 1,2,4,5; 是错误的初始化形式 ( D)语句 int a
3、43 = 1,2, 4,5; 是错误的初始化形式 5 有以下程序 #include main() int i, x33 = 1,2,3,4,5,6,7,8,9 ; for( i=0; i main() int b33=0,1,2,0,1,2,0,1,2,i,j,t=1; for(i=0; i main() int x32=0, i; for(i=0; i,则输出结果为( )。 ( A) 2 0 4 ( B) 2 0 0 ( C) 2 4 0 ( D) 2 4 6 24 下列选项中,能正确定义数组的语句是( )。 ( A) #define N 2008 int numN; ( B) int nu
4、m; ( C) int N=2008; int numN; ( D) int num02008; 25 有以下程序 #include main() int a44=1,4,3,2, 8,6,5,7, 3,7,2,5, 4,8,6,1; int i, j, k, t; for (i=0; i aki) t=aji; aji = aki; aki = t; /* 按列排序 */ for (i=0; i main() int i, t3=9,8,7,6,5,4,3,2,1; for(i=0;i main() int a44= 1,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1, i, k
5、, t; for (i=0; i main() int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i; for(i=0; i main() int i, t3=9,8,7,6,5,4,3,2,1; for(i=0;i main() int a3=0, i, j, k=2; for( i=0; i main() int i, k; int array42 = 1,2, 4,9, 6; for (i=0; i main() int i, *ptr; int array5 = 5,3,1; for (ptr=array, i=0; i main() char a44= ; i
6、nt i,j; for(i=0;i4; i+) ai0=ai3=#; for(j=1; j3; j+) a0j=a3j=#; if(i!=0) for(i=1;i3; i+) for(j=0; j4;j+) printf(“%2c“,aij); printf(“n“); 程序的运行结果是( )。 ( A) # o o # # o o # ( B) # # # # # o o # ( C) # o o # # # # # ( D) # # # # # # # # 国家二级 C语言机试(数组)模拟试卷 1答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 同类元素的集合称为数组,数组元素在
7、内存中占据连续的存储空间,答案 A)正 确。在使用逗号运算符的情况下,一条语句可以定义多个数组,选项 B)错。方括号中可以为整型变量或者常量表达式,选项 C)错。数组元素在数组中的下标为整型常量或者变量构成的整型表达式,不能为浮点数,选项D)错。答案选 A)。 【知识模块】 数组 2 【正确答案】 A 【试题解析】 A)正确, char c1, c2, *c3, c440表示定义了两个字符变量c1、 c2,一个字符指针 c3,一个字符数组 c4。数组的下限永远为 0,选项 B)、C)、 D)错,答案选 A)。 【知识模块】 数组 3 【正 确答案】 A 【试题解析】 考查一维数组以及字符数组的
8、初始化。初始化的时候可以只给数组的前面一部分元素设定初值,故 A)正确。若对数组全部元素赋初值时,可以不指定数组元素的个数,选项 B)错。字符数组中的每个元素为一个字符,需要用单引号,选项 C)错。定义字符数组时可以将字符串直接赋给该字符数组,其他情况则不可以,选项 D)错。答案选 A)。 【知识模块】 数组 4 【正确答案】 A 【试题解析】 考查二维数组的初始化。初始化二维数组的时候可以对其部分元素赋初值,选项 B)错。还可以对数组的全部元 素赋初值,此时第一维的元素个数可以不指定,也可以分行赋值,只对部分元素赋初值,选项 C)、 D)错。 A)的描述正确,答案选 A)。 【知识模块】 数
9、组 5 【正确答案】 A 【试题解析】 考查二维数组元素的引用。 xij表示引用的是数组第 i+1行、 j+1列元素,所以程序中输出的是 x02 、 x10、 x20,即是二维数组次对角线上的元素: 3 5 7,答案选 A。 【知识模块】 数组 6 【正确答案】 A 【试题解析】 考查二维数组元素的引用。二维数组可以理 解为一维数组的嵌套,二维数组中的每个元素都为一个数组。由此可知 x0、 x1为二维数组 x23对应的一维数组,每个一维数组中共有 3个整型元素, x0、 x1为数组名,代表对应数组的首地址,选项 B)、 C)、 D)正确, x0 = 0意味着对二维数组 x23的第一行元素即前三
10、个元素赋初值 0,选项 A)错。答案选 A)。 【知识模块】 数组 7 【正确答案】 A 【试题解析】 模块化采用的是自顶向下、逐步细化的设计方法来把复杂的问题分解成许多独立并且可以独立访问的模块,所以选项 A) 的描述错误,答案选A)。 【知识模块】 数组 8 【正确答案】 A 【试题解析】 程序的模块化是指把程序要解决的总目标分解为若干目标,再进一步分解为具体的小目标,每个小目标即为一个模块,而函数是 C语言的基本模块,实现某一模块的具体功能,所以答案选 A。 【知识模块】 数组 9 【正确答案】 A 【试题解析】 E-R图即 “实体 -联系图 “将现实世界中的要求转化成实体、联系、属性等
11、基本概念,描述的是实体之间的联系,而不能对算法进行描述,相对而言,程序语句、伪代码和流程图以及文字都能描 述算法的基本思想,所以答案选A。 【知识模块】 数组 10 【正确答案】 A 【试题解析】 程序的模块化是指把程序要解决的总目标分解为若干目标,再进一步分解为具体的小目标,每个小目标即为一个模块,而函数是 C语言的基本模块,实现某一模块的具体功能,所以 C语言主要通过定义函数来实现程序模块化,答案选 A。 【知识模块】 数组 11 【正确答案】 A 【试题解析】 绘制流程图中,习惯用圆角矩形表示 “开始 “与 “结束 “;用矩形表示行动方案、普通工作环节;用菱形表示问题判断或判定(审核 /
12、审 批 /评审)环节;用平行四边形表示输入输出;箭头代表工作流方向。答案选 A。 【知识模块】 数组 12 【正确答案】 A 【试题解析】 绘制流程图中,习惯用圆角矩形表示 “开始 “与 “结束 “;用矩形表示行动方案、普通工作环节;用菱形表示问题判断或判定(审核 /审批 /评审)环节;用平行四边形表示输入输出;箭头代表工作流方向。答案选 A。 【知识模块】 数组 13 【正确答案】 A 【试题解析】 :模块化的程序设计是指按照从顶向下逐层分解的方法把程序要解决的总目标分解为若干目标,再进一步分解 为具体的小目标进行实现,所以应该是先考虑主程序中的算法,然后再完成每个小模块中的算法,选项 A)
13、表述有问题,答案选 A)。 【知识模块】 数组 14 【正确答案】 A 【试题解析】 程序的模块化是指把程序要解决的总目标分解为若干目标,再进一步分解为具体的小目标,每个小目标即为一个模块,而函数是 C语言的基本模块,实现某一模块的具体功能,所以答案选 A。 【知识模块】 数组 15 【正确答案】 A 【试题解析】 C语言源程序必须经过编译链接生成可执行文件之后才可以被计算机直接运行,选项 B)、 D)错误;任何一种算法都可以用 N-S流程图描述出来,选项 C)错误;选项 A)的表述正确,所以答案选 A)。 【知识模块】 数组 16 【正确答案】 A 【试题解析】 结构化的程序需要遵循一定的原
14、则:自顶向下、逐步求精、模块化和限制使用 goto语句,并不是使用了三种基本结构中的一种就可以称之为结构化程序,选项 B)错误;程序的语法错误在编译阶段就能检测出来,选项 C)错误;每个 C语言程序都必须包含且只能包含一个 main()函数,选项 D)错误;已经证明,由顺序、分支、循环这三种基本结构组成的算法可 以解决任何复杂的问题。答案选 A)。 【知识模块】 数组 17 【正确答案】 A 【试题解析】 根据算法需要只要包含顺序、分支、循环这三种基本结构中的一种或者几种就可以,而且已经证明,由这三种基本结构组成的算法可以解决任何复杂的问题,选项 B)、 C)错误;算法的复杂度是依据算法的时间
15、复杂度和空间复杂度来衡量的,简单算法和复杂算法没有明确的界限,选项 D)错误;编译是将C语言源程序翻译成二进制目标程序,选项 A)表述正确,答案选 A)。 【知识模块】 数组 18 【正确答案】 A 【试题 解析】 将复杂任务分解成简单子任务的想法是属于一种结构化的程序设计方法,选项 A)表述正确; C语言可以根据算法需要将函数放到一个或者多个源文件中,每个源文件可以包含一个到多个函数,但是只能有一个 main函数,选项B)、 D)错误;一个结构化的程序可以依据该程序要实现的功能选用顺序、分支、循环这三种基本结构中的某几种或者全部使用,不是必须都用上,选项 C)错;答案选 A)。 【知识模块】
16、 数组 19 【正确答案】 A 【试题解析】 二维数组的第一维数据表示行数,第二维数据表示列数,所以x23中 的数据应为两行三列,和定义内容不符,选项 A)错误,答案选 A)。 【知识模块】 数组 20 【正确答案】 A 【试题解析】 定义一维数组(没有初始化)时,数组的维数需为常量或者常量表达式,不可以用变量更不可以省略,所以答案选 A。 【知识模块】 数组 21 【正确答案】 A 【试题解析】 考查二维数组的遍历,t=t+b0b00+b1b11+b2b22=t+b00+b11+ b22 = 1+0+1+2=4,所以 答案选 A。 【知识模块】 数组 22 【正确答案】 A 【试题解析】 二
17、维数组的第一维数据表示行数,第二维数据表示列数,所以num24中的数据应为两行四列,和大括号中定义的内容不一致,选项 A)错误,答案选 A)。 【知识模块】 数组 23 【正确答案】 A 【试题解析】 二维数组 x32可以分解成三个一维数组, xi为一个一维数组,含有的元素有 xi0、 xi1。 xi同样为一个地址常量,记录的是第 i行的第一个元素的首地址,所以输入数据为 2、 4、 6时相当于 x00=2, x10=4,x20=6,其余元素为 0,所以答案选 A。 【知识模块】 数组 24 【正确答案】 A 【试题解析】 定义数组时数组的维数需为常量或者常量表达式,不可以用变量更不可以省略,
18、所以答案选 A。 【知识模块】 数组 25 【正确答案】 A 【试题解析】 该程序段的功能是将数组 a的每列从小到大排序,排序完毕之后,数组 a44= 1,4,2,1,3,6,3,2,4,7,5,5,8,8,6,7,所以输出主对角元 素为1,6,5,7,答案选 A。 【知识模块】 数组 26 【正确答案】 A 【试题解析】 定义数组时数组的维数需为常量或者常量表达式,不可以用变量更不可以省略,所以答案选 A。 【知识模块】 数组 27 【正确答案】 A 【试题解析】 函数输出的分别为 t20、 t11、 t02,即数组的次对角线,答案选 A。 【知识模块】 数组 28 【正确答案】 A 【试题
19、解析】 两重循环的作用是将数组 a中主对角线上的元素按照从大到小的顺序排列,所以排序后的 数组 a44=6,4,3,2,8,2,5,7,3,7,1,5,4,8,6,1,输出为第一行的元素,答案选 A。 【知识模块】 数组 29 【正确答案】 A 【试题解析】 第一个 for循环的作用是统计 s数组中 1、 2、 3、 4的数字各有多少个,然后存放在数组 c的对应下标的元素中,所以 c1记录的是 s中数字 1的个数,以此类推,输出 c数组的结果为选项 【知识模块】 数组 30 【正确答案】 A 【试题解析】 考查二维数组的初始化。初始化二维数组的时候可以对其部 分元素赋初值,还可以对数组的全部元
20、素赋初值。若全部赋初值,则第一维的元素个数可以不指定,但是第二维元素个数不可以省略,所以答案选 A。 【知识模块】 数组 31 【正确答案】 A 【试题解析】 考查二维数组的引用。 tij表示引用的是数组第 i+1行、 j+1列元素,所以程序中输出的是 t20 、 t11、 t02,即是从下到上依次输出二维数组次对角线上的元素: 3 5 7,答案选 A。 【知识模块】 数组 32 【正确答案】 A 【试题解析】 语句 “int a3=0“将数组 a中所有元素赋值为 0,第一次循环,i=0, j=0, a0=a0+1=1;第二次循环, a1=a0+1=2;第三次循环,a0=a1+1=3;第四次循
21、环, a1=a1+1=3,所以答案选 A。 【知识模块】 数组 33 【正确答案】 A 【试题解析】 字符变量和字符数组中只能存放字符常量,不能存放字符串常量,所以变量 c、 d的定义不合法,答案选 A。 【知识模块】 数组 34 【正确答案】 A 【试题解析】 定义语句 “int array42 = 1,2, 4,9, 6;“的作用是使array00=1, array01=2, array10=4, array11=9, array20=6,其余元素均为 0,所以按列输出结果为答案 A)。 【知识模块】 数组 35 【正确答案】 A 【试题解析】 定义语句 “int array5 = 5,3
22、,1;“使得数组前三个元素的值分别为5、 3、 1,其余元素为 0,所以输出的结果分别为 A + 5、 A +3、 A + 1对应的 字符以及两个 X,所以输出答案为 A)。 【知识模块】 数组 36 【正确答案】 A 【试题解析】 :要将这 n个数逆序排列,需将前半部分和后面部分对应的元素(如 xi与 xn-1-i)对调,选项 B)执行结束后,数组没有变化,选项 C)数组越界,选项 D)只将下标为偶数的元素逆序排列,只有选项 A)实现了该算法。答案选 A)。 【知识模块】 数组 37 【正确答案】 A 【试题解析】 考查二维数组的引用,元素 xi0、 xiN-1分别表示二维数组中的第一列和最后一列的元 素,元素 x0j、 xM-1j分别表示二维数组第一行和最后一行的元素,所以答案选 A。 【知识模块】 数组 38 【正确答案】 A 【试题解析】 两重循环的作用是将二维数组 a44的第一列和最后一列的字符设为 #(见语句 “ai0=ai3= ?# ?;“),同时将第一行和最后一行的其他元素设为 ?# ?(见语句 “ai0=ai3= ?# ?;“),其余元素设为 ?o?(见语句“if(i!=0)“),输出 的为第二三行的元素,所以答案选 A。 【知识模块】 数组