1、二级 C语言笔试-116 及答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:50.00)1.数据库技术的根本目标是要解决数据的( )。(分数:1.00)A.存储问题B.共享问题C.安全问题D.保护问题2.下列写法正确的是( )。(分数:1.00)_3.下列程序的输出结果是( )。#include stdio.hmain ()int a=3,b=2,c=1;if (ab)if (bO) c=0 ;else c+;printf (“%d/n“,c);(分数:1.00)A.0B.2C.1D.34.若以“a+“方式打开一个已存在的文件,则下列叙述正确的是( )。(分数
2、:1.00)A.文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可以进行添加或读操作B.文件打开时,原有文件内容不被删除,只能进行读操作C.文件打开时,原有文件内容被删除,只能进行写操作D.以上三种说法都不正确5.在位运算中,操作数每左移两位,其结果相当于( )。(分数:1.00)A.操作数乘以 2B.操作数除以 2C.操作数除以 4D.操作数乘以 46.下列程序的输出结果是( )。main ()int a,b,d=25;ad/10%9;b=a(分数:1.00)A.-1B.0C.1D.不确定的值8.两个或两个以上模块之间联系的紧密程度称为( )。(分数:1.00)A.耦合性B.内聚性C
3、.复杂性D.数据传输特性9.设计数据库的存储结构属于( )。(分数:1.00)A.需求分析B.概念设计C.逻辑设计D.物理设计10.下列程序的执行结果是 ( )。#includestdio.hmain ()int a, b, c ;a=b=2 ;c+=(a+)-1 ;printf (“%d,%d“,a,c);c+=-a+ (+b) ;printf (“%d,%d“,a,c);(分数:1.00)A.3,1 4,1B.3,1 4,2C.2,0 4,1D.2,1 4,111.不能与 dowhile(exp)语句中的(exp)等价的表达式是( )。(分数:2.00)A.(!exp =O)B.(exp0
4、 | exp0)C.(exp =0)D.(exp!=O)12.要求通过 while循环不断读入字符,当读入字母 N时结束循环。若变量已正确定义,下列正确的程序段是( )。(分数:2.00)A.while (ch=getchar()!N) printf(“%c“, ch);B.while (ch=getchar()!=N) printf(“%c“, ch);C.while (ch=getchar()=N) printf(“%c“, ch);D.while (ch=getchar()=N) printf(“%c“, ch);13.下列程序的运行结果为( )。#include stdio.hmain
5、()stmct dateint year,month,day;today;printf(“%d/n“,sizeof(struct date);(分数:2.00)A.8B.6C.10D.1214.下列叙述中不正确的是( )。(分数:2.00)A.在 C语言中调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B.在 C的函数中,最好使用全局变量C.外部变量可以在函数之间传递数据D.自动变量实质上是一个函数内部的局部变量15.下列不是合法的 C语言语句是( )。(分数:2.00)A.a=5B.int i;i+;C.;D.;16.有下列程序:main ()int i,j;for (i=1;i
6、4;i+)for(j=i;j4;j+) printf (“%d*%d=%d“,i,j,i*j);printf “/n“);程序运行后的输出结果是( )。(分数:2.00)A.1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3B.1*1=1 1*2=2 1*3=3 2*2=4 2*3=63*3=9C.1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9D.1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=917.将 E-R图转换到关系模式时,实体与实体间的联系可以表示成( )。(分数:2.00)A.属性B.关系C.键D.域18.若有定义 flo
7、at a15,*p=a;,且数组 a的首地址为 300H,则 p+13所指向的数组元素的地址为 ( )。(分数:2.00)A.334HB.30DHC.352HD.31AH19.数据的存储结构是指( )。(分数:2.00)A.数据所占的存储空间B.数据的逻辑结构在计算机中的存放形式C.数据在计算机中的顺序存储方式D.存储在计算机外存中的数据20.下列选项中不是字符常量的是( )。(分数:2.00)A./vB./x2aC.aD.“/0“21.算法的空间复杂度是指( )。(分数:1.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间22.下列
8、程序的功能是给 r输入数据后计算半径为 r的圆面积 s。程序在编译时出错。main ()/*Beginning*/int r; float s;scanf(“%d“, i+)if (i+%5=0)if(+i%8=0) printf(“%d“,i);printf (“/n“);执行后的输出结果是( )。(分数:1.00)A.5B.24C.32D.4031.若有定义:int a=4, b=5;float x=3.4,y=2.1;,则下列表达式的值为( )。(float) (a+b)/2+(int)x%(int)y(分数:1.00)A.5.5B.55C.5.500000D.55.0000032.下列
9、说法不正确的是( )。(分数:1.00)A.调用函数时,实参可以是表达式B.调用函数时,实参与形参可以共用内存单元C.调用函数时,将实参的值复制给形参,使实参变量和形参变量在数值上相等D.调用函数时,实参与形参的类型必须一致33.有下列二叉树,对此二叉树前序遍历的结果为( )。(分数:1.00)A.B.C.D.34.下列程序段中,不能正确赋值的是( )。(分数:1.00)A.char*p,ch; p= scabf(“%c“,p);C.char*p; *p=getchar();D.char*p,ch; p=(分数:2.00)填空项 1:_53.下列程序的输出结果是_。main ()int i,s
10、um;for(i=1;i7;i+)sum+=i;printf(“%d“,sum);(分数:2.00)填空项 1:_54.设有下列的程序段:char str=“Hello“;char *ptr;ptr =str;执行上面的程序段后,*(ptr+5)的值为_.(分数:2.00)填空项 1:_55.下列程序的输出结果是_.#include stdio.hfun ()static int a=O;a+=3; printf(“%d“,a);main ()int cc;for (cc=1;cc5;cc+) fun();printf (“/n“);(分数:2.00)填空项 1:_二级 C语言笔试-116 答
11、案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:50.00)1.数据库技术的根本目标是要解决数据的( )。(分数:1.00)A.存储问题B.共享问题 C.安全问题D.保护问题解析:解析在数据库系统中,需要对数据进行集中、统一的管理,以达到被多个应用程序共享的目标。2.下列写法正确的是( )。(分数:1.00)_解析:解析本题考查语句的基本构成。选项 A)中 j=5后面少了一个分号:选项 B)中少了“3.下列程序的输出结果是( )。#include stdio.hmain ()int a=3,b=2,c=1;if (ab)if (bO) c=0 ;else c+;
12、printf (“%d/n“,c);(分数:1.00)A.0B.2C.1 D.3解析:解析本题考查 if语句。第一个 if语句,先判断条件,发现 ab 不成立,不再执行下列的语句,直接执行最后的 printf输出语句,然后结束程序,整个过程 c的值没有发生变化。4.若以“a+“方式打开一个已存在的文件,则下列叙述正确的是( )。(分数:1.00)A.文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可以进行添加或读操作 B.文件打开时,原有文件内容不被删除,只能进行读操作C.文件打开时,原有文件内容被删除,只能进行写操作D.以上三种说法都不正确解析:解析本题考查文件使用方式标识符,以“a
13、+”方式打开一个己存在的文件,则表示保留文件中原有的数据,文件的位置指针在文件末尾,此时,可以进行追加或读操作。5.在位运算中,操作数每左移两位,其结果相当于( )。(分数:1.00)A.操作数乘以 2B.操作数除以 2C.操作数除以 4D.操作数乘以 4 解析:解析本题主要考查左移、右移对数据值的影响,左移 n位相当于乘以 2的 n次幂,右移 n位相当于除以 2的 n次幂。6.下列程序的输出结果是( )。main ()int a,b,d=25;ad/10%9;b=a(分数:1.00)A.-1 B.0C.1D.不确定的值解析:解析本题考查 if else语句。第 1个 if语句,先判断条件,发
14、现 ab 条件成立,执行下列的语句;第 2个 if语句,先判断条件,发现 b!=3条件成立,执行下列的语句:第 3个 if语句,先判断条件,c=5,则!c 条件不成立,执行与其配对的 else语句;第 4个 if语句,先判断条件,d=0,条件不成立,则 x=-1,结束循环。8.两个或两个以上模块之间联系的紧密程度称为( )。(分数:1.00)A.耦合性 B.内聚性C.复杂性D.数据传输特性解析:解析耦合性是模块间互相连接的紧密程度的度量,取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。9.设计数据库的存储结构属于( )。(分数:1.00)A.需求分析B.概念设计C.逻辑设计D.物
15、理设计 解析:解析物理设计阶段主要解决选择文件存储结构和确定文件存取方法的问题,包括选择存储结构、确定存取方法、选择存取路径、确定数据的存放位置。10.下列程序的执行结果是 ( )。#includestdio.hmain ()int a, b, c ;a=b=2 ;c+=(a+)-1 ;printf (“%d,%d“,a,c);c+=-a+ (+b) ;printf (“%d,%d“,a,c);(分数:1.00)A.3,1 4,1 B.3,1 4,2C.2,0 4,1D.2,1 4,1解析:解析本题主要考查自加运算符(+、-)的使用。前缀变量“+i、-i”,在使用 i之前,先使i的值加 1或者
16、减 1,再使用此时的表达式的值参与运算;后缀变量“i+,i-”,先使用此时的表达式的值参与运算,在使用 i之后,再使 i的值加 1或者减 1。题中计算表达式 c(a+)-1 时先使用 a的值进行计算,结果为 c=2-1=1,然后将 a的值加 1,即执行完此语句后 a的值是 3;表达式 c+=-a+(+b)等价于 c=c+(-a+)+(+b),c=1+(-3)+3-1,此时 a=4,b=3。11.不能与 dowhile(exp)语句中的(exp)等价的表达式是( )。(分数:2.00)A.(!exp =O)B.(exp0 | exp0)C.(exp =0) D.(exp!=O)解析:解析本题考查
17、 dowhile循环。在 dowhile循环中,当表达式的值为非零(真)时,执行循环,不能与其等价的是为零的表达式,即(exp=0)。12.要求通过 while循环不断读入字符,当读入字母 N时结束循环。若变量已正确定义,下列正确的程序段是( )。(分数:2.00)A.while (ch=getchar()!N) printf(“%c“, ch); B.while (ch=getchar()!=N) printf(“%c“, ch);C.while (ch=getchar()=N) printf(“%c“, ch);D.while (ch=getchar()=N) printf(“%c“, c
18、h);解析:解析while 循环的执行过程如下:(1)计算 while后面圆括号中表达式的值。当值为非 0时,执行步骤(2);当值为 0时,执行步骤(4)。(2)执行循环体一次。(3)转去执行步骤(1)。(4)退出循环。在选项 A)中,表达式(ch=getchar0)!=N表示输入的字符不等于 N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于 N,则退出循环。所以选项 A)为正确答案。13.下列程序的运行结果为( )。#include stdio.hmain()stmct dateint year,month,day;today;prin
19、tf(“%d/n“,sizeof(struct date);(分数:2.00)A.8B.6 C.10D.12解析:解析解答本题需要注意两个知识点:结构体变量的长度是其内部成员长度的总和,本题中,stmct date中包含 year、month、day 这 3个整型变量,一个整型变量占 2个字节:sizeof 是求所占字节数的运算符。14.下列叙述中不正确的是( )。(分数:2.00)A.在 C语言中调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B.在 C的函数中,最好使用全局变量 C.外部变量可以在函数之间传递数据D.自动变量实质上是一个函数内部的局部变量解析:解析编译时,编译系
20、统不为局部变量分配内存单元,而是在程序运行中,当局部变量所在的函数被调用时,编译系统根据需要要临时分配内存,调用结束空间释放:全局变量一经定义,编译系统为其分配固定的内存单元,在程序运行的自始至终都占用固定的单元。在内存不确定的情况下,最好使用全局变量。15.下列不是合法的 C语言语句是( )。(分数:2.00)A.a=5 B.int i;i+;C.;D.;解析:解析选项 A)是一个表达式,它后面没有分号结尾(C 语言中规定语句必须以分号结束),所以它不是语句;选项 B)用一个花括号把几条语句括起来了,这是一个复合语句;选项 C)中只有一个分号,是一个空语句;选项 D)是个复合语句,也是一个空
21、语句。16.有下列程序:main ()int i,j;for (i=1;i4;i+)for(j=i;j4;j+) printf (“%d*%d=%d“,i,j,i*j);printf “/n“);程序运行后的输出结果是( )。(分数:2.00)A.1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3B.1*1=1 1*2=2 1*3=3 2*2=4 2*3=63*3=9 C.1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9D.1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=9解析:解析外层 for循环的自变量 i从 1开始,每次循环后增
22、1,直到 i等于 3结束。对于外层循环自变量 i的每一个值,内层循环的自变量 j每次从 i开始,每次循环后增 1,直到 j等于 3结束。所以在每次外循环开始后,内层循环在一行先打印 i*j=两个乘数的积,然后回车换行,下次循环从下一行开始打印输出结果。17.将 E-R图转换到关系模式时,实体与实体间的联系可以表示成( )。(分数:2.00)A.属性B.关系 C.键D.域解析:解析将 E-R图转换成指定 RDBMS中的关系模式是数据库逻辑设计的主要工作。从 E-R图到关系模式的转换是比较直接的,实体和联系都可以表示成关系。18.若有定义 float a15,*p=a;,且数组 a的首地址为 30
23、0H,则 p+13所指向的数组元素的地址为 ( )。(分数:2.00)A.334HB.30DHC.352H D.31AH解析:解析解答本题,首先要明白在对指针进行加,减运算的时候,数字“1”不是十进制的数“1”,而是指“1”个存储单元长度,而 1 个存储单元长度占多少存储空间,应该视具体情况而定。如果基本类型是 int型,移动 1个存储单元的长度就是位移 2个字节,如果基本类型是 float型,移动 1个存储单元的长度就是位移 4个字节。所以 p+13所指向的数组元素的地址为:300H+(13*4)H=352H。19.数据的存储结构是指( )。(分数:2.00)A.数据所占的存储空间B.数据的
24、逻辑结构在计算机中的存放形式 C.数据在计算机中的顺序存储方式D.存储在计算机外存中的数据解析:解析数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式。数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。20.下列选项中不是字符常量的是( )。(分数:2.00)A./vB./x2aC.aD.“/0“ 解析:解析c 语言规定,一个字符常量代表 ASCII码字符集里的一个字符,在程序中用单引号括起来,以便区分。“/v”表示的是竖向跳格:“/x2a”表示的是两位十六进制数;“a”表示的是字符 a对应的ASCII码值。21.算法的空间复杂度是指( )。(分数:1.00)A
25、.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间 解析:解析一个算法的空间复杂度,一般是指执行这个算法所需的存储空间。一个算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间及算法执行过程中所需要的额外空间。22.下列程序的功能是给 r输入数据后计算半径为 r的圆面积 s。程序在编译时出错。main ()/*Beginning*/int r; float s;scanf(“%d“, i+)if (i+%5=0)if(+i%8=0) printf(“%d“,i);printf (“/n“);执行后的输出结果是( )。(分
26、数:1.00)A.5B.24C.32 D.40解析:解析在 for循环体中,首先判断自变量 i能否被 5整除,然后再自加两次,最后判断 i能否被 8整除。当 for循环执行到第 30次时, i 的值为 30能被 5整除,然后 i经过两次自加 1运算,值变为32,能被 8整除,故执行“pnntf(“%d“,i);“语句,即输出 32。本题的答案为选项 C)。31.若有定义:int a=4, b=5;float x=3.4,y=2.1;,则下列表达式的值为( )。(float) (a+b)/2+(int)x%(int)y(分数:1.00)A.5.5B.55C.5.500000 D.55.00000
27、解析:解析在计算(float)(a+b)/2 时,由于通过强制类型转换将(a+b)转换成了 float型,所以应先将2转换成 float型,再进行计算,得 4.500000。在计算(int)x%(int)y 时,先将 x和 y通过强制类型转换成 int型,再进行求余运算,得 1。又因为 4.500000是 float型,所以将 1和它相加时,先将 1换成 float型,再计算,得到 5.500000。知识扩展类型转换的一般规则是:低级类型服从高级类型,并进行相应的转换。数据类型的级别由低到高的排序表示为:char intunsignedlongfloatdouble。32.下列说法不正确的是(
28、 )。(分数:1.00)A.调用函数时,实参可以是表达式B.调用函数时,实参与形参可以共用内存单元 C.调用函数时,将实参的值复制给形参,使实参变量和形参变量在数值上相等D.调用函数时,实参与形参的类型必须一致解析:解析本题考查函数调用的基本概念。调用函数时,实参的形式可以是具体的数值,也可以是表达式。实参将数值或表达式的值传递给形参,因而两者的类型必须保持一致;形参在运算过程中会发生改变,但不一定会影响到实参值,所以可知两者不共用内存单元。33.有下列二叉树,对此二叉树前序遍历的结果为( )。(分数:1.00)A.B.C. D.解析:解析对二叉树的前序遍历是指:先访问根结点,然后访问左子树,
29、最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。34.下列程序段中,不能正确赋值的是( )。(分数:1.00)A.char*p,ch; p= scabf(“%c“,p);C.char*p; *p=getchar(); D.char*p,ch; p=(分数:2.00)填空项 1:_ (正确答案:1,1)解析:解析POWER(i+)中先引用 i的值 1,再将 i的值加 1,POWER(i+)=1*1=1。53.下列程序的输出结果是_。main ()int i,sum;for(i=1;i7;i+)sum+=i;printf(“%d“,sum);(分数:2.00)填空项
30、 1:_ (正确答案:无定值)解析:解析for(i=1;i7;i+)决定了循环次数为 6次,每次执行的操作是 sum+=i,但由于 sum没有初始化,并不知道 sum的初值是多少,所以结果无定值。54.设有下列的程序段:char str=“Hello“;char *ptr;ptr =str;执行上面的程序段后,*(ptr+5)的值为_.(分数:2.00)填空项 1:_ (正确答案:/0)解析:解析本题涉及字符数组和指针的两个知识点:在 c语言中,字符型数组在存放字符串时会自动在末尾加上字符串结束标识符/0,所以题中数组 str有 6个元素。ptr 指向数组 str的首地址,ptr+5是指向 s
31、tr5,*(ptr+5)是引用 str5的值,即/0。55.下列程序的输出结果是_.#include stdio.hfun ()static int a=O;a+=3; printf(“%d“,a);main ()int cc;for (cc=1;cc5;cc+) fun();printf (“/n“);(分数:2.00)填空项 1:_ (正确答案:3 6 9 12)解析:解析本题考查最基本的 for循环:for(cc=1;cc5;cc+)规定循环次数为 4次,每次 a+=3即每次 a的值增 3,但因为 fun函数中变量 a 为 static类型,所以每次调用完子函数之后,变量 a所做的改变都要保存。