1、国家二级( C语言)笔试模拟试卷 223 及答案与解析 1 数据结构中 ,与所使用的计算机无关的是数据的 ( A)存储结构 ( B)物理结构 ( C)逻辑结构 ( D)物理和存储结构 2 数据库系统的核心是 ( )。 ( A)数据模型 ( B)数据库管理系统 ( C)数据库 ( D)数据库管理员 3 以三级模式为框架形成的 3种数据库中,真实存在于计算机外存的数据库是( )。 ( A)概念数据库 ( B)用户数据库 ( C)物理数据库 ( D)逻辑数据库 4 数据存储和数据流都是 _,仅仅是所处的状态不同。 ( A)分析结果 ( B)事件 ( C)动作 ( D)数据 5 在软件测试设计中,软件
2、测试的主要目的是 ( ) ( A)实验性运行软件 ( B)证明软件正确 ( C)找出软件中全部错误 ( D)发现软件错误而执行程序 6 软件需求分析一般应确定的是用户对软件的 _。 ( A)功能需求 ( B)非功能需求 ( C)性能需求 ( D)功能需求和非功能需求 7 支持数据库各种操作的软件系统叫做 ( A)数据库管理系统 ( B)文件系统 ( C)数据库系统 ( D)操作系统 8 软件需求分析一般应确定的是用户对软件的 _。 ( A)功能需求 ( B)非功能需求 ( C)性能需求 ( D)功能需求和非功能需求 9 数据库设计中,用 E R图来描述信息结构但不涉及信息在计算机中的表示,它属
3、于数据库设计的 ( A)需求分析阶段 ( B)逻辑设计阶段 ( C)概念设计阶段 ( D)物理设计阶段 10 下列关于线性表的叙述中,不正确的是 ( )。 ( A)线性表可以是空表 ( B)线性表是一种线性结构 ( C)线性表的所有结点有且仅有一个前件和后件 ( D)线性表是由 n个元素组成的一个有限序列 11 设有如下定义: int(*ptr)(): 则以下叙述中正确的是 ( )。 ( A) ptr是指向一维组数的指针变量 ( B) ptr是指向 int型数据的指针变量 ( C) ptr是指向函数的指针,该函数返回一个 int型数据 ( D) ptr是一个函数名,该函数的返回值是指 int型
4、数据的指针 12 关于 C语言中数的表示 ,以下叙述中正确的是 ( A)只要在允许范围内整型数和实型数都能精确的表示 ( B)只有整型数在允许范围内能精确无误的表示 ,实型数会有误差 ( C)只有实型数在允许范围内能精确无误的表示 ,整型数会有误差 ( D)只有用八进制表示的数才不会有误差 13 以下叙述不正确的是 ( A)一个 C源程序可由一个或多个函数组成 ( B)一个 C源程序必须包含一个 main函数 ( C) C程序的基本组成单位是函数 ( D)在 C程序中 ,注释说明只能位于一条语句的后面 14 以下叙述中正确的是 ( )。 ( A)构成 C程序的基本单位是函数 ( B)可以在一个
5、函数中定义另一个函数 ( C) main()函数必须放在其他函数之前 ( D)所有被调 用的函数一定要在调用之前进行定义 15 下列正确的变量声明是 ( ) ( A) int m; n; k; ( B) unsigned int m, n, k; ( C) double int m, n, k; ( D) int m, n, k 16 设有定义: int k=1,m=2;float f=7;则下列选项中错误的表达式是 ( )。 ( A) k=k =k ( B) -k+ ( C) k%int(f) ( D) k =f =m 17 两次运行下列的程序,如果从键盘上分别输入 3和 1,则输出结果是
6、( )。main() int x; scanf(“%d“, ( B) scan(“%d,%d, %d“, ( C) scan(“%do/od%d“, ( D) scanf(“i %d,j %d,k %d“, 26 请读程序: #include stdio.h int a=2,4,6,8,; main() int i; int *p=a; for( i=0;i 4;i+) ai=*p+; priatf(“%dn“,a2); 上面程序的输出结果是 ( )。 ( A) 6 ( B) 8 ( C) 4 ( D) 2 27 请选出下面正确的程序段 ( )。 ( A) int *s; scanf(“%d“
7、,s); ( B) int *s,k; *s=100; ( C) int *s,k; char *p, c; s= p= *p=a; ( D) int *s,k; char *p, c; s= p= s=p; *s=1; 28 有如下程序: #include stdio h msin() char s=“ABCD“, *P; for(p=s+1; p s+4; p+) Printf(“%sn“, p); 该程序的输出结果是 ( )。 ( A) ABCD BCD CD D ( B) A B C D ( C) B C D ( D) BCD CD D 29 有以下程序: #include stdio
8、.h main() int a=1,2,3,4,5,6,7,8,9,10,11, 12,, *p=a+5, *q=NULL; *q=*(p+5); printf(“%d %dn“, *p, *q); 程序运行后的输出结果是 ( )。 ( A)运行后报错 ( B) 6 6 ( C) 6 11 ( D) 5 10 30 下列程序的运行结果是 _。 void fun(int *a,int *b) int *k; k=a;a=b;b=k; main() int a=3,b=6,*x= fun(x,y); printf(“%d%d“,a,b); ( A) 63 ( B) 36 ( C)编译出错 ( D)
9、 0 31 在说明语句 int *f();中,标识符 f代表的是 _。 ( A)一个用于指向整型数据的指针变量 ( B) 个用于指向 维数组的行指针 ( C) 个用于指向函数的指针变量 ( D)一个返回值为指针型的函数名 32 已定义 ch为字符型变量,以下赋值语句中错误的是 ( )。 ( A) ch= ( B) ch=62+3; ( C) ch=NULL; ( D) ch=xaa; 33 有以下程序: int a=3; main() int s=0; int a=5; s+=a+; ) s+=a+; printf(%dn,s); 程序运行后的输出结果是 ( )。 ( A) 8 ( B) 10
10、 ( C) 7 ( D) 11 34 设有数组定义: chararray=“China“;则数组 array所占的空间为 ( )个字节。 ( A) 4 ( B) 5 ( C) 6 ( D) 7 35 有以下程序 main() int k=4, n=0; for(;n k;) n+; if(n%3!=0)continue; K-; printf(“%d,%dn“,k,n); 程序运行后的输出结果是 ( A) 1, 1 ( B) 2, 2 ( C) 3, 3 ( D) 4, 4 36 下列程序的输出结果是 _。 #include stdio.h main() union int k; char i
11、2; *s, a; s= for(i=0;i n;i+) for(j=0;j n;j+) *p=aij;p+; main() int *p,a33=1,3,5,2,4,6; p=(int*)malloc(100); amovep(p,a,3); printf(“%d%dn“,p2,p5);free(p); ( A) 56 ( B) 25 ( C) 34 ( D)程序错误 39 若有定义: int *p3;,则以下叙述中正确的是 ( A)定义了一个基类型为 int的指针变量 p,该变量具有三个指针 ( B)定义了一个指针数组 p, 该数组含有三个元素,每个元素都是基类型为 int的指针 ( C)
12、定义了一个名为 *p的整型数组,该数组含有三个 int类型元素 ( D)定义了一个可指向一维数组的指针变量 p,所指一维数组应具有三个 int类型元素 40 有以下程序 main() int a44=1,4, 3, 2, 8, 6, 5,7, 3, 7, 2, 5, 4, 8, 6, 1, i, j, k, t; for(i=0; 4: i+) for(j=0; j 3; j+) for(k=j+1; k 4; k+) if(aji akit=aji; aji=aki=aki=t; /*按列排序 */ for(i=0; i 4; i+)printf(“%d, “, aii); 程序运行后的输出
13、结果是 ( A) 1, 6, 5, 7, ( B) 8, 7, 3, 1, ( C) 4, 7, 5, 2, ( D) 1, 6, 2, 1, 41 某二叉树中度为 2的结点有 18个 ,则该二叉树中有【 】个叶子结点。 42 长度为 n的顺序存储 线性表中 ,当在任何位置上插入一个元素概率都相等时 ,插入一个元素所需移动元素的平均个数为【 】。 43 在深度为 7的满二叉树中,度为 2的结点个数为【 】。 44 数据结构包括数据的逻辑结构、数据的【 】以及对数据的操作运算。 45 在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,【 】负责数据的模式定义与数据的物理存取构建。
14、 46 下列程序段的输出结果是 _。 int n=c; switch(n+) default:printf(“error“);break; case a: printf(“good“);break; case c: printf(“morning“); case d: printf(“class“); 47 有以下程序: void swap 1(int c) int t; t=c0;c0=c1;c1=t; void swap2(int c0,int c1) int t; t=c0; c0=c1; c1=t; main() int a2=3,5,b2=3,5; swaplA);swap2(b0,
15、b1); printf(“%d, %d, %d, %dn“, a0,a1,b0,b1); 其输出结果是【 】。 48 下面 fun函数的功能是将形参 x的值转换成二进制数,所得二进制数的每一位数放在数组中返回,二进制数的最低位放在下标为 0的元素中,其他依此类推。请填空。 Fun(int x,int b) int k=0,r; do r=x%2; ( )=r; x/=2; while(x); 49 以下程序的运行结果是 ( )。 main() int a=1, b=2, c; if(a B)c=1; else if(a=B)c=0; else c=-1; printf(“%dn“, C); 5
16、0 软件生命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。编码和测试属于 ( )阶段。 51 若 x为血类型,请写出与 !x 等价的 C语言表达式 _。 52 执行下列语句段后, x的值是 _。 int*p, x: x=100; p=”语句的输出结果是 _。 55 若输入字符串: abcde,则以下 while循环体将执行【 】次。 while(ch=getchar()=e)printf(“*“); 56 若有以下程序 main() char a; a=H-A+0; printf(“%cn“,a); 执行后输出结果是【 】。 国家二级( C语言)笔试模拟试卷 223 答案与解析 1
17、 【正确答案】 C 【试题解析】 数据结构概念一般包括数据的逻辑结构、存储结构及数据上的运算集合等。数据的逻辑结构只抽象地反映数据元素之间的逻辑关系 ,而不管它在计算机中的存储形式。 2 【正确答案】 B 【试题解析】 数据库系统由数据库 (数据 )、数据库管理系统 (软件 )、数据库管理员 (人员 )、硬件平台 (硬件 )、软件平台 5个部分构成。其中数据库管理系统是数据库系统的核心,它负责数据库中的数据组织、数据操纵 、数据维护、控制及保护和数据服务等工作。 3 【正确答案】 B 【试题解析】 以内模式为框架所组成的数据库叫物理数据库; 以概念模式为框架所组成的数据库叫概念数据库; 以外模
18、式为框架所组成的数据库叫用户数据库。它是真实存在于计算机外存中的数据库。 4 【正确答案】 D 【试题解析】 数据流图有 4种成分:源点或终点、处理、数据存储和数据流。数据存储是处于静止状态的数据,数据流是处于运动中的数据。 5 【正确答案】 D 6 【正确答案】 D 【试题解析】 软件需求分析中需要构造一个完全的系统逻辑模型,理解用户提出的每一功能与性能要求,是用户明确自己的任务。因此,需求分析应确定用户对软件的功能需求和非功能需求。 7 【正确答案】 A 【试题解析】 数据库管理系统是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等操作。 8 【正确答案】
19、D 【试题解析】 软件需求分析中需要构造一个完全的系统逻辑模型,理解用户提出的每一功能与性能要求,是用户明确自己的任务。因此,需求分析应确定用户对软件的功能需 求和非功能需求。 9 【正确答案】 C 【试题解析】 E-R图即实体 -联系图 (Entity-Relation Diagram),用来建立数据模型 ,在数据库系统概论中属于概念设计阶段。 10 【正确答案】 C 【试题解析】 线性表是一种线性结构,由 n(n0)个元素组成,所以线性表可以是空表。但是在线性表中,第一个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件。所以选项 C是错误的。 11 【正确答案】 C 【试
20、题解析】 本题中 int(*ptr)()的含义是指 向函数的指针变量,其为指向函数的指针变量,该函数返回一个 int型数据,故选择 C选项。 12 【正确答案】 B 【试题解析】 在 C语言中 ,整型数值是以补码表示的。正整数的补码与原码相同 ,负数的补码是将该数的绝对值的 =进制形式按位取反再加 1。这样 ,在整型数的允许范围内能够精确的表示整数。与整型数据的存储方式不同 ,浮点型数据是按照指数形式存放的。系统把一个浮点型数据分成小数部分和指数部分 ,分别存放。由于浮点型数据是由有限的存储单元组成的 ,因此能提供的有效数字总是有限的 ,在有效数字以外的数字将被舍去 ,由 此可能会产生一些误差
21、。 13 【正确答案】 D 【试题解析】 本题考查 C语言的基本基础知识。在 C程序中 ,注释用符号 “/*“开始 ,而以符号 “*/“结束。程序的注释可以放在程序的任何位置。通常将注释放在程序的开始 ,以说明本程序的功能 ;或者放在程序的某个语句后面 ,以对此语句的功能进行描述。无论将注释放有何处 ,在程序进行编译时 ,编译程序不会处理注释的内容 ,且注释内容也不会出现在目标程序中。 14 【正确答案】 A 【试题解析】 根据函数的定义语法规定,在 C语言程序中,不能嵌套定义,即不能在函数中 再定义函数,故排除选项 B; main()函数在 C语言程序中是必须的,但函数可以放在程序中的任意位
22、置,故排除选项 C;当在所有函数的外部、被调用之前说明函数时,在函数说明后面的任何位置上都可以对函数进行调用。函数说明也可以放在调用函数的说明部分,如在 main 函数内部进行说明,则只能在 main 函数内部才能识别函数,故选项 D被排除。选项 A符合题意。 15 【正确答案】 B 16 【正确答案】 C 【试题解析】 在 C语言中,求余运算符 “%”两边的运算对象都应为整型数据,所以需要对变量 f进行强制类型转换,正 确的写法为 k%(int)f。在 C语言中,逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是: !(逻辑 “非 ”)、算术运算符、关系运算符、 其中
23、, f是函数名,调用它以后能得到 个指向整型数据的指针 (地址 ), x,y是函数f 的形参。在 f 的两侧分别为 *运算符和 ()预算符,而 ()优先级高于 *,因此 f先与 ()结合,显然是函数形式。这个函数前面 有一个 *,表示此函数是指针型函数 (函数值是指针 )。前面的 int表示返回的指针指向整型变量。 32 【正确答案】 A 【试题解析】 选项 A中 为转义字符应该用 来表示,故选项 A错误。字符变量中的值就是该字符的 ASCII码值,因此字符变量可以作为整型变量宋处理,可以用整型常量给字符变量赋值,选项 B 正确。选项 C是将一个空值赋值给字符变量,正确。选项 D将一个用十六进
24、制数表示的转义字符赋值给字符变量,正确。 33 【正确答案】 A 【试题解析】 本题中定义一个全局变量 a和一个局部变量 a。 局部变量和全局变量的不同在于,局部变量的存储单元都是在进入这些局部变量所在的函数体 (或复合语句 )时生成,退出其所在的函数体 (或复合语句 )时消失,而全局变量是在函数外部任意位置上定义的变量,它的作用域从变量定义开始,到整个源文件结束为止。若全局变量和某一函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,起作用的将是局部变量,与同名的全局变量不发生任何关系。在程序中首先定义了变量 s并赋值为 0,接着在嵌套的复合语句 中定义了变量 a并赋初值为 5
25、,接着执行语句 “s+=a+;”在这条语句中 a加 1,但 表达式 a+还是原来的值,故 s=s+5, s为 5,程序执行到外层,此时 内定义的变量 a不再有效,变量 a为 之前定义的且初值为 3,接着执行 后面的语句 “s+=a+;”,相当于执行语句 “s=s+(a+);”即 s=5+3,最后值为 8,所以输出的 s值为 8。故 4个选项中 A正确。 34 【正确答案】 C 【试题解析】 在定义字符数组用字符串常量进行初始化时,系统会自动在结尾加0做结束标志,所以数组 array所占的空间为 6个字节。 35 【正确答案】 C 【试题解析】 在本程序的 for循环中,用到了一个 contin
26、ue语句, continue语句的作用是停止本次循环,即不执行循环体内 continue语句后面的其他语句,继续下次循环的条件判断。首先在 for循环中 n自加 1(值变为 1),然后执行后面的 if语句,由于 if语句后面括号的表达式 (1%3!=0)的值为真,程序执行 continue语句,回到 for循环的开始部分,并且判断 for循环中的条件表达式 (n k)为真,重复执行 “n+; ”语句,如此循环直到 n=3 时, if 语句判定条件中表达式 (3%3!=0)的值为假,程序执行 if语句后面的 “k-; ”语句,此时 k 的值为 3,不满足 “n k”,退出 for循环。故最后的
27、k 和 n的值为 3和 3。 36 【正确答案】 A 【试题解析】 在主函数定义了 个共用体变量 a,及 个指向该变量的指针 s。执行 s- i0=0x39; s- i1=0x38;,将分别共用体的第 字节及第二字节存入十六进制数据 0x39及 0x38,由于在共用体中,变量共同占用存储空间,在输出 s-k 时,实际上就是输出开始写入的数据,而对于 PC 机,在存放血型数据时,低位在前,高位在后,故本题输出为 3839。 37 【正确答案】 D 38 【正确答案】 A 【试题解析】 本题 main 函数中定义了指针 P和二维数组 a,通过函数 amovep将数组的值存入指针 P所指向的存储单元
28、中, a的各元素分别为: a0=1,ao1=3, a02=5, , a20=0, a21=0, a22=0。通过 malloc()函数给指针分配内存空间, free()函数用于释放指针变量所用内存空间。在主函数中通过 amovep(p,a,3)讽用函数 amovcp,使得实参 P与形参 P,实参数组 a与形参中指向数组的指针变量共用同一存储空间 。最后输出 p2,p5为 56。 39 【正确答案】 B 【试题解析】 int *p3是定义指针数组,该数组共含有 3个元素,每个元素所指存储单元中存储的数据为整型数据。 40 【正确答案】 A 【试题解析】 本题利用多重 for循环的嵌套来实现对二维
29、数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列。最后输出对角线上的元素值。故本题答案为 A)。 41 【正确答案】 19 【试题解析】 在任意一棵二叉树中 ,度为 0的结 点 (即叶子结点 )总是比度为 2的结点多一个。 42 【正确答案】 n/2 【试题解析】 本题考查了顺序存储线性表的插入运算。在线形表的任何位置插入一个元素的概率相等 ,即概率为 p = 1/(n+1),则插入一个元素时 ,所需移动元素的平均次数为 E = 1/(n+1)(n-i+1)=n/2。 43 【正确答案】 63或 26-1 【试题解析】 在满二叉树中,每
30、层结点都是满的,即每层结点都具有最大结点数。深度为 k的满二叉树,一共有 2k-1个结点,其中包括度为 2的结点和叶子结点。因此,深度为 7的满 二叉树,一共有 27-1个结点,即 127个结点。根据二叉树的另一条性质,对任意一棵二叉树,若终端结点 (即叶子结点 )数为 n0,而其度数为 2的结点数为 n2,则 n0=n2+1。设深度为 7的满二叉树中,度为 2的结点个数为 x,则改树中叶子结点的个数为 x+1。则应满足 x+(x+1)=127,解该方程得到, x的值为 63。结果上述分析可知,在深度为 7的满二叉树中,度为 2的结点个数为 63。 44 【正确答案】 存储结构 【试题解析】
31、数据结构包括 3个方面,即数据的逻辑结构、数据的存储结构及对数据的操作运算。 45 【正确答案】 数据定义语言 【试题解析】 在数据库管理系统提供的数据定义语言,数据操纵语言和数据控制语言中,数据定义语言负责数据的模式定义与数据的物理存取构建,数据操纵语言负责数据的操纵,包括查询及增、删、改等操作,数据控制语言负责数据完整性、安全性的定义与检查以及并发控制、恢复等功能。 46 【正确答案】 morningclass 【试题解析】 本题考查了两个知识点: “+, -”运算后缀形式是先使用变量原来的值,使用完后再使其增 1或减 1; 在 switch 语句中,当 n=c时,执行 “case c”,
32、输出 morning;因为此句中没有 break语句,因此接着执行 “case d:”,输出class,最终输出结果为 morningclass。 47 【正确答案】 53 3 5 【试题解析】 函数 swap1的形参是数组,故形参的改变能够影响实参,所以执行完 swap1(a)后, a0=5、 a1=3;函数 swap2的形参是简单变量,故形参的改变不能够影响实参,所以执行完 swap2(b)后, b0=3、 b1=5;正确答案为 53 3 5。 48 【正确答案】 bk+ 【试题解析】 本题的考查点是 do-while语句。形参 x默认为十进制,要想将一个十进制的数转换成二进制,可以使用整
33、除求余法,题中的程序段也表明了将使用这种方法,将一个十进制的数转换成二进制要用这个十进制数不断的整除 2,将每次的余数记录下来,直至无法再除,此时,整除得到的第一个元素即为二进制数的最低位,其余依次类推,所以在程序段中的横线处,应当填写 “bk+”。 49 【正确答案】 -1 【试题解析】 if else语句的形式: if(表达式 ) 语句 1 else if 语句 2 else 语句 3 它的功能是:若表达式的值为真,执行语句 1,并跳过其他语句,执行 if else语句的下一条语句,若表达式的值为假,跳过语句 1,执行语句 2,依次往下判断; a=1, b=2,条件 a b不成立,继续判断
34、 a=b,仍不成立,则执行 c=-1,输出 -1。 50 【正确答案】 开发 【试题解析】 软件生命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。定义阶段包括可行性研究初步项目计划和需求分析;开发阶段包括概要设计、详细设计、实现和测试;维护阶段包括使用、维护 和退役。 51 【正确答案】 x=0 【试题解析】 !x 的逻辑意思就是 x为非,即 x=0。 52 【正确答案】 150。 【试题解析】 本题先给变量 x赋初始值 100,然后将指针 p 指向变量 x, *p是取指针 p所指地址的内容,即 100,所以 x=100+50=150。 53 【正确答案】 4 3 3 4 54 【
35、正确答案】 6 【试题解析】 strlen()函数的作用是计算字符串的长度并作为函数的返回值,这里的长度不包括串尾的结束标志 0。 tf 是转义字符,代表横 向跳若干格: “是转义字符,代表双引号; 023只代表一个字符,而不管转义字符后面有几个字符; 仅 AB,是以两位十六进制数 AB 表示的 ASCII码字符,只代表一个字符; n是转义字符,代表回车换行。 5个字符常量各代表一个字符,再加上字母 C,所以返回的长度是 6。 55 【正确答案】 0 【试题解析】 函数 getchar()是从键盘得到用户输入的一个字符。用户输入的第 1个字符是 a,不管后面输入的是什么 ch 的值都是 a,因此条件 (ch=getchar()=e为假,这个循环不会被执行。 56 【正确答案】 7 【试题解析】 字符型数据的运算是通过其 ASCII码值进行的。