1、2010年 9月国家二级( C语言)笔试真题试卷及答案与解析 1 下列叙述中正确的是 ( )。 ( A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 ( B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 ( C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 ( D)上述三种说法都不对 2 下列叙述中正确的是 ( )。 ( A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化 ( B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化 ( C)在 栈中,栈底指针不变,栈中元素随栈项指针的变化而动态变化 ( D)上述三种说法都不对 3 软件测试的
2、目的是 ( )。 ( A)评估软件可靠性 ( B)发现并改正程序中的错误 ( C)改正程序中的错误 ( D)发现程序中的错误 4 下面描述中,不属于软件危机表现的是 ( )。 ( A)软件过程不规范 ( B)软件开发生产率低 ( C)软件质量难以控制 ( D)软件成本不断提高 5 软件生命周期是指 ( )。 ( A)软件产品从提出、实现、使用维护到停止使用退役的过程 ( B)软件从需求分 析、设计、实现到测试完成的过程 ( C)软件的开发过程 ( D)软件的运行维护过程 6 面向对象方法中,继承是指 ( )。 ( A)一组对象所具有的相似性质 ( B)一个对象具有另一个对象的性质 ( C)各对
3、象之间的共同性质 ( D)类之间共享属性和操作的机制 7 层次型、网状型和关系型数据库划分原则是 ( )。 ( A)记录长度 ( B)文件的大小 ( C)联系的复杂程度 ( D)数据之间的联系方式 8 一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计 算机之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对多 ( D)多对一 9 数据库设计中反映用户对数据要求的模式是 ( )。 ( A)内模式 ( B)概念模式 ( C)外模式 ( D)设计模式 10 有三个关系 R、 S和 T如下:则由关系 R和 S得到关系 T的操作是 ( )。 ( A)自然
4、连接 ( B)交 ( C)投影 ( D)并 11 以下关于结构化程序设计的叙述中正确的是 ( )。 ( A)一个结构化程序必须同时由顺序、分支、循环三种结构组成 ( B)结构化程序使用 goto语句会很便捷 ( C)在 C语言中,程序的模块化是利用函数实现的 ( D)由三种基本结构构成的程序只能解决小规模的问题 12 以下关于简单程序设计的步骤和顺序的说法中正确的是 ( )。 ( A)确定算法后,整理并写出文档,最后进行编码和上机调试 ( B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档 ( C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档 ( D)先写好
5、文档,再根据文档进行编码和上机调试,最后确定算法和数据结构 13 以下叙述中错误的是 ( )。 ( A) C程序在运行过程中所有计算都以二进制方式进行 ( B) C程序在运行过程中所有计算都以十进制方式进行 ( C)所有 C程序都需要编译链接无误后才能运行 ( D) C程序中整型变量只能存放整数,实型变量只能存放浮点数 14 有以下定义: int a; long b; double x, y;则以下选项中正确的表达式是 ( )。 ( A) a (int x-y) ( B) a=x!=y; ( C) (a*y) b ( D) y=x+y=x 15 以下选项中能表示合法常量的是 ( )。 ( A)
6、整数; 1, 200 ( B)实数: 1 5E2 0 ( C)字符斜杠: “ ” ( D)字符串: “ 007” 16 表达式 a+=a-=a=9的值是 ( )。 ( A) 9 ( B) -9 ( C) 1 8 ( D) 0 17 若变量已正确定义,在 if(W)printf(” dn”, k);中,以下不可替代 W的是( )。 ( A) a1)fun(x 2); printf(” d”, x); main( ) fun(7); printf(” n”); 程序运行后的输出结果是 ( )。 ( A) 1 3 7 ( B) 7 3 1 ( C) 7 3 ( D) 3 7 36 有以下程序 #in
7、clude int fun( ) static int x=1; x+=1; return x; main( ) int i, s=1; for(i=1; i #include main( ) int*a, *b, *c; a=b=c=(int*)malloc(sizeof(int); *a=1; *b=2, *c=3; a=b printf(” d, d, d n”, *a, *b, *c); 程序运行后的输出结果是 ( )。 ( A) 3, 3, 3 ( B) 2, 2, 3 ( C) 1, 2, 3 ( D) 1, 1, 3 38 有以下程序 #include main( ) int s
8、,t, A=10 ouble B=6; s=sizeof(A); t=sizeof(B); printf(” d, d n”, s, t); 在 VC6平台上编译运行 ,程序运行后的输出结果是 ( )。 ( A) 2,4 ( B) 1, 4 ( C) 4,8 ( D) 10, 6 39 若有以下语句 typedef struct S int g; char h; T; 以下叙述中正确的是 ( )。 ( A)可用 S定义结构体变量 ( B)可用 T定义结构体变量 ( C) S是 struct类型的变量 ( D) T是 struct S类型的变量 40 有以下程序 #include main( )
9、 short c=24; c=c_; printf(” dn”, c); 若要使程序的运行结果为 248,应在下划线处填入的是 ( )。 ( A) 2 ( B) |248 ( C) &0248 ( D) main( ) int a=200,b=010; print(” d dn”,a,b); 47 有以下程序 #include main( ) int x, y; scanf(” 2d 1d”, &x, &y); printf(” dn”, x+y); 程序运行时输入: 1234567,程序的运行结果是 _。 48 在 C语言中,当表达式值为 0时表示逻辑值 “假 ”,当表达式值为 _时表示逻辑
10、值 “真 ”。 49 有以下程序 #include main( ) int i, n=(0, 0, 0, 0, 0); for(i=1; i int*f(int*p, int*q); main( ) int m=1, n=2, *r=&m; r=f(r, &n); printf(” d n”, *r); int-f(int*P, int*q) (return(*p*q)?p: q; ) 程序运行后的输出结果是 _。 52 以下 fun函数的功能是在 N行 M列的整型二维数组中,选出一个最大值作为函数值返回,请填空。 (设 M, N已定义 ) int fun(int aNM) int i,j,
11、row=0, col=0; for(i=0; iarowcol)(row=i; col=j; ) return(_); 53 有以下程序 #include main( ) int n2l, ij; for(i=0; i main( ) int a10, *p, *S; for(p=a; p-a*s)s=p; printf(”max= d n”, _); 55 以下程序打开新文件 f txt,并调用字符输出函数将 a数组中的字符写入其中,请填空。 #include main( ) _*fp; char a5=(1, 2, 3, 4, 5), i; fp=fopen(”f.txt”, ”w”);
12、for(i=0; i0时循环继续,直到 y=0时循环结束,然后 y值减 1存入 y中,所以选 B。 22 【正确答案】 C 【试题解析】 本题中,语句 printf函数输出的是字符指针 s所指变量的 ASC 表对应值,即 ASC 表中值为 s0+2的字符。所以选 C。 23 【正确答案】 B 【试题解析】 字符数组长度为 7,因为 C语言中系统会在字符串末尾加入一个字符 0,而 x0=0的作用是将一个整数 0存入字符数组中, 系统会自动将整型数0转换成字符 0。所以输出为 7, 0。 24 【正确答案】 D 【试题解析】 本题考查函数返回值作参数,最初 n=1, f(n)=f(1)=2,将 f
13、(n)的结果代入第二个 f(n)中,即 f(f(n)=f(2)=4,所以 f(f(f(f(n)=f(4)=8。 25 【正确答案】 C 【试题解析】 A中 p是指针,没有初始化,且取 p的地址即类型为指向地址的地址,与输出参数类型不符。 B中指针 p没有初始化,且 p所指变量值不明。 D*p是整型变量, &k是整型变量的地址。所以选 C。 26 【正确答案】 C 27 【正确答案】 B 28 【正确答案】 D 【试题解析】 选项 A中,其他元素会自动以 0填充。选项 C中维数是常量表达式,故没错。 29 【正确答案】 D 【试题解析】 本题考查参数的按值传递。调用 f(r),函数创建一个整型指
14、针 p,然后将 r的值传给 p,即 p也指向 a, p=p+3,输出 p所指变量的值,即数组右移3位,即 a0+3的值 4,然后,函数结束,指针 p被销毁, r中的值不变还指向a0,所以输出为 4, 1。 30 【正确答案】 A 【试题解析】 对下标为偶数的元素进行降序排序,下标为奇数元素保持不变 31 【正确答案】 A 【试题解析】 strcmp(char*,char*),函数 strcmp用于比较两个字符串的长度,长者为大,若字符个数也一样,则从左至右依次比较相同位上的字符,字符大小按 ASC 表值计算,直到最后一个字符,若还相同,则两个字符串相等,返回值0。选项 A中 if(strcmp
15、(s2,s1)=0)ST,若 s2等于 s1,则返回值 0, 0等于 0,所以逻辑表达式 strcmp(s2,s1)=0为真执行 ST。 32 【正确答案】 C 【试题解析】 C项复制时没有复制结束串 “ 0”。 33 【正确答案】 B 【试题解析】 C语言中以字符 0作为字符串结束的标志。本题中字符串 a实际为 “ABCD”,函数 strcat将串 a和串 b连接所以选 B。 34 【正确答案】 C 【试题解析】 循环语句 while(pi),依次从字符串的首字符开始处理,若处理到了最后一个字符即 pi= 0则停止。 pi-1=pi-1=a+A;实现字符的替换。 35 【正确答案】 D 【试
16、题解析】 本程序主要考查递 归函数。 fun(7),首先将参数代入函数,因为 (7 2)1,所以执行 f(3),以此类推直到 f(1 5), (1 5 2)1,所以执行打印函数,此时 x值为 3,然后退出 f(1 5)返回 f(3),打印 x值即 7。所以选 D。 36 【正确答案】 B 【试题解析】 本题考查静态变量, C语言中静态变量的生存期是从程序的开始到结束。本题中静态变量 x,随着每次进入循环不断增长 5次,返回的值分别为 2、3、 4、 5、 6。所以 s=1+2+3+4+5+6=21。所以选 B。 37 【正确答案】 A 【试题解析】 本 题中,首先创建开辟一个动态内存,然后将地
17、址分别存入指针a、 b、 c中,即 a、 b、 c都指向相同的变量。分别给 a、 b、 C所指的变量赋值,最终 a、 b、 c所指的变量中的值为 3,最后打印 a、 b、 c所指的变量的值,即 3,3, 3。所以选 A。 38 【正确答案】 C 【试题解析】 函数 sizeof()的参数为 C中定义或者用户自定义的数据,作用是返回参数所指的数据类型所占用的内存空间的字节数。本题中 A是整型, B是双精浮点数,分别占 4个字节和 8个字节。所以选 C。 39 【正确答案】 B 【试题解析】 语句 typedef struct Sint g; char h; T的作用是用 T作为 struet S
18、int g; char h; )的简写,所以选 B。 40 【正确答案】 D 【试题解析】 124的 2进制值为 1111100,要输出为 248即 124*2,则 2进制值为11111000即右移 1位,所以选 D。 41 【正确答案】 1DCBA2345 【试题解析】 栈是限制仅在表的一端进行插入和删除的运算的线性表,通常称插入、删除的这一端为栈顶,另一端称为栈底。 42 【正确答案】 1 【试题解析 】 题干未说明线性表的元素是否已排序,若元素已降序排列,则用顺序查找法最少只需要找 1次。 43 【正确答案】 25 【试题解析】 在任意一棵二叉树中,度数为 0的结点 (即叶子结点 )总比
19、度为 2的结点多一个,因此该二叉树中叶子结点为 7+1=8, 8+17=25。 44 【正确答案】 结构化 【试题解析】 结构化程序可以分为三种基本结构, 即顺序结构、分支结构、循环结构。 45 【正确答案】 物理设计 【试题解析】 数据库设计的四个阶段包括:需求分析、概念设计、逻辑设计和物理设计四个阶 段。 46 【正确答案】 2008 【试题解析】 a值为 200, b是 8进制表示值为 8,以 10进制的形式输出 a、 b的值,由于中间没有分隔符,所以结果为 2008。 47 【正确答案】 15 【试题解析】 本题主要考查 scanf函数的格式输出。其中 2d代表输入的两个字符作为一个数
20、, ld代表输入的一个字符作为一个数,所以结果为x+y=12+3=15。 48 【正确答案】 非 0 【试题解析】 c语言中,在需要布尔类型值时, 0会被转换成值 false,非 0被转换成 true。 49 【 正确答案】 141340 【试题解析】 循环执行四次, i值从 1到 4。 Ni执行四次循环后的值分别是N1=N0*3+1=1, N2=N1*3+1=4, N3=N21*3+1=13, N4=N3*3+1=40。由于输出语句中没有分隔符,所以结果为 141340。 50 【正确答案】 i 【试题解析】 循环语句依次查找数组的元素,下标从 0到 N-1,当 xi的值小于k时,记录 i值
21、即此元素的下标,然后再将其余元素与新的 k元素比较,最终求得最小值。所以填 i。 51 【正确答 案】 2 【试题解析】 函数 f的返回值的类型是 int*,作用是返回两个 int*型指针所指变量中值大的那个指针的。本题中定义了一个 int*型指针 r并置初值 &m,即指针 r指向 m。 r=f(r, &n),由于 m的值小于 n值,所以 f函数返回值为 &n,所以输出为 2,即 n值。 52 【正确答案】 arowcol 【试题解析】 嵌套循环,依次遍历二维数组的所有元素,从 a00开始,先按行,后按列, arowcol先取 a00,若后面的元素比他大,则将此 i、 j值存入row、 col
22、中,即 记录元素中当前最大值。循环结束返回 arowcol,即数组最大值。 53 【正确答案】 3 【试题解析】 初始化后: N0=0, n1=0 i=0, j=0, n0=n0+1=1 j=1, n1=n0+1=1=2 i=1, j=0, n0=n1+1=3 j=1, n1=n1+1=3 54 【正确答案】 *s 【试题解析】 首先依次输入 10个数,存入数组 a中。循环语句依次查找数组的元素,当 *P的值大于 *s时, s=p即找 到当前数组中最大值,然后再将其余元素与新的 *S元素比较,最终求得最大值。所以填 *s。 55 【正确答案】 File 【试题解析】 欲操作文件,所以需要创建一个文件指针,所以应填 File。