1、国家二级( C语言)笔试模拟试卷 201及答案与解析 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) exe ( B) C ( C) obj ( D) cp 12 若函数中有定义语句: int a;,则 ( )。 ( A)系统将自动给 a赋
4、初值 0 ( B)这时 a中的值是和随机数 ( C)系统将自动给 a赋初值 -1 ( D)这 a中无任何值 13 以下选项中,合法的一组 C语言数值常量是 ( )。 ( A) 028 5e-3 -0xf ( B) 12 OXa23 4 5e0 ( C) 177 4c1 5 Oabc ( D) Ox8A 10, 000 3 e5 14 下列语句组中,不正确的是 ( )。 ( A) char*s; s=“Olympic”; ( B) char s=“Olympic”; ( C) char*s; s=“Olympic”; ( D) char s=“Olympic”; 15 若在定义语句: int a
5、, b, C, *p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是 ( )。 ( A) scanf(“ d”, a, b, C; ( B) scallf(“ d d d”, a, b, C; ( C) scanf(“ d”, p); ( D) scanf(“ d”, &p); 16 有以下程序,其中 u表示按无符号整数输出 ( )。 main() unsigned int x=0xFFFF; *x的初值为十六进制数 * printf(“ u n”, X); 程序运行后的输出结果是 ( )。 ( A) -1 ( B) 65535 ( C) 32767 ( D) 0xFFFF 17
6、设变量 x和 Y均已正确定义并赋值,以下 if语句中,在编译时将产生错误信息的是 ( )。 ( A) if(x+); ( B) if(xy&y!=0); ( C) if(xy)x-else y+; ( D) if(y100)break; ( B) for(; ); ( C) int k=10000; dok+; while(k10000); ( D) int s=36; while(s)-s; 21 在 printf的格式字符中, e格式字符的作用是 ( )。 ( A) 以十六进制无符号形式输出整数 ( B)以带符号的十进制形式输出整数 ( C)以指数形式输出实数 ( D)以字符形式输出,且只
7、输出一个字符 22 以下选项中正确的语句组是 ( )。 ( A) char s; s=“HELLO!”; ( B) char*s; s=“HELLO!”); ( C) char s10; s=“HELLO!”; ( D) char*s; s=“HELLO!”; 23 字符串 “ ”ABCDEF “ ”的长度是 ( )。 ( A) 11 ( B) 10 ( C) 5 ( D) 3 24 下列说法正确的是 ( A) int(*def)10; -def指向一个指针,该指针指向 10个整型变量构成的数组 ( B) int*(*gh10); -gh指向一个指针,该指针指向 10个整型变量构成的数组 (
8、C) jnt*(*gh10); -gh是一个指针,指向由 10个指向整型变量的指针构成的数组 ( D) A, C均正确 25 若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是( )。 ( A)函数的实参和其对应的形参共占同一存储单元 ( B)形参只是形式上的 存在,不占用具体存储单元 ( C)同名的实参和形参占同一存储单元 ( D)函数的形参和实参分别占用不同的存储单元 26 设有如下定义: struct sk int m; float x; data,*q; 若要使 q指向 data中的 m域,正确的赋值语句是 ( )。 ( A) q=&data m; ( B) *q=dat
9、a m; ( C) q=(stmct sk*)&data m; ( D) q=(struct sk*)data m; 27 有以下程序: int fl(doub1e a) return a*a; intf2(int x, inty) double a, b; a=n(x); b=f1(y); return a+b: main() doublew; w=f2(2 1, 4 0); 程序执行后,变量 w的值是 ( )。 ( A) 20 21 ( B) 20 ( C) 20 0 ( D) 0 28 若语句 “t=fun(fun(x, y, a), (a+b, a+C, x+y+z); ”对 fun函
10、数的调用正确,则fun函数的形参个数为 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 29 设 X为整型变量, n=14, n的地址为 4000; m=6, m的地址为 2000;执行语句x=&n后的结果为 ( )。 ( A) 14 ( B) 6 ( C) 2000 ( D) 4000 30 若有说明 int m34: 3, 9, 7, 8 5, (*q)4;和赋值语句 q=m;,则中0 struct tt int x; struct tt *y; *p; struct tt a4=120, a+1, 15, a+2, 30, a+3, 17, a; main() int
11、i; p=a; for(i=1; ix); p=P-y; 程序的运行结果是 ( )。 ( A) 20 30。 ( B) 30, 17 ( C) 15 30 ( D) 20, 15, 36 有以下程序: #include main() FILE*fp; int a10=1, 2, 3, 0, 0, i; fp=fopen(“d2 dat”,“wb”); fwrite(a, sizeof(int), 5, fp); fwrite(a, sizeof(int), 5, fp); fclose(fp); fp=fopen(“d2 dat”,“rb”); fread(a,sizeof(int), 1 0
12、, fp); fclose(fp); for(i=0; i void main() int f,f1, f2, i; f1=0; f2=1; printf(“ d d”, f1, f2); for(i: 3; i main() int x=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,*p4, i; for(i=0; i void swap(int*a, int*b) int*t; t=a; a=b; b=t; main() int i=3,j=5, *p=&i, *q=&j; swap(p, q); printf(“ d d n”
13、, *p, *q); 51 以下程序的输出结果是 _。 #include int fun(intx) static int t=0; return(t+=x); main() int s, i; for(i=1; i0) str2*i=stri; str2*i-1=*; i-; printf(“ s n”, str); main() char str40; scanf(“ s n”, str); insert(str); 53 以下程序的功能是:通过函数 func输入字符并统计输入字符的个数。输入时用字符 作为输入结束标志。请填空。 #include long_; *函数说明语句 * main
14、() long n; n=func(); printf(“n= ldha”,n); longfunc() long m; for(m=0; getchar()!=; _); return m; 国家二级( C语言)笔试模拟试卷 201答案与解析 1 【正确答案】 D 【试题解析】 栈实际也是线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除的这端为栈顶,另一端为栈底。队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。 2 【正确答案】 C 【试题解析】 由于后序遍历的最后一个元素为 E,所以 E为根结点,
15、所以它的前序遍历的首个元素为 E,故排除 A和 D选项。由于中序遍历中,元素 B在元素根结点 E的后面,所以 B为二叉树的右子树,并且该二叉树右子树只有一个元素,所以前序遍历的最后一个元素应为 B,故选项 C为正确选项,即该二叉树的前序遍历序列是 EACDB。 3 【正确答案】 B 【试题解析】 数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。 4 【正确答案】 B 【试题解 析】 程序设计语言仅仅使用顺序、选择和重复 (循环 )三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。遵循程序结构化的设计原则,按结构化程序设计方法设计出的程序易于理解、使
16、用和维护;可以提高编程工作的效率,降低软件的开发成本。 5 【正确答案】 C 【试题解析】 软件调试主要采用以下三种方法: 强行排错法:作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。 回溯法:该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定最先发现 “症状 ”的位置。 原因排除法:原因排除法是通过演绎和归纳,以及二分法来实现。 6 【正确答案】 B 【试题解析】 耦合可以分为下列几种,它们之间的耦合度由高到低排列: 内容耦合 若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。 公共耦合 若一组模块都访问同一全局数据结构,则称为公
17、共耦合。 外部耦合 若一组模块都访问同一全局数据项,则称为外部耦合。 控制耦合 若一模块明显地把开关量、名字等信息送入另模块,控制另一模块的功能,则称为控制耦合。 标记耦合 若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。 数据耦合 若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。 非直接耦合 若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。 7 【正确答案】 D 【试题解析】 面向对象设计方法与面向过程设
18、计方法有本质的不同,其基本原理是: 使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:标识惟一性、多态性、封装性、模块独立性、继承和多态性好。 8 【正确答案】 C 【试题解析】 逻辑结构设计的任务:概念结构是各种数据模型的共同基础,为了能够用某一 DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模型,这正是数据库逻辑结构设计所要完成的任务。它包括从 E-R图向关系模式转换和逻辑模式规范化及调整、实现。 9 【正确答案】 D 【试题解析】 根据二叉树的性质:二叉树第 i(i1)层上至多有 2i-1个结点。得 到第5层的结点数最多是 16个。 10 【正确答案】 B 【
19、试题解析】 数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性:提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。 11 【正确答案】 B 【试题解析】 由 C语言构成的指令序列称为 c源程序,源程序文件的后缀为“ c”。源程序经过 c编译程序编译生成后缀为 “ obj”的二进制文件 (称为目标文件 ),然后由称为 “连接程序 ”(Link)的软件把目标文件与 C语言提供的各种库函数连接起来,生成后缀为 “ exe
20、”的可执行文件。 12 【正确答案】 B 【试题解析】 本题考查变量赋值基本概念。在声明一个变量后,如果未显式的对其进行赋值,则它的值是一个随机值。 13 【正确答案】 B 【试题解析】 八进制数开头必须是数字 “0”,其数字包括 0 7,而在选项 A中,028是错误的。浮点数据的指数形式表示常量中, C语言规定字母 e或 E之前必须要有数字,且 e或 E之后 的指数必须为整数,而选项 C中 4e1 5是错误的。在选项 D中,整型数据 10, 000的表示形式是错误的。所以本题的答案为选项 B。 14 【正确答案】 C 【试题解析】 s是一个字符指针变量, s代表其地址, C将字符串赋给地址,
21、因此选项 C错误。 15 【正确答案】 C 【试题解析】 程序语句 int a, b, c, *p=&c;定义了 3个整型变量 a, b, c和一个整型指针变量 p,并且把变量 c的地址赋给 p。 scanf函数的一般形式为“scanf(“格式控制字符串 ”,地址列表 )”,其中的地址列表应当是存放输 入数据变量的地址。 16 【正确答案】 B 【试题解析】 因为 u表示按无符号整数输出,而 x用十六进制表示为0xFFFF,所以输出无符号整数的最大值 65535。 17 【正确答案】 C 【试题解析】 选项 C中, if(xy)后面的 “x-”是一个表达式而不是一个语句,所以在编译时会产生错误
22、信息。 18 【正确答案】 D 【试题解析】 当 x为大于 1的奇数时, x对 2求余的结果为 1,不为 0,所以选项D中表达式的值为 0。 19 【正确答案】 C 【试题解析】 本题考查逗号表达 式的运用。 x=(i=4 j=16, k=32)中的i=4,j=16, k=32构成一个逗号表达式,整个表达式的值取最后一项的值,即 32,所以 x的值为 32。 20 【正确答案】 D 【试题解析】 选项 D中,首先定义的变量 s的值为 36,因为语句 -s;所以当 s=0时循环会结束;选项 A由于 while(1)永远成立,循环构成死循环;选项 B中 for循环没有使循环结束的限定条件,也构成死
23、循环;选项 C中由于 k永远大于10000,所以循环无法停止。 21 【正确答案】 C 【试题解析】 本题考查 printf函数的格式。格式字符 “e”或者 “E”都表示以指数形式输出单精度或双精度数。 22 【正确答案】 D 【试题解析】 本题考查数组和字符串的赋值。选项 A中数组 s没有明确其大小就赋值是错误的。选项 B中不能有大括号,选项 C中的写法应该为HELLO!。 23 【正确答案】 B 【试题解析】 本题涉及字符串最基本的 2个概念: 字符串的长度是指字符串中字符的个数,但不包括字符串结束符; 以反斜杆 开头的特殊字符序列,意思是把反斜杆后面的字符序列转换成特定的含义,而不是 原
24、来的含义,不包含在字符串长度之内, 连同后面的字符为一个长度:而 也是如此。 24 【正确答案】 D 【试题解析】 int*(*gh10); -曲是一个指针,指向由 10个指向整型变量的指针构成的数组, int(*def)10; -def指向一个指针,该指针指向 10个整型变量构成的数组。 25 【正确答案】 D 【试题解析】 在 C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。在调用函数时,给形参分配临时存储单元,并将实参对应的值传递给形参,在被调用函数 中对形参存储单元中的值进行运算,最后通过 return语句把函数值返回调用函数。当调用结束后,形参单元被释放,实参单元仍保留
25、并维持原值。 26 【正确答案】 C 【试题解析】 利用强制类型转换 (struct sk*)把整数型地址 &data m转换成结构体变量指针赋给结构体指针变量 q。 27 【正确答案】 C 【试题解析】 本题考查函数调用的使用。计算 w的时候,先调用 f2函数, f2函数的公式是 “a+b”,计算 a和 b的时候又调用到 n函数, n的函数是 “a*a”,因此, w的计算公式为: w=(double)(int)(2 1*2 1)+(int)(4 0*4 0)=20 0。 28 【正确答案】 A 【试题解析】 本题考查函数调用时的参数个数。在函数调用时,实参必须和形参的个数、类型一一对应。但函
26、数的计算结果只有一个值,因而 fun函数的参数个数为 3。 29 【正确答案】 D 【试题解析】 &是取地址运算符,表达式 x=&a是表示将 a的地址赋给变量 x。 30 【正确答案】 D 【试题解析】 *(q+i)指向第 i行首地址, *(*(q+i)+j)代表第 i行第 i个元素。 31 【正确答案】 B 【试题解析】 函数 ss(char*s, chart)的功能是将指针 s所指向的字符串中存在的字符 “t”均改写成大写字母:所以 main函数中引用函数 ss后使得数组 str1中的小写字母 “d”均变成了大写字母 “D”,然后输出数组 str1,结果为: abcDDfefDbD。 32
27、 【正确答案】 B 【试题解析】 字符串比较不能用 “=”,要用 strcmp(s1, s2)函数,字符串 s1和s2相等时返回值为 0,故 !strcmp(s1, s2)=1,条件成立执行后面的语句,输出they are Equak 33 【正确答案】 C 【试题解析】 根据 C语言的语法规则可知, int(*ptr)M中的标识符 ptr是一个指向具有 M个整型元素的一维数组指针。 34 【正确答案】 A 【试题解析】 C语言中,变量的隐含存储类型为 auto。 35 【正确答案】 D 【试题解析】 本题考查的是指针和结构的应用。首先定义的数组 tt中有两个成员,一个整型变量,一个结构指针。
28、当 i=1时, p指针指向结构数组的第一个元素,并输出此元素的第一个成员 x,即 20;当 I-2时, p指针指向结构数 组的第二个元素的第一个成员,所以输出 15。 36 【正确答案】 D 【试题解析】 首先用函数 fopen()以 “wb”的方式打开文件 “d2 dat”,然后调用两次 fwrite函数将数组 a的 5个元素,依次输出到文件币中 (共 10个字节 ),然后关闭文件。再次打开文件,使用文件指针指向文件的开头,调用 fread函数从文件fb中读取这 10个字节的数据到数组 a中,此时数组 a的内容就变为 1, 2, 3,0, 0, 1, 2, 3, 0, 0,因此最后的输出结果
29、为 “1, 2, 3, 0, 0, 1, 2, 3, 0,0”。 37 【正确答 案】 A 【试题解析】 本题主要考查结构体数组。 xi num是结构体 xi中的 num成员, xi name2是结构体 xi中 name成员的第 3个元素。第一次循环, i=1,输出 x1num, x1 name2的值,即 2A;第二次循环, i=2,输出 x2 num,x2 name2的值,即 3N;第三次循环, i=3,输出 x3 num, x3 name2的值,即 4E;第四次循环, i=4,输出 x4 num, x4 name2的值,即 5O。 38 【正确答案】 C 【试题解析】 输出不会是 5 00
30、000的,因为单精度浮点数和双精度浮点数在内存中的存储形式不一样。 39 【正确答案】 C 【试题解析】 本题主要考查按位或运算。按位或是对两个运算对象相应的位进行逻辑或运算,其运算规则和逻辑或相同,两个运算对象只要有一个是 1,则结果为1。 40 【正确答案】 C 【试题解析】 字符串输入函数 fgets()的调用形式为: fgets(s, n, fp)。 s可以是一个字符数组名,或是指向字符串的指针; n为要读取的最多的字符个数; fp是指向该文件的文件型 指针。字符串输入函数的功能是:从 fp所指向的文件中读取长度不超过 n-1个字符的字符串,并将该字符串存放到字符数组 s中。 41 【
31、正确答案】 开发 【试题解析】 软件牛命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。定义阶段包括可行性研究初步项目计划和需求分析:开发阶段包括概要设计、详细设计、实现和测试;维护阶段包括使用、维护和退役。 42 【正确答案】 选择 【试题解析】 关系数据库的专门关系运算包括选择、投影和连接 3种,其中选择不改变关系表中的属性个数但能减少元组个数。 43 【正确答案】 层次模型 【试题解析】 层次模型是最早发展起来的数据库模型。层次模型的基本结构是树形结构。 44 【正确答案】 白盒 【试题解析】 按功能划分测试可分为白盒测试和黑盒测试。白盒测试的原则是保证所测试模块中每一独立路径
32、至少执行一次:保证所测试模块所有判断的每一分支至少执行一次:保证所测试模块每一循环都在边界条件和一般条件下至少各执行一次;验证所有内部数据结构的有效性。 45 【正确答案】 元组 【试题解析】 在关系模型中,数据结构用单一的二维表结构来表示实体及实 体问的联系。一个关系对应一个二维表。二维表中的列称为属性,属性值的取值范围称为值域。二维表中的一行称为一个元组。 46 【正确答案】 2 【试题解析】 本题考查的是基本赋值运算符和赋值表达式。表达式 c=(b=a-4)等价于 c=(b=b-a+4)等价于 c=b=2;表达式 a=(c 2+(b-1)等价于 a=1+2-1=2;因此最后 a的值为 2
33、。 47 【正确答案】 0 1 112 【试题解析】 在主函数中定义了整型变量 f1和 f2,并把其值赋为 0和 1,在屏幕上输出。然后在第一次运行 for循环语句 时,变量 f的值等于 1,把其值输出,把变量 n的值 0赋给变量 f2,变量 f的值 1赋给 f1,在执行第二次 for循环语句时,变量 f的值等于 1,把此值输出。然后再把变量 f1的值 1赋给变量 f2,变量 f的值1赋给 f1,在执行第三次 for循环语句时,变量 f的值等于 2,把此值输出。所以程序运行后的结果为 01 112。 48 【正确答案】 4 5 79 【试题解析】 本题考查的是条件判断语句。本题特别需要注意的是
34、 “: ”的问题,不能把 “t=a; a=c; c=t; ”误认为是第一个 if的语句,实际上,只有 “t=a; -才是第一 个 if的语句。所以判断第一个 if语句的表达式不成立后,执行的是 “a=c;c=t; ”,此时 a=5,c=79。然后判断第二个 if语句的条件表达式,表达式成立,执行后面的 3条语句,让 a、 b、 c分别为 4、 5和 79。 49 【正确答案】 2 24 6 8 【试题解析】 p为指向数组的指针变量,数组 x1为数组 x的第二个元素,值为2;进入 for循环 i=0时, p0=&x1 直到循环完毕,指针分别指向数组 x中的第 2、 4、 6、 8个元素,所以第二
35、个空白处应填 24 6 8。 50 【正确答案】 3 5 【试题解析】 本题考查函数中形参和实参的传递。在 C语言函数中实参和形参传递具有不可逆性,参数只能由实参传向形参,而不能由形参传向实参,虽然swap函数的功能是实现两个数的交换,但由于没有返回值,故最终的输出结果为3 5。 51 【正确答案】 15 【试题解析】 在函数 fun(int x)中定义了局部静态整形变量 t,并初始化为 0。这个函数的返回值为 t+x。所以在主函数的 for循环中, 5次连续调用 fun(i),实现了从 l到 5连续数字的相加运算。因而最后结果等于 15。 52 【正确答案】 a*b*c*d 【试题解析】 本题考查的是函数与一个简单的算法结合在一起的应用。首先定义一个 int型变量来存放字符串 str的长度,执行 while条件语句,通过分析可知,字符串 2*i项的值可由第 i项的值得到;第 2*i-1项直接赋值为 *, i递减,如此反复直到不满足 i0的条件时,输出运行后的字符串。 53 【正确答案】 fimc() m+ 【试题解析】 第一空白处,在 c语言中如果子函数在主函数之后定义,就要对其进行说明,说明的形式为: “函数类型名 函数名 ”。所以此处填写 func()。 第二空白处,整型变量 m表示输入字符的个数,所以每输入一个字符,变量 m的值就加 1。所以此处填写 m+。