1、国家二级( C语言)笔试模拟试卷 25及答案与解析 1 已知一棵二叉树前序遍历和中序遍历分别为 ABDEGCFH和 DBGEACHF,则该二叉树的后序遍历为 ( )。 ( A) GEDHFBCA ( B) DGEBHFCA ( C) ABCDEFGH ( D) ACBFEDHG 2 树是结点的集合,它的根结点数目是 ( )。 ( A)有且只有 1 ( B) 1或多于 1 ( C) 0或 1 ( D)至少 2 3 如果进栈序列为 e1, e2, e3, e4,则可能的出栈序列是 ( )。 ( A) e3, e1, e4, e2 ( B) e2, e4, e3, e1 ( C) e3, e4, e
2、1, e2 ( D)任意顺序 4 在设计程序时,应采纳的原则之一是 ( )。 ( A)不限制 goto语句的使用 ( B)减少或取消注解行 ( C)程序越短越好 ( D)程序结构应有助于读者理解 5 程序设计语言的基本成分是数据成分、运算成分、控制成分和 ( )。 ( A)对象成分 ( B)变量成分 ( C)语句成分 ( D)传输成分 6 下列叙述中,不属于软件需求规格说明书的作用的是 ( )。 ( A)便于用户、开发人员相互理解和交 流 ( B)反映用户问题的结构,可以作为软件开发工作的基础和依据 ( C)作为确认测试和验收的依据 ( D)便于开发人员进行需求分析 7 下列不属于软件工程三个
3、要素的是 ( )。 ( A)工具 ( B)过程 ( C)方法、 ( D)环境 8 单个用户使用的数据视图的描述称为 ( )。 ( A)外模式 ( B)概念模式 ( C)内模式 ( D)存储模式 9 将 E-R图转换到关系模式时,实体与联系都可以表示成 ( )。 ( A)属性 ( B)关系 ( C)键 ( D)域 10 SQL语言又称为 ( )。 ( A)结构化定义语言 ( B)结构化控制语言 ( C)结构化查询语言 ( D)结构化操纵语言 11 下列叙述中正确的是 ( )。 ( A) C语言编译时不检查语法 ( B) C语言的子程序有过程和函数两种 ( C) C语言的函数可以嵌套定义 ( D)
4、 C语言的函数可以嵌套调用 12 在 C语言中,退格符是 ( )。 ( A) n ( B) t ( C) f ( D) b 13 以下叙述中正确的是 ( )。 ( A)构成 C程序的基本单位是函数 ( B)可以在一个函数中 定义另一个函数 ( C) main函数必须放在其他函数之前 ( D)所有被调用函数一定要在调用之前进行定义 14 在 C程序中,判断逻辑值时,分别用 ( )表示逻辑值 “真 ”、 “假 ”。 ( A)非 0 0 ( B) 0 1 ( C)非 0非 0 ( D) 1 1 15 在 C语言中,运算对象必须是整型数的运算符是 ( )。 ( A) % ( B) ( C) %和 (
5、D) * 16 字符型数据在机器中用 ASCII码表示,字符 “5”和 “7”在机器中表示为 ( )。 ( A) 10100011和 01110111 ( B) 01000101和 01100011 ( C) 00110101和 00110111 ( D) 01100101和 01100111 17 若已定义: int a=25, b=14, c=19;执行以下三目运算符 (?: )所构成的语句: a =25 printf(“%dn“, d=a b?(ac ? a: C) :(B) ); ( A) 5 ( B) 4 ( C) 6 ( D)不确定 22 有以下程序段 int n=0, p; do
6、 scanf(“%d”, printf(“%c,“, b+); printf(“%dn“, b-A) ; 程序运行后的输出结果是 ( A) 3,2 ( B) 50,2 ( C) 2,2 ( D) 2,50 24 以下叙述中错误的是 ( A) C语言中对二进制文件的防问速度比文本文件快 ( B) C语言中,随机文件以二进制代码形式存储数据 ( C)语句 FILEfp;定义了一个名为 fp的文件指针 ( D) C语言中的文本文件以 ASCII码形式存储数据 25 当把以下四个表达式用作 if语句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是 ( A) k%2 ( B) k%2=1 (
7、 C) (k%2)!=0 ( D) !k%2=1 26 有以下程序 float fun(int x, int y) returnx+ y); main() int a=2,b=5,c=8; printf(“%3.ofn“,fun(int)fun(a+ c, B) ,a-C) ); 程序运行后的输出结果是 ( A)编译出错 ( B) 9 ( C) 21 ( D) 9 27 有以下程序 void fun(char *c, int D) *c-*c+1;d=d+1; printf(“%c, %c,“,*c, D) ;main() char a=A, b=a; fun( printf(“%c, %cn
8、“, a, B) ; 程序运行后的输出结果是 ( A) B, a, B, a ( B) a, B, a, B ( C) A, b, A, b ( D) b, B, A, b 28 已定义 c为字符型变量,则下列语句中正确的是 ( A) c=97; ( B) c=“97“; ( C) c=97; ( D) c=“a“; 29 设有定义语句 int x6=(2,4,6,8,5,7.), *p=x, i; 要求依次输出 x数组 6个元素中的值,不能完成此操作的语句是 ( A) for(i=0; i 6; i+) printf(“%2d”,* (p+); ( B) for(i=0; i 6; i+)
9、printf(“%2d”, *(p+ i); ( C) for(i=0; i 6; i+) printf(“%2d”, *p+); ( D) for(i=0; i 6; i+) printf(“%2d”, *(p)+); 30 以下选项中不能正确把 c1定义成结构体变量的是 ( A) typedef struct int red: int green: int blue; COLOR; COLOR c1; ( B) struct color c1 int red int green: int blue; ; ( C) struct color int red , int green : int
10、 blue : )cl; ( D) struct int red; int green; int blue c1 ; 31 以下程序中函数 reverse 的功能是将 a所指数组中的内容进行逆置。 void reverse(int a , int n) int i, t; for(i=0;i n/2;i+) t=ai; ai =an-1-i;an-1-i=t; main() int b10=1,2,3,4,5,6,7,8,9,10; int i, s=0; reverse(b,8); for(i=6;i10;i+) s+=bi; printf(“%dn“, s); 程序运行后的输出结果是 (
11、A) 22 ( B) 10 ( C) 34 ( D) 30 32 有以下程序 main() char str 10=“China“, Beijing“,*p=str; printf(“%sn“,p+10); 程序运行后的输出结果是 ( A) China ( B) Beijing ( C) ng ( D) ing 33 有以下程序 main ( ) char s=“n123“; printf ( “%d, %dn“, strlen (s) , sizeof (s); 执行后输出结果是 ( A)赋初值的字符串有错 ( B) 6, 7 ( C) 5, 6 ( D) 6, 6 34 以下程序的输出结果
12、是 main () char x=040; printf ( “%on“ ,x 1); ( A) 100 ( B) 80 ( C) 64 ( D) 32 35 有以下程序 :#include studio. h #define F(X, Y) (X)*(Y)main ( ) int a=3, b=4; printf(“%dn“, F(a+, b+); ( A) 12 ( B) 15 ( C) 16 ( D) 20 36 有以下程序 main ( ) int a3 3,*p, i; p= for (i=0;i 9; i+) pi =i; for(i=0;i 3;i+) printf (“%d“
13、,a1 i ); 程序运行后的输出结果是 ( A) 12 ( B) 123 ( C) 234 ( D) 345 37 若有下面的说明这定义 :struct test int m1; char m2; float m3; union uu char u15; int u2 2; ua; myaa; 则 sizeof (struct test )的值是 ( A) 12 ( B) 16 ( C) 14 ( D) 9 38 程序中对 fun 函数有如下说明 void *fun(); 此说明的含义是 ( A) fun 函数无返回值 ( B) fun 函数的返回值可以是任意的数据类型 ( C) fun 函
14、数的返回值是无值型的指针类型 ( D)指针 fun 指向一个函数,该函数无返回值 39 有以下程序 prt (int *m, int n) int i; for (i=0; i n; i+) m i+;main () int a=1,2,3,4,5,i; prta, 5); for i=0;i 5;i+) printf (“%d “,ai); 程序运行后输出结果是 ( A) 1,2,3,4,5, ( B) 2,3,4,5,6, ( C) 3,4,5,6,7, ( D) 2,3,4,5,1 40 有以下程序 main() int a=1,2,3,4,5,6,7,8,9,0),*p; for(p=
15、a; p a+10; p+) printf(“%d,”, *p); 程序运行后的输出结果是 ( A) 1,2,3,4,5,6,7,8,9,0, ( B) 2,3,4,5,6,7,8,9,10,1, ( C) 0,1,2,3,4,5,6,7,8,9, ( D) 1,1,1,1,1,1,1,1,1,1, 41 有以下程序 #include stdio. h main() char c1=1, c2=2; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); 当运行时输入: a回车 后,以下叙述正确的是 ( A)变量 c1被赋予字符 a, c2被
16、赋予回车符 ( B)程序将等待用户输入第 2个字符 ( C)变量 c1被赋予字符 a, c2中仍是原有字符 2 ( D)变量 c1被赋予字符 a, c2中将无确定值 42 有以下程序 main() int c=35; printf(“%dn”, c printf (“%dn“, x/y ( A) 3 ( B) 2 ( C) 1 ( D) 0 47 有以下等程序 #include string. h void f(char *s, char *t) char k; k=*s; *s=*t; *t=k; s+; t-; if(*s) f(s, t);main () char stt10 =“abc
17、defg“, *p; p=str+strlen (str)/2+1; f (p,p-2); print f ( “%sn“, str); ( A) abcdefg ( B) gfedcba ( C) gbcdefa ( D) abedcfg 48 有以下程序 main ( ) int num4 4=1,2,3,4,5,6,7,8, 9,10,11,12, 13,14,15,16,i, j; for (i=0;i 4; i+) for(j=1; j =i; j+) printf (“%4c“, ); for(j=_;j 4;j+) printf ( “%4d, num i j ); printf
18、 ( “n“ ); 若要按下形式输出数组右上半三角 1 2 3 4 6 7 8 11 12 16 ( A) i-1 ( B) i ( C) i+1 ( D) 4-i 49 有以下程序 main () unsigned char a, b, c; a=0x3; b=a 0x8; c=b 1; printf (“%d% dn“ ,b, C) ; 程序运行后的输出结果是 ( A) -11 12 ( B) -19 ( C) 12 24 ( D) 11 22 50 若以下定义 :struct link int data; struck link *next; a, b, c, *p, *q; 且变量a和
19、 b之间已有如下图所示的链表结构: 指针p指向变量 a, q指向变量 c。则能够把 c插入到 a和 b之间并形成新的链表的语句组是 ( A) a.next=c; c.next=b; ( B) p.next=q; q.next=p.next; ( C) p- next=(*q).next=&b; 51 数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数据独立性最高的阶段是 _。 52 按照逻辑结构分类,数据结构可分为线性结构和非线性结构,队列属于_。 53 按数据流的类型,结构化设计方法有两种设计策略,它们是变换分析设计和_。 54 数据库系统在其内部分为三级模式,即概念模式
20、、内模式和外模式。其中,_是用户的数据视图,也就是用户所见到的数据模式。 55 在关系模型中 ,把数据看成一个二维表,每一个二维表称为一个 _。 56 以下程序运行后的输出结果是 _。 main() int x=0210; printf(“%Xn“, x); 57 以下程序运行后的输出结果是 _。 main() int a=1, b=2, c=3; if(c=A) printf(“%dn“, C) ; else printf(“%dn“, B) ; 58 以下程序 运行后的输出结果是 _。 main() int a=3, b=4, c=5, t=99; i(b a & a C) t=a; a=
21、c; c=t; if(a c & b C) t=b; b=a; a=t; printf(“%d%d%dn“, a, b, c) ; 59 以下程序运行后的输出结果是 _。 main() int i, m=0, n=0, k=0; for(i=9; i =11; i+) switch(i/10) case 0: m+; n+; break; case 10: n+; break; default: k+; n+; printf(“%d %d%dn“, m, n, k); 60 执行以下程序后,输出 #号的个数是 _。 #include stdio.h main() int i, j; for (
22、i=1; i 5; i+) for(j=2; j =i; j+) putchar(#); 61 以下程序运行后的输出结果是 _。 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); 62 若有以下程序 int f(int x, int y) return(y-x)*x; main() int a=3, b=4, c=5, d; d=f(f(3, 4), f(3, 5); ptintf(
23、“%dn“, D) ; 执行后输出结果是 _。 63 以卜函数 sstrcat()的功能是实现宁符串的连接,即将 t所指字符串复制到 s所指字符串的尾部。例如: s所指字符串为 abcd, t所指字符申为 efgh,函数调用后 s所指字符串为 abcdefgh。请填空。 #include string.h void sstrcat(char *s, char *t) int n; n=strlen(s); while(*(s+n)= )s+; t+; 64 以下程序的输出结果是 _。 main() int x; 0; sub(&x, 8, 1); printf(“%dn“, x); sub(i
24、nt *a, int n, int k) if(k =n) sub(a, n/2, 2*k); *a+=k; 65 以下程序运行后的输出结果是 _。 #include strlng.h main() char ch=“abc“, x34; int i; for(i=0; i 3; i+) strcpy(xi, ch); for(i=0; i 3; i+) printf(“%s“, &xii); printf(“n“); 66 以下程序用业统计文件十字符个数。请填空。 #include “stdio.h“ main() FTLE *fp; long num=OL; if(fp=fopen(“fn
25、ame.dat“, “r“)=NUlL) pirntf(“Open errorn“); exit(0); while( ) fgetc(fp); num+; printf(“num=%1dn“, num-1); fclose(fp); 67 下面程序的运行结果是 _。 int f( int a, int n) if(n 1) return a0+f(&a1, n-1); else return a0; main () int aa3=1, 2 3, s; s=f(&aa0, 3); printf(“%dn“, s); 68 以下程序中给指针 p分配三个 double型动态内存单元,请填空。 #
26、 include stdio.h main () dOuble *p; p=(double*)malloc( ); p0=1.5; p1=2.5; p2=3.5 printf(“%f%f%fn“, p0, p1, p2); 69 已有定义如下: struct node int data; struct node *next; *p; 以下语句调用 malloc函数,使指针 p指向一个具有 stmct node类型的动态存储空间。 请填空。 p=(struct node *)malloc( ); 70 若 fp已正确定义为 个文件指针, d1.dd为二进制文件,请填空,以便为 “读 ”而打开此文
27、件 : fp=fopen(_);。 国家二级( C语言)笔试模拟试卷 25答案与解析 1 【正确答案】 B 【试题解析】 利用前序遍历和中序遍历可以确定二叉树的结构,具体步骤如下: 前序遍历的第一个结点 A为树的根结点。 中序遍历中 A左边的结点为 A的左子树, A右边的结点为 A的右子树。 分别对 A的左右子树进行上述两步处理,直到每个结点都找到正确的位置。 2 【正确答案】 A 【试题解析】 树是一个或多个结点组成的有限集合,其中一个特定的结点称为根,其余结点分为若干个 不相交的集合。每个集合同时又是一棵树。树有且只有 1个根结点。 3 【正确答案】 B 【试题解析】 由栈 “后进先出 ”
28、的特点可知: A) 中 e1不可能比 e2先出; C) 中 e3不可能比 e4先出,且 e1不可能比 e2先出; D) 中栈是先进后出的,所以不可能是任意顺序; B) 中出栈过程如图所示:4 【正确答案】 D 【试题解析】 滥用 goto语句将破坏程序结构,可读性差,因此 A) 不对;注解行有利于对程序的理解,不应减少或取消, B) 不对;程序的长短要依实际情况而论,而不是越短越好, C) 不对。 5 【正确答案】 D 【试题解析】 程序设计语言的基本成分有四种,其中数据成分用于描述程序中的数据;运算成分用于描述程序中所需的运算;控制成分用于构造程序的逻辑控制结构;传输成分用于定义数据传输成分
29、。 6 【正确答案】 D 【试题解析】 软件需求规格说明书 (SRS, Software Requirement Specification)是需求分析阶段的最后成果,是软件开发中的重要文档之一。它有以下几个方面的作用: 便于用户、开发人员相互理解和交流。 反映用户问题的结构,可以作为 软件开发工作的基础和依据。 作为确认测试和验收的依据。 7 【正确答案】 D 【试题解析】 软件工程包括三个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。 8 【正确答案】 A 【试题解析】 选项 A) 正确,外模式是用户
30、的数据视图,也就是用户所见到的数据模式;选项 B) 不正确,全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;选项 C) 不正确,物理存储数据视图的描述称 为内模式,即数据库在物理存储方面的描述;选项 D) 不正确,存储模式即为内模式。 9 【正确答案】 B 【试题解析】 数据库逻辑设计的主要工作是将 E-R图转换成指定 RDBMS中的关系模式。从 E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系, E-R图中属性也可以转换成关系的属性。实体集也可以转换成关系。 10 【正确答案】 C 【试题解析】 结构化查询语言 (Structured Query La
31、nguage,简称 SQL)是集数据定义、数据操作和数据控制功能于一体的数据库语言 。 11 【正确答案】 D 【试题解析】 C语言相对其他高级语言来说,放宽了语法检查,但并不是不检查语法; C语言的程序是由函数构成的;函数不能嵌套定义,但可以嵌套调用。 12 【正确答案】 D 【试题解析】 n是回车换行符; t横向跳到下一制表位置; f是换页符; b是退格符。 13 【正确答案】 A 【试题解析】 C程序是由函数构成的, A) 正确; main函数可以放在其他函数之前,也可以放在其他函数之后, C) 错误;函数可以嵌套调用,但不能嵌套定义,B) 错误;被调用函数可以在调用之后定义,但需要在调
32、用前声明, D) 错误。 14 【正确答案】 A 【试题解析】 在 C程序中,判断逻辑值时,用非 0表示 “真 ”,用 0表示 “假 ”。计算逻辑表达式时,逻辑表达式的值为 “真 ”是用 1表示的,若逻辑表达式的值为“假 ”,则用 0表示。 15 【正确答案】 A 【试题解析】 在 C语言中, “%”运算符两侧的 运算数必须是整型。 16 【正确答案】 C 【试题解析】 字符 “5”和 “7”的 ASCII码值分别为 53和 55,其二进制形式分别为00110101和 00110111。 17 【正确答案】 C 【试题解析】 此题综合考查多种运算符的使用:首先计算表达式 a =25&b- =2
33、&c的值,很容易看出 b- =2的值为假,因此表达式为假;根据三目运算的特点,由于表达式为假,所以应该执行 printf(“#a=%d, b=%d, c=%dn“,a, b, c);这时 a的值依然为 25, b的值经过 b-运算后变为 13,而 c的值仍为19。 18 【正确答案】 A 【试题解析】 x+y的值为实型 7.200000,经强制类型转化成整型 7。 a%3的值为1, 1*7的值为 7, 7%2的值为 1。 1/4的值为 0,而非 0.25,再与实型 x相加,最终得结果为 2.500000。 19 【正确答案】 C 【试题解析】 以 %mf或 %mlf格式输出浮点数时,如果指定宽
34、度大于实际数据宽度,则按指定宽度输出,且多余数补以空格;如果指定宽度小于实际数据宽度,浮点数的整数部分将以实际位数输出,小数部分按指定位数输出,且对 数据做四舍五入处理。而输出整型数时,没有宽度限制的整数按原数输出;在宽度限制小于数的实际位数时,宽度说明无效,按数的实际位数输出。 20 【正确答案】 D 【试题解析】 由于只有 4个元音字符,所以 v1=4, v0和 v2在循环 11次中都要加 1,共循环 12次,由于 v0的初值为 1,所以 v0=13, v2=12。 21 【正确答案】 C 【试题解析】 本题考核的知识点是条件表达式的使用在 C语言中问号表达式(如: ac?a:c; )的计
35、算规则为:如果 ac为真,那么表达式的值为 a的值;否则表达式的值 为 C的值。本题中的 printf()函数中的输出表达式,首先计算括号内的条件表达式,它的值为 6(ac?a:c中 ac即 56为假故该表达式的值为 c的值即为6),然后再计算外面表达式 (等价于 ab?6:b)的值,同理可得该表达式的值为 6,将值 6赋值给 d,因此最后输出该表达式的值为 6,所以, 4个选项中 C为所选。 22 【正确答案】 D 【试题解析】 本题考查的知识点是 do-while循环结构循环执行条件的判断使用 do -while语句必须注意以下几点: 先执行语句,后判断表达式。所以,无论一开 始表达式的值
36、为 “真 ”还是 “假 ”,循环体中的语句至少执行一次,这一点与 while不同, 如果 do-while语句循环体部分是由多个语句组成,则必须用花括号括起来,使其形成复合语句。 C语言中的 dowhile语句是在表达式 “真 ”时重复执行循环体。 在本题中,循环执行判断条件为 while后面括号里的表达式即p!=12345&n后,键盘缓冲区被输入的实际上是两个字符: a和 n。 故选项 A的说法是正确的。 42 【正确答案】 C 【试题解析】 本题考查的是对位与运算符 &的理解。位与运算是将两个运算分量看作两个二进制数,然后对两个二进制数的相应位进行与运算,若同时为 1则结果相应位为 1,否
37、则结果相应位为 0。因此,当两个运算分量相同时,它们的相应位肯定也相同,即不同为 1就同为 0。所以得到的结果和运算分量也相同。所以,4个选项中选项 C)符合题意。 43 【正确答案】 D 【试题解析】 本题考查的是编译预处理的一些基本概念。在 C语言中,凡是以“#”号开头的行,都称为 “编译预 处理 ”命令行。它们可以根据需要出现在程序的任何一行的开始部位,选项 A是错误的。一条预处理命令至少得占一行,选项 B是错误的。宏名可以是任何合法的 C语言标识符,只不过通常习惯用大写字母,因此选项 C是错误的。宏定义是 “编译预处理 ”命令,它们的替换过程在编译时期就已经完成了,因此不会占有程序运行的时间,选项 D是正确的。 44 【正确答案】 C 【试题解析】 本题考查的共用体的概念。共用体变量中的所有成员共享一段公共存储区,所以共用体变量所占内存字节数与其成员中占字节数最多的那个成员相等本题定义的共用体中 成员 C所占的内存最多,因此选项 B是正确的。由于共用体变量中的所有成员共享存储空间,因此变量中的所有成员的首地址相同,选项 A是正确的。同结构体变量一样,共用体类型的变量可以作为实参进行传递,也可以传送共用体变量的地址,选项 D也是正确的。在内存中,实数与整数的存放形式完全不一样,共用体的成员共用的是同一块内存,而不是同一个数值,因此选项 C是错误的。 45 【正确答案】 D
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1