1、国家二级( C语言)笔试模拟试卷 52及答案与解析 1 下列关于栈的叙述正确的是 ( ) ( A)栈是非线性结构 ( B)栈是一种树状结构 ( C)栈具有先进先出的特征 ( D)栈具有后进先出的特征 2 若某二叉树的前序遍历访问顺序是 abdgcefh,中序遍历访问顺序是 dgbaechf,则其后序遍历的结点访问顺序是 ( ) ( A) bdgcefha ( B) gdbecfha ( C) bdgaechf ( D) gdbehfca 3 根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结 构分成( ) ( A)动态结构和静态结构 ( B)紧凑结构和非紧凑结构 ( C)线性结构和
2、非线性结构 ( D)内部结构和外部结构 4 下面对对象概念描述错误的是 ( ) ( A)任何对象都必须有继承性 ( B)对象是属性和方法的封装体 ( C)对象间的通讯靠消息传递 ( D)操作是对象的动态属性 5 软件开发的结构化生命周期方法将软件生命周期划分成 ( ) ( A)定义、开发、运行维护 ( B)设计阶段、编程阶段、测试阶段 ( C)总体设计、详细设计、编程调试 ( D)需求分析、功能定 义、系统设计 6 下列工具中为需求分析常用工具的是 ( ) ( A) PAD ( B) PFD ( C) N S ( D) DFD 7 开发大型软件时,产生困难的根本原因是 ( ) ( A)大系统的
3、复杂性 ( B)人员知识不足 ( C)客观世界千变万化 ( D)时间紧、任务重 8 下述关于数据库系统的叙述中正确的是 ( ) ( A)数据库系统减少了数据冗余 ( B)数据库系统避免了一切冗余 ( C)数据库系统中数据的一致性是指数据类型一致 ( D)数据库系统比文件系统能管理更多的数据 9 单个用户使用的数据视图的描述称为 ( ) ( A)外模式 ( B)概念模式 ( C)内模式 ( D)存储模式 10 关系数据库管理系统能实现的专门关系运算包括 ( ) ( A)排序,索引、统计 ( B)选择、投影、连接 ( C)关联、更新、排序 ( D)显示、打印、制表 11 已有定义语句: int x
4、 3, y 0, z 0;,则值为 0的表达式是 ( ) ( A) x ( A) 15 ( B) 14 ( C)不确定 ( D) 0 22 有以下程序: main() int x8=8, 7, 6, 5, 0, 0, *s; s=x+3; printf(“%dn“,s2); 程序运行后的输出结果是 _。 ( A)随机值 ( B) 0 ( C) 5 ( D) 6 23 有以下程序段: int x=3; do printf(“%d“, x-=2); while(!(-x); 其输出结果是 _。 ( A) 1 ( B) 3 0 ( C) 1-2 ( D)死循环 24 若变量 c为 char类型,能正
5、确判断出 c为小写字母的表达式是 _。 ( A) a =c =z ( B) (c =a)|(c =z) ( C) (a =c) and(z =c) ( D) (c =a) 26 以下所列的各函数首部中,正确的是 _。 ( A) void play(var a: Integer,var b: Integer) ( B) void play(int a,b) ( C) void play(int a,int b) ( D) Sub play(a as integer,b as integer) 27 在 C语言中,引用数组元素时,其数组下标的数据类型允许是 _。 ( A)整型常量 ( B)整型表达
6、式 ( C)整型常量或整型表达式 ( D)任何类型的表达式 28 以下程序的输出结果是 _。 fun(int x,int y,int z) z=x*x+y*y; main() int a=31; fun(5,2,a); printf(“%d“,a); ( A) 0 ( B) 29 ( C) 31 ( D)无定值 29 下列程序段的输出结果是 _。 void fun(int *x,int *y) printf(“%d%d“,*x, *y); *x=3; *y=4; main() int x=1, y=2; fun( printf(“%d%d“, x, y); ( A) 2 1 4 3 ( B)
7、1 2 1 2 ( C) 1 2 3 4 ( D) 2 1 1 2 30 对于下面的程序 #include stdio.h #include string.h char *scmp(char*s1,char*s2) if(strcmp(s1,s2) 0)return(s1); else return(s2); main() int i: char string20, sb320; for(i=0; i 3; i+)gets(stri); strcpy(string,scmp(str0, str1); strcpy(string,scmp(string,str21); printf(“%sn“,
8、string); 若运行时依次输入 abcd、 abba和 abc三个字符串,则输出结果为 _。 ( A) abcd ( B) abba ( C) abc ( D) abca 31 下列程序的输出结果是 _。 main() char a10=9,8,7,6,5,4,3,2,1,0,*p=a+5; printf(“%d“, *-p); ( A)非法 ( B) a4的地址 ( C) 5 ( D) 3 32 对下面的程序进行 编译与连接生成可执行文件 c.exe,并在 DOS命令提示符下输入: cI said“I love China“! 程序代码如下: main(int argc,char*arg
9、v) printf(“%d“,argC) ; 其输出结果为 _。 ( A) 4 ( B) 5 ( C) 6 ( D) 7 33 下列程序的运行结果是 _。 void fun(int *a,int *b) int *k; k=a;a=b; b=k; main() int a=3,b=6,*x= ( A) 6 3 ( B) 3 6 ( C)编译出错 ( D) 0 34 若有定义 int*p3;,则以下叙述中正确的是 _。 ( A)定义了一个基类型为 int的指针变量 p,该变量有三个指针 ( B)定义了一个指针数组 p,该数组含有三个元素,每个元素都是基类型为 int的指针 ( C)定义了一个名为
10、 *p的 整型数组,该数组含有三个 int类型元素 ( D)定义了一个可指向二维数组的指针变量 p,所指一维数组应具有三个 int类型元素 35 有以下程序: void swap1(int *a,int *b) int *c=a; s=b, b=c; void swap2(int *a int *b) int c=*a; *a=*b, *b=c; main() int a=10, b=15; swap 1( a=10,b=15; swap2( printf(“%d, %d“, a, b) ; 其输出结果为 _。 ( A) 15,10,10,15 ( B) 15,10,15,10 ( C) 10
11、,15,10,15 ( D) 10,15,15,10 36 当调用函数时,实参是一个数组名,则向函数传送的是 _。 ( A)数组的长度 ( B)数组的首地址 ( C)数组每一个元素的地址 ( D)数组每个元素中的值 37 下面的程序输出结果是 _。 #define r 16 #if r=16 void p(int a) printf(“%x“,a) ; #else void p(int a) printf(“%d“,a) ; #endif main() p(32); ( A) 32 ( B) 20 ( C)编译时错误 ( D)运行时错误 38 设有以下声明语句 struct ex int x;
12、 float y; char z; example; 则下面的叙述中不正确的是 _。 ( A) struct是结构体类型的关键字 ( B) example是结构体类型名 ( C) x, y, z都是结构体成员名 ( D) struct ex是结构体类型 39 以下只有在使用时才为该类型变量分配内存的存储类说明是 _。 ( A) auto和 static ( B) auto和 register ( C) register和 static ( D) extern和 register 40 下面程序运行后的输出结果是 _。 fut(int, *s,int P23) *s=p11; main() in
13、t a23=1, 3, 5, 7, 9, 11, *p; p=(int *)malloc(sizeof(int); fut(i 3; i+)pi=ai*(i+1); for(i=0; i 3;i+)k+=pi*2; printf(“%dn“,k); ( A) 20 ( B) 21 ( C) 22 ( D) 23 42 当执行下面的程序时,其输出结果为 _。 union st int a; char b; main() union st s; char *p=(char*) ( A) 1 ( B) 2 ( C) 3 ( D)不确定 43 当执行下面的程序时,如果输入 ABC,则输出结果是 _。
14、#include “stdio.h“ #include “string.h“ main() char ss10=“12345“; gets(ss);strcat(ss, “6789“); printf(“%sn“, ss); ( A) ABC6789 ( B) ABC67 ( C) 12345ABC6 ( D) ABC456789 44 main(int argc, char*argv) while(-argc 0)printf(“%s“,argvargc); printf(“n“); 假 定以上程序经编译和连接后生成可执行文件 PROG EXE,如果在此可执行文件所在目录的 DOS提示符下键
15、入 PROG ABCDEFGHIJKL,则输出结果为 _。 ( A) ABCDEFG ( B) IJHL ( C) ABCDEFGHIJKL ( D) IJKLABCDEFGH 45 设 char型变量 x中的值为 10100111,则表达式 (2+x)(-3)的值为 _。 ( A) 10101001 ( B) 10101000 ( C) 11111101 ( D) 1010101 46 以下程序的输出结果是 _。 long fun(int n) long s; if(n=1|n=2)s=2; else s=n-fun(n-1); relum s; main() printf(“%ldnt“,
16、 fun(3); ( A) 1 ( B) 2 ( C) 3 ( D) 4 47 以下程序试图把从终端输入的字符输出到名为 abc txt的文件中,直到从终端读入字符串 #号时结束输入和输出操作,但程序有错 #include stdio h main() FILE*fout; char ch; fout=fopen(abc txt,w); ch=fgetc(stdin); while(ch!=#) fputc(ch,four); ch=fgetc(stdin); fclose(fout); 出错的原因是 _。 ( A)函数 fopen调用形式错误 ( B)输入文件没有关闭 ( C)函数 fget
17、c调用形式错误 ( D)文件指针 stdin没有定义 48 以下程序的输出结果是 _。 #define SQR(X) X*X main() int a=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf(“%dn“, a) ; ( A) 16 ( B) 2 ( C) 9 ( D) 1 49 假定建立了以下链表结构,指针 p、 q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是 _。( A) free(q); p- next=q- next; ( B) (*p).next=(*q).next; free(q); ( C) q=(*q)
18、.next; (*p).next=q; free(q); ( D) q=q- next; p- next=q; p=p- next; free(p); 50 以下程序的输出结果是 _。 main() int x=05; char z=a; printf(“%dn“, (x ( A) 0 ( B) 1 ( C) 2 ( D) 3 51 在运算过程中,能够使空表与非空表的运算统一的结构是【 】。 52 软件工程研究的内容主要包括:【 】技术和软件工程管理。 53 与结构化需求分析方法相对应的是【 】方法。 54 关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、【 】和自定义完整性。 5
19、5 数据模型按不同的应用层次分为三种类型,它们是【 】数据模型、逻辑数据模型和物理数据模型。 56 假定变量 x为 int类型,请以最简单的形式写出与逻辑表达式 !x等价的 C语言关系表达式【 】。 57 下列程序段的输出结果是【 】。 int n=c; switch(n+) default: printf(“error“); break; case a: case A: case b: case B: printf(“good“); break; case c: case C: printf(“pass“); case d: case D: printf(“warn“); 58 若输入 te
20、ar、 test、 arj,则下列程序的运行结果为【 】。 main() char*strl20, *str220, *str320; char swap(); scanf(“%s“, str1); scanf(“%s“, str2); scanf(“%s“, str3); if (strcmp(str1, str2) 0)swap(str1, str2); if (strcmp(str1, str3) 0)swap(str1, str3); if (strcmp(str2, str3) 0)swap(str2, str3); printf(“%s %s %sn“, str1, str2, s
21、tr3); char swap(p1, p2) char*p1, *p2; char*p20; strcpy(p, p1); strcpy(p1, p2); strcpy(p2, p); 59 下面程序的输出结果是【 】。 char b=“ABCD“; main() char *chp; for (chp=b; *chp ; chp +=2) printf(“%s“, chp); printf(“n“); 60 若有以下定 义和语句, sizeof(a)的值是【 】, sizeof(a.share)的值是【 】。 struct date int day; int month; int year
22、; union int share1; float share2; share; a; 61 下列程序的功能是将 2个数从小到大输出。 main() float a, b,【 】; scanf(【 】, ,由于 scmp(string,str2)返回 string的值abba,再拷贝到字符串数组 string中,所以本题输出 abba。 31 【正确答案】 C 【试题解析】 本题中 char*p=a+5;即相当于 p=,表示数组 p的三个元素都是指针变量,且每个元素都是基类型为 int的指针。 35 【正确答案】 D 【试题解析】 C语言规定,实参变量对形参变量的数据传递是 “值传递 ”,只由
23、实参传给形参,而不能由形参传回来给实参。在内函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题中 swap1()函数中,虽然改变了形参指针的值,但实参指针的值并没 有改变,所以执行第一个 printf后应输出 10,15, swap2()函数实现了交换两个变量 a和 b的值,因此执行第二个 printf后输出交换后的值15,10,所以本题答案为 D。 36 【正确答案】 B 【试题解析】 当调用函数时,实参是一个数组名,则向函数传送的是数组的首地址,函数中的形参可定义成以下三种形式; 形参定义成数组; 形参定义成可变长数组; 形参定义为指针变量。 37 【正确答案】 B 【试题解析
24、】 “#define r 16”的作用是指定用标识符 r来代替 16,因此程序编 译时只编译 #if部分,故程序运行时,打印输出十六进制的 32,即 20。 38 【正确答案】 B 【试题解析】 example是结构体变量名。 39 【正确答案】 B 【试题解析】 extern、 register、 static、 auto分别是定义外部变量、寄存器变量、静态变量、自动变量,其中,自动变量和寄存器变量属于动态存储,调用时临时分配单元而静态变量和外部变量属于静态存储,在整个程序运行时都存在。 40 【正确答案】 C 【试题解析】 本题 a23定义为一个具有两面行三列 的元素的数组, malloc
25、()函数的作用是开辟了一个长度为 sizeof(int)的内存区, p为指向整型数据的指针变量,程序调用 fut()函数,将第一行第一列对应的元素值赋给 *s,由于数组中第一行第一列对应的元素为 9,所以本题输出值 9。 41 【正确答案】 B 【试题解析】 按照程序的流程走一遍,可以得到 p0=0, p1=2, p3=6:执行三次 k+=pi*2,相当于 k=5+0*2+2*2+6*2=21。 42 【正确答案】 C 【试题解析】 共用体类型结构的特点是使几个不 同的变量共占同一段内存,但在每一瞬时只能存放其中一种,而不是同时存放几种,共用体变量中起作用的成员是最后一次存放的成员,在存入一个
26、新的成员后原有的成员就失去作用。因此本题起作用的是成员 b的值,所以程序打印输出 3。 43 【正确答案】 A 【试题解析】 sdtrcat(str1, str2)合并字符串函数的作用是把 str2所指字符串的内容连接到 str1字符串的后面,自动删去 str1原来串中的 0。为了进行这项操作,要求 str1所指的字符串后面有足够的空间来容纳 str2所指字符串中的内容。函数值为 str1所指第一个字符的地址。 44 【正确答案】 C 【试题解析】 本题主函数带有两个参数,一个 int型变量 argc,另一个是 char型的一维一级指针数组 argv。当主函数被执行时,系统自动将根据命令行的情
27、况,分别给主函数的两个参数赋值。 Argc中存放命令行中命令字和参数的总和的个数, argv用来存放命令行中命令字和所有参数的字符串的,并规定 avgv0存放命令字字符串, argv1用来存放第一个参数的字符串, argv2用来存放第 2个参数的字符串,依此类推。题中 argc的值是 2,执行完 -argc后为 1,输出argv1,此数组存在第一个参数的字符串 ABCDEFGHIJKL。 45 【正确答案】 D 【试题解析】 异或运算符 ()的运算规则是:参加运算的两个相应位同号,则结果为 0(假 );异号则为 1(真 )。取反运算符 ( )的运算规则是:对一个二进制数按位取反,即将 0变为
28、1,1变为 0。本题 ( 3)是对 3(二进制形式为 00000011)按位取反即11111100。 表达式 (2+x)(-3)的值就等价于 (00000010+10100111)1111100,结果为01010101。 46 【正确答案】 A 【试题解析】 这是一个递归函数。递归的结束条件是, n=1或者 n=2。按照程用顷序,即可得出本题结果为 1。 47 【正确答案】 A 【试题解析】 本题考查的是文件的打开函数 fopen(),其调用方式通常为FLIE*fp; fp=fopen(文件名,使用文件方式 );,如: fp=fopen(“abc txt“,“w“);表示要打开名字为 abc
29、txt的文件,使用文件方式写入。 fopen函数带回指向 abc.txt文件的指针并赋给 fp,即 fp指向文件 abc txt。 48 【 正确答案】 B 【试题解析】 C语言在预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。在做这题时,也不妨运用置换法。得到a/=k+m*k+m/k+m*k+m=16/7=2。注: a为整型,所以在做除法时,自动取整。 49 【正确答案】 B 【试题解析】 选项 A的错误在于,先已经把 q结点给释放,无法再进行余下语句了:选项 C和 D的错误在于因为有了 q=(*q).next做了赋值,则 free(q)释放了原来 q后面的一个结点。 5
30、0 【正确答案】 B 【试题解析】 “&”是 位运算符表示按位与运算, “&”是逻辑运算符当其两边的表达式都为真时返回真值。关系表达式 (x&1)&(z z), (x&1)为真, (z z)也为真,两者相与,自然也为真,以整型输出,则输出 1。 51 【正确答案】 循环链表 【试题解析】 在链表的运算过程中,采用链接方式即循环链表的结构把空表的与非空表的运算统一起来。循环链表具有两个特点: 在循环链表中增加了一个表头结点,其数据域为任意或根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。 循 环链表中最后一个结点的指针不是空,而是指向表头结点。 52 【正确答案
31、】 软件开发 【试题解析】 基于软件工程的目标,软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。软件开发技术包括;软件开发方法学、开发过程、开发工具和软件工程环境,其主体内容是软件开发方法学。软件工程管理包括;软件管理学、软件工程经济学、软件心理学等内容。 53 【正确答案】 结构化设计 【试题解析】 与结构化需求分析方法相对应的是结构化设计方法。结构化设计就是采用最佳的可能方法设计系统的各个组成 部分以及各个成分之间的内部联系的技术。也就是说,结构化设计是这样一个过程,它决定用哪些方法把哪些部分联系起来,才能解决好某个具体且有清楚定义的问题。 54 【正确答案】 参照完
32、整性 【试题解析】 关系模型允许定义三类数据约束,它们是实体完整性、参照完整性以及用户定义的完整性约束,其中前两种完整性约束由关系数据库系统自动支持。 实体完整性约束要求关系的主键中属性值不能为空,这是数据库完整性的最基本要求,因为主键是惟一决定元组的,如为空则其准一性就成为不可能的了。参照完整性约束是关系之间相关联的基本约 束,它不允许关系引用不存在的元组:即在关系中的外键要么是所关联关系中实际存在的元组,要么是空值。 自定义完整性是针对具体数据环境与应用环境由用户具体设置的约束,它反映了具体应用中数据的语义要求。 55 【正确答案】 概念 【试题解析】 数据模型按不同的应用层次分为三种类型,它们是概念数据模型、逻辑数据模型和物理数据模型。概念数据模型简称概念模型,是一种面向客观世界、面向用户的模型;它与具体的数据库管理系统无关。 56 【正确答案】 x=0 57 【正确答案】 passwarn 58 【正确答案】 arj tear test 59 【正确答案】 ABCDCD 60 【正确答案】 10 4 61 【正确答案】 t “%f %f“ a=b