1、国家二级 C语言机试(选择题)模拟试卷 4及答案与解析 一、选择题 1 下列关于栈和队列的描述中,正确的是 ( )。 ( A)栈是先进先出 ( B)队列是先进后出 ( C)队列允许在队头删除元素 ( D)栈在栈顶删除元素 2 已知二又树后序遍历序列是 CDABE,中序遍历序列是 CADEB,它的前序遍历序列是 ( )。 ( A) ABCDE ( B) ECABD ( C) EACDB ( D) CDEAB 3 在数据流图中,带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)数据流 ( C) 模块调用 ( D)事件驱动 4 结构化程序设计的 3种结构是 ( )。 ( A)顺序结构,分支结
2、构,跳转结构 ( B)顺序结构,选择结构,循环结构 ( C)分支结构,选择结构,循环结构 ( D)分支结构,跳转结构,循环结构 5 下列方法中,不属于软件调试方法的是 ( )。 ( A)回溯法 ( B)强行排错法 ( C)集成测试法 ( D)原因排除法 6 下列选项中,不属于模块间耦合的是 ( )。 ( A)内容耦合 ( B)异构耦合 ( C)控制耦合 ( D)数据耦合 7 下列特征中不 是面向对象方法的主要特征的是 ( )。 ( A)多态性 ( B)标识惟一性 ( C)封装性 ( D)耦合性 8 在数据库设计中,将 E-R图转换成关系数据模型的过程属于 ( )。 ( A)需求分析阶段 ( B
3、)概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 9 在一棵二叉树上,第 5层的结点数最多是 ( )。 ( A) 8 ( B) 9 ( C) 15 ( D) 16 10 下列有关数据库的描述,正确的是 ( )。 ( A)数据库设计是指设计数据库管理系统 ( B)数据库技术的根本 目标是要解决数据共享的问题 ( C)数据库是一个独立的系统,不需要操作系统的支持 ( D)数据库系统中,数据的物理结构必须与逻辑结构一致 11 以下关于 C语言的叙述中正确的是 ( )。 ( A)预处理命令通常位于函数体外面,但也可以位于函数体中间 ( B) C语言中的变量定义须在其他语句之前 ( C)在 C
4、语言程序的书写中,一个语句必须单占一行 ( D)一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的main函数 12 下列叙述中错误的是 ( )。 ( A)用户所定义的标识符允许 使用关键字 ( B)用户所定义的标识符应尽量做到 “见名知意 ” ( C)用户所定义的标识符必须以字母或下划线开头 ( D)用户定义的标识符中,大、小写字母代表不同标识 13 下列选项中可作为 C语言合法常量的是 ( )。 ( A) -80 ( B) -080 ( C) -8e1 0 ( D) -80 0e 14 下列定义变量的语句中错误的是 ( )。 ( A) int int; ( B) doubl
5、e int; ( C) char For; ( D) float US$: 15 下列关于函数的叙述中正确的是 ( )。 ( A)每个函数都可以被其他函数调用 (包括 main函数 ) ( B)每个函数都可以被单独编译 ( C)每个函数都可以单独运行 ( D)在一个函数内部可以定义另一个函数 16 当 a=1、 b=2、 c=3、 d=4时,执行下面程序段后, x的值是 ( )。 if(a main() int a=4, b=3, c=2, d=1; printf(“ d”, a main() int b33=0, 1, 2,0, 1, 2,0, 1, 2, ij, t=0; for(i=0;
6、 i main() char str10; scanf(“ s”, &str); printf(“ s ntt str): 运行上面的程序,输入字符串 how are you,则程序的执行结果是 ( )。 ( A) how ( B) how are you ( C) h ( D) howareyou 20 设 x和 Y都是 int类型,且 x=1, y=2,则 printf(“ d d”, X, Y, (x, y)的输出结果是 ( )。 ( A) 1 2 ( B) 1 2 2 ( C) 1, 2 ( D)输出值不确定 21 以下程序的输出结果是 ( )。 #include main() int
7、 a=8, b=6, m=1; switch(a 4) case 0: m+; break; case 1: m+: switch(b 3) default: m+; case 0: m+: break; printf(“ d 11”, m); ( A) 1 ( B) 2 ( C) 3 ( D) 4 22 定义如下变量和数组: int i, x33=1,2, 3, 4, 5, 6, 7, 8, 9; 则下面语句的输出结果是 ( )。 for(i=0; i void main() int a20, *p4; int i, k=0; for(i=0; i #define N 8 void fun(
8、int*x, int i) *x=*(x+i)+1; main() int aN=1,2, 3, 4, 5, 6, 7, 8), i; fun(a, 2); for(i=0; i main() char a=a, b, c, d, f, g, *p; p=a; printf(“ c n”, *p+4); ( A) a ( B) b ( C) e ( D) f 34 下面函数的功能是 ( )。 SSS(S, t) char*s, *t; while(*s); while(*t) *(s+)=*(t+); return S; ( A)将字符串 S复制到字符串 t中 ( B)比较两个字符串的大小 (
9、 C)求字符串的长度 ( D)将字符串 t续 接到字符串 S中 35 下列程序的运行结果是 ( )。 #include void sub(int*S, int*y) static int m=4; *y=sm; m-; void main() int a=1, 2, 3, 4, 5, k, x; printf(“ n”); for(k=0; k int b=3: int fun(int*k) b=*k+b; return(b); main() int a10=1, 2, 3, 4, 5, 6, 7, 8, i; for(i=2; i1)层上至多有 2i-1个结点。得到第5层的结点数最多是 16
10、个。 10 【正确答案】 B 【试题解析】 数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。 11 【正确答案】 A 【试题解析】 源程序中可以有预处理命令 (include命令仅为其中的一种 )。 C语言中的变量可以在使用之前的任何位置进行定义。 C语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。一个 C语言源程序可以由一个或多
11、个源文件组成,但仅可以有一个 main函数 12 【正确答案】 A 【试题解析】 在 C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在 C语 言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到 “见名知义 ”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。 13 【正确答案】 A 【试题解析】 所谓常量是指在程序运行的过程中,其值不能被改变的量。在 C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项 B)中是以0开头,表示一个八
12、进制数,而八进制数的取值范围是 0 7,所以 “-080”错误;在C语言中 e后面的指数必须是整数,因此选项 C)和 D)也不正确。 14 【正确答案】 D 【试题解析】 C语言规定,变量的标识符只能由字母、数字和下划线 3种字符组成,且首字符必须为字母或下划线。在 C语言中大写字母和小写字母被认为是两个不同的字符。选项 A)定义的变量标识符 int和选项 B)定义的变量标识符 int与 C语言的关键字 int是不同的,是正确的变量标识。选项 C)定义的变量标识符 For与 C语言中的关键字 for是两个不同的标识符,所以选项 C)是正确的,而选项 D)包含有特殊字符 $,因而其不符合 C语言
13、的变量命名规定。 15 【正确答案】 B 【试题解析】 在 C语言中,函数定义是平行的 ,函数不能嵌套定义,即函数之间没有从属关系。虽然函数之间可以相互调用,但 main()函数不能被调用,选项A)错误; C程序从 main()函数开始执行,当 main()函数执行完毕时,整个程序就结束了。 C程序的执行必须从 main()函数开始,选项 C)选项错误;函数不能嵌套定义,选项 D)错误。 16 【正确答案】 A 【试题解析】 本题考查的是 if-else语句。第一个 if语句,先判断条件,发现 ab条件成立,执行下面的语句。第二个 if语句,先判断条件,发现 cd条件成立,执行下面的语句 x=
14、1。 17 【正确答案】 A 【试题解析】 条件表达式的格式为: “a?b: c”,它的功能是:当 a为真时,表达式的值等于 b的值;当 a为假时,表达式的值等于 c的值。因为条件运算符的结合方向为 “自右向左 ”。因此,当表达式中嵌套使用条件表达式时,应先计算右边的条件表达式,再计算左边的条件表达式。 题中应先汁算 “d c? d: b”的 “d c”关系表达式的值,因为 d=1c=2为真,所以取第一个表达式的值,即 d的值作为整个表达式的值。接着计算 “ab?a: d”, a=4b=3为假,取第二个表达式的值,即 d的值作为整个表达式的 值。 18 【正确答案】 C 【试题解析】 这道题主
15、要考查的是二维数组的有关知识。在两层 for循环语句中,累加上三角元素,所以程序执行的过程为t=b00+b01+b02+b11+b12+b22=8。 19 【正确答案】 A 【试题解析】 当从键盘输入 how are you时,由于 scanf输入函数的特点是遇到空格时结束读入字符,因此,该程书只将 how这 3个字符送到了字符数组 str中,并在其后自动加上结束符 “ 0”。 20 【正确答案】 A 【试题解析】 本题考查 printf函数的格式和逗号表达式。 printf函数在输出时,是根据格式说明符的个数输出的,如果函数中有多余的项将不予输出;如果有输出项少于格式说明符,则出错,不能输出
16、正确的结果。本题中逗号表达式 (x, y)只返回 y的值。此时格式说明的个数是 2,而输出项的个数是 3,因此 printf函数只输出前两项。 21 【正确答案】 B 【试题解析】 本题考查 switch语句。因为 a=8, a 4=0,所以执行 case 0后面的语句,将 m加 1,遇到 break语句跳出 SWitch。 22 【正确答案】 C 【试题解析】 本题主要考查二维数组的使用。题中利用 for循环来输出 x数组中的指定元素: 当 i=0时,输出 x02=3; 当 i=1时,输出 x11=5; 当 i=2时,输出 x20=7。 23 【正确答案】 C 【试题解析】 C语言允许用 t
17、ypedef说明一种新类型名,其一般形式为: typedef类型名标识符。 typedef语句的作用仅仅是使 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型。原有类型名依然有效。此题中,用使 tvpedef定义了新 的类型 OLD结构,所以 OLD为结构体类型。 24 【正确答案】 B 【试题解析】 二维数组的初始化有以下几种形式: 分行进行初始化; 不分行的初始化; 部分数组元素初始化; 省略第一维的定义,不省略第二维的定义。在选项 B)中赋值号左边定义了一个 2行 3列的二维数组,而右边用 3行 2列的数字进行赋初值。所以出现了边界的越界溢出错误。 25 【正确答案】 D
18、【试题解析】 本题考查函数调用的变量作用域。全局变量不在任何函数体内定义,作用域为整个文件;局部变量在函数体内定义,作用域仅为本次函数; static类型是静态变量,为了方便其他编译单元的引用,不能随意改变。 一个函数包含两部分:函数首和函数体,函数体包括花括号内的所有语句。 26 【正确答案】 B 【试题解析】 本题考查函数返回值。 fun函数的返回值类型为 int *类型,即函数返回一个指向整型变量的指针。 27 【正确答案】 D 【试题解析】 本题考查通过指针引用数组元素。崩指针引用数组有以下 3种形式: (p+n)与 (a十 n)表示数组元素 an的地址; *(p+n)与 *(a+n)
19、表示数组元素an; pn=*(p+n),都表示数组元素 an。选项 A)、 B)没有这种引用形式;选项 C), *(p+5)是引用数组的第 6个元素,而数组一共有 5个元素,出现越界;选项 D), *(a+2)引用数组的第 3个元素。 28 【正确答案】 C 【试题解析】 联合体的几个特点: 联合体所占用的内存空间为最长的成员所占用的空间; 各个成员分量全部是从低地址方向开始使用内存单元; 联合体中的空间在某一时刻只能保存某一个成员的数据; 联合体和结构体可以任意嵌套。 29 【正确答案】 C 【试题解析】 本题考查函数调用时的参 数传递。选项 C)中第一个参数的表达式不正确,因此不能得到正确
20、的结果。 30 【正确答案】 D 【试题解析】 本题考查指针的运用。通过 pt=&xy,将 pt指向 xy所占的内存地址,而 *pt是指针 pt所指向内存单元中的内容,即 200,所以最后 xy的值为230。 31 【正确答案】 B 【试题解析】 第一个 for循环,给数组 a的 20个元素分别赋值 0 19;第二个for循环,给数组 p赋值, p0=a1=1, p1=a2=2, p2=a5=5,p3=a10=10;第三个 for循环,将数组 p中元素的值进行累加,k=1+2+5+10=18。 32 【正确答案】 C 【试题解析】 函数 fun(int*x,int i)的功能是把数组元素 xi
21、的值加 1赋给 x0。所以在主函数中执行 fun(a,2)后,数组元数 a0的值等于 4。然后在 for循环语句中,输出数组 a中的前 4个元素的值,分别是 4,2,3, 4。 33 【正确答案】 C 【试题解析】 “*”号的优先级比 “+”的优先级高,所以先执行 “*p”;指针 p指向的是数组的首地址,因此 *p=a,再加 4得 e。 34 【正确答案】 D 【试题解析】 本题考查指针变量的运用。本题中的函数实质上是将字符串 t续接到字符串 s中。 35 【正确答案】 A 【试题解析】 本题考查的是静态变量以及函数的实参与形参之间的地址值传递。sub()函数中定义的变量 m是一个静态变量,系
22、统可为其分配固定的存储空间,重复使用时,变量的值保留;所以当 main()函数中的 for循环中语句 sub(a,&x);执行时, sub函数中 m的值依次是 4, 3, 2, 1, 0;因为变量 x进行的是地址值传递,所以最后依次输出的是数组 a的元素 a4、 a3、 a2、 a1、 a0。 36 【正确答案】 B 【试题解析】 本题考查指针变量的赋值操作。选项 A)是将指针 q1和 q2所指向的变量值相乘,然后赋给 k;选项 B)中, float型数据和指针型数据之间不能进行赋值运算;选项 C)中,是两个指针变量之间的赋值;选项 D)中,是两个指针型变量所指向的两个 int型数据相加。 3
23、7 【正确答案】 B 【试题解析】 本题考查的是联合体的有关概念。因为联合体是各个成员共享一段存储空间,此段存储空间最终存放的是最后存入的成员的值,所以题目中输出s age实际上输出了最后存入的 3000,因为 3000已经把原来存入的 s age(32)的值覆盖。 38 【正确答案】 D 【试题解析】 本题考查宏替换的规则。宏替换有两类:简单的字符替换和带参数的宏替换。使用宏应注意: 宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查; 为了区别程序中其他的标示符,宏名的定义通常用大写字母,但不是必须用大写; 双引号中出现的宏名不替换; 使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。 39 【正确答案】 B 【试题解析】 i=2时, fun(&a2)返回值是 b=b+a1=3+3=6,b=b+b=6+6=12; i=3时, fun(&a3)返回值是 b=b+a3=12+4=16, b=b+b=16+16=32。 40 【正确答案】 C 【试题解析】 数据块输入输出函数的调用形式为: fread(buffer,size,count,fp)。 fread函数参数说明: “buffer”是一个指针,对 ffead来说,它是读入数据的存放地址; “size”是要读写的字节数; “count”是要进行读写多少个 size字节的数据项; “fp”是指 文件型指针。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1