1、国家二级( C语言)笔试模拟试卷 217 及答案与解析 1 下列选项中不属于软件生命周期开发阶段任务的是 ( )。 ( A)软件测试 ( B)概要设计 ( C)软件维护 ( D)详细设计 2 按照 “先进先出 ”组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向链表 ( D)二叉树 3 数据结构中,与所使用的计算机无关的是数据的 ( )。 ( A)存储结构 ( B)物理结构 ( C)逻辑结构 ( D)线性结构 4 在计算机中,算法是指 ( )。 ( A)加工方法 ( B)解题方案的准确而完整的描述 ( C)排序方法 ( D)查询方法 5 关系代数运算是以 _为基础的运算。
2、( A)关系运算 ( B)谓词运算 ( C)集合运算 ( D)代数运算 6 下列工具中为需求分析常用工具的是 _。 ( A) PAD ( B) PFD ( C) N-S ( D) DFD 7 为用户与数据库系统提供接口的语言是 ( A)高级语言 ( B)数据定义语言 (DDL) ( C)数据操纵语言 (DML) ( D)汇编语言 8 结构化程序设计主要强调的是 ( )。 ( A)程序的规模 ( B)程序的易读性 ( C)程序的执行效率 ( D)程序的可移植性 9 下列叙述中正确的是 _。 ( A)一个逻辑数据结构只能有一种存储结构 ( B)数据的逻辑结构属于线性结构,存储结构属于非线性结构 (
3、 C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率 ( D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响 10 设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号 ),课程 C(课号,课名 ), Q选课 SC(学号,课号,成绩 ),则表 SC的关键字 (键或码 )为( )。 ( A)课号,成绩 ( B)学号,成绩 ( C)学号,课号 ( D)学号,姓名,成绩 11 若有下列定义 (设 int类型变量占 2个字节 ): int i=8; 则下列语句: printf(“i=%08d“,i); 输出的结果是 ( )。 ( A) i=8, ( B)
4、 i=00000008, ( C) i=08, ( D) 8 12 设有以下程序段 int x=0, s=0; while(!x!=0)s+=+x; printf(“%d“, s); 则 ( A)运行程序段后输出 0 ( B)运行程序段后输出 1 ( C)程序段中的控制表达式是非法的 ( D)程序段执行无限次 13 设 a和 b均为 int型变量,且 a=6, b=11,则能使值为 3的表达式是 ( )。 ( A) b (a 4) ( B) b (a-a 5) ( C) b a-a 5 ( D) (b a)-(a 4) 14 阅读以下程序 #include main() Int Case; f
5、loatprintF; printf(“请输入 2个数: ”); scanf(“ d f”, if(a B) c=a*b;printf(“%d,%d,%dn“,b,a,C); else c=b/a;printf(“%d,%d,%dn“,b,a,C); ( A) 4,5,12 ( B) 20 ( C) 5,4,20 ( D) 12 17 当下面的程序运行后,变量 c的值为 _。 main () int a=45, b=27, c=0; c=max (a, b); int max (x, y) int x,y; int z; if (xy) z=x; else z=y; return(z); (
6、A) 45 ( B) 27 ( C) 0 ( D) 72 18 下述语句中, _中的 if语句语法是错误的。 ( ) ( A) if(x y); ( B) if(x y)x+ y; ( C) if(x! y)seanf(“%d“, float f=7;则下列选项中错误的表达式是 ( )。 ( A) k=k =k ( B) -k+ ( C) k%int(f) ( D) k =f =m 25 与 “y=(x 0? 1: x 0? -1: 0)”;的功能相同的 if语句是 ( )。 ( A) if(x 0)v=1; else if(x 0)y=1; else y=0; ( B) if(x) if(x
7、 0)y=1; else if(x 0)y=-1; else y=0; ( C) y=-1 if(x) if(x 0)y=1; else if(x=0)y=0; else y=-1; ( D) y=0; if(x =0) if(x =0)y=1; else y=-1; 26 有以下程序: fun(int x, int y)return(x+y); main() int a=1, b=2, c=2, sum; sum=fun(a+, b+, a+b), c+); printf(“ d n“, sum); 执行后的结果是 ( )。 ( A) 6 ( B) 7 ( C) 8 ( D) 9 27 若已
8、定义: “int a9, *p=a; ”,并在以后的语句中未改变 p的值,不能表示a1地址的表达式是 _。 ( A) p+1 ( B) a+1 ( C) a+ ( D) +p 28 如下程序 main() int x=1,a=O,b=O; switch(x) case 0: b+; case 1: a+; case 2: a+; b+; printf(“a=%d, b=%dn“, a,b); 该程序的输出结果是 _。 ( A) a=2, b=1 ( B) a=1, b=1 ( C) a=1, b=0 ( D) a=2, b=2 29 有以下程序: #include stdio.h void s
9、s(char *s, char t) while(*s) if(*s=t) *s=t-a+A; s+; main() char strl20=“abcddfefdbd“, c=d; ss(strl, c); Printf(“%sn“, strl); 程序运行后的输出结果是 ( )。 ( A) ABCDDEFEDBD ( B) abcDDfefDbD ( C) abcAAfefAbA ( D) Abcddfefdbd 30 有以下程序 main ( ) int x = 1, 3, 5, 7, 2, 4, 6, 0, i, j, k; for (i = 0; i 3; i+) for(j = 2;
10、 j = i; j-) if (xj+1 xj) k= xj; xj = xj+1; xj+1 = k; for (i = 0; i 3; i+) for j = 4; j 7-i; j+) if xj xj+1) k = xj; xj = xj+l; xj+l = k; for (i = 0; i 8; i+) printf(“%d“, xi); printf(“n); 程序运行后的输出 结果是 ( A) 75310246 ( B) 1234567 ( C) 76310462 ( D) 13570246 31 执行以下语句的结果为 _。 int x=3,y;int*px=y=*px+; (
11、A) x=3,y=4 ( B) x=3,y=3 ( C) x=4,y=4 ( D) x=3,y不知 32 有以下程序 int b=2; int func(int*A) b+ *a; return(B) ; main() int a 2, res 2; res+=rune( ( B) float x3=l,2,3; ( C) long s23=1,1,21,2,3,; ( D) double t3=0 34 整型变量 X和 Y的值相等,且为非 0值,则以下选项中结果为 0的表达是 _。 ( A) X|Y ( B) X|Y ( C) X * chp; chp + 2 )printf(“%s“, c
12、hp); print(“n“); ( A) ABABCD ( B) ABCDAB ( C) ABCDD ( D) ABCDCD 38 设 a为 int型变量,执行下列赋值语句后, a的取值分别为 ( ) a125.534; a 20.0/3; a 20%3; a (int)125%521%4; a 5 2; ( A) 125, 6.666666, 2, 1, 1 ( B) 125, 6, 2, 1, 1 ( C) 125.534, 6.666666, 2, 1, 20 ( D) 125, 6, 2, 1, 20 39 有以下程序 void f(int a ,int i,int j) int t
13、; if(i j) t=ai; ai=aj;aj=t; f(a,i+1,j-1); main( ) int i,aa5=1,2,3,4,5; f(aa,0,4); for(i=0;i 5;i+) printf(“%d,”,aai); printf(“n”); 执行后输出结果是( ) ( A) 5,4,3,2,1, ( B) 5,2,3,4,1, ( C) 1,2,3,4,5, ( D) 1,2,3,4,5, 40 有以下程序 main() union char ch2; int d; s; s.d=0x4321; printf(“%x,%xn“,s.chO,s.ch1); 在 16位编译系统上
14、,程序执行后的输出结果是 _。 ( A) 21,43 ( B) 43,21 ( C) 43,00 ( D) 21,00 41 以下合法的字符型常量是 ( A) x13 ( B) 081 ( C) 65 ( D) n 42 在算法的 4个特性中,算法必须能在执行有限个步骤之后终止指的是算法的_特性。 43 树中度为零的结点称为 _。 44 对于软件测试,从是否需要执行被测软件的角度,可以分为静态测试和动态测试。代码检查属于 _测试。 45 顺序存储方法是把逻辑上相邻的结点存储在物理位置【 】的存储单元中。 46 当线性表采用顺序存储结构实现 存储时,其主要特点是 _。 47 以下程序的运行结果是
15、 _。 #define S(x)x*X main() int k=1; while(k main() int fun(); fun(); fun () static int a3=0,1,2; int i; for(i=0;i main() char s80; int i, j; gets(s); for(i=j=0; si!=“ 0“; i+) if(i!=C_; sj= 0; puts(s); 51 以下 sum函数的功能是计算下列级数之和。 请给函数中的各变量正确赋初值。 double sum( double x, int n ) int i; double a,b,s; for(i=1
16、;i =n;i+) a=a*x; b=b*i; s=s+a/b; return s; 52 以下程序运行后的输出结果是【 】。 main() int x=0210; printf(“%Xn“,x); 53 设有下列的程序段: char str=“Hello“; char *ptr; ptr =str; 执行上面的程序段后, *(ptr+5)的值为 _. 54 下列程序段的输出 结果是 _。 int n=c: switch(n+) default: printf(“error“); break; casea: printf(“good“); break; casec: printf(“momin
17、g“); cased: printf(“class“); 55 下面程序的功能是用来统计文件中字符个数。请填空。 #include“stdio.h“ main() long count=OL; FILE*fp=【 】 (“text.dat“,“r“); if(fp=0) printf(“Open errorn“); exit(0); while( 【 】 ) fgetc(fp); count+; fclise(fp); printf(“%1dn“,count); 56 已知字符 A的 ACSII码值为 65,以下语句的输出结果是【 】。 char ch=B; printf(“%c %dn”,c
18、h,ch); 国家二级( C语言)笔试模拟试卷 217 答案与解析 1 【正确答案】 C 【试题解析】 软件的生命周期可分为软件定义、软件开发及软件运行维护 3个阶段。其中软件定义阶段的主要工作有可行性研究与计划制定和需求分析等;软件开发阶段的主要工作有概要设计、详细设计和测试等;软件运行维护阶段的主要工作是软件的运行及后期的维护等。 2 【正确答案】 A 【试题解析】 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫 “队尾 ”,删除元素的一端叫 “队头 ”,先插入的 元素先被删除,是按 “先进先出 ”的原则组织数据的。 3 【正确答案】 C 【试题解
19、析】 数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用的计算机无关。 4 【正确答案】 B 【试题解析】 计算机算法是指解题方案的准确而完整的描述,它有以下几个基本特征:可行性、确定性、有穷性和拥有足够的情报。 5 【正确答案】 C 【试题解析】 关系代数运算是以关系代数作为运算对象的一组高级运算的集合。它的基本操作是并、交、差、笛卡尔积,另外还包括垂直分割 (投影 )、水平分割(选择 )、关系的结合 (连接 )等。 6 【正确答案】 D 【试题解析】 常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析的常用工具有:数据流图 (DFD) 、数据字典 (DD) 、判定树和判
20、定表等。 7 【正确答案】 C 【试题解析】 DBMS 提供数据操纵语言 (DML)实现对数据库中数据的操作,数据操纵语言 (DML)是用户 (包括应用程序 )与数据库系统的接口。数据操纵语言通常包括检索和更新功能。注意:程序模块中语言处理部分的分类,各子类的定义及其功能。 8 【正确答案】 B 【试题解 析】 结构化程序缩小了程序静态结构与动态执行之间的差异,使程序员能方便、正确地理解程序的功能。由此可见,结构化程序设计主要强调的是程序的易读性。 9 【正确答案】 D 【试题解析】 一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。而采用
21、不同的存储结构,其数据处理的效率是不同的。 10 【正确答案】 C 【试题解析】 关键字是指属性或属性的组合,其值能够唯一地标识一个元组,而在 SC中学号和课号的组合可以对元组进行唯一的标识。 11 【正确答案】 B 【试题解析】 本题考查 printf函数的格式。 “%08”格式符中的 “0”表示在指定数据输出宽度的同时,在数据前面的多余空格处加 “0”; “8”表示指定数据的输出宽度为 8位。 12 【正确答案】 B 13 【正确答案】 D 【试题解析】 表达式 “a b”表示的是求 a除以 b 的余数。因此,选项 A: (64)=2, 11 2=1;选项 B: (6-6 5)5, 11
22、5=1;选项 C: 11 6-6 5=4;选项 D:(11 6)-(6 4)=3。 14 【正确答案】 C 【试题 解析】 在 C语言中, gwitcb()后的一对圆括号中可以是整型表达式或字符表达式。 case语句后面的常量表达式的类型必须与 swItch 后圆括号中的表达式类型相同,各 case语句标号的值应该互不相同。选项 A中 case后面的常量表达式为实型,所以不正确;选项 D中 case后面出现了变量表达式,所以选项 D错误。 15 【正确答案】 B 【试题解析】 数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。 16 【正确答案】 C 【试题解
23、析】 本题考查 if else语 句。第一个 if 语句,先判断条件,发现 a b 成立,执行下列的复合语句,得 c=a*b=20, b、 a的值不变。 17 【正确答案】 A 18 【正确答案】 C 19 【正确答案】 B 【试题解析】 选项 A中 #sub含有非法字符 #、 break 属于 C语言关键字都不是合法标识符;选项 C中 3a以数字开头不是合法标识符;选项 D中的 auto是 C语言关键字不属于合法标识符;故应该选择 B。 20 【正确答案】 D 【试题解析】 C语言中的 +和 运算符,这两种运算符是单目运算符,其运算对象可以是 整型、字符型、 float型和 double型等
24、基本数据类型。 21 【正确答案】 B 22 【正确答案】 D 【试题解析】 &是取地址运算符, y=&a是将 a的地址赋给 y,而 a的地址没有发生变化,因此 y的值为 E2000。 23 【正确答案】 C 24 【正确答案】 C 【试题解析】 在 C语言中,求余运算符 “%”两边的运算对象都应为整型数据,所以需要对变量 f进行强制类型转换,正确的写法为 k%(int)f。在 C语言中,逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次 序是: !(逻辑 “非 ”)、算术运算符、关系运算符、 &(逻辑 “与 ”)、 (逻辑 “或 ”)、赋值运算符。根据运算符的优先级与结合
25、性,对于选项 A),先计算 k =k 的值 (为真,即 1),再用 1对 k进行赋值。对于选取项 B,先计算 k+的值,再对其取负数。对于选项 D),先计算 k =f的值 (为假,即 0),再用 0与 m进行比较,故最终结果为 0。 25 【正确答案】 B 【试题解析】 y=(x 0?1: x 0?-1: 0)中有两个三目运算符,因此按右到左的顺序运算,可写成 y=(x 0?1: (x 0?-1: 0),故选择 B 选项。 26 【正确答案】 C 【试题解析】 表达式 a+, b+, a+b 是一个逗号表达式,在逗号表达式中,从左向右进行各个表达式的运算,最后一个表达式的值就是逗号表达式的结果
26、。所以表达式 a+, b+, a+b 的值为 5,所以 fun()函数中的形参 x的值为 5;表达式c+先把变量 c的值传给形参 y,然后 c的值加 1,所以 Y的值为 3,因此函数fun(a+, b+, a+b), c+)的返回值为 8。 27 【正确答案】 C 28 【正确答案】 C 29 【正确答案】 B 【试题解析】 对 字符数据进行算术运算相当于对它们的 ASCII 码进行算术运算。程序中的 t- a+A是将字符变量 t中的字符转换为相对应的大写字母。语句if(*s=t)*s=t-a+A;首先判断 s所指元素是否与 t中的字符 (d)相同,若相同则转换为相对应的大写字母,否则 s+,
27、 s 指向数组中的下一个元素。 30 【正确答案】 A 【试题解析】 主函数中定义了一个整型数组 x,并初始化接着执行了一个二重for循环,在该二重循环的作用是将数组的前 4个元素按从大到小排序,接着用了一个;重循环 (也是冒泡算法 )将数组的后 4个元素按从小到大的顺序排序,故最后依次输出数组的个元素的值为 75310246,所以, 4个选项中选项 A符合题意。 31 【正确答案】 B 【试题解析】 +和 *的运算优先级别相同,且从右到左结合, y=*px+也就是y=*(px+), +运算只对 px有效。这里 +是后置的,应当先将 px所指向的变量*px(也就是变量 x)的值赋给变量 y,然
28、后 px才增 1。 32 【正确答案】 B 33 【正确答案】 D 【试题解析】 选项 A定义了一个 1行 4列的二维数组,只有 4个元素,而初始化列表有 5个初始值,所以不正确。定义二维数组时只能省略第二维的长度,选项B 省略的是第一维的长度,所以不正确。选项 C定义了一个 2行 3列的二维数组,但初始值列表中使用了 3个大括号,使行数超出定义范围,所以不正确。故正确答案是选项 D。 34 【正确答案】 D 【试题解析】 “|”为或运算符,当其左右表达式中只要一个为非零则整个表达式的值 1。是按位或, &是按位与, 是按位异或,这三位运算符是按值的二进制位来比较的。 35 【正确答案】 C
29、【试题解析】 逻辑运算符的优先次序如下: !(非 )&( 与 )|( 或 ),但本题特别注意的是短路的概念。 36 【正确答案】 D 37 【正确答案】 D 38 【正确答案】 D 39 【正确答案】 A 【试题解析】 递归调用,当第 3次进行递归调用时结束调用过程,排序结果为:5, 4, 3, 2, 1。 40 【正确答案】 A 【试题解析】 此题考核的是共用体的特征。 int类型变量和字符数组 ch 共用两个字节的相同的存储单元,通常 ch0位于低字节, ch1位于高字节,所以s.ch0=21, s.ch1=43。 41 【正确答 案】 A 【试题解析】 C语言的字符常量是用单引号 (即撇
30、号 )括起来的一个字符。除此之外,在 C语言中还允许用以一个 “”开头的字符序列来表示字符常量。其中,形式“ddd”表示 1到 3位 8进制数所代表的字符;形式 “xhh”表示 1到 2位 16进制数所代表的字符。在本题中 x13表示回车符,是一个字符常量; 081用 8进制数所代表的字符,但形式不正确,因为 8进制数所表示的字符中不会出现数字 “8”;65不是一个字符,而是一个 +进制数字; “n”是用双引号括起来的一个字符,表示一个字符串,而不是字符 常量。 42 【正确答案】 有穷性 【试题解析】 算法的 4个基本特性包括:可靠性、确定性、有穷性和拥有足够的情报,其中,算法的有穷性指的是
31、算法必须在有限的时间内完成,即算法必须在执行有限个步骤之后终止。 43 【正确答案】 叶子结点 【试题解析】 树中度为零的结点,也就是没有后件的结点,称为叶子结点。 44 【正确答案】 静态 【试题解析】 静态测试包括代码检查、静态结构分析,代码质量度量等。静态测试不实际运行软件。 45 【正确答案】 相邻 【试题解析】 常用的存储 表示方法有 4种,顺序存储、链式存储、索引存储、散列存储。其中,顺序存储方法是把逻辑上相邻的结点存储在物理位置也相邻的存储单元中。 46 【正确答案】 逻辑结构中相邻的结点在存储结构中仍相邻。 【试题解析】 顺序存储结构的主要特点是数据元素按线性表的逻辑次序,依次
32、存放在一组地址连续的存储单元中。在存储单元中,各元素的物理位置和逻辑结构中各结点间的相邻关系是一致的。 47 【正确答案】 1, 4,9, 16, 【试题解析】 分析程序执行过程,第 1次循环, k=1时,此时 s(1)=1*1=1,然后k 的值加 1;第 2次循环, k=2时, s(2)=2*2=4,然后 k 的值加 1;第 3次循环,k=3时, s(3)=3*3=9,然后 k的值加 1;第 4次循环, k=4时, S(4)=4*4=16,然后k 的值加 1:当 k=5 时,条件不满足,退出循环。 47 【试题解析】 printf是格式化输出函数。 48 【正确答案】 层次模型 【试题解析】
33、 在数据模型中,用二维表表示关系模型,用有向图表示网状模型,用树型结构表示层次模型。 49 【正确答案】 0, 2, 4 0, 4, 8 【试题解析】 本题主要考查 for循环语句的使用以及静态局部变量的特点。 50 【正确答案】 sj+=si。 【试题解析】 循环开始后字符数组 s中储存值与字符 c相同,则 1+直接跳过当前值;如果不相同,则将当前值赋予数组指定位置,并通过 j+将下标加 1,指向下一元素要存储的位置。 51 【正确答案】 a=1; b=1; s=1;或 a=b=s=1;或 a=1 b=1, s=1或给 a, b, s赋 1或 1.0或 1. 【试题解析】 sum函数的功能是
34、求表达式 s的级数之和,该函数的大致思路是:在该函数中,定义了 个整型变量 i用作循环计数器,定义一个变量 a用来表示各个子项的分子,初始为第一个子项的分子,故为 1,定义了一个变量 b 用来表示各个子项大分母,初始为第一个子项的分母,故为 1,定义一个变量 s存放累加和,初始为第一个子项的值即为 1,然后给各个定义的变量初始化,然后通过一个 for循环将题目中的数学表达式的各个子项求出来并累加到 s中,所以说,在该题的空格处应该填写将 a、 b和 s赋初值的语句,即为 a=1; b=1; s=1: (说明:语句的顺序可任意 ) 或 a=b=s=1; (说明:变量的顺序可任意 ) 或 a=1,
35、 b=1, s=1 (说明 :赋值表达式的顺序可任意 ) 给 a, b, s赋 1或 1.0或 1都可以。 52 【正确答案】 88 【试题解析】 C语言规定,以 0开头的整型常量为八进制。另外,在 primf()函数中, %X表示以十六进制无符号形式输出一个整数,且十六进制中的 ABCDEF为大写字母。本题的输出应该是八进制 210的十六进制形式。将八进制转换为十六进制,可以先将其转换为二进制。因为 1位八进制表示 3位二进制, 4位二进制表示 1位十六进制。 (210)8=(1000 1000)2=(88)16,故本题输出为 880 53 【正确答案 】 0 【试题解析】 本题涉及字符数组
36、和指针的两个知识点: 在 c语言中,字符型数组在存放字符串时会自动在末尾加上字符串结束标识符 0,所以题中数组 str有 6个元素。 ptr指向数组 str的首地址, ptr+5是指向 str5, *(ptr+5)是引用 str5的值,即 0。 54 【正确答案】 morningclass 【试题解析】 本题考查了两个知识点: “+、 -”运算后缀形式是先使用变量原来的值,使用完后再使其增 1或减 1; 在 switch 语句中,当 n=c时,执行“casec: ”,输出 morning;因为此句中没有 break 语句,因此接着执行“cased:”,输出 class,最终输出结果为 morningclass。 55 【正确答案】 fopen !feof(fp) 【试题解析】 第一空从右边的括号中可以看出,这里应该填入一个 fopen,整条语句用来打开一个名为 text.dat的文件。第二空是一个 while循环的循环条件表达式,循环体每次读取一个字符,并让 count增 1,所以循环条件应该是 “如果文件还没结束 ”,故应该填 !feof(fp)。 56 【正确答案】 B 66 【试题解析】 c表示输出字符, d输出整型,字符 “B”对应的 ASCII值为66。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1