1、国家二级( C语言)笔试模拟试卷 27及答案与解析 1 在软件开发中,下面的任务不属于设计阶段的是 ( )。 ( A)数据结构设计 ( B)给出系统模块结构 ( C)定义模块算法 ( D)定义需求并建立系统模块 2 以下数据结构中不属于线性数据结构的是 ( )。 ( A)队列 ( B)线性表 ( C)二叉树 ( D)栈 3 在结构化方法中,用数据流图 (DFD)作为描述工具的软件开发阶段是 ( )。 ( A)可行性分析 ( B)需求分析 ( C)详细设计 ( D)程序编码 4 下面的描 述中,符合结构化程序设计风格的是 ( )。 ( A)使用顺序、选择和重复 (循环 )三种基本控制结构表示程序
2、的控制逻辑 ( B)模块只有一个入口,可以有多个出口 ( C)注重提高程序的执行效率 ( D)不使用 goto语句 5 数据库系统的核心是 ( )。 ( A)数据模型 ( B)数据库管理系统 ( C)软件工具 ( D)数据库 6 下面的概念中,不属于面向对象方法的是 ( )。 ( A)对象 ( B)继承 ( C)类 ( D)过程调用 7 在一棵二叉树上第 5层的结点数最多是 ( )。 ( A) 8 ( B) 16 ( C) 32 ( D) 15 8 下面叙述正确的是 ( )。 ( A)算法的执行效率与数据的存储结构无关 ( B)算法的空间复杂度是指算法程序中指令 (或语句 )的条数 ( C)算
3、法的有穷性是指算法必须能在执行有限个步骤之后终止 ( D)以上三种描述都不对 9 下列叙述中正确的是 ( )。 ( A)数据库是一个独立的系统,不需要操作系统的支持 ( B)数据库设计是指设计数据库管理系统 ( C)数据库技术的根本目标是要解决数据共享的问题 ( D)数据库系统中, 数据的物理结构必须与逻辑结构一致 10 下列模式中,能够给出数据库物理存储结构与物理存取方法的是 ( )。 ( A)内模式 ( B)外模式 ( C)概念模式 ( D)逻辑模式 11 语句: printf(“%dn“,12的输出结果是 ( )。 ( A) 12 ( B) 8 ( C) 6 ( D) 12 12 以下选
4、项中属于 C语言数据类型的是 ( )。 ( A)复数型 ( B)逻辑型 ( C)双精度型 ( D)集合型 13 执行下面程序段的结果是 ( )。 int x=23; do printf(“%2d“,x-); while(! x); ( A)输出 321 ( B)输出 23 ( C)不输出任何内容 ( D)陷入死循环 14 设有以下语句: char a=3,b=6,c; c=ab 2;则 c的二进制值是 ( )。 ( A) 11011 ( B) 10100 ( C) 11100 ( D) 11000 15 请读程序: #include stdio.h func(int a, int b) int
5、 c; c=a+b; return c; main() int x=6,y=7,z=8,r; r=func(x-,y+,x+y),z-); printf(“%dn“,r); 上面程序的输出结果是 ( )。 ( A) 11 ( B) 20 ( C) 21 ( D) 31 16 以下程序的运行结果是 ( )。 #include stdio.h main() int a=1,2,3,4,5,6,7,8,9,10,11,12; int *p=a+5,*q=NULL; *q=8(p+5); printf(“%d %dn“, *p,*q); ( A)运行后报错 ( B) 6 6 ( C) 6 11 ( D
6、) 5 5 17 请读程序: #include stdio.h #define SUB(X,Y) (X)*Y main() int a=3,b=4; printf(“%dn“,SUB(a+,b+); 上面程序的输出结果是 ( )。 ( A) 12 ( B) 15 ( C) 16 ( D) 20 18 以下程序的输出结果是 ( )。 #include stdio.h main() int i; for(i=1;i 5;i+) if(i%2) printf(“*“); else continue; printf(“#“); printf(“$n“); ( A) *#*#*#$ ( B) #*#*#
7、*$ ( C) *#*#$ ( D) #*#*$ 19 执行下面程序中的输出语句后, a的值是 ( )。 #include stdio.h main() int a; printf(“%dn“,(a=3*5,a*4); ( A) 15 ( B) 20 ( C) 10 ( D) 60 20 下面各语句行中,能正确地给字符串赋值的语句行是 ( )。 ( A) char st4=“ABCDE“; ( B) char s5=A,B,C,D,E; ( C) char *s=“ABCDE“; ( D) char *s; scanf(“%s“,*s); 21 设有以下程序段: int x=0, s=0; w
8、hUe( ! x! =0) s+ = +x; printf(“%d“, s); 则 ( )。 ( A)运行程序段后输出 0 ( B)运行程序段后输出 1 ( C)程序段中的控制表达式是非法的 ( D)程序段执行无限次 22 有如下程序: #include stdio h main() float x=2.0, y; if(x 0.0) y=0.0; else if(x 10.0) y=1.0/x; else y=1.0; printf(“%f/n“, y); 该程序的输出结果是 ( )。 ( A) 0 ( B) 0.25 ( C) 0.5 ( D) 1 23 执行下面的程序段后,变量 k中的值
9、为 ( )。 int k=3, s2; s0=k;k=s1*10; ( A)不定值 ( B) 33 ( C) 30 ( D) 10 24 对以下程序段的描述,正确的是 ( )。 x= -1; do x=x*x; while(!x); ( A)是死循环 ( B)循环执行两次 ( C)循环执行一次 ( D)有语法错误 25 以下程序错误的是 ( )。 ( A) main() int x, y, z; x=0; y=x-1; z=x+y; ( B) main() int x, y, z; x=0, y=x+1; z=x+y; ( C) main() int x; int y; int z; x=0,
10、 y=x+1; z=x+y; ( D) main() int x, y, z; x=0; y=x+1; z=x+y, 26 有如下程序段: int a=14, b=15, x; char c=A; x=(a void func2(int i); char st=“hello, friend!“; void funcl(int i) printf(“%c“,sti); if(i 3)i+=2; func 2(i); void func 2(int i) printf(“%c“, sti); if(i 3)i+=2; funcl(i); main() int i=0; funcl(i); prin
11、tf(“n“); ( A) hello ( B) hel ( C) hlo ( D) hlm 28 以下函数返回 a所指数组中最大值所在的下标值: fun(int *a, int n) int i, j=0, p; p=j; for(i=j; i n;i+) if(ai ap)_; return(p); 在下划线处应填入的内容是 ( )。 ( A) i=p ( B) ap=ai ( C) p=j ( D) p=i 29 下面说明不正确的是 ( )。 ( A) chara10=“china“; ( B) chara10, *p=a; p=“chiua“; ( C) char*a; a=“chin
12、a“; ( D) chara10, *p; p=a=“china“; 30 以下程序的输出结果是 ( )。 #include stdio h void prt(int *x, int *y,int *z) printf(“%d, %d, %dn“, + *x, + *y, *(z+); main() int a=10, b=40, c=20; prt( i 3; i+) j+=f(i); printf(“%dn“, j); 程序运行后的输出结果是 ( )。 ( A) 4 ( B) 3 ( C) 2 ( D) 1 39 设有如下定义: struct sk int a; float b; data
13、; int *p; 若要使 p指向 data中的 a域,正确的赋 值语句是 ( )。 ( A) p=break; case 1:b+;break; case 2: a+; b+; break; printf(“%d %dn“, a, B) ; 58 有以下程 序 #include stdio. h main() char ch1,ch2; int n1,n2; ch1=getchar(); ch2=getchar( n1=ch1-0; n2-n1*10+ (ch2-0); printf(“%dn“,n2); 程序运行时输入: 12回车,执行后输出结果是 _ 。 59 以下程序运行后输入: 3,
14、 abcde回车,则输出结果是 _。 #include string. h move (char *str, int n) char cemp; int i; temp=strn-1; for (i=n-1;i 0; i-) stri=stri-1); str0=temp; main() char s50; int n, i, z; scanf(“%d, %s”, i =n; i+)move (s, z); printf(“%sn”, s); 60 设有定义: int n, *k= f=_ ; return m; main() printf(“m= d n”, _ ); 62 函数 YangH
15、ui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是: (1)第 0列元素和主对角线元素均为 1 (2)其余元素为其左卜方和正上方元素之和 (3)数据的个数每行递增 1 请将程序补充完整。 #define N 6 void yanghui (int xNN) int i, j; x0 0=1; for(i=1; j N; i+) xi 0=_ =1; for(j=1; j i; j+) xi j=_ ; 63 以下函数的功能是删除字符串 s中的所有数字字符。请填空。 viod dele(char *s) int
16、 n=0, i; for(i=0; s i; i+) if(_) sn+; si; sn= _; 64 以下程序中,函数 SumColumMin 的功能是:求出 M行 N列二维数组每列元素中的最小值,并计算它们酌和值。和值通过形参传回主函数输出。请填空。 #define M 2 #define N 4 void SumColumMin(int aMN, int* sum) int i, i, k, s; 0; for(i=0; i N; i+) k=0; for(j=1 j M; j+) if(aki aji) k=j; s+=_; _ =s; main() int xMN= 3, 2, 5,
17、 1, 4, 1, 8, 3), s; SumColumMin(_ ); printf(“%dn”,s); 国家二级( C语言)笔试模拟试卷 27答案与解析 1 【正确答案】 D 【试题解析】 软件设计一般分为总体设计和详细设计两个阶段。总体 设计的任务是确定软件的总体结构、子系统和模块的划分,确定模块间的接口和评价模块划分质量,并进行数据分析;详细设计的任务是确定每一模块实现的定义,包括数据结构、算法和接口。 2 【正确答案】 C 【试题解析】 线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表,它只能在固定的一端进行插入和删除操作,又称后进先出表;队列是
18、插入在一端进行,删除在另一端进行的线性表,又称先进先出表。 3 【正确答案】 B 【试题解析】 软件开发阶段包括需求分析、总体设计、详细 设计、编码和测试五个阶段,其中需求分析阶段常用的工具是数据流图和数据字典。 4 【正确答案】 A 【试题解析】 结构化程序设计方法的四条原则是:自顶向下;逐步求精;模块化;限制使用 goto语句。 “自顶向下 ”是指在程序设计时,先考虑总体,后考虑细节,先考虑全局目标,后考虑局部目标; “逐步求精 ”是指对复杂问题应设计一些子目标作过渡,逐步细节化; “模块化 ”是指一个复杂问题由若干稍简单的问题构成,解决这个复杂问题的程序也应由若干稍简单问题的小程序组成。
19、 5 【正确答案】 B 【试题解析】 数据库 管理系统是数据库系统的核心。数据库管理系统是建立在操作系统之上,负责数据库的建立、使用和维护的软件。数据库管理系统实施对数据库的统一管理和控制,用户使用的各种数据库命令以及应用程序的执行,最终都必须通过数据库管理系统。数据库管理系统还承担着数据库的安全保护工作。 6 【正确答案】 D 【试题解析】 面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。面向对象方法从对象出发,发展出对象、类、消息、继承等概念。 7 【正确答案】 B 【试题解析】 根据二 叉树的性质:二叉树第 i(i1)层上至多有 2i-1个结点,
20、得到第 5层的结点数最多是 16。 8 【正确答案】 C 【试题解析】 算法的执行效率与数据的存储结构有关;算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度;算法的有穷性是指一个算法必须在执行有限步骤以后结束。 9 【正确答案】 C 【试题解析】 数据库不是一个独立的系统,需要操作系统的支持, A)错误。设计数据库的目的是设计出满足实际应用需求的实际关系模型, B)错误。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括: 提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护
21、代价, C)正确。 10 【正确答案】 A 【试题解析】 数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式,或子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式,或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。内模式,或存储模式,或物理模式, 是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方式的描述。 11 【正确答案】 B 【试题解析】 位运算 12 k+)和要求的 akk可以得出本题的答案应该是 951。 35 【正确答案】 A 【试题解析】 函数 strcpy的功
22、能是字符串拷贝,函数原型为 char * strcpy(char * strl, char *str2),作用是将字符串 2复制到字符串 1中去。二维数组可以看做是一种特殊的一维数组,它的每一个元素又是一个一维数组 。本题 arr可看做是一个具有两个元素 arr0和 arr1的一维数组,每个元素又是一个包含四个元素的一维数组。 36 【正确答案】 B 【试题解析】 本题考查函数返回值的知识。函数返回值是通过函数中的 return语句获得, return语句中表达式的值就是所求函数的值,该表达式的值必须与函数的类型一致。若类型不一致,则以函数值的类型为准,由系统进行转换。 37 【正确答案】 C
23、 【试题解析】 定义函数时,形参的类型说明放在形参表列内说明,或放在函数定义的第二行,函数体花括号 “”之前, 所以选项 A) 错; return后面的值可以是一个表达式,选项 B) 错;实参与形参的类型应相同或赋值兼容,如果实参为整型而形参为实型,或者相反,则按不同类型数值的赋值规则进行转换,以形参类型为准,选项 D) 错。 38 【正确答案】 B 【试题解析】 在 main函数中, j的值是 f(1)和 f(2)的值相加的结果。 f(1)=1, f(2)=f(1)+1=2, j的值为 1+2=3。 39 【正确答案】 C 【试题解析】 要注意不能将结构体变量作为一个整体进行输入和输出,只能
24、对结构体变量中的 各个成员进行输入和输出。引用结构体变量中成员的方式有以下几种:结构体变量名 .成员名;指针变量名 -成员名; (*指针变量名 ).成员名。 40 【正确答案】 C 【试题解析】 定义结构体类型的变量有如下几种方法: 定义结构体类型的同时,定义结构体类型的变量,如: stract aa tdl ; 选项 B) 中将宏名 AA用宏体 structaa替换后,与该定义形式一样,因此是正确的。在这一定义形式中,结构体类型名 aa是可以省略的,因此, D) 项也是正确的。 先定义结构体类型, 然后再定义结构体类型的变量,形式如下: struct aa ; strnct aa tdl;
25、这种定义形式也可演变为:先用类型定义语句 typedef将该结构体类型定义成一个类型名 AA,然后直接用该类型名 AA定义一个结构体变量 (这时不再需要使用关键字 struct)。因此选项 A) 正确。 41 【正确答案】 D 【试题解析】 通过定义 int *p, p是一个整型指针, p=&n是使 p指向变量 n,而 p是一个指针,输入时不需再用地址运算符。 42 【正确答案】 D 【试题解析】 本题涉及 break语句,重在循环次数的判定。本题的循环由于无出口,只能借助 break语句终止。题目要求说明判断 i j的执行次数,只需考查经过 i+=k运算如何累计 i的值。 i值分别是 i=2
26、, 4, 6, 8, 10,直到 i取 12时,判断 i j为真,程序输出 s的值并结束,共判断 6次。 43 【正确答案】 D 【试题解析】 选项 D) 为两条语句,每条语句以分号结束。 44 【正确答案】 A 【试题解析】 用 auto作存储类别的声明时, auto可省,变量的隐含存储类别为auto,是动态存 储方式;用 static声明的局部变量是静态局部变量,它在函数调用结束后将继续占据内存单元,下次调用时继续使用该值;用 extern声明的变量是外部变量,即全局变量。 45 【正确答案】 C 【试题解析】 f函数没有重复说明,在 main函数中是对 f函数声明,在 main函数外则是
27、对 f函数的定义。 46 【正确答案】 A 【试题解析】 结构体变量所占内存长度是各成员所占内存长度之和,而共用体变量所占内存长度等于最长成员的长度。本题中, struct test结构体类型共有 4个成员,其中 int型变量 占用 2个字节, char型变量占用 1个字节, float型变量占用 4个字节,共用体变量占用 5个字节,共用 2+1 +4+5=12个字节。 47 【正确答案】 C 【试题解析】 由于数组名保存了数组的首地址,即数组中第一个元素的地址,执行 p=aa;后, p指向 aa0, p- x相当于 aa0.x,也就是 50,经过自增运算后,显示结果为 51。 48 【正确答
28、案】 B 【试题解析】 关系运算符, =, =的优先级别相同,且高于 =, ! =两种运算符的级别。运算符的优先级别是:算术运算符优先级 别最高,关系运算符次之,赋值运算符最低。 49 【正确答案】 B 【试题解析】 SEEK_END代表的是文件末尾, SEEK_SET代表的是文件的开始, SEEK_CUR代表的是文件当前位置。 50 【正确答案】 A 【试题解析】 本题主要考查有关文件操作的函数的应用,其中: 函数 fopen的功能是打开一个文件,调用方式是: FILE*fp; fp=fopen(文件名,使用文件方式 ); 函数 fprintf的功能是将格式化数据输出到一个文件中,调用方式是
29、: fprintf(文件指针,格式字符串,输出表列 ); 函数 fclose的功能是关闭一个文件,调用方式是: fclose(文件指针 ); 函数 fscanf的功能是从磁盘文件执行格式化输入,调用方式是: fscanf(文件指针,格式字符串,输入表列 )。 51 【正确答案】 有穷性 【试题解析】 算法有四个基本特征:可行性、确定性、有穷性和拥有足够的情报。 52 【正确答案】 log2n+1 【试题解析】 对于长度为 n的有序线性表,在最坏情况下,二分查找只需要比较log2n+1次,而顺序查找需要比较 n次。 53 【正确答案】 对象 【试题解析】 将属性、操作相似的对象归为类,也就是说,
30、类是具有共同属性、共同方法的对象的集合。 54 【正确答案】 软件生命周期 【试题解析】 软件产品从考虑其概念开始,到该软件产品不再使用为止的整个时期都属于软件生命周期,一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等。 55 【正确答案】 关系模型 【试题解析】 数据库管理系统是介于用户与操作系统之间的系统管理软件,是用户与数据库之间的一个标准接口, 其数据模型可以分为层次模型、网状模型和关系模型。 56 【正确答案】 24 【试题解析】 本题考核的知识点是数组的定义和数组元素的引用。主函数中首先定义了一个长度为 7的数组,然后用一个 while循环引用数组的元素,当 i大
31、于 7或者 pi为偶数时,循环结束。显然当 i=2时, p12=14为偶数时,循环结束,此时 j的值为 j=p0+p1=24; 57 【正确答案】 2 1 【试题解析】 本题考核的知识点是 switch语句的嵌套应用。外层 switch语句后面括号里的 x的值为 1,所以执行 从 case1:后面的语句开始执行,而 case1:后面语句也为 switch语句,这个 switch语句后面括号里的 y的值为 0,所以从该 switch语句里的 case():开始执行即执行 a+,这时 a的值变为 1,执行完毕,遇到 break语句,退出内层 switch语句,又回到外层 switch语句,继续执行
32、 case1:下面的语句即 case2:执行完毕后, a自加 1变为 2, b自加 1变 1。所以最后输出的 a和 b的值为 21。 58 【正确答案】 12 【试题解析】 本题考核的知识点是字符类型数据的表示方法和存储形 式。字符类型的数据在内存中以相应的 ASCII码存放,在 C语言中,字符数据可以等价为与其相应的 ASCII码的整数,还可以作为整数参加运算。 在本题中, n1=ch1-0=1-0=49-48=1 n2=n1*10+(ch2-0)=1*10+(2-0)=10+2=12,所以,最后输出为 12。 59 【正确答案】 cdeab 【试题解析】 本题考核的知识点是基本算法的应用和
33、程序的综合分析。从分析知道 move()函数的作用,是将形参 str所指的数组依次向后左移一位, 即让该数组第 一个元素的值等于第二个元素的值,接着让第二个元素的值等于第三个元素的值,直到该数组最后第二个元素的值等于最后一个元素的值,然后让第一个元素等于最后一个元素的值。主函数中用了一个 for循环调用 move()函数,共循环三次。当 i=1时,第一次调用 move()函数,使输入到数组的 s的字符串 “abcde”变为“eabcd”,当 i=2时,第二次调用 move()函数,使字符串 “eabcd”变为 “deabc”,当i=3时,第三次调用 move()函数,使字符串 “deabc”变
34、为 “cdeab”,故最后输出的值为 “cdeab”,故该空格处应该填 “cdeab”。 60 【正确答案】 k *k 【试题解析】 本题考查的知识点是 scarf()函数和 printf()函数的用法。 scanf()函数有两个参数,第一个参数是格式控制部分 (格式控制部分是字符串,主要由 “ ”号和格式字符组成 )第二个参数是一地址列表 (地址列表是由多个地址组成,可以是变量的地址,也可以是字符串的首地址 )。而第一个空格处位于 scanf()函数的第二个参数处,所以,第一个空应该填地址 k。 printf()函数有两个参数,第一个参数是输出格式字符串 (输出格式 字符串是由控制输出格式的字符和非格式字符组成的,通常是字符常量。非格式字符作为输出数据的间隔,输出时原样输出 )第二个参数为一输出表达式表 (输出表达式表是由若干个需要计算和输出的表达式组成的,表达式之间用逗号分隔开 )。而第;个空位于 printf()函数的第二个参数处,所以应该填 *K。