1、国家二级( C语言)笔试模拟试卷 121 及答案与解析 1 算法的时间复杂度是指 ( )。 ( A)执行算法程序所需要的时间 ( B)算法程序的长度 ( C)算法执行过程中所需要的基本运算次数 ( D)算法程序中的指令条数 2 下列描述中,不是线性表顺序存储结构特征的是 ( )。 ( A)不便于插入和删除 ( B)需要连续的存储空间 ( C)可随机访问 ( D)需另外开辟空间来保存元素之间的关系 3 按照 “先进后出 ”原则组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向 链表 ( D)二叉树 4 有下列二叉树,对此二叉树前序遍历的结果为 ( )。 ( A) ACBEDG
2、FH ( B) ABDGCEHF ( C) HGFEDCBA ( D) ABCDEFGH 5 对建立良好的程序设计风格,下列描述正确的是 ( )。 ( A)程序应该简单、清晰、可读性好 ( B)符号名的命名只需要符合语法 ( C)充分考虑程序的执行效率 ( D)程序的注释可有可无 6 下列不属于软件工程的 3个要素的是 ( )。 ( A)工具 ( B)过程 ( C)方法 ( D)环境 7 下列选项中不属于软件生命周期开发阶段任务的是 ( )。 ( A)软件测试 ( B)概要设计 ( C)软件维护 ( D)详细设计 8 使用白盒测试法时,确定测试数据应该根据 ( )和指定的覆盖标准。 ( A)程
3、序的内部逻辑 ( B)程序的复杂结构 ( C)使用说明书 ( D)程序的功能 9 数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是 ( )。 ( A) DB包括 DBS和 DBMS ( B) DBMS包括 DB和 DBS ( C) DBS包括 DB和 DBMS ( D)没有任何关 系 10 对关系 S和只进行集合运算,结果中既包含 S中的所有元组也包含只中的所有元组,这样的集合运算称为 ( )。 ( A)并运算 ( B)交运算 ( C)差运算 ( D)积运算 11 下列叙述错误的是 ( )。 ( A)在 C语言中的保留字必须小写 ( B)变量的存储类型决定了变量的存储位置
4、及其生存期 ( C)宏定义以 #define开头,行未必须加分号 ( D)在 C语言中的注释行可以出现在程序的任何位置 12 若有运算符:、 =、 %、 sizeof,则它们按优先级 (由高至低 )的正确排列顺序为 ( ) ( A) %、 sizeof、 = ( B) sizeof、 %、 =、 ( C) sizeof、 %、 = ( D) sizeof、 %、 = 13 已知 int a=2, b=3;则执行表达式 a=a b后,变量 a的值为 ( )。 ( A) 0 ( B) 1 ( C) 2 ( D) 3 14 假定 w、 x、 y、 m均为 int型变量,则执行下列的语句后, m的值是
5、 ( )。 w=6, x=4, y=3; m=(w x)?w:x; m=(m y)?m:y; ( A) 3 ( B) 4 ( C) 5 ( D) 6 15 若变量 a, b已正确定义,且 b已正确赋值,则合法的语句是 ( )。 ( A) b=double(b); ( B) +b; ( C) a=a+5; ( D) a=double(b); 16 执行下列程序中的输出语句后, a的值是 ( )。 main() int a; printf(“%dn“, (a=2*3,a*5,a+7); ( A) 17 ( B) 37 ( C) 6 ( D) 13 17 若有下列定义 (设 int类型 变量占 2个
6、字节 ): int i=8; 则下列语句: printf(“i=%08d“,i); 输出的结果是 ( )。 ( A) i=8, ( B) i=00000008, ( C) i=08, ( D) 8 18 两次运行下列的程序,如果从键盘上分别输入 3和 1,则输出结果是 ( )。 main() int x; scanf(“%d“, if(x+ 2)printf(“%d“, x); else printf(“%dn“, x-); ( A) 4和 2 ( B) 4和 1 ( C) 4和 0 ( D) 3和 1 19 运行下列程序时,若输入的数据为 “1,2,3”,则输出结果是 ( )。 main()
7、 float a,b,c,t; scanf(“%f,%f,%f“, if(a b) t=a; a=b; b=t; if(a c) t=a; a=c; c=t; if(b c) t=-b; b=c; c=t; printf(“%fn%fn%f/n“,a,b,c); ( A) 1.00 2.00 3.00 ( B) 1.00 3.00 2.00 ( C) 1 3 2 ( D) 3.000000 2.000000 1.000000 20 下列能正确定义一维数组的选项是 ( )。 ( A) int a5=0,1,2,3,4,5 ( B) char a=0,1,2,3,4,5; ( C) char a
8、A,B,C; ( D) int a5=“0123“; 21 已定义下列函数: int fun(int *p) return *p; ) fun函数返回值是 ( )。 ( A)不确定的值 ( B)一个整数 ( C)形参 p中存放的值 ( D)形参 p的地址值 22 下列程序的输出结果是 ( )。 #include stdio h main() int a=2,b=3,p; p=f(a,b); printf(“%d“, p); int f(a,b) int c; if(ab)c=1; else if(a=b)c=0; else c=-1; return(c) ; ( A) -1 ( B) 0 (
9、C) 1 ( D) 2 23 有下列程序: fun(int x,int y) static int m=0,i=2; i+=m+1; m=i+x+y;return m; main() int j=1, m=1, k; k=fun(j, m); printf(“%d, “, k); k=fun(j, m); printf(“%dn“,k); 执行后的输出结果是 ( )。 ( A) 5, 5 ( B) 5, 11 ( C) 11, 11 ( D) 11, 5 24 下列循环体的执行次数是 ( )。 #include stdio h main() int i,j; for(i=0, j=1; i j
10、+1; i+=1, j-) printf(“%dn“, j); ( A) 3 ( B) 2 ( C) 1 ( D) 0 25 设变量 x和 y均已正确定义并赋值。下列 if语句中,在编译时将产生错误信息的是 ( )。 ( A) if(x+); ( B) if(x y printf(“%d,“,a%b); printf(“%d,“,(a-b,a+b); printf(“%dn“,a-b?a-b:a+b); 49 要求使下列程序输出 5个整数,请填空。 for(i=0;i =_; printf(“%dn“,i+=2); 50 下列的 for语句的循环次数为 _。 for(x=1,y=0;(y!=1
11、9)x+); 51 函数调用语句: “fgets(buf,n,fp);”从 fp指向的文件中读入, n个字符放到 buf字符数组中,函数返回值为 _。 52 若有下列定义: int a=1,2,3,4,5,6,7,8,9,10,*p=a;,则值为 3的表达式为:_。 53 若有说明 char s1=“That girl“,s2=“is beautiful“;则使用函数 strcmp(s1,s2)g,结果是 _。 54 在宏定义 #define PI 3.14159中,用宏名 PI代替一个 _。 55 下列程序的输出结果是 _。 #include stdio.h sb(int s.int b)
12、static int n=3; b=sn; n-; return(b); main() int s=1,5,6,8); int i,x=0; for(i=0;i 4;i+) x=sb(s,x); printf(:%d“,x); printf(“n“); 国家二级( C语言)笔试模拟试卷 121 答案与解析 1 【正确答案】 C 【试题解析】 所谓的算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算 的执行次数来度量算法的工作量。 2 【正确答案】 D 【试题解析】 线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元
13、素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此,不需要另外开辟空间来保存元素之间的关系。 3 【正确答案】 B 【试题解析】 栈是一种特殊的线性表,其插入和删除运算都只在线性表的一端进行,而另一端是封闭的。进行插入、删除的一端称为栈顶,封闭的一端称为栈底。栈顶元素是最后被插入的元素,不是最后被删除的,是按 先进后出的原则组织数据的。 4 【正确答案】 B 【试题解析】 对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。 5 【正确答案】 A 【试题解析】 “清晰第一,效率第二 ”,在考虑到程序的执
14、行效率的同时,一定要保证程序清晰、可读;对符号名的命名,除了要符合语法要求外,还要具有一定的含义;程序的注释可以帮助程序员理解程序,不是可有可无的。 6 【正确答案】 D 【试题解析】 软件工程包括 3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理和文档生成;过程支持软件开发的各个环节的控制、管理。 7 【正确答案】 C 【试题解析】 软件的生命周期可分为软件定义、软件开发及软件运行维护 3个阶段。其中软件定义阶段的主要工作有可行性研究与计划制定和需求分析等;软件开发阶段的主要工作有概要设计、详细设计和测试等:软件运行维护阶段的主要工作是软件的运行及后期
15、的维护等。 8 【正确答案】 A 【试题解析】 白盒测试是把测试对象看作是一个打开的盒子,允 许测试人员利用程序内部的逻辑结构及相关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试。所以,白盒测试的对象基本上是源程序,以程序的内部逻辑和指定的覆盖标准测试数据。 9 【正确答案】 C 【试题解析】 数据库系统 (DBS)由数据库 (DBS)、数据库管理系统 (DBMS)、数据库管理员、硬件平台和软件平台 5个部分组成,可见 DB 和 DBMS 都是 DBS 的组成部分。 10 【正确答案】 A 【试题解析】 关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的
16、所 有元组。 11 【正确答案】 C 【试题解析】 本题涉及 C语言最基本的 4个知识点: C语言的保留字必须小写: 变量的存储类型不同,其存储位置和生存期也不一样; C语言允许其注释部分出现在程序中的任何位置; 宏定义以 #define开头,行末不需要加分号。 12 【正确答案】 D 【试题解析】 主要考查运算符的优先级。 sizeof 的优先级最高,后面的顺序是: %、,优先级最低的是 “=”。 13 【正确答案】 B 【试题解析】 先计算关系表达 a b=2 3)为真 (表达式为 真时,如果变量为 int型变量则真用 1表示,假用 0表示 ),即 a=1。 14 【正确答案】 A 【试题
17、解析】 条件表达式 “a?b:c”的含义是:当 a为真时,其值等于表达式 b的值,当 a为假时,其值等于表达式 c的值。第一个表达式: w=6 x=4为假,所以返回 x的值,即 m=x=4;第二个表达式: m=4 y=3为假,所以返回 y的值,即m=y=3。 15 【正确答案】 B 【试题解析】 要解答此题只要知道两个知识点: 在 C语言中规定进行强制类型转换的格式是: (double)变量名; 在 C语言中不允 许给表达式赋值。 16 【正确答案】 C 【试题解析】 本题考查逗号表达式本题的返回值是 a+7, a=2*3=6, a+7=13(注意:本题问的是 a的值,而不是程序的输出值 )。
18、 17 【正确答案】 B 【试题解析】 本题考查 printf函数的格式。 “%08”格式符中的 “0”表示在指定数据输出宽度的同时,在数据前面的多余空格处加 “0”“8”表示指定数据的输出宽度为 8位。 18 【正确答案】 A 【试题解析】 本题考查 if else语句。首先 scanf 函数通过键盘读 )x 的值。当 x=3时,第一个 if语句,先判断条件,取 x的值 3和 2比较,然后将 x的值加 1,发现条件成立,执行下列的 printf语句,输出 x的值 4。当 x=1时,第一个 if 语句,先判断条件,取 x的值 1和 2比较,然后将 x的值加 1(x的值变为 2),发现条件不成立
19、,执行下列的 else语句,先输出 x的值 2,再将 x的值减 1。 19 【正确答案】 D 【试题解析】 本题考查 if语句。第 1个 if语句,实现如果 a b,则交换 a、 b值的功能;第 2个 if 语句,实现如果 a c,则交换 a、 c的值的功能:第 3个 if语句,实现如果 b c,则 交换 b, c的值的功能。 3个 if语句结合起来实现的功能就是将 a、 b、 c按从大到小排序。 20 【正确答案】 B 【试题解析】 在定义数组时,如果赋给的初始值个数大于数值的长度,这样就会越界,因此选项 A)错误;选项 C)中定义的是一个字符变量 C;选项 D)中整型数组,中只能存储整型数
20、据,而不能存储字符串常量 “0123”。 21 【正确答案】 B 【试题解析】 由函数 int fun(int *p)return *p; 的定义可知,返回值为整型指针变量 p所指向的数据。 22 【正确答案】 A 【试题解析】 本题考查 if else语句。在 int f(a, b)中:第一个 if语句,先判断条件,发现 a b条件不成立,则执行与其配对的 else语句;第二个 if 语句,先判断条件,发现 a=b条件不成立,则执行与其配对的 else语句, c=-1。 23 【正确答案】 B 【试题解析】 子函数 fun(int x,int y),将变量 m和 i声明为局部静态变量,因此第
21、 1次调用主函数后,局部静态变量 m和 i的值为 5和 3,第 1次函数调用结束时,它们的值不释放保持不变,所以第 2次调用时,局部静态变量 m和 i的初始值分别为 5和 3,即在执行 “i+=m+1”时, i的值为 9,因此最终 m的值为 11。 24 【正确答案】 C 【试题解析】 本题考查 for循环。第一次循环前先判断循环条件,此时 i=0,j=1, i j+1成立,循环第一次;第二次循环前先判断循环条件,此时 i=1, j=0,(j-是先使用 j的值再减 1), i j+1不成立,结束循环。 25 【正确答案】 C 【试题解析】 选项 A) 和选项 B) 在条件判断语句的后面是空语句
22、,什么都不做;在选项 D) if 后面是一个复合空语句;而在选项 C) 中 ,在 x-后面少了一个分号,所以程序段在编译时,会出现语法错误。 26 【正确答案】 A 【试题解析】 本题考查两个概念: 用单引号括起来的一个字符常量只能存放一个字符; C语言中没有字符串变量,只能用字符数组来存储字符串。 选项 A) 中一个单引号内放了若干个字符是错误的:选项 B) 和选项 D) 选项中将一个字符串赋值给一个字符数组是允许的。 27 【正确答案】 B 【试题解析】 本题考查函数调用时的参数传递。在函数调用时,形参是指向实参的指针变量,则 printf的执行结果为 3+1=4。 28 【正确答案】 A
23、 【试题解析】 本题考查函数调用时的参数传递。通过函数 abc的执行,将字符串中的字母 a去掉,保留剩下的。由于是通过指针调用,所以改变字符串的结果。 29 【正确答案】 D 【试题解析】 指针变量是通过指向变量地址来指定变量值的。这里只要取 m的地址赋给 p,即可实现使 p 为指向 m的指针变量。 30 【正确答案】 B 【试题解析】 本题考查的是指针函数。指针函数定义的基本格式为:类型说明符(*函数名 )()。其中,类型说明符表示返回的指针值指向的数据类 型。 31 【正确答案】 D 【试题解析】 在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取 0; C语言规定,对
24、于二维数组,只可以省略第 1个方括号中的常量表达式,而不能省略第 2个方括号中的常量表达式;赋的初值不能多于事先定义好的数组元素个数。在选项 D) 赋值表达式中对每一维的元素赋初值应用 (),而不是 ()。 32 【正确答案】 C 【试题解析】 本程序中的函数 sort (int a, int n)实现的功能是将数组 a中的前n 个数进行从大到小排序。 sort(&a1, 7)是将数组中从 a1到 a7这 7个数进行从大到小排序,其他数不变。 33 【正确答案】 D 【试题解析】 a=“ABCD“书写错误,因为 “; ”左边不能出现常量;数组名 s是代表 s数组首地址的地址常量,而不是变量;字
25、符串只有在定义时维数可以省略。 34 【正确答案】 B 【试题解析】 字符串比较不能用两个等于号 (=)来进行比较,应使用函数strcmp(s1, s2)来比较。函数 strcmp(s1,s2)的功能是:当字符串 s1和 s2相等时,返回值为 0。因此,当表达式 !strcmp(s1, s2)=1时,条件成立,执行后面的语句,输出 they are Equal。 35 【正确答案】 C 【试题解析】 外部变量在编译时由系统分配永久的内存空间,所以外部变量的类型不是自动存储类别。 36 【正确答案】 A 【试题解析】 本题考查带参数的宏的定义及相关运算。P(F(5)*x)=P(2.84+5*2)
26、=P(12.84),调用 w(12.84),输出 (int)(12.84)=12。 37 【正确答案】 B 【试题解析】 本题主要考查结构指针: p=&st, 访问结构体的成员,可以通过结构变量访问,即 st i,也可以用等价的指针形式即 (*p).i和 p- i。 38 【正确答案】 A 【试题解析】 本题主要考查定义结构体的几个特点: 结构的定义明确了结构的组成形式,定义了一种 C语言中没有而用户需要的新的数据类型。与其他的数据类型不同,在程序编译的时候结构的定义并不会使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间; 结构体的成员名可以与程序中的变量名相同: 结构体中的成员
27、可以单独使用,它的作用相当于普通变量; 结构体可以嵌套定义。 39 【正确答案】 A 【试题解析】 本题主要考查运算表达式的运算。 3+(int)(x)的结果是10011010, 3的结果是 11111100,二者逻辑与得 10011000。 40 【正确答案】 B 【试题解析】 本题考查文件使用方式标识符。方式 “wb”为输出打开一个二进制文件;方式 “wb+”为读写建立一个新的二进制文件;方式 “rb+”为读写打开一个二进制文件;方式 “rb”为输入打开一个二进制文件。 41 【正确答案】 软件开发 【试题解析】 软件生命周期分为 3个时期共 8个阶 段:软件定义期 (问题定义、可行性研究
28、和需求分析 )、软件开发期 (系统设计、详细设计、编码和测试 )、软件维护期 (即运行维护阶段 )。 42 【正确答案】 数据流 【试题解析】 结构化分析方法的实质是着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。 43 【正确答案】 模块 【试题解析】 矩形表示的是模块,箭头表示的是模块间的调用关系。用带实心圆的箭头表示传递的是控制信息,用带空心圆的箭头表示传递的是数据。 44 【正确答案】 驱动模块 【试题解析】 由于模块通常不是独立的程序,自己不能运行,而需要其他模块调用或驱动,同时被测试模块还要去调用其他模块,前者称为驱动模块,
29、后者称为承接模块。其中驱动模块的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果;承接模块的作用是代替被测模块,调用其他模块。 45 【正确答案】 调试 【试题解析】 程序设计的任务是诊断和改正程序中的错误。程序调试活动由两部分组成,其一是根据错误的迹象确定程序中错误的确切性、原因和位置;其二是对程序进行修改,排除这个错误。 46 【正确答案】 float 【试题解析】 在此表达式中 x是 float类型的变量,经过开方所得到的结果仍是float类型,再和 2.8进行运算时,应该先将 2.8转换成 float类型再运算,最后结果仍是 float型。 47 【正确答案】 (y%4
30、=0)&(y%100!=0)(y%400=0) 【试题解析】 考查逻辑表达。年号能被 4整除 (y%4=0)但不能被 100整除(y%100 1=0),两者是与的关系,年号能被 400整除即 y%400=0,与前两项是或的关系。 48 【正确 答案】 1,13,7 【试题解析】 本题考查 3个知识点: 余数的计算,题中的 a=10, b=3,a%b=1; (表达式 1,表达式 2)形式的结果为最后一个表达式的值,题中的a=10, b=3, (a-b, a+b)=a+b=13; 条件运算符的使用,题中的 a-b?a-b:a+b,判断语句 a-b=7不为 0,所以执行 a-b,结果为 7。 49
31、【正确答案】 8 【试题解析】 本题考查基本的 for循环条件, i+=2表示 i每次递增 2,从 0开始,输出 5个整数则需要的条件是 i =8。 50 【正确答案】 6 【试题解析】 分析程序可知,每循环一次, x的值加 1,然后检测循环控制条件(y!=19)&(x 7),因 y的值不变,故满足 x 7时循环 6次。 51 【正确答案】 buf的首地址 【试题解析】 考查 fgets()函数的功能, fgets()函数用来从文件中读入字符串。调用格式为: fgets(buf,n,fp)。此处, fp是文件指针, buf是存放字符串的起始地址,n 是一个 int型变量。调用函数 fgets(
32、)时,最多能读入 n-1个字符,系统自动在最后加字符串结束标志,并以 buf作为函数值返回。 52 【正确答案】 p+=2, *(p+) 【试题解析】 由题可知 a2=3,因此只要使指针 p指向 a3,然后再引用指针的值就可以了。 53 【正确答案】 -1 【试题解析】 strcmp(s1,s2)函数的作用是:对字符数组 s2和字符数组 s1进行比较。如果 s1 s2,则返回负数;如果 s1=s2,则返回 0;如果 s1 s2,则返回正数。 54 【正确答案】 字符串 【试题解析】 本题考查字符替换格式: #define标识符 字符串。 55 【正确答案】 8651 【试题解析】 主程序中,第一次循环时, i=0,调用 sb(s, x)子函数,此时 n=3,x=sn=s3=8,然后将 n 减 1变为 2;第二次循环时, i=1,调用 sb(s, x)子函数,因为将 n 定义为了静态变量,所以此时 n=2,返回 x=sn=s2=6;第三次循环时, i=2,调用 sb(s, x)子函数,此时 n=1,返回 x=sn=s1=5;第四次循环时,i=3,调用 sb(s, x)子函数,此时 n=0,返回 x=sn=s0=1。此程序实际上是将数组 s逆序输出。