1、二级 C 语言笔试-113 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.函数 fun 的返回值是fun(char *a, char *b)int num=0,n=0;while(*(a+num)!=/0)num+;while(bn)*(a+num)=bn;num+;n+;return num;(分数:2.00)A.字符串 a 的长度B.字符串 b 的长度C.字符串 a 和 b 的长度之差D.字符串 a 和 b 的长度之和2.调用 gets 和 puts 函数时,必须包含的头文件是(分数:2.00)A.stdio.hB.stdlib.hC
2、.defineD.string.h3.下列叙述中正确的是(分数:2.00)A.线性链表是线性表的链式存储结构B.栈与队列是非线性结构C.双向链表是非线性结构D.只有根结点的二叉树是线性结构4.在 E-R 图中,用来表示实体的图形是(分数:2.00)A.矩形B.椭圆形C.菱形D.三角形5.下面 4 个选项中,均是不合法的用户标识符的选项是(分数:2.00)A.A P _0 d0B.float la0 _AC.b-a goto inD.123 temp int6.两个或两个以上模块之间关联的紧密程度称为(分数:2.00)A.耦合度B.内聚度C.复杂度D.数据传输特性7.以下程序运行后的输出结果是f
3、un(int x,int y,int z) z=x*y;main( )int a=4,b=2,c=6;fun(a,b,c);printf(“%d“,c);(分数:2.00)A.16B.6C.8D.128.若有以下结构体,则正确的定义或引用是struct Testint x;int y:v1;(分数:2.00)A.Test.x=10;B.Test v2;v2.x=10;C.struct v2;v2.x=10;D.struct Test v2=10;9.以下程序运行后的输出结果是main( )int a=2,b=-1,c=2;if(ab)if(b0) c=0;else c+:printf(“%d/
4、n“,c);(分数:2.00)A.0B.1C.2D.310.能正确表示逻辑关系“a10 或 a0”的 C 语言表达式是(分数:2.00)A.a=10 or a=0B.a=0 | a=10C.a=10*max=a0; *d=0;for(i=0; (10) ;i+)if(*max (11) ) *max=ai;*d=i;main( )int i,x E20,max,index,n=10;fox(i=0;in;i+)scanf(“%d“,xi);printf(“%4d“,xi);printf(“/n“);fun(x,n, a+=2;printf(“%d“,a);main( )int cc; for(
5、cc=1;cc4;cc+)fun( ); printf(“/n“);(分数:2.00)填空项 1:_51.以下程序的输出结果是_。#define MAX(x,y) (x)(y)?(x):(y)main( )int a=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d) *10;printf(“%d/n“,t);(分数:2.00)填空项 1:_52.用以下语句调用库函数 malloc,使字符指针 st 指向具有 11 个字节的动态存储空间。请填空。st=(char*) _;(分数:2.00)填空项 1:_53.以下程序段打开文件后,先利用 fseek 函数将文件位置指针定位在文件末尾,
6、然后调用 ftell 函数返回当前文件位置指针的具体位置,从而确定文件长度。请填空。FILE *myf;long f1;myf=_(“test.t“,“rb“);fseek(myf,0,SEEK_END);f1=ftell(myf);fclose(myf);printf(“%d/n“,f1);(分数:2.00)填空项 1:_二级 C 语言笔试-113 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.函数 fun 的返回值是fun(char *a, char *b)int num=0,n=0;while(*(a+num)!=/0)num+;wh
7、ile(bn)*(a+num)=bn;num+;n+;return num;(分数:2.00)A.字符串 a 的长度B.字符串 b 的长度C.字符串 a 和 b 的长度之差D.字符串 a 和 b 的长度之和 解析:解析 本题首先通过第一个 while 循环计算字符串 a 的长度,再通过第二个循环将字符串 b 连接到字符 a 的后面,最后返回连接后的总长度。2.调用 gets 和 puts 函数时,必须包含的头文件是(分数:2.00)A.stdio.h B.stdlib.hC.defineD.string.h解析:解析 gets 函数和 puts 函数是库函数,必须包含的头文件是 stdio.h
8、。3.下列叙述中正确的是(分数:2.00)A.线性链表是线性表的链式存储结构 B.栈与队列是非线性结构C.双向链表是非线性结构D.只有根结点的二叉树是线性结构解析:解析 一个非空的数据结构如果满足下列两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,则称为线性结构。线性链表是线性表的链式存储结构,故选项 A 的说法是正确的。栈与队列是特殊的线性表,它们也是线性结构,故选项 B 的说法是错误的;双向链表是线性表的链式存储结构,其对应的逻辑结构也是线性结构,而不是非线性结构,故选项 C 的说法是错误的;二叉树是非线性结构,而不是线性结构,故选项 D 的说法是错误的。4.在
9、E-R 图中,用来表示实体的图形是(分数:2.00)A.矩形 B.椭圆形C.菱形D.三角形解析:解析 在 E-R 图中,用 3 种图框分别表示实体、属性和实体之间的联系,其规定如下:用矩形框表示实体,框内标明实体名;用椭圆状框表示实体的属性,框内标明属性名:用菱形框表示实体间的联系,框内标明联系名。5.下面 4 个选项中,均是不合法的用户标识符的选项是(分数:2.00)A.A P _0 d0B.float la0 _AC.b-a goto in D.123 temp int解析:解析 C 语言规定的标识符只能由字母、数字和下画线 3 种字符组成,第一个字符必须为字母或下画线,并且不能使用 C
10、语言中的关键字作为标识符;对于选项 C,goto 和 int 是关键字,b-a 中的“-”不是组成标识符的 3 种字符之一;对于选项 D,int 是关键字。所以,均是不合法用户标识符的选项是C。6.两个或两个以上模块之间关联的紧密程度称为(分数:2.00)A.耦合度 B.内聚度C.复杂度D.数据传输特性解析:解析 本题考核模块独立性的评价。评价模块独立性的主要标准有两个:一是模块之间的耦合度,它表明两个模块之间互相独立的程度,也可以说是两个或两个以上模块之间关联的紧密程度,所以,本题的正确答案为选项 A;二是模块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地弱,即模块尽
11、可能独立;而要求模块的内聚程度尽量地高。7.以下程序运行后的输出结果是fun(int x,int y,int z) z=x*y;main( )int a=4,b=2,c=6;fun(a,b,c);printf(“%d“,c);(分数:2.00)A.16B.6 C.8D.12解析:解析 本题考查的函数形参与实参的传递规则,当形参与实参都是简单的数据类型时,形参值的改变不能影响实参值的改变,即本题中 c 的值未改变,仍然是 6。8.若有以下结构体,则正确的定义或引用是struct Testint x;int y:v1;(分数:2.00)A.Test.x=10;B.Test v2;v2.x=10;C
12、.struct v2;v2.x=10;D.struct Test v2=10; 解析:解析 此题考查结构体的定义和引用。选项 A 的错误是通过结构体名引用结构体成员,选项 B 的错误是将结构体名作为类型名使用,选项 c 的错误是将关键字 struct 作为类型名使用。选项 D,定义变量 v2 并对其初始化的语句,初始值只有前一部分,这是允许的。9.以下程序运行后的输出结果是main( )int a=2,b=-1,c=2;if(ab)if(b0) c=0;else c+:printf(“%d/n“,c);(分数:2.00)A.0B.1C.2 D.3解析:解析 if 语句嵌套使用时,else 总是
13、与它上面最近的 if 配对。因此,本题中先判断(ab),表达式值为 0,则不执行下面的 if 语句,直接跳到 printf 行,e 的值没有改变。10.能正确表示逻辑关系“a10 或 a0”的 C 语言表达式是(分数:2.00)A.a=10 or a=0B.a=0 | a=10C.a=10*max=a0; *d=0;for(i=0; (10) ;i+)if(*max (11) ) *max=ai;*d=i;main( )int i,x E20,max,index,n=10;fox(i=0;in;i+)scanf(“%d“,xi);printf(“%4d“,xi);printf(“/n“);fu
14、n(x,n, a+=2;printf(“%d“,a);main( )int cc; for(cc=1;cc4;cc+)fun( ); printf(“/n“);(分数:2.00)填空项 1:_ (正确答案:2 4 6)解析:解析 本题考查静态(static)局部变量的使用。在程序运行过程中始终不释放 fun 函数中的静态局部变量 a 所占用的存储单元,即当下一次调用该函数时,该变量仍然保留上一次函数调用结束时已有的值,3 次调用 fun 函数分别得到 2、4、6。51.以下程序的输出结果是_。#define MAX(x,y) (x)(y)?(x):(y)main( )int a=5,b=2,c
15、=3,d=3,t;t=MAX(a+b,c+d) *10;printf(“%d/n“,t);(分数:2.00)填空项 1:_ (正确答案:7)解析:解析 本题综合考查带参数的宏以及三目运算符的计算方法,三目运算符的一般形式是:表达式 1?表达式 2:表达式 3“?”运算符的含义是:先求表达式 1 的值,如果为真,则求表达式 2 的值并把它作为整个表达式的值;如果表达式 1 的值为假,则求表达式 3 的值并把它作为整个表达式的值。注意:在本题中宏替换时可采用逐步求解,最终为 76?7:6*10,即 t=76?7:60,其值为 l=7。52.用以下语句调用库函数 malloc,使字符指针 st 指向
16、具有 11 个字节的动态存储空间。请填空。st=(char*) _;(分数:2.00)填空项 1:_ (正确答案:malloc(11)或 malloc(sizeof(char))解析:解析 malloe 函数的参数可以是一个具体的常数,也可以是一个表达式。本题可以是 malloc(11),也可以用 sizeof 运算符来表示。53.以下程序段打开文件后,先利用 fseek 函数将文件位置指针定位在文件末尾,然后调用 ftell 函数返回当前文件位置指针的具体位置,从而确定文件长度。请填空。FILE *myf;long f1;myf=_(“test.t“,“rb“);fseek(myf,0,SE
17、EK_END);f1=ftell(myf);fclose(myf);printf(“%d/n“,f1);(分数:2.00)填空项 1:_ (正确答案:fopen)解析:解析 函数 fopen 的原型为 FILE *fopen(char *filename,char *mode),其功能为以 mode 指定的方式打开名为 filename 的文件;函数 fseek 的原型为 int fseek(FILE *fp,long offset,intbase),其功能为将 fp 所指向的文件的位置指针移到以 base 所指出的位置为基准,offset 是以字节为单位的位移量;函数 ftell 的原型为 long flell(FILE *fp),其功能为返回 fp 所指向的文件中的读写位置;函数fclose 的原型为 int fclos(FILE *fp),其功能为关闭 fp 所指的文件,释放文件缓冲区。