1、二级 C语言笔试-474 及答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.结构化程序设计主要强调的是( )。A) 程序的规模 B) 程序的易读性 C) 程序的执行效率 D) 程序的可移植性(分数:1.00)A.B.C.D.2.结构化分析方法是面向( )的自顶向下、逐步求精进行需求分析的方法。A) 对象 B) 数据结构 C) 数据流 D) 目标(分数:2.00)A.B.C.D.3.结构化分析方法是面向( )的自顶向下、逐步求精进行需求分析的方法。A) 对象 B) 数据结构 C) 数据流 D) 目标(分数:2.00)A.B.C.D.4.已知二叉树
2、 BT的后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是_。A) cedba B) acbed C) decab D) deabc(分数:2.00)A.B.C.D.5.下面不属于软件设计原则的是( )。A) 抽象 B) 模块化 C) 自底向上 D) 信息隐蔽(分数:1.00)A.B.C.D.6.以下叙述正确的是_。A) 可以把 define和 if定义为用户标识符B) 可以把 define定义为用户标识符,但不能把 if定义为用户标识符C) 可以把 if定义为用户标识符,但不能把 define定义为用户标识符D) define和 if都不能定义为用户标识符(分数:2.
3、00)A.B.C.D.7.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是 A) 一对一 B) 一对多 C) 多对多 D) 多对一(分数:2.00)A.B.C.D.8.设有如下三个关系表:(分数:2.00)A.B.C.D.9.下列叙述中正确的是_。(A) 数据库系统是一个独立的系统,不需要操作系统的支持(B) 数据库系统的根本目标是要解决数据的共享问题(C) 数据库管理系统就是数据库系统(D) 以上三种说法都不对(分数:2.00)A.B.C.D.10.定义无符号整数类为 UInt,下面可以作为类 T实例化值的是_。A) -369 B) 369C
4、) 0.369 D) 整数集合(1,2,3,4,5)(分数:2.00)A.B.C.D.11.以下关于 C语言的叙述中正确的是( )。 A) 预处理命令通常位于函数体外面,但也可以位于函数体中间 B) C语言中的变量定义须在其他语句之前 C) 在 C语言程序的书写中,一个语句必须单占一行 D) 一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的 main函数(分数:1.00)A.B.C.D.12.下面的程序在编泽时产生错误,其出错原因是( )。 #includestdio.h main() int 1_case;float printF; printf(“请输入 2个数:“);
5、scanf (“%d%f“, float y; char name50;scanf(“%2d%f%s“, j, y, name);当执行上述程序段,从键盘上输入 55566 777abc后,y 的值为_。(A) 55566.0(B) 566.0(C) 7777.0(D) 566777.0(分数:1.00)A.B.C.D.17.能正确表示逻辑关系“a)10 或 a0”的 C语言表达式是( )。A) a =10 or a=0 B) a =0|a=10C) a=1050;i+)if(!(i%5)printf(“%x/n“,x);A) 88 B) 86 C) 77 D) 21(分数:2.00)A.B.
6、C.D.22.有以下程序:#include stdio.h#include string.hmain()char str20=“Hello“,“Beijing“,*P=str0;printf(“%d/n“,strlen(p+20);程序运行后的输出结果是( )。A) 0 B) 5 C) 7 D) 20(分数:1.00)A.B.C.D.23.下列程序的功能是给 r输入数据后计算半径为 r的圆面积 s。程序在编译时出错。main()/* Beginning */int r; float s;scanf(“%d“,S=*r*r;printf(“s=%f/n“,s);出错的原因是( )A) 注释语句书
7、写位置错误B) 存放圆半径的变量 r不应该定义为整型C) 输出语句中格式描述符非法D) 计算圆面积的赋值语句中使用了非法变量(分数:2.00)A.B.C.D.24.如下程序的输出结果是#includestdio.hmain()chsr ch25=“6937“,“8254“,*p2;int i,j,s=0;for(i=0;i2;i+) pi=chi;for(i=0;i2;i+)for(j=0;pij/0;j+=2)s=10*s+pij-0printf(“%d/n“,s);A) 69825 B) 63825 C) 6385 D) 693825(分数:2.00)A.B.C.D.25.有以下程序:#i
8、ncludestdio.hint f(int x)int y;if(x=0|x=1)return(3);y=x*x-f(x-2);return y;main()int z;z=f(3);printf(“%d/n“,z);程序的运行结果是_。A) 0 B) 9 C) 6 D) 8(分数:2.00)A.B.C.D.26.若有下列定义,则对 a数组无素地址的正确引用是( )。int a5,*p=a;A) p+5 B) *a+1C) for(i=0;in/2;i+)t=ai;ai=aa-1-i;an-1-i=t;main()int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0;
9、reverse(b,10);for(i=0;i3 ;i+) s+=bi;printf(“%d/n“,s);程序运行后的输出结果是( )。A) 27 B) 6 C) 25 D) 30(分数:2.00)A.B.C.D.29.以下关于宏的叙述中正确的是_。A) 宏名必须用大写字母表示 B) 宏定义必须位于源程序中所有语句之前C) 宏替换没有数据类型限制 D) 宏调用比函数调用耗费时间(分数:2.00)A.B.C.D.30.有以下程序:main()int x=0,y=5,z=31while(z-0,则下列选项中值为 0的表达式是( )。A) (!a=1)b+;return(a);main()int a
10、=2,i,k;for(i=0;i2;i+)k=f(a+);printf(“%d/n“,k);A) 3 B) 4 C) 5 D) 6(分数:2.00)A.B.C.D.33.有以下程序#include int fun(int n, int *p) int f1, f2;if(n=1|n=2) *p=1;elsefun(n-1, f1); fun(n-2, f2);*p=f1+f2;main()int s;fun(3, s); printf(“%d/n“, s);程序的运行结果是_。(A) 2(B) 3(C) 4(D) 5(分数:2.00)A.B.C.D.34.有以下程序:#includestdio
11、.h#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“,i1,i2);程序的运行结果是_。A) 12 12 B) 11 7 C) 11 11 D) 12 7(分数:2.00)A.B.C.D.35.下列程序的输出结果是( )。#includestdio.h#includestring.hmain()char a=“/n123/“;printf(“%d,%d/n“,strlen(A) ,sizeof(A) );A) 5,6 B) 5,5 C) 6,6 D) 6,5(分数:2
12、.00)A.B.C.D.36.有以下程序#include stdio.hmain()struct STUchar name9;char sex;double score2;sturt STU a=“Zhao“ ,m,85.0,90.0,b=“Qian“ ,f,95:0,92.0;b=a;printf(“%s,%c,%2.0f,%2.0f/n“,b.name,b.sex,b.score0,b.score1);程序的运行结果是_。A) Qian,f,95,92 B) Qian,85,90 C) Zhao,f,95,92 D) Zhao,m,85,90(分数:2.00)A.B.C.D.37.若有以下
13、说明和语句:int c45,(*p)5;p=C;能够正确引用 c数组元素的是 _。A) p+1 B) *(p+1) C) *(p+1)+3 D) *(p0+2)(分数:2.00)A.B.C.D.38.函数 fseek()的正确调用形式是( )。A) fseek(位移量,起始点,文件类型指针); B) fseek(文件类型指针,位移量,起始点);C) fseek(文件类型指针,起始点,位移量); D) fseek(起始点,位移量,文件类型指针);(分数:2.00)A.B.C.D.39.读取二进制文件的函数调用形式为“fread(buffer,size,count,fp);”,其中 buffer代
14、表的是( )。A一个文件指针,指向待读取的文件B一个整型变量,代表待读取的数据的字节数C一个内存块的首地址,代表读入数据存放的地址D一个内存块的字节数(分数:1.00)A.B.C.D.40.有以下结构体说明和变量定义,如下图所示,指针 p、q、r 分别指向一个链表中的三个连续结点。(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:32.00)41.树中度为零的结点称为 1。(分数:2.00)填空项 1:_42.按“先进后出”原则组织数据的数据结构是 1。(分数:2.00)填空项 1:_43.通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为 1。(分数:2.00)填
15、空项 1:_44.44. 在 E-R图中,图形包括矩形框、菱形框、椭圆框。其中表示实体联系的是U /U框。(分数:2.00)填空项 1:_45.45. 以下程序中,函数 SumColumMin的功能是:求出 M行 N列二维数组每列元素中的最小值,并计算它们的和值,和值通过形参传回主函数输出。请填空,#include stdio.h#define M 2#define N 4void SumColumMin ( int a M N ,int* sum)int i,j,k,s=0;for(i =0;iN;i + )k=O;for(j=1 ;j M;j + )if(aki aji) k=j;s+:U
16、 /U;U /U=s;main( )int xM N=3,2,5,1,4,1,8,3,s;SumColumMin(U /U);printf( “%d /n“ ,s);(分数:2.00)填空项 1:_46.46. 以下程序运行时,若从键盘输入:10 20 30 回车,输出的结果是U /U。#includestdio.hmain()int i=0,j=0,k=0;scanf(“% d%* d%d“, switch(x)case1:switch(y)case 0:a+;break;case 1:b+;break;case2:a+;b+;break;printf(“a%d,b%d/n“,a,B);(分
17、数:2.00)填空项 1:_48.以下程序的功能是输入任意整数给 n后,输出 n行由大写字母 A开始构成的三角形字符阵列图形。例如,输入整数 5时(注意:n 不得大于 10),程序运行结果如下:A B C D EF G H IJ K LM NO请填空完成该程序。main()int i,j,n;char ch=A;scanf(“%d“,i10;i+)scanf(“%d“,xi);for(i=1;i10;i+)ai-1=xi+_;for(i=0;i9;i+)printf(“%d“,ai);printf(“/n“);(分数:2.00)填空项 1:_50.以下程序的输出结果为_。#define JFT
18、(x) x*xmain( )int a,k=3;a=+JFT(k+1);printf(“%d“,a);(分数:2.00)填空项 1:_51.设在主函数中有以下定义和函数调用语句,且 fun函数为 void类型。请写出 fun函数的首部_。要求形参名为 b。main( )double s1022;int n;fun(s);(分数:2.00)填空项 1:_52.以下程序的输出结果是_。 #includestdio.h int fun(int x) static int t=0; return(t+=x); main() int s,i; for(i=1;i=5;i+)s=fun(i); print
19、f(“%d/11“,s); (分数:2.00)填空项 1:_53.下面程序的功能是建立一个有 3个结点的单循环链表,如下图所示然后求各个结点数值域 data中数据的和,请填空。(分数:2.00)填空项 1:_54.下列程序的运行结果是_。#includestdio.hfunc(a,B) static int m0,i2;i+m+1;mi+a+b;return(m);main0intk5,m3,p;pfunc(k,m);printf(“%d“,p);pfunc(k,m);printf(“%d/n“,p);(分数:2.00)填空项 1:_55.下列程序的运行结果是_。#includestdio.h
20、func(a,b)static int m=0,i=2;i+=m+1;m=i+a+b;return(m);main()int k=5,m=3,p;p=func(k,m);printf(“%d“,p);p=func(k,m);printf(“%d/n“,p);(分数:2.00)填空项 1:_二级 C语言笔试-474 答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.结构化程序设计主要强调的是( )。A) 程序的规模 B) 程序的易读性 C) 程序的执行效率 D) 程序的可移植性(分数:1.00)A.B. C.D.解析:解析 结构化程序设计主要强调的
21、是程序清晰易读,可理解性好。2.结构化分析方法是面向( )的自顶向下、逐步求精进行需求分析的方法。A) 对象 B) 数据结构 C) 数据流 D) 目标(分数:2.00)A.B.C. D.解析:解析 结构化分析方法是面向数据流进行需求分析的方法,采用自顶向下、逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。3.结构化分析方法是面向( )的自顶向下、逐步求精进行需求分析的方法。A) 对象 B) 数据结构 C) 数据流 D) 目标(分数:2.00)A.B.C. D.解析:解析 结构化分析方法是面向数据流进行需求分析的方法,采用自顶向下、逐层分解,建立系统的处理流程,
22、以数据流图和数据字典为主要工具,建立系统的逻辑模型。4.已知二叉树 BT的后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是_。A) cedba B) acbed C) decab D) deabc(分数:2.00)A. B.C.D.解析:评析 二叉树 BT的后序遍历序列为 dabec,故 BT的根结点为 C;而 BT的中序遍历序列是debac,即遍历序列中最后一个结点为跟结点,说明 BT的右子树为空。由 BT的后序遍历序列和中序遍历序列可知 BT的左子树(LST)的后序遍历序列和中序遍历序列分别为 dabe和 deba(树是递归定义的):故LST的根结点是 e,在由
23、LST的中序遍历序列可知其左子树为 d。因此 BT的前序遍历序列为 cedba。5.下面不属于软件设计原则的是( )。A) 抽象 B) 模块化 C) 自底向上 D) 信息隐蔽(分数:1.00)A.B.C. D.解析:解析 软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念,它们是抽象、模块化、信息隐蔽和数据独立性。自底向上是集成测试中增量测试的一种。6.以下叙述正确的是_。A) 可以把 define和 if定义为用户标识符B) 可以把 define定义为用户标识符,但不能把 if定义为用户标识符C) 可以把 if定义为用户标识符,但不能把 d
24、efine定义为用户标识符D) define和 if都不能定义为用户标识符(分数:2.00)A.B. C.D.解析:解析 if 是 C语言中的保留字,所以不能作为用户标识符;define 是 C语言中的预编译命令,由于 C语言中的预编译命令都是以#开头,所以 define可以作为用户标识符。7.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是 A) 一对一 B) 一对多 C) 多对多 D) 多对一(分数:2.00)A.B.C. D.解析:解析 本题考查实体之间的联系。实体集之间的联系没有多对一,所以排除选项 D。用于一个工作人员可以使用多台计算
25、机,而一台计算机可被多个人使用,所以实体工作人员与实体计算机之间的联系是多对多。8.设有如下三个关系表:(分数:2.00)A.B.C. D.解析:解析 广义笛卡儿积():设关系 R和 S的属性个数分别为 n、m,则 R和 S的广义笛卡儿积是一个有(n+m)列的元组的集合。每个元组的前 n列来自 R的一个元组,后 m列来自 S的一个元组,记为RS。9.下列叙述中正确的是_。(A) 数据库系统是一个独立的系统,不需要操作系统的支持(B) 数据库系统的根本目标是要解决数据的共享问题(C) 数据库管理系统就是数据库系统(D) 以上三种说法都不对(分数:2.00)A.B. C.D.解析:10.定义无符号
26、整数类为 UInt,下面可以作为类 T实例化值的是_。A) -369 B) 369C) 0.369 D) 整数集合(1,2,3,4,5)(分数:2.00)A.B. C.D.解析:解析 本题考查的知识点是数据类型。首先根据题目中的“定义无符号整数类”排除选项 A、选项 C和选项 D,本题答案为选项 B。11.以下关于 C语言的叙述中正确的是( )。 A) 预处理命令通常位于函数体外面,但也可以位于函数体中间 B) C语言中的变量定义须在其他语句之前 C) 在 C语言程序的书写中,一个语句必须单占一行 D) 一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的 main函数(分数:1
27、.00)A. B.C.D.解析:解析 源程序中可以有预处理命令(include 命令仅为其中的一种)。C 语言中的变量可以在使用之前的任何位置进行定义。C 语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。一个 C语言源程序可以由一个或多个源文件组成,但仅可以有一个 main函数.12.下面的程序在编泽时产生错误,其出错原因是( )。 #includestdio.h main() int 1_case;float printF; printf(“请输入 2个数:“); scanf (“%d%f“, float y; char name50;scanf(“%2d%f
28、%s“, j, y, name);当执行上述程序段,从键盘上输入 55566 777abc后,y 的值为_。(A) 55566.0(B) 566.0(C) 7777.0(D) 566777.0(分数:1.00)A.B. C.D.解析:17.能正确表示逻辑关系“a)10 或 a0”的 C语言表达式是( )。A) a =10 or a=0 B) a =0|a=10C) a=1050;i+)if(!(i%5)printf(“%x/n“,x);A) 88 B) 86 C) 77 D) 21(分数:2.00)A. B.C.D.解析:解析 x 以 0开头是以八进制的形式赋值的,输出时要输出其对应的十六进制
29、。0210 对应的十六进制是 88。22.有以下程序:#include stdio.h#include string.hmain()char str20=“Hello“,“Beijing“,*P=str0;printf(“%d/n“,strlen(p+20);程序运行后的输出结果是( )。A) 0 B) 5 C) 7 D) 20(分数:1.00)A.B.C. D.解析:解析 本题考查字符数组和指针的运用。strlen 是测试字符串长度的函数,函数的值为字符串的实际长度,不包括/0在内。str20=“Hello“,“Beijing“定义了一个 2行 20列的数组,数组的首地址是 float s;
30、scanf(“%d“,S=*r*r;printf(“s=%f/n“,s);出错的原因是( )A) 注释语句书写位置错误B) 存放圆半径的变量 r不应该定义为整型C) 输出语句中格式描述符非法D) 计算圆面积的赋值语句中使用了非法变量(分数:2.00)A.B.C.D. 解析:解析 在 C语言程序中,可以用一个符号名来代表一个常量,称为符号常量。这个符号名必须在程序中进行特别的“指定”,并符合标识符的命令规则。在本题中圆周率 是一个符号常量,但在程序中并没有指定其值,所以编译器找不到其值就会报错。所以选项 D正确。24.如下程序的输出结果是#includestdio.hmain()chsr ch2
31、5=“6937“,“8254“,*p2;int i,j,s=0;for(i=0;i2;i+) pi=chi;for(i=0;i2;i+)for(j=0;pij/0;j+=2)s=10*s+pij-0printf(“%d/n“,s);A) 69825 B) 63825 C) 6385 D) 693825(分数:2.00)A.B.C. D.解析:命题目的 考查通过指针引用字符串数组中的元素。解题要点 通过行指针 p来实现数组元素的引用。考点链接 用格式说明符%s 进行整串输入与输出。25.有以下程序:#includestdio.hint f(int x)int y;if(x=0|x=1)retur
32、n(3);y=x*x-f(x-2);return y;main()int z;z=f(3);printf(“%d/n“,z);程序的运行结果是_。A) 0 B) 9 C) 6 D) 8(分数:2.00)A.B.C. D.解析:解析 本题主要考查函数的递归调用。当 x=0或者 x=1时返回值为 3,即 f(0)=3,f(1)=3;否则返回值为 x*x-f(x-2)。f(3)=3*3-f(1)=9-3=6。26.若有下列定义,则对 a数组无素地址的正确引用是( )。int a5,*p=a;A) p+5 B) *a+1C) for(i=0;in/2;i+)t=ai;ai=aa-1-i;an-1-i=
33、t;main()int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0;reverse(b,10);for(i=0;i3 ;i+) s+=bi;printf(“%d/n“,s);程序运行后的输出结果是( )。A) 27 B) 6 C) 25 D) 30(分数:2.00)A. B.C.D.解析:解析 本题考查函数调用时的参数传递函数 reverse将数组 b进行了逆置,此时的 b10=(10,9,8,7,6,5,4,3,2,1,后面 for语句的功能是将 b中的前 3个数累加,将结果放在 s中,最后将 s输出,结果 s=10+9+8=27。29.以下关于宏的叙述中正确的是_
34、。A) 宏名必须用大写字母表示 B) 宏定义必须位于源程序中所有语句之前C) 宏替换没有数据类型限制 D) 宏调用比函数调用耗费时间(分数:2.00)A.B.C. D.解析:评析 宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母,所以选项 A错误;宏命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束,通常,宏命令写在文件开头,函数之前,作为文件的一部分,在此文件范围内有效,而并不必须位于源程序中所有语句之前,所以选项 B错误;用宏名代替个字符串,也就是作简单的置换,宏置换不占运行时间,只占编译时间,而日编译时并不分配内存单元,也不进行值的传递处理
35、。而函数调用则占运行时间(分配单元、保留现场、值传递、返回),所以选项 D错误;宏替换可以代替任何数据类型,不受数据类型的限制,所以选项 C正确。30.有以下程序:main()int x=0,y=5,z=31while(z-0第三次执行 while语句时,z=10,然后执行 z-得 x0,执行+x 得 x=35,条件成立,执行 y=y-1=3-1= 2;第四次执行 while语句时因 z=0,z0 条件不成立,同时执行 c-得 z=-1。即执行完 while循环后 x3、y2、z-1。31.设有定义:int a=2,b=3,c=4;,则下列选项中值为 0的表达式是( )。A) (!a=1)b+
36、;return(a);main()int a=2,i,k;for(i=0;i2;i+)k=f(a+);printf(“%d/n“,k);A) 3 B) 4 C) 5 D) 6(分数:2.00)A.B. C.D.解析:解析 本题考查函数调用时的参数传递。在函数调用时,static 变量在函数调用结束后所做的所有变化均保持(即上次调用结束时的值)。在主函数中,第一次循环,i=0,调用 k=f(a+)=f(2),调用完之后才将 a加 1,a 变为 3,在 f(2)中,先将 c=3赋值给 a返回,然后将 c加 1,得到 k=a=3,c=4。第二次循环,i=1,调用 k=f(a+)=f(3),调用完之后
37、才将 a加 1,a 变为 4,在 f(3)中,先将 c=4赋值给 a返回,然后将 c加 1,得到 k=a=4,c=5。33.有以下程序#include int fun(int n, int *p) int f1, f2;if(n=1|n=2) *p=1;elsefun(n-1, f1); fun(n-2, f2);*p=f1+f2;main()int s;fun(3, s); printf(“%d/n“, s);程序的运行结果是_。(A) 2(B) 3(C) 4(D) 5(分数:2.00)A. B.C.D.解析:34.有以下程序:#includestdio.h#define N 5#defin
38、e M N+1#define f(x)(x*M)main()int i1,i2;i1=f(2);i2=f(1+1);printf(“%d%d“,i1,i2);程序的运行结果是_。A) 12 12 B) 11 7 C) 11 11 D) 12 7(分数:2.00)A.B. C.D.解析:解析 根据 define的定义,可得 f(2)=2*5+1=11,f(1+1)=1+1*5+17。35.下列程序的输出结果是( )。#includestdio.h#includestring.hmain()char a=“/n123/“;printf(“%d,%d/n“,strlen(A) ,sizeof(A)
39、);A) 5,6 B) 5,5 C) 6,6 D) 6,5(分数:2.00)A. B.C.D.解析:解析 转义字符,/n表示换行,/表示反斜杠,函数 strlen()是计算字符串的长度,不包括文件结束标志(/0),函数 sizeof()统计字符串所占的字节数。36.有以下程序#include stdio.hmain()struct STUchar name9;char sex;double score2;sturt STU a=“Zhao“ ,m,85.0,90.0,b=“Qian“ ,f,95:0,92.0;b=a;printf(“%s,%c,%2.0f,%2.0f/n“,b.name,b.
40、sex,b.score0,b.score1);程序的运行结果是_。A) Qian,f,95,92 B) Qian,85,90 C) Zhao,f,95,92 D) Zhao,m,85,90(分数:2.00)A.B.C.D. 解析:评析 本题定义了两个结构体变量 a和 b,并将结构体变量 a的内容赋给了结构体变量 b。对于结构体的赋值,意味这将其中的每一个元素都进行赋值,所以输出的结构体变量 b中的内容即为结构体变量a中的各项内容。另外本题需要注意的是输出格式的控制,其中“%2.0f”指的是输出的数据共占 2列,其中有 0位小数。37.若有以下说明和语句:int c45,(*p)5;p=C;能够
41、正确引用 c数组元素的是 _。A) p+1 B) *(p+1) C) *(p+1)+3 D) *(p0+2)(分数:2.00)A.B.C.D. 解析:解析 p 是指向一个一维数组的指针,选项 A、B 和 C中都是地址,而非数组元素。选项 D正确。38.函数 fseek()的正确调用形式是( )。A) fseek(位移量,起始点,文件类型指针); B) fseek(文件类型指针,位移量,起始点);C) fseek(文件类型指针,起始点,位移量); D) fseek(起始点,位移量,文件类型指针);(分数:2.00)A.B. C.D.解析:解析 改变文件位置的指针函数 fseek()的调用形式为:
42、fseek(fp,offset,position);。fseek函数参数说明:“fp”是指向该文件的文件型指针;“offset为位移量,指从起始点 position.到要确定的新位置的字节数。也就是以起点为基准,向前移动的字节数。ANSI C 要求该参数为长整型量;“position”为起始点,指出以文件的什么位置为基准进行移动,position 的值用整型常数表示,“0”表示文件的开头,“1”表示文件的当前位置,“2”表示文件的末尾。39.读取二进制文件的函数调用形式为“fread(buffer,size,count,fp);”,其中 buffer代表的是( )。A一个文件指针,指向待读取的
43、文件B一个整型变量,代表待读取的数据的字节数C一个内存块的首地址,代表读入数据存放的地址D一个内存块的字节数(分数:1.00)A.B.C. D.解析:解析 head 函数中的参数 buffer是内存块的首地址,输入的数据存入此内存块中。40.有以下结构体说明和变量定义,如下图所示,指针 p、q、r 分别指向一个链表中的三个连续结点。(分数:2.00)A. B.C.D.解析:解析 对于选项 A),执行 r-next=q 后,r-next 指向了 q。此时 q-next=r- next 就相当于 q-next=q;所以 q的下一个结点指向了自己,而不是指向原来 r的下一个结点,所以选项 A)错误。
44、二、填空题(总题数:15,分数:32.00)41.树中度为零的结点称为 1。(分数:2.00)填空项 1:_ (正确答案:叶子结点)解析:解析 树中度为零的结点,也就是没有后件的结点,称为叶子结点。42.按“先进后出”原则组织数据的数据结构是 1。(分数:2.00)填空项 1:_ (正确答案:栈或 Stack)解析:解析 栈和队列是两种特殊的线性表,其特殊性在于对它们的操作只能在表的端点进行。栈中的数据按照后进先出的原则进行组织,而队列中的数据是按照先进先出的原则进行组织。因此,本题的正确答案是栈(Stack)。43.通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为 1。(分数:
45、2.00)填空项 1:_ (正确答案:软件生命周期)解析:解析 软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用及维护等活动。44.44. 在 E-R图中,图形包括矩形框、菱形框、椭圆框。其中表示实体联系的是U /U框。(分数:2.00)填空项 1:_ (正确答案:菱形)解析:知识点 E-R 模型的图示法评析 E-R 模型可以用一种非常直观的图的形式表示,这种图称为 E-R图。在 E-R图中,我们分别用下面不同的几何图形表示 E-R模型中的三个概念与两个联接关系。实体集表示法。在 E-R图中用矩形表示实体集
46、,在矩形内写上该实体集的名字。属性表示法。在 E-R图中用椭圆形表示属性,在椭圆形内写上该属性的名称。联系表示法。在 E-R图中用菱形(内写上联系名)表示联系。45.45. 以下程序中,函数 SumColumMin的功能是:求出 M行 N列二维数组每列元素中的最小值,并计算它们的和值,和值通过形参传回主函数输出。请填空,#include stdio.h#define M 2#define N 4void SumColumMin ( int a M N ,int* sum)int i,j,k,s=0;for(i =0;iN;i + )k=O;for(j=1 ;j M;j + )if(aki aji) k=j;s+:U /U;U /U=s;main( )int xM N=3,2,5,1,4,1,8,3,s;SumColumMin(U /U);printf( “%d /n“ ,s);(分数:2.00)填空项 1:_ (正确答案:aki *sum x,j+) if(ak iaj i)k=j;是找出第 i列的最小值,6处应该是每列最小值累加,所以