1、二级 C语言笔试 312及答案解析(总分:96.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.设有以下语句 char x=3,y=6,z; z=xy2; 则 z的二进制值是(分数:2.00)A.00010100B.00011011C.00011100D.000110002.有以下程序 #includestdioh main() 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
2、,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(“%s,%s/n“,ss0,ss4); 程序的运行结果是(分数:2.00)A.xy,aaaaccB.aaaacc,xyC.bcc,aabccD.aabcc,bcc5.当变量 c
3、的值不为 2、4、6 时,值也为“真”的表达式是(分数:2.00)A.(c=2)|(c=4)|(c=6)B.(c=2j-; 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“); 程序的运行结果是(分数:2.00)A.0987654321B.4321098765C.5678901234D.09876512347.以下能正确定义一维数组的选项是(分数:2.00)A.int a5=0,1,2,3,4,5;B.char
4、 a=0,1,2,3,4,5,/0;C.char a=A,B,C;D.int a5=“0123“;8.下面的程序段运行后,输出结果是 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.189.下面程序的输出结果是 main() int a10=1,2,3,4,5,6,7,8,9,10,*p=a; printf(“%d/n“,*(p+2);(分数:2.00)A.3B.4C.1D.210.下
5、面不属于软件设计原则的是(分数:2.00)A.抽象B.模块化C.白底向上D.信息隐蔽11.有定义语句:char s10;,若要从终端给 s输入 5个字符,错误的输入语句是(分数:1.00)A.sets(i+) if(!(i%5) printf(“%d/n“,s); 程序的输出结果是(分数:2.00)A.409B.277C.1D.9132.为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为(分数:2.00)A.PAD图B.N-S图C.结构图D.数据流图33.以下不正确的定义语句是(分数:2.00)A.double x5=2.0,4.0,6.0,8.0
6、,10.0;B.int y5=0,1,3,5,7,9;C.char c11,2,3,4,5;D.char c2=/x10,/xa,/x8;34.对于下述程序,在方式串分别采用“wt”和“wb”运行时,两次生成的文件 TEST的长度分别是 #includestdioh void main() FILE *fp=fopen(“TEST“,); fputc(A,fp);fputc(/n,fp);fputc(B,fp);fpute(/n,fp); fputc(C,fp); fclose(fp);(分数:2.00)A.7字节、7 字节B.7字节、5 字节C.5字节、7 字节D.5字节、5 字节35.在
7、C语言中,运算对象必须是整型数的运算符是(分数:2.00)A.%B./C.%和/D.*36.C语言结构体类型变量在程序运行期间(分数:2.00)A.TC环境在内存中仅仅开辟一个存放结构体变量地址的单元B.所有的成员一直驻留在内存中C.只有最开始的成员驻留在内存中D.部分成员驻留在内存中37.下列叙述中,不属于软件需求规格说明书的作用的是(分数:2.00)A.便于用户、开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析38.以下叙述中正确的是(分数:2.00)A.用 C程序实现的算法必须要有输入和输出操作B.用
8、 C程序实现的算法可以没有输出但必须要有输入C.用 C程序实现的算法可以没有输入但必须要有输出D.用 C程序实现的算法可以既没有输入也没有输出39.已知数据表 A中每个元素距其最终位置不远,为节省时间,应采用的算法是(分数:2.00)A.堆排序B.直接插入排序C.快速排序D.)和)40.有以下程序 #include stdioh #define N 5 #define M N+1 #define f(x) (x*M) main() int i1,i2; i1=f(2); i2=f(1+1); printf(“%d%d/n“,i1,i2); 程序的运行结果是(分数:2.00)A.12 12B.1
9、1 7C.11 11D.12 7二、B填空题/B(总题数:13,分数:26.00)41.测试的目的是暴露错误,评价程序的可靠性;而U 【1】 /U的目的是发现错误的位置并改正错误。(分数:2.00)填空项 1:_42.在树形结构中,树根结点没有U 【2】 /U。(分数:2.00)填空项 1:_43.当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行人队运算。这种情况称为U 【3】 /U。(分数:2.00)填空项 1:_44.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于U 【4】 /U的联系。(分数:2.00)填空项 1:_45
10、.在计算机软件系统的体系结构中,数据库管理系统位于用户和U 【5】 /U之间。(分数:2.00)填空项 1:_46.阅读下面程序段,则执行后输出的结果是U 【6】 /U。 #include “stdio.h“ main() char fun(char,int); char a=A; int b=13; a=fun(a,b); putchar(a); char fun(char a,int b) char k; k=a+b; return k;(分数:2.00)填空项 1:_47.阅读下面语句,则程序的执行结果是U 【7】 /U。 #include “stdio.h“ main() int a=
11、-1,b=1,k; if(+a0) for(i=1;in;i+) if(aj-1U 【8】 /Uai) aj+=ai; U 【9】 /U; 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); printf(“/nThe data after deleted :/n“); for(i=0;in;i+)printf(“%3d“,ai);printf(“/n/n“); (分数
12、:2.00)填空项 1:_49.以下程序的定义语句中,x1的初值是U 【10】 /U,程序运行后输出的内容是U 【11】 /U。 #include stdio.h main() 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+) pi main() 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)填空项 1:_53.有如下图所示的双链表结构,请根据图示完成结构
13、体的定义: (分数:2.00)填空项 1:_二级 C语言笔试 312答案解析(总分:96.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.设有以下语句 char x=3,y=6,z; z=xy2; 则 z的二进制值是(分数:2.00)A.00010100B.00011011 C.00011100D.00011000解析:解析 本题考查两个位运算符。 按位异或运算符“”是双目运算符,其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异或时,结果为 1。 左移运算符“”是双目运算符,其功能把“”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移
14、动的位数,高位丢弃,低位补 0,并且“”运算符的优先级于“”。2.有以下程序 #includestdioh main() 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“, int i,j; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(strlen(si)strlen(
15、sj) t=si;si:sj;sj=t; main() char *ss=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“;fun(ss,5); printf(“%s,%s/n“,ss0,ss4); 程序的运行结果是(分数:2.00)A.xy,aaaacc B.aaaacc,xyC.bcc,aabccD.aabcc,bcc解析:解析 函数 fun(char,s,int n)的功能是对字符串数组的元素按照字符串的长度从小到大排序。在主函数中执行 fun(ss,5)语句后,*ss“xy“,“bcc“,“bbcc“,“aabcc“,“aaaacc“,ss0,ss4的输出结果为 x
16、y,aaaacc。5.当变量 c的值不为 2、4、6 时,值也为“真”的表达式是(分数:2.00)A.(c=2)|(c=4)|(c=6)B.(c=2j-; 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“); 程序的运行结果是(分数:2.00)A.0987654321B.4321098765C.5678901234 D.0987651234解析:解析 函数 fun(int *s,int n1,int n2)的功
17、能是对数组 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,4。7.以下能正确定义一维数组的选项是(分数: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“;解析:解析 选项 A) 中,定义的初值个数大于数组的长度;选项 C) 中,数组名后少了
18、中括号;选项 D) 中,整型数组不能赋予字符串。8.下面的程序段运行后,输出结果是 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.0 D.18解析:解析 本题主要考查的是用二维数组首地址和下标来引用二维数组元素的方法。通过分析可知,程序中的双重循环定义了一个如下的二维数组: 9.下面程序的输出结果是 main() int a10=1,2,3,4,5,6,7,8,9,10,*p=a; pri
19、ntf(“%d/n“,*(p+2);(分数:2.00)A.3 B.4C.1D.2解析:解析 在 C语言中,数组元素是从 0开始的。指针变量 p指向数组的首地址,(p+2)就会指向数组中的第 3个元素。题目中要求输出的是元素的值。10.下面不属于软件设计原则的是(分数:2.00)A.抽象B.模块化C.白底向上 D.信息隐蔽解析:解析 软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念,它们具有抽象、模块化、信息隐蔽和数据独立性。自底向上是集成测试中增量测试的一种。11.有定义语句:char s10;,若要从终端给 s输入 5个字符,错误的输入语
20、句是(分数:1.00)A.sets(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-1U 【8】 /Uai) aj+=ai; U 【9】 /U; 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+)print
21、f(“%3d“,ai); n=fun(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就是新数组中的最后一个元素,若条件成立则表示出现了不同的值,所以
22、 ai要留到新数组中。注意本题中 i、j 的初值都要从 1开始,该算法只能用于数组已排序的题目中。49.以下程序的定义语句中,x1的初值是U 【10】 /U,程序运行后输出的内容是U 【11】 /U。 #include stdio.h main() 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+) pi main() 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)填空项 1:_ (正确答案:22)解析:解析 在 main函数中,调用 reverse函数将 b数组中的前 8个成员进行互置,执行完毕后,b 数组中的成员为8,7,6,5,4,3, 2,1,9,10,然后再执行 for循环结构,将 b6,b7b9的值相加,结果为 22。53.有如下图所示的双链表结构,请根据图示完成结构体的定义: (分数:2.00)填空项 1:_ (正确答案:struct aa* lhead,*rchild;)解析:解析 结构体对链表的定义。