1、二级 C语言笔试-45 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.相对于数据库系统,文件系统的主要缺陷有数据关联性差、数据不一致性和( )。(分数:1.00)A.可重用性差B.安全性差C.非持久性D.冗余性2.函数 fseek(pf,OL,SEEK_END)中的 SEEK_END代表的起始点是( )。(分数:1.00)A.文件开始B.文件末尾C.文件当前位置D.以上都不对3.下述程序的输出结果是( )。#includestdio.hmain()int i;for(i=1;i=10;i+)if(i*i=20) b+;case 1;a+;
2、case 2:a+;b+;printf(“a=%d,b=%d/n“,a,b);该程序的输出结果是( )。(分数:1.00)A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=212.下列能正确进行字符串赋值的是( )。(分数:1.00)A.char s5=“ABCDE“;B.char s5=A,B,C,D,E);C.char*s;s=“ABCDE“;D.char*s;printf(“%s“,s);13.若有定义“int b8,*p=b;”,则 p+6表示( )。(分数:1.00)A.数组元素 b6的值B.数组元素 b6的地址C.数组元素 b7的地址D.数组元素 b0的值加上
3、614.下列程序的输出结果是( )。#includestdio.hmain()int a=0,i;for(i一 1;i5;i+)switch(i)case 0:case 3:a+=1;case 1:case 2:a+=2;default:a+=3;printf(“%d“,i);)(分数:1.00)A.19B.1C.6D.815.下列叙述中正确的是( )。(分数:1.00)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理
4、的效率16.有下列程序:int fun(int x,int n)static int sum=0,i;for(i=0;in;i+) sum+=xi;return sum;main()int a=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“%d/n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45B.50C.60D.5517.设 x、y 和 z是 int型变量,且 x=4,y=6,z=8,则下列表达式中值为 0的是( )。(分数:1.00)A.x b=fun 1(y);return(int)(a+b);main()dou
5、ble w;w=fun2(1.1,2.0),程序执行后变量 w中的值是( )。(分数:1.00)A.5.21B.5C.5.0D.0.019.有下列程序:main()int i,s=0,t=1,2,3,4,5,6,7,8,9);for(i=0;i9;i+=2)s+=*(t+i);printf(“%d/n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45B.20C.25D.3620.两个或两个以上模块之间关联的紧密程度称为( )。(分数:1.00)A.耦合度B.内聚度C.复杂度D.数据传输特性21.若有以下的定义“int t32;”,则能正确表示 t数组元素地址的表达式是( )。(
6、分数:1.00)A. (分数:1.00)A.are k=10:printf(“%x,%o,“,ch,ch,k);printf(“k=%d/n“,k);(分数:1.00)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0值或不定值C.62,142,k=%dD.62,142,k=%10二、填空题(总题数:15,分数:60.00)41.数据的独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,这称为 1。(分数:4.00)填空项 1:_42.排序是计算机程序设计中的一种重要操作,常见的排序方法有
7、插入排序、 1 和选择排序。(分数:4.00)填空项 1:_43.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:4.00)填空项 1:_44.某二叉树中度为 2的结点有 18个,则该二叉树中有 1 个叶子结点。(分数:4.00)填空项 1:_45.算法的基本特征是可行性、确定性、 1 和拥有足够的情报。(分数:4.00)填空项 1:_46.顺序存储方法是把逻辑上相邻的结点存储在物理位置 1 的存储单元中。(分数:4.00)填空项 1:_47.在关系模型中,把数据看成是二维表,每一个二维表称为一个_。(分数
8、:4.00)填空项 1:_48.下列程序的输出结果是_。#includestdio.hmain()int x=1, y=1,a=1,b=1;switch(x)case 1:switch (y)case 0:a+; break;case 1:b+; break;case2: a+: b+; break;printf(“a=%d,b=%d/n“,a,b);(分数:4.00)填空项 1:_49.C语言用于结构化程序设计的 3种基本结构是 1、选择结构和循环结构。(分数:4.00)填空项 1:_50.以下程序运行后的输出结果是_。fun(int a)int b=0;static int c=3;b+;
9、 c+;return(a+b+c);main()int i,a=5;for(i=0;i3;i+)printf(“%d%d“,i,fun(a);printf(“/n“);(分数:4.00)填空项 1:_51.下述程序的输出结果是_。long fun5(int n)long s;if(n=1)|(n=-2)s=2:elses=n+fun5(n-1);return(s):main()long x;x=fun5(4);printf(“%1d/n“,x);(分数:4.00)填空项 1:_52.下述程序的输出结果是_。main()int a=2,b=4,c=6;int*p1= b+;case 1;a+;c
10、ase 2:a+;b+;printf(“a=%d,b=%d/n“,a,b);该程序的输出结果是( )。(分数:1.00)A.a=2,b=1 B.a=1,b=1C.a=1,b=0D.a=2,b=2解析:解析 当 x为 1时,执行 case 1,a 自加等于 1,因为 case 1后没有 break,接着执行 case 2,此时 a的值为 2,b 自加为 1,故选择 A选项。12.下列能正确进行字符串赋值的是( )。(分数:1.00)A.char s5=“ABCDE“;B.char s5=A,B,C,D,E);C.char*s;s=“ABCDE“; D.char*s;printf(“%s“,s);
11、解析:解析 选项 A、B 的空间不够;字符串存储要有结束符“/0”,且要占用一个空间,printf 用来输出字符,不能输入字符串。13.若有定义“int b8,*p=b;”,则 p+6表示( )。(分数:1.00)A.数组元素 b6的值B.数组元素 b6的地址 C.数组元素 b7的地址D.数组元素 b0的值加上 6解析:解析 指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中将 p+6指的是将指针向后移动了 6个存储单元,即指向 b6,存放的是 b6的地址。14.下列程序的输出结果是( )。#includestdio.hmain()
12、int a=0,i;for(i一 1;i5;i+)switch(i)case 0:case 3:a+=1;case 1:case 2:a+=2;default:a+=3;printf(“%d“,i);)(分数:1.00)A.19 B.1C.6D.8解析:解析 本题考查 switch语句。当 i=1时,执行 case 1,因为没有遇到 break语句,所以依次往下运行,a=a+2=2,a=a+3=5;当 i=2时,执行 case 2,因为没有遇到 break语句,所以依次往下执行,a=a+2=7,a=a+3=10;当 i=3时,执行 case 3,a=a+1=11,因为没有遇到 break语句,
13、所以依次往下运行,a=a+2=13,a=a+3=16,当 i=4时,执行 default,a=a+3=19,结束循环。15.下列叙述中正确的是( )。(分数:1.00)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 解析:解析 数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,存储结构有顺序和链式结构。用不同的存储结构,其处理的效率是不同的。16.有下列程
14、序:int fun(int x,int n)static int sum=0,i;for(i=0;in;i+) sum+=xi;return sum;main()int a=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“%d/n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45B.50C.60 D.55解析:解析 在函数 int fun(int x,int n)的定义中,变量 sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储中占据着永久的存储单元。函数 int fun(int x,int
15、n)的功能是求出数组 x各个元素的和。所以在主函数中,调用函数。fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用 fun(b,4)后,变量 sum=15+6+7+8+9=45,所以 s=15+45=60。17.设 x、y 和 z是 int型变量,且 x=4,y=6,z=8,则下列表达式中值为 0的是( )。(分数:1.00)A.x b=fun 1(y);return(int)(a+b);main()double w;w=fun2(1.1,2.0),程序执行后变量 w中的值是( )。(分数:1.00)A.5.21B.5C.5.0 D.0.0解析:解析 子函数 fun1(dou
16、ble a)的功能是返回 a的平方值的整数部分。子函数 fun2(double x,double y)的功能是返回 x的平方值的整数部分与 y的平方值的整数部分的和。又因为题中变量 w的定义为 double型,函数 fun2的定义为 int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。所以双精度型变量 w的值为 5.0。19.有下列程序:main()int i,s=0,t=1,2,3,4,5,6,7,8,9);for(i=0;i9;i+=2)s+=*(t+i);printf(“%d/n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45B.20C.25 D.36解
17、析:解析 在 for循环语句中自变量 i从 0开始,每次自加 2,执行 s+=*(t+i)语句,因为 C语言规定数组名代数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第 i+1个元素。所以程序运行的结果是 1+3+5+7+9=25,即变量 s的值等于 25。20.两个或两个以上模块之间关联的紧密程度称为( )。(分数:1.00)A.耦合度 B.内聚度C.复杂度D.数据传输特性解析:解析 模块的独立性是指每个模块保证完成系统要求的独立功能,并且与其他模块的联系少且接口简单。衡量软件的模块独立性有内聚性和耦合性两个定性度量标准。耦合性是模块间互相连接紧密程度的度量。一般较优秀的软
18、件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。21.若有以下的定义“int t32;”,则能正确表示 t数组元素地址的表达式是( )。(分数:1.00)A. (分数:1.00)A.are k=10:printf(“%x,%o,“,ch,ch,k);printf(“k=%d/n“,k);(分数:1.00)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0值或不定值C.62,142,k=%d D.62,142,k=%10解析:解析 第 1个 printf函数,格式说明的个数是 2,而输出项的个数是 3
19、,所以对于多余的输出项k不予输出;第 2个 printf函数,有两个%说明,第 1个%后面的字符要原样输出。本题考查 printf函数的格式。“%x”和“%o”分别表示以十六进制和八进制无符号型输出整型数据(不带前导 ox或 0);printf函数中格式说明符之前插入的任何字符都原样输出;格式说明与输出项的个数也要相等,如果格式说明的个数少于输出项的个数,则对于多余的输出项不予输出。二、填空题(总题数:15,分数:60.00)41.数据的独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,这称为 1。(分数:4.00)填空项 1:
20、_ (正确答案:物理独立性)解析:解析 数据的独立性分为物理独立性和逻辑独立性。其中物理独立性是指数据的物理结构(包括存储结构、存取方式)改变时,不需要修改应用程序。而逻辑独立性是指当逻辑结构改变时,不需要修改应用程序。42.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、 1 和选择排序。(分数:4.00)填空项 1:_ (正确答案:交换排序)解析:解析 常用的排序方法有:交换排序、插入排序和选择排序。其中交换排序包括冒泡排序和快速排序,插入排序包括简单插入排序和希尔排序,选择排序包括直接选择排序和堆排序。43.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐
21、步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:4.00)填空项 1:_ (正确答案:自顶向下)解析:解析 在程序设计时,应先考虑总体,后考虑细节,逐步将问题具体化,所以上述方法概括为:自顶向下,逐步细化。44.某二叉树中度为 2的结点有 18个,则该二叉树中有 1 个叶子结点。(分数:4.00)填空项 1:_ (正确答案:19)解析:解析 在任意一棵二叉捌中,度数为 0的结点(即叶子结点)总比度为 2的结点多一个因此该二叉树中叶子结点为 18+1=19。45.算法的基本特征是可行性、确定性、 1 和拥有足够的情报。(分数:4.00)填空项 1:_ (正确答案:有穷性)
22、解析:解析 算法有 4个基本特征,分别是可行性、确定性、有穷性和拥有足够的情报。46.顺序存储方法是把逻辑上相邻的结点存储在物理位置 1 的存储单元中。(分数:4.00)填空项 1:_ (正确答案:相邻)解析:解析 顺序存储属于数据的存储结构的一种,它是指数(数据的逻辑结构)在计算机中的表示,是把逻辑上相邻的结点存储在物理位置的相邻的存储单元中。47.在关系模型中,把数据看成是二维表,每一个二维表称为一个_。(分数:4.00)填空项 1:_ (正确答案:关系)解析:解析 在关系模型中,把数据看成是二维表。(1)二维表中元组个数是有限的元组个数有限性。(2)二维表中元组均不相同元组的唯一性。(3
23、)二维表中元组的次序可以任意交换元组的次序无关性。(4)二维表中元组的分量是不可分割的基本数据项元组分量的原子性。(5)二维表中属性名各不相同属性名唯一性。(6)二维表中属性与次序无关,可任意交换属性的次序无关性。(7)二维表属性的分量具有该属性相同的值域分量值域的同一性。满足以上 7个性质的二维表称为一个关系,以二维表为基本结构所建立的模型称为关系模型。48.下列程序的输出结果是_。#includestdio.hmain()int x=1, y=1,a=1,b=1;switch(x)case 1:switch (y)case 0:a+; break;case 1:b+; break;case
24、2: a+: b+; break;printf(“a=%d,b=%d/n“,a,b);(分数:4.00)填空项 1:_ (正确答案:a=2,b=3)解析:解析 程序从 x=1语句开始执行,之后执行第一个 switch语句,x=1,所以执行 case 1,case 1语句中包含一个复合 swith语句;这时执行第二个 switch语句,此时 y=1,因此执行 case 1,将 b加1,得到 b=2,遇到 break语句,退出第二个 switch语句,则整个 case 1的复合语句执行完毕,由于这个 case 1的后面没有 break语句使其退出,所以接着执行下列的 case 2的后面的语句,即将
25、 a、b 各加1,得到 a=2,b=3。49.C语言用于结构化程序设计的 3种基本结构是 1、选择结构和循环结构。(分数:4.00)填空项 1:_ (正确答案:顺序结构)解析:解析 结构化程度有 3种基本结构,即顺序结构、选择结构(包括 if语句和 switch语句)和循环结构(包括 for语句、while 语句、dowhile 语句)。50.以下程序运行后的输出结果是_。fun(int a)int b=0;static int c=3;b+; c+;return(a+b+c);main()int i,a=5;for(i=0;i3;i+)printf(“%d%d“,i,fun(a);print
26、f(“/n“);(分数:4.00)填空项 1:_ (正确答案:010111212。)解析:解析 当 i=0时,执行“b+;c+;”后 c=4,b=1,因此 a+b+c=10,先输出值,所以输出 010;当 i=1时,返回 fun函数中,此时 b又为 0,而 c为 4,因为它是静态局部变量,保持上一次计算的结果,直到整个程序的结束,当执行完“b+;c+;”后 c为 5,因此返回到主函数值为 11,输出结果为 111;当 i=2时,c 为 5,当执行完“b+;c+;”后 c为 6,输出的结果为 212,故最后的结果为 010111212。51.下述程序的输出结果是_。long fun5(int n
27、)long s;if(n=1)|(n=-2)s=2:elses=n+fun5(n-1);return(s):main()long x;x=fun5(4);printf(“%1d/n“,x);(分数:4.00)填空项 1:_ (正确答案:9)解析:解析 本题考查 if else语句用法,当 n=4时不满足条件,所以 fun5(4)=4+fun5(3);当 n=3时也不满足条件,fun5(3)=3+5(2);当 n=2时满足条件,此时 fun5(2)=2,故 x=4+3+2=9。52.下述程序的输出结果是_。main()int a=2,b=4,c=6;int*p1=&a,*p2=&b,*p;*(p
28、=&c)=*p1*(*p2);printf(“%d/n“,c);(分数:4.00)填空项 1:_ (正确答案:8)解析:解析 本程序定义了 3个指针变量,并且将 a、b 的地址分别赋给 p1、p2,则*p1=a=2,*p2=b=4,所以表达式*p1*(*p2)的值是 8。在赋值语句的左边是*(p=&c),即使指针 p指向了变量 c,因而*(p)代表了 c的存储单元,所以赋值语句“*(p=&c)=*p1*(*p2);”即把整数 8赋值给了变量。53.下列循环的循环次数是_。int k=2;while (k=0)printf(“%d“,k);k-;printf(“/n“);(分数:4.00)填空项
29、 1:_ (正确答案:0)解析:解析 本题考的是 while循环当条件为假时,不执行循环体,即当 k=0时,条件为假,所以循环0次。54.若有定义 float b15,*p=b;,且数组 b的首地址为 200H,则 p+13所指向的数组元素的地址为 1。(分数:4.00)填空项 1:_ (正确答案:252H)解析:解析 存储单元长度占存储空间的多少,应该视具体情况而定,如果存储单元的基类型是 int型,则移动 1个存储单元的长度就是位移 2个字节:如果存储单元基类型是 float型,则移动 1个存储单元的长度就是位移 4个字节。所以 p+13所指向的数组元素的地址为:200H+(13*4)H=252H。55.下列程序的功能是将字符串 s中所有的字符 C删除。请填空。#includestdio.hmain()char s80;int i,j;gets(s);for(i=j=0;si!=“/0“;i+)if(i!=C)_;sj=/0;puts(s);(分数:4.00)填空项 1:_ (正确答案:sj+=si。)解析:解析 循环开始后果数组 s中存储值与字符 c相同,则 i+直接跳过当前值;如果不相同,则将当前值赋予数组指定位置,并通过 j+将下标加 1,指向下一元素要存储的位置。