1、二级 C语言笔试-71 及答案解析(总分:96.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.为了使模块尽可能独立,要求(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强2.以下不正确的定义语句是(分数:2.00)A.double x5=2.0,4.0,6.0,8.0,10.0;B.int y5=0,1,3,5,7,9;C.char c11,2,3,4,5;D.char c2
2、=/x10,/xa,/x8;3.阅读下列程序,则执行后的结果为#include“stdio.h“main()int c4=1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56;printf(“%x,%x/n“,c22,*(*(c+1)+1);(分数:2.00)A.3e,6B.62,5C.56,5D.3E,64.下面程序段的运行结果是char str=“ABC“,*p=str;printf(“%d/n“,*(p+3);(分数:2.00)A.67B.0C.字符C的地址D.字符C5.有以下程序#includestdiohmain()FILE *fP;int k,n,a6=
3、1,2,3,4,5,6;fp=fopen(“d2.dat“,“w“);fprintf(fp,“%d%d%d/n“,a0,a1,a2);fprintf(fp,“%d%d%d/n“,a3,a4,a5);fclose(fp);fp=fopen(“d2dat“,“r“);fscanf(fp,“%d%d“, int i,j;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(strlen(si)strlen(sj) t=si;si:sj;sj=t;main()char *ss=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“;fun(ss,5); printf(“%
4、s,%s/n“,ss0,ss4);程序的运行结果是(分数:1.00)_14.算法的有穷性是指(分数:1.00)A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用15.为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为(分数:1.00)A.PAD图B.N-S图C.结构图D.数据流图16.数据库设计包括两个方面的设计内容,它们是(分数:1.00)A.概念设计和逻辑设计B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计17.设有以下程序段int x=0,s=0
5、;while(!x!0)s+=+x;printf(“%d“,s);则(分数:1.00)A.运行程序段后输出 0B.运行程序段后输出 1C.程序段中的控制表达式是非法的D.程序段执行无限次18.下列叙述中,不属于软件需求规格说明书的作用的是(分数:1.00)A.便于用户、开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析19.有以下程序#include stdiohvoid fun(int *s,int n1,int n2)int i,j,t;i=n1 j=n2;while(ij) t=si;si=sj;sj=
6、t;i+;j-;main()int a10=1,2,3,4,5,6,7,8,9,0,k;fun(a,0,3); fun(a,4,9); fun(a,0,9);for(k=0;k10;k+)printf(“%d“,ak); printf(“/n“);程序的运行结果是(分数:1.00)_20.有以下程序段char eh; int k;ch=a; k=12;printf(“%c,%d,“,ch,ch,k); printf(“k=%d/n“,k);已知字符 a的 ASCII码值为 97,则执行上述程序段后输出结果是(分数:1.00)A.因变量类型与格式描述符的类型不匹配输出无定值B.输出项与格式描述符
7、个数不符,输出为零值或不定值C.a,97,12k=12D.a,97,k=1221.若变量已正确定义,有以下程序段int a=3,b=5,c=7;if(ab) a=b;c=a;if(c!=(分数:2.00)A.c=b;pri22.若有定义:int a23;,以下选项中对 a数组元素正确引用的是(分数:2.00)A.a2!1B.a23C.a03D.a12!123.以下定义语句中正确的是(分数:2.00)A.int a=b=0;B.char A=65+1,b=b;C.noat a=1,*b=i+)if(!(i%5)printf(“%d/n“,s);程序的输出结果是(分数:2.00)A.409B.27
8、7C.1D.9134.已知数据表 A中每个元素距其最终位置不远,为节省时间,应采用的算法是(分数:2.00)A.堆排序B.直接插入排序C.快速排序D.)和)35.下面的程序段运行后,输出结果是int i,j,x=0;static int a88;for(i=0;i3;i+)for(j0;j3;j+)aij=2*i+j;for(i=0;i8;i+)x+=aij;printf(“%d“,x);(分数:2.00)A.9B.不确定值C.0D.1836.下列程序的输出结果是#include“stdioh”“main()int i,a=0,b=0;for(i=1;i10;i+)if(i%2=0)a +;c
9、ontinue;b+;printf(“a=%d,b=%d“,a,b);(分数:2.00)A.a=4,b=4B.a=4,b=5C.a=5,b=4D.a=5,b=537.C语言结构体类型变量在程序运行期间(分数:2.00)A.TC环境在内存中仅仅开辟一个存放结构体变量地址的单元B.所有的成员一直驻留在内存中C.只有最开始的成员驻留在内存中D.部分成员驻留在内存中38.设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),选课 SC(学号,课号,成绩),则表 SC的关键字(键或码)为(分数:2.00)A.课号,成绩B.学号,成绩C.学号,课号D.学号,姓名,
10、成绩39.以下能正确定义一维数组的选项是(分数:2.00)A.int a5=0,1,2,3,4,5;B.char a=0,1,2,3,4,5,/0;C.char a=A,B,C;D.int a5=“0123“;40.以下选项中可作为 C语言合法常量的是(分数:2.00)A.-80B.-080C.-8e1.0D.-80.0e二、填空题(总题数:13,分数:26.00)41.测试的目的是暴露错误,评价程序的可靠性;而 【1】 的目的是发现错误的位置并改正错误。(分数:2.00)填空项 1:_42.在树形结构中,树根结点没有 【2】 。(分数:2.00)填空项 1:_43.当循环队列非空且队尾指针等
11、于队头指针时,说明循环队列已满,不能进行人队运算。这种情况称为 【3】 。(分数:2.00)填空项 1:_44.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于 【4】 的联系。(分数:2.00)填空项 1:_45.在计算机软件系统的体系结构中,数据库管理系统位于用户和 【5】 之间。(分数:2.00)填空项 1:_46.阅读下面程序段,则执行后输出的结果是 【6】 。#include “stdio.h“main()char fun(char,int);char a=A;int b=13;a=fun(a,b);putchar(a);char fu
12、n(char a,int b)char k;k=a+b;return k;(分数:2.00)填空项 1:_47.阅读下面语句,则程序的执行结果是 【7】 。#include “stdio.h“main()int a=-1,b=1,k;if(+a0)for(i=1;in;i+)if(aj-1 【8】 ai)aj+=ai;【9】 ;main()int aN=2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,i,n=19;printf(“The original data :/n“);for(i=0;in;i+)printf(“%3d“,ai);n=fun(a,n);
13、printf(“/nThe data after deleted :/n“);for(i=0;in;i+)printf(“%3d“,ai);printf(“/n/n“);(分数:2.00)填空项 1:_49.以下程序的定义语句中,x1的初值是 【10】 ,程序运行后输出的内容是 【11】 。#include stdio.hmain()int x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,161,*p4,i;for(i=0;i4;i+)pimain()int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0;reverse(b,8);for(i=
14、6;i10;i+)s+bi;printf(“%d/n“,s);(分数:2.00)_53.有如下图所示的双链表结构,请根据图示完成结构体的定义:(分数:2.00)填空项 1:_二级 C语言笔试-71 答案解析(总分:96.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.为了使模块尽可能独立,要求(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强解析:解析 模块的独立程度可以由两
15、个定性标准度量:耦合性和内聚性。耦合性是衡量不同模块彼此间互相依赖 (连接)的紧密程度;内聚性是衡量一个模块内部各个元素彼此结合的紧密程度。一般来说,要求模块之间的耦合尽可能地低,而内聚性尽可能地高。2.以下不正确的定义语句是(分数:2.00)A.double x5=2.0,4.0,6.0,8.0,10.0;B.int y5=0,1,3,5,7,9; C.char c11,2,3,4,5;D.char c2=/x10,/xa,/x8;解析:解析 在一维数组中要注意的是作为下标表达式的常量表达式的值必须是大于等于 0,选项 B) 中定义有 5个元素,但赋值时有 6个元素,所以是错误的。3.阅读下
16、列程序,则执行后的结果为#include“stdio.h“main()int c4=1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56;printf(“%x,%x/n“,c22,*(*(c+1)+1);(分数:2.00)A.3e,6 B.62,5C.56,5D.3E,6解析:解析 数组 c4表示一个 4行 4列数组,c22表示第 3行第 3列上的元素 62,*(*(c+1)+1)表示第 2行第 2列上的元素 6,通过十六进制输出为 3e,6。4.下面程序段的运行结果是char str=“ABC“,*p=str;printf(“%d/n“,*(p+3);(分数:2.
17、00)A.67B.0 C.字符C的地址D.字符C解析:解析 考查指向字符串的指针变量。在该题中,指针变量 p指向的应该是该字符串中的首地址,p+3指向的是字符串结束标志/0的地址,因而*(p+3)的值为 0。5.有以下程序#includestdiohmain()FILE *fP;int k,n,a6=1,2,3,4,5,6;fp=fopen(“d2.dat“,“w“);fprintf(fp,“%d%d%d/n“,a0,a1,a2);fprintf(fp,“%d%d%d/n“,a3,a4,a5);fclose(fp);fp=fopen(“d2dat“,“r“);fscanf(fp,“%d%d“,
18、 int i,j;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(strlen(si)strlen(sj) t=si;si:sj;sj=t;main()char *ss=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“;fun(ss,5); printf(“%s,%s/n“,ss0,ss4);程序的运行结果是(分数:1.00)_解析:解析 函数 fun(char,s,int n)的功能是对字符串数组的元素按照字符串的长度从小到大排序。在主函数中执行 fun(ss,5)语句后,*ss“xy“,“bcc“,“bbcc“,“aabcc“,“aaaacc/14
19、.算法的有穷性是指(分数:1.00)A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用解析:解析 算法具有 5个特性:有穷性:一个算法必须(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生歧义;可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现;输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合;输出:一个算法有一个或多个输出。15.为了避免流程图在描述程序逻辑时的灵
20、活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为(分数:1.00)A.PAD图B.N-S图 C.结构图D.数据流图解析:解析 N-s 图是由 Nassi和 Shneiderman提出的一种符合程序化结构设计原则的图形描述工具。它的提出是为了避免流程图在描述程序逻辑时的灵活性。16.数据库设计包括两个方面的设计内容,它们是(分数:1.00)A.概念设计和逻辑设计 B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计解析:解析 数据库设计包括数据库概念设计和数据库逻辑设计两个方面的内容。17.设有以下程序段int x=0,s=0;while(!x!0)s+=
21、+x;printf(“%d“,s);则(分数:1.00)A.运行程序段后输出 0B.运行程序段后输出 1 C.程序段中的控制表达式是非法的D.程序段执行无限次解析:解析 本题中,“!”表示逻辑非运算符,“!”表示不等于运算符,逻辑非运算符比不等于运算符的优先级高。18.下列叙述中,不属于软件需求规格说明书的作用的是(分数:1.00)A.便于用户、开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析 解析:解析 软件需求规格说明书(Software Requirement Specification,SRS)是需
22、求分析阶段的最后成果,是软件开发中的重要文档之一。它具有以下几个方面的作用:便于用户、开发人员进行理解和交流;反映出用户问题的结构,可以作为软件开发工作的基础和依据;作为确认测试和验收的依据。19.有以下程序#include stdiohvoid fun(int *s,int n1,int n2)int i,j,t;i=n1 j=n2;while(ij) t=si;si=sj;sj=t;i+;j-;main()int a10=1,2,3,4,5,6,7,8,9,0,k;fun(a,0,3); fun(a,4,9); fun(a,0,9);for(k=0;k10;k+)printf(“%d“,a
23、k); printf(“/n“);程序的运行结果是(分数:1.00)_解析:解析 函数 fun(int *s,int n1,int n2)的功能是对数组 s中的元素进行首尾互相调换。所以在主函数中,当 fun(a,0,3)执行完后,数组 a124,3,2,1,5.6,7,8,9,01;再执行fun(a,4,9),数组 a124,3,2,1,0,9,8,7,6,5;再执行 fun(a,0,9)后,数组 a125,6,7,8,9,0,1,2,3,420.有以下程序段char eh; int k;ch=a; k=12;printf(“%c,%d,“,ch,ch,k); printf(“k=%d/n“
24、,k);已知字符 a的 ASCII码值为 97,则执行上述程序段后输出结果是(分数:1.00)A.因变量类型与格式描述符的类型不匹配输出无定值B.输出项与格式描述符个数不符,输出为零值或不定值C.a,97,12k=12D.a,97,k=12 解析:解析 输出格式控制符%c 表示将变量以字符的形式输出;输出格式控制符%d 表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为 a,97;第二个输出语句输出的结果为 k=12。21.若变量已正确定义,有以下程序段int a=3,b=5,c=7;if(ab) a=b;c=a;if(c!=(分数:2.00)A.c=b;pri解析:解析 两
25、个 if语句的判断条件都不满足,程序只执行了 ca 这条语句,所以变量 c的值等于3,变量 b的值没能变化,程序输出的结果为 3,5,3。所以正确答案为 B) 。22.若有定义:int a23;,以下选项中对 a数组元素正确引用的是(分数:2.00)A.a2!1B.a23C.a03D.a12!1 解析:解析 C 语言中数组下标是从 0开始的,所以二维数组 a23的第一维下标取值为 0、1;第二维的下标取值为 0、1、2,因而选项 A) 、B) 、C) 都是错误的,选项 D) 表示数组元素 a00。23.以下定义语句中正确的是(分数:2.00)A.int a=b=0;B.char A=65+1,
26、b=b; C.noat a=1,*b=i+)if(!(i%5)printf(“%d/n“,s);程序的输出结果是(分数:2.00)A.409B.277C.1D.91 解析:解析 本题是计算 50之内的自然数相加之和,题中 if语句括号中的条件表达式!(i%5)for(i=1;in;i+)if(aj-1 【8】 ai)aj+=ai;【9】 ;main()int aN=2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,i,n=19;printf(“The original data :/n“);for(i=0;in;i+)printf(“%3d“,ai);n=fun
27、(a,n);printf(“/nThe data after deleted :/n“);for(i=0;in;i+)printf(“%3d“,ai);printf(“/n/n“);(分数:2.00)填空项 1:_ (正确答案:8! 9return j)解析:解析 本题程序的流程是:让 i,j 都从 1开始,其中 j用于控制删除后剩下的数中的下标,i 用于搜索原数组中的元素。j 始终是新数组已有元素中最后一个元素的下一个元素的下标,所以 if()中的条件是 aj-1!ai,其中 aj-1就是新数组中的最后一个元素,若条件成立则表示出现了不同的值,所以 ai要留到新数组中。注意本题中 i、j 的
28、初值都要从 1开始,该算法只能用于数组已排序的题目中。49.以下程序的定义语句中,x1的初值是 【10】 ,程序运行后输出的内容是 【11】 。#include stdio.hmain()int x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,161,*p4,i;for(i=0;i4;i+)pimain()int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0;reverse(b,8);for(i=6;i10;i+)s+bi;printf(“%d/n“,s);(分数:2.00)_解析:解析 在 main函数中,调用 reverse函数将 b数组中的前 8个成员进行互置,执行完毕后,b 数组中的成员为8,7,6,5,4,3, 2,1,9,1053.有如下图所示的双链表结构,请根据图示完成结构体的定义:(分数:2.00)填空项 1:_ (正确答案:struct aa* lhead,*rchild;)解析:解析 结构体对链表的定义。