1、国家二级( C语言)笔试模拟试卷 215 及答案与解析 1 将 E-R图转换到关系模式时,实体与联系都可以表示成 ( A) e3, e1, e4, e2 ( B) e2, e4, e3, e1 ( C) e3, e4, e1, e2 ( D)任意顺序 2 下列选项中不属于结构化程序设计方法的是 ( A)自顶向下 ( B)逐步求精 ( C)模块化 ( D)可复用 3 C语言中用于结构化程序设计的 3种基本结构是 _。 ( A)顺序结构、选择结构、循环结构 ( B) if、 switch、 break ( C) for、 while、 do-while ( D) if、 for、 continue
2、 4 数据的存储结构是指 ( )。 ( A)数据所占的存储空间 ( B)数据的逻辑结构在计算机的存放形式 ( C)数据在计算机中的顺序存储方式 ( D)存储在计算机外存中的数据 5 关系数据库管理系统能实现的专门关系运算包括 ( )。 ( A)排序、索引、统计 ( B)选择、投影、连接 ( C)关联、更新、排序 ( D)显示、打印、制表 6 下列选项中不属于算法的特性的是 ( A)确定性 ( B)可行性 ( C)有输出 ( D)无穷性 7 假设线性表的长度为 n,则在最坏情况下,冒泡排序需要的比较次数为 ( A) log2n ( B) n2 ( C) O(n1.5) ( D) n(n-1)/2
3、 8 用树形结构来表示实体之间联系的模型称为 ( )。 ( A)关系模型 ( B)层次模型 ( C)网状模型 ( D)数据模型 9 C语言中文件的存取方式 ( ) ( A)只能顺序存取 ( B)只能随机存取 (或直接存取 ) ( C)可以顺序存取,也可随机存取 ( D)只能从文件的开头进行 存取 10 如果一个算法显式地调用自己则称为 ( ) ( A)直接递归 ( B)自用递归 ( C)间接递归 ( D)外用递归 11 以下定义语句中正确的是 ( A) int a=b=0; ( B) char A=65+1, b=b; ( C) float a=1, *b= 执行 (m=ab)x=12; if
4、(!A) x-; else x=5; if(C) x=3; else x=4; ( A) 11 ( B) 4 ( C) 12 ( D) 3 16 C语言源程序名的后缀是 ( )。 ( A) .exe ( B) .c ( C) .obj ( D) .cp 17 设 a、 b和 c都是 int 型变量,且 a=3、 b=4、 c=5,则下面的表达式中,值为 0的表达式是 _。 ( A) a printf(“%d,%dn“,-a,+b); ( A) 1, 2 ( B) 1, 3 ( C) 0, 2 ( D) 0, 3 21 阅读以下程序 #include main( ) int case; floa
5、t printF; printf(“请输入 2个数: ”); scanf(“ d f”, if(x=0|x=1) return(3); -f(x-2); return y; main() int z; z=f(3); printf(“%dn“,z); 程序的运行结果是 ( A) 0 ( B) 9 ( C) 6 ( D) 8 24 若有定义 “int b8, *p=b; ”,则 p+6表示 ( )。 ( A)数组元素 b6的值 ( B)数组元素 b6的地址 ( C)数组元素 b7的地址 ( D)数组元素 b0的 0值加上 6 25 有以下程序: main() int x,y,z; x=y=1;
6、z=x+,y+,+y; printf(“%d,%d,%d,%dn“,x,y,z); 程序运行后的输出结果是 ( )。 ( A) 2,3,3 ( B) 2,3,2 ( C) 2,3,1 ( D) 2,2,1 26 函数 rewind 的作用是 ( A)使文件位置指针重新返回文件的开始位置 ( B)将文件位置指针指向文件中所要求的特定位置 ( C)使文件位置指针指向文件的末尾 ( D)使文件位置指针自动移至下一个字符位置 27 有如下定义: struct person char name9;int age; struct person class10=“John“,17,“paul“,19,“Ma
7、ry“,18,“Adam“,16; 根据上述定义,能输出字母M的语句是 ( )。 ( A) printf(“%cn“,class3.name); ( B) printf(“%cn“,class3.name1); ( C) printf(“%cn“,class2.name1); ( D) printf(“%cn“,class2.name0); 28 下列程序的输出结果是 _。 main() char *s=“12134211“; int v4=0,0,0,0,k,i; for(k=0;sk;k+) switch(sk) case 1:i=0; case 2:i=1; case 3:i=2; ca
8、se 4:i=3; vii+; for(k=O;k main() int k=4, m=3, p; p=func(k, m); printf(“ d“, p); p=func(k, m): printf(“ n“, p); ) int fun c(a, b) static int m=0, i=2; i+=m+1: m=i+a+b: return(m); 51 下列程序执行后输出的结果是【 】。 main() int arr10,i,k=0); fot(i=0;i 10;i+)arti=i; for(i=1:i 4;i+) k+=arri+i; printf(“%dn“,k); 52 以下程序
9、的运行结果是【 】。 #include stdio.h main() int a=1, b=2, c; c=max(a, b); printf(“max is%dn“, c); max(int x, int y) int z; z=(x y)? x:y; return(z); 53 以下程序运行后的输出结果是【 】。 main() char a=“Language“,b=“Programe“; char, p1, *p2; int k; p1=a,p2=b; for(k=0; k =7; k+) if*(p1+k)=*(p2+k)printf(“%c“, *(p1+k); 54 若想通过以下输
10、入语句使 a=5.0, b=4, c=3,则输入数据的形式应该是【 】。 int b,c; float a; scanf(“%f,%d,c=%d“, 57 有以下程序,程序执行后,输出结果是【 】 #include stdio.h void fun(int*A) a0=a1; main() int a10=10,9,8,7,6,5,4,3,2,1,i; for(i=2;i 1=0;i-) fun( for(i=0;i 10;i+) printf(“%d,ai); printf(“n“); 国家二级( C语言)笔试模拟试卷 215 答案与解析 1 【正确答案】 B 【试题解析】 由栈 “后进先出
11、 ”的特点可知: A)中 e1 不可能比 e2 先出, C)中 e1 不可能比 e2 先出, D)中栈是先进后出的,所以不可能是任意顺序。 B)中出栈过程如下图所示: 2 【正确答案】 D 【试题解析】 结构化程序设计方法的主要原则是:自顶向下,逐步求精,模块化,限制使用 goto语句。可复用性是指软件元素不加修改和稍加修改可在不同的软件开发过程中重复使用的性质。软件可复用性是软件工程追求的目标之一,是提高软件生产效率的最主要方法。面向对象的程序设计具 有可复用性的优点。 3 【正确答案】 A 【试题解析】 本题主要考查结构化程序设计的基本结构。结构化程序设计有 3种基本结构:顺序结构、选择结
12、构、循环结构。 4 【正确答案】 B 【试题解析】 数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式。数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。 5 【正确答案】 B 【试题解析】 关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接运算。 6 【正确答案】 D 【试题解析】 一个 算法必须具有五个特性,即有穷性、确定性、可行性,有输入、有输出其中有穷性是指算法必须总是在执行完有穷步之后结束,而且每步都在有穷时间内完成。 D选项不是算法的特性。 7 【正确答案】 D 【试题解析】 假设线性表的长度为 n,则在最坏情况下,冒泡排序要经过 n/2遍
13、的从前往后的扫描和 n/2遍的从后往前的扫描,需要的比较次数为 n(n-1)/2。 8 【正确答案】 B 【试题解析】 在层次模型中,实体之间的联系是用树结构来表示的,其中实体集(记录型 )是树中的结点,而树中各结点之间的连线表示它们 之间的关系。 9 【正确答案】 D 10 【正确答案】 A 11 【正确答案】 B 【试题解析】 本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间要用逗号隔开,因此选项 A)和 D)错误。在选项 C)中,变量 c是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量 b,故选项 C)错误。 12 【正确答案】 D 【试题解析】 软件需求规
14、格说明书有以下几个方面的作用: 便于用户、开发人员进行理解和交流。 反映出用户问题的结构,可以作为软件开发工作的基础和 依据。 作为确认测试和验收的依据。 13 【正确答案】 B 【试题解析】 本题考查逻辑与运算的运算规则。其规则是 :当运算符前后两个条件表达式都满足时 ,其最终结果才为真。当发现第一个表达式的值为假 ,计算机将不再执行后面表达式的运算。本题中 ,由于前一个表达式的值为 “假 “,所以 ,后面的表达式不再进行运算 ,因而 n 的值保持不变 ,仍为 2。 14 【正确答案】 B 【试题解析】 算术运算符的运算规则是:从右到左的原则。所以表达式中先计算a=a-a*a的值是 -90,
15、再计算 a=a+a的值是 -180。 15 【正确答案】 B 【试题解析】 本题考查 if else语句。第一个 if 语句,先判断条件,发现 a=0,则 !a 成立,执行下列的语句, x-,得 x=11;第二个 if语句,判断条件,发现c=0,则条件不成立,执行下列的 else语句,得 x=4。 16 【正确答案】 B 【试题解析】 C语言源程序的后缀为 .c;经过编译得到的目标程序文件的后缀为 .obj;再将目标程序文件链接后得到可执行文件的后缀为 .exe。故本题应该选择B。 17 【正确答案】 D 【试题解析】 选项 A: aelse k=0;。 19 【正确答案】 D 【试题解析】
16、1966年, Bohra和 Jacopini 提出了以下三种基本结构,用这三种基本结构作为表示一个良好算法的基本单元: 1、顺序结构; 2、选择结构: 3、循环结构。 20 【正确答案】 D 【试题解析】 本题主要考查自加 (+)、自减 (-)运算符的使用。 “+i,-i”在使用 i之前,先使 i的值加 1或者减 1,然后再使用 i此时的值参与运算; “i+, i-”是在使用 i参与表达式运算之后,再使 i的值加 1或者减 1。本题中 -a和 +b 是先 执行a减 1和 b 加 1操作,再输出表达式的值。 21 【正确答案】 A 【试题解析】 标识符不能与 c编译系统已经预定义的、具有特殊用途
17、的保留标识符 (即关键字 )同名,否则程序在编译时会出现错误。题目源程序中使用了已经预定义的关键字 car,所以将出现错误。 22 【正确答案】 A 【试题解析】 循环开始前,指针 t和 s都指向字符串的起始位置,然后通过while循环判断 t指向的位置是否为空,同时让 t向右移动一位。 while循环结束时, t自减 1,此时 t指向的位置是字符串的结束标志, 0,处,故 t-s的值是字符串的长度,并不包括结束标志。 23 【正确答案】 C 【试题解析】 函数 int f(int x)是一个递归函数调用 ,当 x的值等于 0或 1时 ,函数值等于 3,其他情况下 y=x2-f(x-2),所以
18、在主函数中执行语句 z=f(3)时 ,y=3*3-f(3-2)=9-f(1)=9-3=6。 24 【正确答案】 B 【试题解析】 指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中 p+6指的是将指针向后移动了 6个存储单元即指向 b6,存放的是 b6的地址。 25 【正确答案】 C 【试题解析】 z=x+是先把 x的值 1赋给 z,所以 z=1,然后再把 x加 1赋给 x,x=2, +y后 y又加 1,所以 y=3。 26 【正确答案】 A 【试题解析】 函数 rewind的功能是将文件指针重新指向一个流的开头。 用法如下 :in
19、t rewind(FILE *stream);并且无返值。 27 【正确答案】 D 【试题解析】 本题的关键是弄清楚给结构体数组赋初值的问题。初始值将按数组的各个元素在内存中的存放次序逐个地赋 给各元素。结构体数组的各个元素在内存中的存放次序是: class0.name,class0.age,class1.name,class1.age, ,由此可知,包含字符 “M”的字符串 “Mary”赋值给了元素 class2.name,则与字符 “M”相对应的表达式是 class2.name0。 28 【正确答案】 B 29 【正确答案】 A 30 【正确答案】 D 31 【正确答案】 D 32 【正确
20、答案】 D 【试题解析】 *p=适应性维护是指为了使软件适应变化 ,而去修改软件的过程 ;完善性维护是指为了 满足用户对软件提出的新功能与性能要求 ,需要修改或再次开发软件 ,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性 ;预防性维护是为了提高软件的可维护性、可靠性等 ,为以后的进一步改进软件打下良好基础。 44 【正确答案】 交换排序。 【试题解析】 常用的排序方法有交换排序、插入排序和选择排序。其中交换排序包括冒泡排序和快速排序,插入排序包括简单插入排序和希尔排序,选择排序包括直接选择排序和堆排序。 45 【正确答案】 概要 /初步 46 【正确答案】 256 【试题解析
21、】 本题 考查对存储器按字节进行编址的规则及其寻址范围 (2n),其中n 为存储器芯片中地址线的条数。 47 【正确答案】 aj ai 【试题解析】 本题考查排序算法,题目中通过双循环嵌套来实现,外层循环跳出待排序的元素,内层循环具体实现 ai到 ak-2之间偶数下标元素的排序,每次将最小的放在 ai中。所以空中填 aj ai。 48 【正确答案】 关系 49 【正确答案】 printf(“a=%d,b=%d”,a,b); 【试题解析】 printf是格式化输出函数。 50 【正确答案】 1021。 【试题解析】 本题主要考查变量和静态局部变量。函数的存储范围是从定义它的位置开始,而静态局部变
22、量的生存期为整个程序的运行期间,作用域为定义它的函数范围。 51 【正确答案】 12 【试题解析】 本题的第一个 for循环用于给数组 arr赋初值,第二个 for循环用于求和运算。由于第二个 for循环初始值为 1,而循环条件为 i 4,所以求的是arr1到 arr3及 i的和,所以输出结果为 12。 52 【正确答案】 max is 2 【试题解析】 函数通过参数来传 递数据是单向的,只能由实参传给形参而不能由形参传给实参,但是可以通过函数的返回值将函数中的数据带回。注意:函数的两种调用方式及函数调用的语法要求。 53 【正确答案】 gae 【试题解析】 本题定义了两个字符串数组 a, b
23、,字符型指针变量 p1和 p2,且分别指向字符串数组 a和 b,抽打 for循环,当 if(*(p1+k)=*(p2+k)条件为真,执行输出 *(p1+k)对应的字符。即当 k=0 时, *(p1+k)对应的字符串数组 a中的字符L, *(p2+k)对应的字符串数组 b 中字符 P,因此 if(*(p1+k)=*(p2+k)条件为假,不执行 printf语句,依此类推,将字符串数组 a和 b 中对应位置上的字符 比较,如果对应位置上的字符相同,则输出该字符。 54 【正确答案】 5.0,4,c=3 【试题解析】 scanf(格式控制,地址表列 ),如果在 “格式控制 ”字符串中除了格式说明以外
24、还有其他字符,则在输入数据时应输入与这些字符相同的字符。所以此题中输入数据的形式是 5.0,4,c=3。 55 【正确答案】 a= a+b 【试题解析】 a+=b与 a= a+b 等价,作用是把变量 a的值加 b 后再赋给变量 a。 56 【正确答案】 int* *z 【试题解析】 函数希望通过形参 z带回结果,形参 z必须是指针类型的。由于返回整型结果,所以第一处填 int *;函数返回前必须先把结果通过形参 z间接引用传回,第二处应填 *z。 57 【正确答案】 7777654321 【试题解析】 本题主要考查函数的调用,第 次调用把数组元素 a2的地址赋给a,此时 a1即是原数组的 a3等于 7,再执行赋值语句 a0=a1,则 a0和 a1中的值都是 7,然后再把这个值返回给 a2同样地第二次调用的时候函数返回值也是 7,第三次调用返回值也是 7,因此数组的前 4个元素,即对 a0、 a1、 a2和a3的值都为 7,当执行第二个 for循环时输出数组中所有元素的值 7777654321。