1、二级 C 语言笔试-289 及答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:50.00)1.能正确表示“当 x 的取值在1,10和100,110范围内为真,否则为假”的表达式是( )。(分数:1.00)A.(x=1)printf(“%d/n“, c);(分数:2.00)A.2B.3C.5D.417.若有下列说明和语句,已知 int 型数据占 2 个字节,则下列语句的输出结果是( )。struct stchar a15;int b;double c;printf(“%d“,sizeof (struct st);(分数:2.00)A.15B.8C.25D.218
2、.函数 ftell(fp)的作用是( )。(分数:2.00)A.得到 fp 所指向文件的当前读写位置B.初始化流式文件的位置指针C.移动流式文件的位置指针D.以上答案均正确19.C 语言的基本单位是( )。(分数:2.00)A.函数B.过程C.子程序D.子函数20.有下列程序:main()char s=“abcde“;s+=2;printf(“%d/n“, s0;执行后的结果是( )。(分数:2.00)A.输出字符 a 的 ASCII 码B.输出字符 c 的 ASCII 码C.输出字符 cD.程序出错21.若定义 int a=10,则表达式 a+=a-=a*=a 的值是( )。(分数:1.00
3、)A.0B.-180C.-100D.-9022.下列选项中合法的赋值语句是( )。(分数:1.00)A.a=b=34B.a=34,b=34C.i-1;D.m=(int)(x+y);23.若二维数组 a 有 m 列,则在 aij前的元素个数为( )。(分数:1.00)A.i*m+j-1B.i*m+jC.j*m+ID.i*m+j+124.若整型变量 a、b、c、d 中的值依次为:1、4、3、2。则条件表达式 ab?a:cd?c:d 的值是( )。(分数:1.00)A.1B.2C.3D.425.在下列给出的表达式中,与 while(E)中的(E)不等价的表达式是( )。(分数:1.00)A.(!E=
4、0)B.(E0|E0)C.(E=0)D.(E!=0)26.下列程序的输出结果是( )。#include stdio.hf(int(分数:1.00)A.for(i=1;i5;i+)printf(“%d %c“, xi.num, xi.name2);以上程序段的输出结果为( ).(分数:1.00)A.2A3N4A5UB.1I2a3h4IC.1A2N3A4UD.2H3A4H5I28.下列选项中非法的字符常量是( )。(分数:1.00)A./tB./039C.,D./n29.下列叙述中,错误的是( )。(分数:1.00)A.在同一 C 程序文件中,不同函数中可以使用名字相同的变量B.在 main()函
5、数体内定义的变量是全局变量C.形参是局部变量,函数调用完成即失去意义D.若同一文件中全局和局部变量同名,则全局变量在局部变量作用范围内不起作用30.在面向对象方法中, ( )描述的是具有相似属性与操作的一组对象。(分数:1.00)A.属性B.事件C.方法D.类31.C 语言规定,调用一个函数时,实参变量和形参变量之间的数据传递是( )。(分数:1.00)A.地址传递B.值传递C.由实参传给形参,并由形参传回给实参D.由用户指定传递方式32.若希望下列的程序运行后输出 25,程序空白处的正确选项是( )。main()int i,j=50,a=7,4,10,5,8;for( )j+=ai;prin
6、tf(“%d“,j-40);(分数:1.00)A.i=1;i4;+iB.i=1;i3;+iC.i=4;i2;i-D.i=2;i4;+i33.下列程序的输出结果是( )。mainint x=8,y=8;printf(“%d %d/n“,x-,-y);(分数:1.00)A.8 8B.7 7C.7 8D.8 734.设变量 a、b、c、d 和 y 都已正确定义并赋值。若有下列 if 语句if ab)if(c=d) y=0;else y=1;该语句所表示的含义是( )。(分数:1.00)A.B.C.D.35.若有说明:int*p1,*p2,n=8,m;下列均是正确赋值语句的选项是( )。(分数:1.0
7、0)A.p1=p2=p1;36.结构化程序设计的核心和基础是( )。(分数:1.00)A.结构化分析方法B.结构化设计方法C.结构化设计理论D.结构化编程方法37.按照“先进后出”原则组织数据的数据结构是( )。(分数:1.00)A.队列B.栈C.双向链表D.二叉树38.设只是一个二元关系,S 是一个三元关系,则下列运算中正确的是( )。(分数:1.00)A.R-SB.RXSC.RSD.RS39.设 int x=7,则x 的值是( )。(分数:1.00)A.-8B.-7C.-1D.140.常采用的两种存储结构是( )。(分数:1.00)A.顺序存储结构和链式存储结构B.散列方法和索引方式C.链
8、表存储结构和数组D.线性存储结构和非线性存储结构二、填空题(总题数:15,分数:30.00)41.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关系,并且每一个 1 实际上对应一个处理模块。(分数:2.00)填空项 1:_42.结构化程序设计的 3 种基本结构分别是顺序、选择和 1。(分数:2.00)填空项 1:_43.二分法查找仅限于这样的表:表中的数据元素必须有序,其存储结构必须是 1。(分数:2.00)填空项 1:_44.一个模块直接调用的其他模块的模块个数称为 1。(分数:2.00)填空项 1:_45.数据库系统中实现各种数据管理功能的核心软件是 1。(分数:2.00)填空
9、项 1:_46.C 语言中用 1 表示逻辑值为“真”,用数字“0”表示逻辑值为“假”。(分数:2.00)填空项 1:_47.语句:x+:+x;x=1+x:执行后都使变量 x 中的值增 1,请写出一条同一功能的赋值语句 1。(分数:2.00)填空项 1:_48.下列程序的输出结果是_。main()int a=1,b=2,c=3,t=0;if(ab) t=a; a=b; b=t;if(ac) t=a; a=c; c=t;printf(“%d, %d, %d/n“, a, b, c);(分数:2.00)填空项 1:_49.在 C 语言中,while 和 dowhile 循环的主要区别是 1 的循环至
10、少被执行一次。(分数:2.00)填空项 1:_50.下列程序的输出结果是_。#include stdio.hmain()int x=10,y=10,i;for(i=0;x8;y=+iprintf(“%d %d“,x-,y);(分数:2.00)填空项 1:_51.若有定义 double a5;,则 a 数组元素下标的上限为 1。(分数:2.00)填空项 1:_52.执行下列语句段后,x 的值是_。int *p,x;x=100;p=static c=7;a=c+; b+;return (a);main()int a=2,i,k;for(i=0;i2;i+)k=f(a+);printf(“%d/n“
11、, k);(分数:2.00)填空项 1:_二级 C 语言笔试-289 答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:50.00)1.能正确表示“当 x 的取值在1,10和100,110范围内为真,否则为假”的表达式是( )。(分数:1.00)A.(x=1)1,10和100,110是逻辑或的关系,因此只要将前两个表达式用逻辑或运算符连接起来即可,所以最后的表达式;(x=1)printf(“%d/n“, c);(分数:2.00)A.2B.3C.5 D.4解析:解析本题考查 if else 语句。第一个 if 语句,先判断条件,发现 ab 条件成立,执行下列的语句
12、;第二个 if 语句,先判断条件,发现 b0 条件不成立,则执行与其配对的 else 语句,c+=1,得c=5。17.若有下列说明和语句,已知 int 型数据占 2 个字节,则下列语句的输出结果是( )。struct stchar a15;int b;double c;printf(“%d“,sizeof (struct st);(分数:2.00)A.15B.8C.25 D.2解析:解析本题主要考查结构体的内存使用:对结构体而言,结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立。题中 int b 占 2 个字节,c
13、har a15占 15 个字节,double c 占 8 个字节,所以共 25 个字节。18.函数 ftell(fp)的作用是( )。(分数:2.00)A.得到 fp 所指向文件的当前读写位置 B.初始化流式文件的位置指针C.移动流式文件的位置指针D.以上答案均正确解析:解析位置指针当前值函数 ftell()的基本调用格式为:ftell(fp)。ftell()函数的参数说明:“fp”是指向文件的文件型指针。ftell 函数的功能:得到 fp 所指向文件的当前读写位置,即位置指针的当前值,如果函数的返回值为-1L,表示出错。19.C 语言的基本单位是( )。(分数:2.00)A.函数 B.过程C
14、.子程序D.子函数解析:解析C 语言是函数式的语言,它的基本组成单位是函数,在 C 语言中任何程序都是由一个或者多个函数组成的。20.有下列程序:main()char s=“abcde“;s+=2;printf(“%d/n“, s0;执行后的结果是( )。(分数:2.00)A.输出字符 a 的 ASCII 码B.输出字符 c 的 ASCII 码C.输出字符 cD.程序出错 解析:解析因为字符数组 s中的数组名 s 表示的是一个地址常量。所以语句“s+=2;”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。21.若定义 int a=10,则表达式 a+=a-=a*=a 的值是(
15、)。(分数:1.00)A.0B.-180 C.-100D.-90解析:解析算术运算符的运算规则是:从右到左的原则。所以表达式中先计算 a=a-a*a 的值是-90,再计算 a=a+a 的值是-180。22.下列选项中合法的赋值语句是( )。(分数:1.00)A.a=b=34B.a=34,b=34C.i-1;D.m=(int)(x+y); 解析:解析选项 A)是一个合法的赋值表达式,但结尾没加分号,所以它不是一个赋值语句;选项 B)是一个逗号表达式,也因为结尾没有加分号而不足合法的赋值语句:选项 C)是个算术表达式,虽然有分号,但这个表达式没有赋值操作,因此,也不是一条赋值语句。23.若二维数组
16、 a 有 m 列,则在 aij前的元素个数为( )。(分数:1.00)A.i*m+j-1B.i*m+j C.j*m+ID.i*m+j+1解析:解析二维数组的元素可以看成是按矩阵形式存放的,总是先存放第一行的元素,再存放第二行的元素。数组第一维的下标是 i,说明它前面还有 i 行,有 i*m 个元素,数组第二维的下标是 j,说明它前面还有 j 列,有 j 个元素,所以共有 i*m +j 个元素。24.若整型变量 a、b、c、d 中的值依次为:1、4、3、2。则条件表达式 ab?a:cd?c:d 的值是( )。(分数:1.00)A.1 B.2C.3D.4解析:解析条件表达式的形式如下:表达式 1?
17、表达式 2:表达式 3,所以本题条件表达式 ab? a: cd? c: d 应该理解为 ab? a:(cd? c: d),首先求出条件表达式 cd? c: d 的值等于 2,再求条件表达式 ab?a:2 的值,由于 a-1b-4 成立,所以上述条件表达式的值等于 1。25.在下列给出的表达式中,与 while(E)中的(E)不等价的表达式是( )。(分数:1.00)A.(!E=0)B.(E0|E0) C.(E=0)D.(E!=0)解析:解析在 while(E)中,表达式 E 可以是 C 语言中任意合法的条件表达式,但不能为空,由它来控制循环体是否执行。在选项 B)中表达式 E0|E0 是一个逻
18、辑表达式。26.下列程序的输出结果是( )。#include stdio.hf(int(分数:1.00)A.for(i=1;i5;i+)printf(“%d %c“, xi.num, xi.name2);以上程序段的输出结果为( ).(分数:1.00)A.2A3N4A5U B.1I2a3h4IC.1A2N3A4UD.2H3A4H5I解析:解析本题主要考查结构体数组的使用。xi.mum 为结构体 xi中的 num 成员,xi.name2是结构体 xi中 name 成员的第 3 个元素。程序执行循环过程时:第 1 次循环,i=1,输出 x1.num,x1.name2的值,即 2A:第 2 次循环,
19、i=2,输出 x2.mum,x2.name2的值,即 3N;第 3 次循环,i=3,输出 x3.num,x3.name2的值,即 4A;第 4 次循环,i=4,输出 x4.num,x4.name2的值,即 5U。28.下列选项中非法的字符常量是( )。(分数:1.00)A./tB./039 C.,D./n解析:解析选项 A)中,/t,表示的是横向跳若干格;选项 B)中,/039错误,/039是八进制形式表示的字符,但其中出现了9,所以错误;选项 C)中,是字符逗号:选项 D)中,/n表示的是回车换行。29.下列叙述中,错误的是( )。(分数:1.00)A.在同一 C 程序文件中,不同函数中可以
20、使用名字相同的变量B.在 main()函数体内定义的变量是全局变量 C.形参是局部变量,函数调用完成即失去意义D.若同一文件中全局和局部变量同名,则全局变量在局部变量作用范围内不起作用解析:解析本题考查函数调用时变量的作用域。形参是局部变量,函数调用完就失去意义了,所以在同一个 C 程序文件中,不同的函数体中可以使用名字相同的局部变量。知识拓展在函数之外定义的变量称为外部变量,外部变量是全周变量。全局变量可以为本文件中其他函数所共用。它的有效范围为:从定义变量的位置开始到本源文件结束。30.在面向对象方法中, ( )描述的是具有相似属性与操作的一组对象。(分数:1.00)A.属性B.事件C.方
21、法D.类 解析:解析类(class)描述的是具有相似属性与操作的一组对象,而一个具体对象则是其对应类的一个实例。31.C 语言规定,调用一个函数时,实参变量和形参变量之间的数据传递是( )。(分数:1.00)A.地址传递B.值传递 C.由实参传给形参,并由形参传回给实参D.由用户指定传递方式解析:解析本题考查函数调用时的参数传递。在函数调用时,实参和其所对应的形参分别占用不同的存储单元,彼此之间只是实参将值传递给形参。32.若希望下列的程序运行后输出 25,程序空白处的正确选项是( )。main()int i,j=50,a=7,4,10,5,8;for( )j+=ai;printf(“%d“,
22、j-40);(分数:1.00)A.i=1;i4;+iB.i=1;i3;+iC.i=4;i2;i-D.i=2;i4;+i 解析:解析要想使程序输出是 25,则 j-40=25,j=65,而 j 初值是 50,所以填入 for 循环中的语句,使引用的数组元素累加为 65-5015 即可。33.下列程序的输出结果是( )。mainint x=8,y=8;printf(“%d %d/n“,x-,-y);(分数:1.00)A.8 8B.7 7C.7 8D.8 7 解析:解析本题考查自减(-)运算符的使用。“x-”是先引用 x 的值然后将 x 的值减 1,所以输出的x 值为 8;“-y”是先将 y 的值减
23、 1 然后再引用 y 的值,所以输出的 y 值为 7。34.设变量 a、b、c、d 和 y 都已正确定义并赋值。若有下列 if 语句if ab)if(c=d) y=0;else y=1;该语句所表示的含义是( )。(分数:1.00)A.B.C. D.解析:解析语句 if(c=d) y=0;else y=1;是 if(ab)语句的一个子句。所以整个 C 语句表达式的意思是:在 ab 的情况下,如果 c=d 则 y=0,否则 y=1。所以,选项 C)为正确答案。35.若有说明:int*p1,*p2,n=8,m;下列均是正确赋值语句的选项是( )。(分数:1.00)A.p1=p2=p1; 解析:解析
24、本题考查指针变量的赋值。选项 A)中,p1、p2 本身都是地址变量,不能再将 p1 取地址赋给 p2:选项 B)中,不能将整型数据直接赋值给指针型数据;选项 C)中,*p2 代表了一个整型变量,而*p2=p1 这个语句试图把一个地址值放入一个整犁变量中是错误的;选项 D)中指针问的赋值是正确的。36.结构化程序设计的核心和基础是( )。(分数:1.00)A.结构化分析方法B.结构化设计方法C.结构化设计理论 D.结构化编程方法解析:解析结构化程序设计的核心和基础是结构化设计理论,其中包括:结构化分析方法、结构化设计方法和结构化编程方法。37.按照“先进后出”原则组织数据的数据结构是( )。(分
25、数:1.00)A.队列B.栈 C.双向链表D.二叉树解析:解析栈是一种特殊的线性表,其插入和删除运算都只在线性表的一端进行,而另端是封闭的。进行插入、删除的端称为栈顶,封闭的一端称为栈底。栈顶元素是最后被插入的元素,也是最后被删除的,是按先进后出的原则组织数据的。38.设只是一个二元关系,S 是一个三元关系,则下列运算中正确的是( )。(分数:1.00)A.R-SB.RXS C.RSD.RS解析:解析关系的交()、并()和差(-)运算要求两个关系是同元的,显然作为二元的 R 和三元 S 只能做笛卡尔积运算。39.设 int x=7,则x 的值是( )。(分数:1.00)A.-8 B.-7C.-
26、1D.1解析:解析本题主要考查按位求反运算和 C 语言中正负数的表示,“0”代表正数,“1”代表负数;x=7 的二进制为 00111,第一个 0 代表正数,x 为 11000,第一个 1 代表负数,值为 8。40.常采用的两种存储结构是( )。(分数:1.00)A.顺序存储结构和链式存储结构 B.散列方法和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构解析:解析线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。二、填空题(总题数:15,分数:30.00)41.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关系,并且每一个 1 实际上对应一个处理模块。(分
27、数:2.00)填空项 1:_ (正确答案:加工)解析:解析数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。其中的每一个加工对应一个处理模块。42.结构化程序设计的 3 种基本结构分别是顺序、选择和 1。(分数:2.00)填空项 1:_ (正确答案:重复(或循环))解析:解析结构化程序设计包括 3 种基本的结构:顺序结构、选择结构和重复结构(循环结构),利用这3 种结构就足以表达出各种其他形式结构的程序设计方法。其中利用循环结构,可以简化大量的程序执行。43.二分法查找仅限于这样的表:表中的数据元素必须有序,其存储结构必须是 1。(分数:2.00)填空项 1:_ (正确
28、答案:顺序存储(顺序方式存储))解析:解析二分法查找对表的要求是有序的顺序表,即第一要求是数据元素有序,第二要求是按顺序方式存储。44.一个模块直接调用的其他模块的模块个数称为 1。(分数:2.00)填空项 1:_ (正确答案:扇出)解析:解析在结构图中,调用一个给定模块的模块个数称为扇入,一个模块直接调用的其他模块个数称为扇出。45.数据库系统中实现各种数据管理功能的核心软件是 1。(分数:2.00)填空项 1:_ (正确答案:数据库管理系统)解析:解析数据库管理系统是数据库的管理机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。46.C 语言中用
29、1 表示逻辑值为“真”,用数字“0”表示逻辑值为“假”。(分数:2.00)填空项 1:_ (正确答案:非 0)解析:解析逻辑运算中,非 0 表示逻辑“真”,用 0 表示逻辑“假”。47.语句:x+:+x;x=1+x:执行后都使变量 x 中的值增 1,请写出一条同一功能的赋值语句 1。(分数:2.00)填空项 1:_ (正确答案:x+1)解析:解析本题考查“+”、“-”运算符。“+”、“-”只能作用于变量,不能用于表达式或常量;前缀形式是在使用变量之前先将其值增 1 或减 1,后缀形式是先使用变量原来的值,使用完后再使其增 1或减 1。48.下列程序的输出结果是_。main()int a=1,b
30、=2,c=3,t=0;if(ab) t=a; a=b; b=t;if(ac) t=a; a=c; c=t;printf(“%d, %d, %d/n“, a, b, c);(分数:2.00)填空项 1:_ (正确答案:3,1,2)解析:解析分析程序,第一个 if 语句,a=1,b=2,控制条件 ab 成立,则交换 a、b 的值,此时a=2,b=1。第二个 if 语句,a=2,c=3,控制条件 ac 成立,则交换 a、c 的值,此时 a=3,c=2。49.在 C 语言中,while 和 dowhile 循环的主要区别是 1 的循环至少被执行一次。(分数:2.00)填空项 1:_ (正确答案:dow
31、hile)解析:解析考查 while 和 dowhile 循环的主要区别。while 循环的控制出现在循环体之前,只有当while 后面的表达式的值为非零时,才可能执行循环体:在 dowhile 构成的循环体中,总是先执行一次循环体,然后再求表达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。50.下列程序的输出结果是_。#include stdio.hmain()int x=10,y=10,i;for(i=0;x8;y=+iprintf(“%d %d“,x-,y);(分数:2.00)填空项 1:_ (正确答案:10 10 91)解析:解析for(表达式 1;表达式 2:表达式 3
32、)语句的功能是:首先计算表达式 1 的值,然后枪测表达式 2 的值,若其值为真,则执行循环体语句,执行完毕后,再计算表达式 3 的值。然后再检测表达式 2 的值是否为真,若为真,继续执行循环体语句,若为假,则退出循环;第 1 次循环 x8 成立,输出x=10,y10 后,x 的值减 1,i=1,执行 y=+i 操作,y 的值变为 1:判断条件还成立,输出 x=9,y1,然后 x 的值减 1,循环条件不成立,则退出循环。51.若有定义 double a5;,则 a 数组元素下标的上限为 1。(分数:2.00)填空项 1:_ (正确答案:4)解析:解析一维数组元素的定义形式为:数组名N,则该数组中
33、元素的下限是 0,上限是 N-1。52.执行下列语句段后,x 的值是_。int *p,x;x=100;p=static c=7;a=c+; b+;return (a);main()int a=2,i,k;for(i=0;i2;i+)k=f(a+);printf(“%d/n“, k);(分数:2.00)填空项 1:_ (正确答案:8)解析:解析第 1 次 for 循环,i=0,调用函数 f(2),然后将 a 的值加 1,在 f()函数中,变量 c 为static 类型,所以 c8;第 2 次 for 循环, i=1,调用函数 f(3),然后将 a 的值加 1,调用函数 f(3)时,ac+=8,所以 k=8。