1、二级 C语言笔试-483 及答案解析(总分:93.00,做题时间:90 分钟)一、选择题(总题数:40,分数:63.00)1.冒泡排序在最坏情况下的比较次数是_。A) n(n+1)/2 B) nlog2n C) n(n-1)/2 D) n/2(分数:2.00)A.B.C.D.2.在设计程序时,应采纳的原则之一是( )。A) 不限制 goto语句的使用 B) 减少或取消注解行C) 程序越短越好 D) 程序结构应有助于读者理解(分数:1.00)A.B.C.D.3.结构化程序设计的核心和基础是( )。A) 结构化分析方法 B) 结构化设计方法C) 结构化设计理论 D) 结构化编程方法(分数:2.00
2、)A.B.C.D.4.下列描述中正确的是( )。A) 软件工程只是解决软件项目的管理问题B) 软件工程主要解决软件产品的生产率问题C) 软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D) 软件工程只是解决软件开发过程中的技术问题(分数:2.00)A.B.C.D.5.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是 A) 一对一 B) 一对多 C) 多对多 D) 多对一(分数:2.00)A.B.C.D.6.关系表中的每一行记录称为一个( )。 A) 字段 B) 元组 C) 属性 D) 关键码(分数:2.00)A.B.C.D.7.将 E
3、-R图转换到关系模式时,实体与联系都可以表示成( )。A) 属性 B) 关系 C) 键 D) 域(分数:1.00)A.B.C.D.8.在 Windows环境下,单击当前窗口中的按钮 (分数:1.00)A.B.C.D.9.下列程序的执行结果是( )。#includestdio.hmain()inta,b,c;a=b=2;c=(a+)-1;printf(“%d,%d“,a,c) ;c+=-a+(+b) ;printf(“%d,%d“,a,c) ;A) 3,1 4,1 B) 3,1 4,2 C) 2,04,1 D) 2,1 4,1(分数:2.00)A.B.C.D.10.以下叙述中错误的是( )。 A
4、) C程序在运行过程中所有计算都以二进制方式进行 B) C程序在运行过程中所有计算都以十进制方式进行 C) 所有 C程序都需要编译链接无误后才能运行 D) C程序中整型变量只能存放整数,实型变量只能存放浮点数(分数:1.00)A.B.C.D.11.有以下定义:int a;long b;double x,y;,则以下选项中正确的表达式是 A) a%(int)(x-y) B) a=x!=y C) (a*y)%b D) y=x+y=x(分数:1.00)A.B.C.D.12.下列表达式中,可以正确表示 或 (分数:1.00)A.B.C.D.13.设有条件表达式:(EXP)i+: j-,则以下表达式中与
5、(EXP)完全等价的是_。A) (EXP=0) B) (EXP!=0)C) (EXP=1) D) (EXP!=1)(分数:1.00)A.B.C.D.14.若有“double a;”,则正确的输入语句是( )。A) scanf(“%1f“,a);B) scanf(“%f“,char c10 ;则正确的输入语句是( )。A) seanf(“%d%s“ , B) scanf(“%d%s“,C) seanf(“%d%s“,b,c); D) scanf(“%d%s“,b,(分数:1.00)A.B.C.D.16.以下各选项企图说明种新的类型名,其中正确的是_。A) typedef vi int; B) t
6、ypedef V2=int;C) typedef int v3; D) lypedef v4:int(分数:2.00)A.B.C.D.17.若有说明语句:int a,b,c,*d=,则能正确从键盘读入 3个整数分别赋给变量 a、b、c 的语句是 _。A) scanf(“%d %d %d“,B) scanf(“%d %d %d“,C) scanf(“%d %d %d“,a,b,d);D) scanf(“% d% d%d“,a,b,*d);(分数:1.00)A.B.C.D.18.在下列选项中,没有构成死循环的是( )。A) int i=100;while(1)i=i0+1;if(i100) bre
7、ak;B) for(;);C) int k=10000;dok+;while(k10000);D) int s=36;while (s) -s;(分数:1.00)A.B.C.D.19.若变量已正确定义,下列正确的程序段是( )。A) while(ch=getchar()=/N)putchar(ch);B) while(ch=getchar()=/n)putchar(ch);C) while(ch=getchar()!=/N)putchar(ch);D) while(ch=getchar()!=/n)putchar(ch);(分数:2.00)A.B.C.D.20.有下列程序段:int k=0,a
8、=1,b=2,c=3;k=ab?b:a;k=kC?C:k;执行该程序段后,k 的值是( )。A) 3 B) 2 C) 1 D) 0(分数:2.00)A.B.C.D.21.有以下程序:main()int i,j,x=0;for(i=0;i2;i+)x+;for(j=0;j=3;j+)if(j%2)continue;x+;x+;printf(“x=%d/n“,x);程序执行后的输出结果是_。A) x=4 B) x=8C) x=6 D) x=12(分数:2.00)A.B.C.D.22.若有下列定义,则对 a数组无素地址的正确引用是( )。int a5,*p=a;A) p+5 B) *a+1C) 则能
9、通过 scanf语句正确给输入项读入数据的程序段是( )。A) *p=scanf(“%1f“,p); B) *p=scanf(“%f“,p);C) p=scanf(“%1f“,*p); D) p=scanf(“%1f“,p);(分数:2.00)A.B.C.D.28.有以下程序#includestdio.hmain()int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i;for(i=0;i12;i+)csi+;for(i=1;i5;i+)printf(“%d“,ci);printf(“/n“);程序的运行结果是( )。A1 2 3 4 B2 3 4 4 C4 3 3 2
10、D1 1 2 3(分数:1.00)A.B.C.D.29.请选出可用作 C语言用户标识符的一组( )。A) voiddefineWORDB) a3_b3_123IFC) For_abccaseD)2aDOsizeof(分数:1.00)A.B.C.D.30.有以下程序:#includestring.hmain()char p20=a,b,c,d),q=“abc“,r=“abcde“strcat(p,r);strcpy(p+strlen(q),q);printf(“%d/n“,sizeof(p);程序运行后的输出结果是_。A) 9 B) 6 C) 11 D) 7(分数:2.00)A.B.C.D.31
11、.执行下列程序时输入:123空格456空格789回车,输出结果是_。mein()char s100; int c, i;scanf(“% c“, scanf(“% d“, scanf(“% s“, s);printf(“% c, % d, % s/n“, c, i, s);A) 123, 456, 789 B) 1, 456, 789C) 1, 23, 456, 789 D) 1, 23, 456(分数:2.00)A.B.C.D.32.以下正确的程序段是A) char str1=“12345“,str2=“abcdef“;B) char str10,*st=“abcde“;strcat(str
12、,st);C) charstr10=“ “。*st=“abcde“;strcat(str,st);D) char*st1=“12345“,*st2=“abcde“;strcat(st1,st2);(分数:2.00)A.B.C.D.33.有下列程序:#includestdio.hstructstint(x,y)date2=1,10,2,20;main()structst*p=date;printf(“%d,“,p-y);printf(“%d/n“,(+p)-x);程序的运行结果是( )。A10,1 B20,1 C10,2 D20,2(分数:1.00)A.B.C.D.34.下列程序的运行结果是(
13、)。#includestdio.hvoid fun (int*s,int*p)static int t=3;*p=st;t-;void main()int a=2, 3, 4, 5,k;int x;for(k=0; k4; k+)fun (a, printf(“%d,“, x);A) 5,4,3,2 B) 2,3,4,5, C) 2,2,2,2, D) 5,5,5,5,(分数:2.00)A.B.C.D.35.执行下列程序后,输出的结果是( )。#includestdio.h#define S(X)X*Xvoid main()int a=9,k=3,m=2;a/=S(k+m)/S(k+m);pr
14、intf(“%d“,a);A) 1 B) 4 C) 9 D) 0(分数:2.00)A.B.C.D.36.有以下结构体说明和变量定义,如图所示, 指针 p、q、r 分别指向此链表中的三个连续结点。Struct nodeint data; struct node *next;*p,*q,*r;现要将 q所指结点从链表中删除,同时要保持链表的连续,(分数:2.00)A.B.C.D.37.根据下列的定义,能打印出字母 P的语句是( )。struct stu char name10;int age;struct sm s10=“John“,11,“Pau1“,12,“Mary“,11,“adam“,12
15、;A) printf(“%c“,s3.name); B) printf(“%c“,s3.name1);C) printf(“%c“,s2.name1); D) printf(“%c“,s1.name0);(分数:2.00)A.B.C.D.38.有以下程序:#includestring.hint a=4;int f(int n)int t=0;static int a=5;if(n%2) int a=6;t+=a+;elseint a=7;t+=a+;return t+a+;main()int s=a,i=0;for(;i2;i+)s+=f(i);printf(“%d/n“,s);程序运行后的输
16、出结果是( )。A) 24 B) 28 C) 32 D) 36(分数:2.00)A.B.C.D.39.有以下程序:#includestdioh#define F(X,Y) (X)*(Y)main()int a=3,b=4;printf(“%d/n“,F(a+,b+);程序运行后的输出结果是( )。A) 12 B) 15 C) 16 D) 20(分数:1.00)A.B.C.D.40.阅读下列程序,则运行结果为#include“stdio.h“fun()static int x=5;x+;return x;main()int i,x;for(i=0;i3;i+)x=fun();printf(“%d
17、/n“,x);A) 5 B) 6 C) 7 D) 8(分数:2.00)A.B.C.D.二、填空题(总题数:14,分数:30.00)41.深度为 5的满二叉树有 1 个叶子节点。(分数:2.00)填空项 1:_42.在深度为 7的满二叉树中,度为 2的结点个数为 1。(分数:2.00)填空项 1:_43.在关系模型中,二维表的行称为 1。(分数:2.00)填空项 1:_44.数据结构分为逻辑结构和存储结构,循环队列属于 1 结构。(分数:2.00)填空项 1:_45.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于 1 的联系。(分数:2.00)填
18、空项 1:_46.数据的逻辑结构在计算机存储空间中的存放形式称为数据的U /U。(分数:2.00)填空项 1:_47.以下程序的输出结果是U /U。#include stdiohmain()int a=2,b=3,c=4;a* =16+(b+) -(+c);Printf(“%d“,a);(分数:2.00)填空项 1:_48.下列程序的输出结果是_。#includestdio.hmain()int a=2,b= 1,c=2;if(ab)if(b0) c=0;else c+;printf(“%d/n“,c);(分数:2.00)填空项 1:_49.在循环中,continue 语句与 break语句的
19、区别是: 1 语句只是结束本次循环,然后进行循环的条件判定。(分数:2.00)填空项 1:_50.以下程序运行后的输出结果是U /U。main()int a, b, c;a=25;b=025;c=0x25;printf(“% d % d % d/n“, a, b, c);(分数:2.00)填空项 1:_51.有以下程序:#includestdio.hmain()int i,j,a3=1,2,3,4,5,6,7,8,9;for(i=0;i3;i+)for(j=i;j3;j+)printf(“%d“,aij);printf(“/n“);程序运行后的输出结果是_。(分数:4.00)填空项 1:_52
20、.有以下程序:void f(int*x,iht * y)int t;t=*x;*x;=*y;*y=t;main()int a8=1,2,3,4,5,6,7,8,i,*p,*q;p=a;q=while(p)f(p,q);p+;q-;for(i=0;i8;i+)printf(“%d,“,ai);程序运行后的输出结果是U /U。(分数:2.00)填空项 1:_53.下列程序的输出结果是_。#includestdio.hint fun(int x)int p;if(x=0x=1)return 3;elsep=x-fun(x-2);return p;void main()printf(“/n%d“,fu
21、n(11);(分数:2.00)填空项 1:_54.已知字符 A的 ASCII码值为 65,以下程序运行时,若从键盘输入:B33回车,则输出结果是_。#includemain()char a,b;a=getchar();scanf(“%d“,a=a-A+0;b=b*2;printf(“%c %c/n“,a,b);(分数:2.00)填空项 1:_二级 C语言笔试-483 答案解析(总分:93.00,做题时间:90 分钟)一、选择题(总题数:40,分数:63.00)1.冒泡排序在最坏情况下的比较次数是_。A) n(n+1)/2 B) nlog2n C) n(n-1)/2 D) n/2(分数:2.00
22、)A.B.C. D.解析:解析 在最坏情况下冒泡排序法需要比较的次数为 n(n-1)/2。2.在设计程序时,应采纳的原则之一是( )。A) 不限制 goto语句的使用 B) 减少或取消注解行C) 程序越短越好 D) 程序结构应有助于读者理解(分数:1.00)A.B.C.D. 解析:解析 滥用 goto语句将破坏程序结构,可读性差,因此 A) 不对;注解行有利于对程序的理解,不应减少或取消,B) 不对;程序的长短要依实际情况而论,而不是越短越好,C) 不对。3.结构化程序设计的核心和基础是( )。A) 结构化分析方法 B) 结构化设计方法C) 结构化设计理论 D) 结构化编程方法(分数:2.00
23、)A.B.C. D.解析:解析 结构化程序设计的核心和基础是结构化设计理论,其中包括:结构化分析方法、结构化设计方法和结构化编程方法。4.下列描述中正确的是( )。A) 软件工程只是解决软件项目的管理问题B) 软件工程主要解决软件产品的生产率问题C) 软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D) 软件工程只是解决软件开发过程中的技术问题(分数:2.00)A.B.C. D.解析:解析 软件工程是指将工程化的思想应用于软件的开发、应用和维护的过程,包括软件开发技术和软件工程管理。5.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是
24、 A) 一对一 B) 一对多 C) 多对多 D) 多对一(分数:2.00)A.B.C. D.解析:解析 本题考查实体之间的联系。实体集之间的联系没有多对一,所以排除选项 D。用于一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,所以实体工作人员与实体计算机之间的联系是多对多。6.关系表中的每一行记录称为一个( )。 A) 字段 B) 元组 C) 属性 D) 关键码(分数:2.00)A.B. C.D.解析:解析 在关系表中,每一列称为一个属性,对应表中的一个字段;每一行称为一个元组,对应表中的一条记录。7.将 E-R图转换到关系模式时,实体与联系都可以表示成( )。A) 属性 B) 关
25、系 C) 键 D) 域(分数:1.00)A.B. C.D.解析:解析 数据库逻辑设计的主要工作是将 E-R图转换成指定 RDBMS中的关系模式。从 E-R 图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R 图中属性也可以转换成关系的属性。实体集也可以转换成关系。8.在 Windows环境下,单击当前窗口中的按钮 (分数:1.00)A.B.C. D.解析:解析 在一个窗口顶端,其右侧往往有三个按钮,这三个按钮分别代表了最小化、最大化和关闭。最小化是指把当前程序最小化放到后台执行,最大化是指把当前程序在显示屏上全屏显示,而关闭是指结束当前的程序。9.下列程序的执行结果是( )。#
26、includestdio.hmain()inta,b,c;a=b=2;c=(a+)-1;printf(“%d,%d“,a,c) ;c+=-a+(+b) ;printf(“%d,%d“,a,c) ;A) 3,1 4,1 B) 3,1 4,2 C) 2,04,1 D) 2,1 4,1(分数:2.00)A. B.C.D.解析:解析 本题主要考查自加运算符(+、-)的使用。前缀变量“+i、-i”,在使用 i之前,先使 i的值加 1或者减 1,再使用此时的表达式的值参与运算;后缀变量“i+、i-”,先使用此时的表达式的值参与运算,在使用 i之后,再使 i的值加 1或者减 1。本题中计算表达式 c=(a+
27、)-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。10.以下叙述中错误的是( )。 A) C程序在运行过程中所有计算都以二进制方式进行 B) C程序在运行过程中所有计算都以十进制方式进行 C) 所有 C程序都需要编译链接无误后才能运行 D) C程序中整型变量只能存放整数,实型变量只能存放浮点数(分数:1.00)A.B. C.D.解析:解析 计算机程序都是编译为二进制的代码,计算机才会执行。11.有以下定义:int a;l
28、ong b;double x,y;,则以下选项中正确的表达式是 A) a%(int)(x-y) B) a=x!=y C) (a*y)%b D) y=x+y=x(分数:1.00)A.B. C.D.解析:解析 A 选项中,除数可能为 0,所以选项 A错误。C 语言中,“%”求余运算符要求两个运算量都必须是整型数据,而选项 C中“a*y”是实型数据,所以选项 C错误。选项 D中出现了“x+y=x”错误表示,C 语言中只能对变量赋值,不能对表达式进行赋值,所以选项 D错误。选项 B为正确答案。12.下列表达式中,可以正确表示 或 (分数:1.00)A. B.C.D.解析:解析 题中要求 x的取值是小于
29、等于 0或者大于等于 1,这说明表达式是或的关系,所以在写成C语言表达式应是逻辑或的关系,逻辑或运算符是“。13.设有条件表达式:(EXP)i+: j-,则以下表达式中与(EXP)完全等价的是_。A) (EXP=0) B) (EXP!=0)C) (EXP=1) D) (EXP!=1)(分数:1.00)A.B. C.D.解析:解析 本题考查的重点是条件表达式的用法。条件表达式首先判断“(EXP)”是真值还是假值。而在 C语言中,真值是任意非零值,也可以是负数,而假值是零。因此,与条件表达式中“(EXP)”完全等价的是选项 B。14.若有“double a;”,则正确的输入语句是( )。A) sc
30、anf(“%1f“,a);B) scanf(“%f“,char c10 ;则正确的输入语句是( )。A) seanf(“%d%s“ , B) scanf(“%d%s“,C) seanf(“%d%s“,b,c); D) scanf(“%d%s“,b,(分数:1.00)A.B. C.D.解析:解析 scanf 函数中格式控制后面是地址表列,不能用变量名。数组名 c代表数组在内存的首地址, B) typedef V2=int;C) typedef int v3; D) lypedef v4:int(分数:2.00)A.B.C. D.解析:评析 C 语言中可以使用 typedef来重新定义已有的数据类
31、型,相当于数据类型取个别名。17.若有说明语句:int a,b,c,*d=,则能正确从键盘读入 3个整数分别赋给变量 a、b、c 的语句是 _。A) scanf(“%d %d %d“,B) scanf(“%d %d %d“,C) scanf(“%d %d %d“,a,b,d);D) scanf(“% d% d%d“,a,b,*d);(分数:1.00)A. B.C.D.解析:解析 scanf 函数中格式控制后面应为变量地址列表,因此选项 C和选项 D都错误,选项 B中“while(1)i=i0+1;if(i100) break;B) for(;);C) int k=10000;dok+;whil
32、e(k10000);D) int s=36;while (s) -s;(分数:1.00)A.B.C.D. 解析:解析 选项 D)中,首先定义的变量 s的值为 36,因为语句-s;所以当 s=0时循环会结束;选项A)由于 while(1)永远成立,循环构成死循环:选项 B)中 for循环没有使循环结束的限定条件,也构成死循环;选项 C)中由于 k永远大于 10000,所以循环无法停止。19.若变量已正确定义,下列正确的程序段是( )。A) while(ch=getchar()=/N)putchar(ch);B) while(ch=getchar()=/n)putchar(ch);C) while
33、(ch=getchar()!=/N)putchar(ch);D) while(ch=getchar()!=/n)putchar(ch);(分数:2.00)A.B.C.D. 解析:解析 本题考查两个知识点:C 语言用/n这个字符常量表示换行;getchar 函数的作用是从终端输入一个字符,当遇到换行时结束输入。20.有下列程序段:int k=0,a=1,b=2,c=3;k=ab?b:a;k=kC?C:k;执行该程序段后,k 的值是( )。A) 3 B) 2 C) 1 D) 0(分数:2.00)A.B. C.D.解析:解析 因为 ab 成立,所以条件表达式 ab?b:a 的值等于 b的值等于 2,
34、因此变量 k的值等于2。又因为 k=2c=3 不成立,所以条件表达式 kc?c:k 的值等于 k的值等于 2。把条件表达式 kc?c:k的值赋给变量 k,因而变量 k的值等于 2。因此,选项 B)为正确答案。21.有以下程序:main()int i,j,x=0;for(i=0;i2;i+)x+;for(j=0;j=3;j+)if(j%2)continue;x+;x+;printf(“x=%d/n“,x);程序执行后的输出结果是_。A) x=4 B) x=8C) x=6 D) x=12(分数:2.00)A.B. C.D.解析:解析 内层 for循环语句实现 x=x+2,故外层 for循环语句单次
35、循环实现 x=x+4,所以程序执行后的输出结果为 x=8。22.若有下列定义,则对 a数组无素地址的正确引用是( )。int a5,*p=a;A) p+5 B) *a+1C) 则能通过 scanf语句正确给输入项读入数据的程序段是( )。A) *p=scanf(“%1f“,p); B) *p=scanf(“%f“,p);C) p=scanf(“%1f“,*p); D) p=scanf(“%1f“,p);(分数:2.00)A.B.C.D. 解析:解析 double *p,a;语句表示定义了一个指向双精度型的指针变量 p和双精度型变量 a,而语句p= int c, i;scanf(“% c“, s
36、canf(“% d“, scanf(“% s“, s);printf(“% c, % d, % s/n“, c, i, s);A) 123, 456, 789 B) 1, 456, 789C) 1, 23, 456, 789 D) 1, 23, 456(分数:2.00)A.B.C.D. 解析:解析 根据给定的数据输入格式:123空格456空格789回车,第一个 scanf语句中,格式字符为“%c”,只能得到一个字符1,第二个 scanf语句中格式字符为“%d”,变量 i得到的数值为 23,第三个 scanf语句中格式字符为“%s”,遇到空格就自动结束,因此字符数组 s得到的是“456/0“。因
37、而正确答案为选项 D。32.以下正确的程序段是A) char str1=“12345“,str2=“abcdef“;B) char str10,*st=“abcde“;strcat(str,st);C) charstr10=“ “。*st=“abcde“;strcat(str,st);D) char*st1=“12345“,*st2=“abcde“;strcat(st1,st2);(分数:2.00)A.B.C. D.解析:解析 本题考查了一维字符数组的定义和初始化。选项 C中 str10初始化为空,可以不必进行类似“ “的空赋值,字符数组若没有进行初始化赋值,默认的字符为空,并且定义完 str
38、数组后,应该用“,”分隔而不是“。”,所以选项 C错误。33.有下列程序:#includestdio.hstructstint(x,y)date2=1,10,2,20;main()structst*p=date;printf(“%d,“,p-y);printf(“%d/n“,(+p)-x);程序的运行结果是( )。A10,1 B20,1 C10,2 D20,2(分数:1.00)A.B.C. D.解析:解析 data2是两个结构体组成的数组,p 指向结构体数组的首地址,p-y 访问第一个结构体的第二个元素;(+p)x 访问第二个结构体的第一个元素。所以输出为 10.2。34.下列程序的运行结果是
39、( )。#includestdio.hvoid fun (int*s,int*p)static int t=3;*p=st;t-;void main()int a=2, 3, 4, 5,k;int x;for(k=0; k4; k+)fun (a, printf(“%d,“, x);A) 5,4,3,2 B) 2,3,4,5, C) 2,2,2,2, D) 5,5,5,5,(分数:2.00)A. B.C.D.解析:解析 分析 fun函数程序段,可知 fun函数要实现的功能是将 s中第(t+1)个元素以前的元素逆置赋给数组 P。由于 fun中函数定义了静态变量 t=3因此,在主函数中调用函数 f
40、un(a,a/=S(k+m)/S(k+m);printf(“%d“,a);A) 1 B) 4 C) 9 D) 0(分数:2.00)A.B.C.D. 解析:解析 本题主要是考查带参数的宏定义及其相关运算。本题中宏运算过程如下:a=a/(S(k+m)/S(k+m)=a/(k+m*k+m/k+m*k+m)=9/(3+2*3+2/3+2*3+2)=0。36.有以下结构体说明和变量定义,如图所示, 指针 p、q、r 分别指向此链表中的三个连续结点。Struct nodeint data; struct node *next;*p,*q,*r;现要将 q所指结点从链表中删除,同时要保持链表的连续,(分数:
41、2.00)A.B.C.D. 解析:37.根据下列的定义,能打印出字母 P的语句是( )。struct stu char name10;int age;struct sm s10=“John“,11,“Pau1“,12,“Mary“,11,“adam“,12;A) printf(“%c“,s3.name); B) printf(“%c“,s3.name1);C) printf(“%c“,s2.name1); D) printf(“%c“,s1.name0);(分数:2.00)A.B.C.D. 解析:解析 本题主要考查按结构数组元素方式引用结构成员。字母 P为“Paul”的第一个字母,是结构体 s
42、1的 name成员的第一个元素的值,即 s1.name0的值。38.有以下程序:#includestring.hint a=4;int f(int n)int t=0;static int a=5;if(n%2) int a=6;t+=a+;elseint a=7;t+=a+;return t+a+;main()int s=a,i=0;for(;i2;i+)s+=f(i);printf(“%d/n“,s);程序运行后的输出结果是( )。A) 24 B) 28 C) 32 D) 36(分数:2.00)A.B. C.D.解析:解析 本题考查的是外部变量的应用。因为程序的初始 int a=4;语句定
43、义了外部变量 a,在以后的执行过程中,当 i=0时,调用 f(0)函数,执行的语句是 else int a=7;t+=a+;,此处程序中又定义了变量 a,所以原来定义的外部变量在此不起作用,得到 t=7,返回值语句 return t+a+;处,外部变量a起作用,返回值为 7+5=12:当 i=1时,调用 f(1)函数,执行的是语句 elseinta=6:t+=a+;,此处程序中又定义了变量 a,所以原来定义的外部变量在此不起作用,得到 t=6,返回值语句 return t+a+;处,外部变量 a起作用,返回值为 6+6=12;因此 s=4+12+12=28。39.有以下程序:#includes
44、tdioh#define F(X,Y) (X)*(Y)main()int a=3,b=4;printf(“%d/n“,F(a+,b+);程序运行后的输出结果是( )。A) 12 B) 15 C) 16 D) 20(分数:1.00)A. B.C.D.解析:解析 本题考查带参数的宏定义,参数只是简单的替换而不是求出其值后再替换形式参数。本题中用 a+替换 X,用 b+替换 Y,再求(a+)*(b+)的值,即 3*4的值,其结果为 12。40.阅读下列程序,则运行结果为#include“stdio.h“fun()static int x=5;x+;return x;main()int i,x;for
45、(i=0;i3;i+)x=fun();printf(“%d/n“,x);A) 5 B) 6 C) 7 D) 8(分数:2.00)A.B.C.D. 解析:解析 在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久的存储单元,即使退出函数以后,下次再进入该函数时,静态局部变量仍使用原来的存储单元,静态局部变量的初值是在编译的时候赋予的,在程序执行期间不再赋予初值。本题由于连续三次调用函数 fun(),三次对静态变量 x进行操作,x 的值应依次为 6,7,8。二、填空题(总题数:14,分数:30.00)41.深度为 5的满二叉树有 1 个叶子节点。(分数:2.00)填空项 1:_ (正确答
46、案:16)解析:解析 在满二叉树中,每一层上的节点数都达到最大值,在第 k层上有 2k-1个节点,且深度为 m的满二叉树有 2m-1个节点,深度为 5的满二叉树叶子节点数为 25-1=16。42.在深度为 7的满二叉树中,度为 2的结点个数为 1。(分数:2.00)填空项 1:_ (正确答案:63)解析:解析 根据二叉树的性质,一棵深度为 k的满二叉树有 2k-1个结点,所以深度为 7的满二叉树有27-1=127个结点;又因为在任意一棵二叉树中,若终端结点的个数为加,度为 2的结点数为 n2,则n0=n2+1,即所以总结点数为 n0+n2=2n2+1=127,所以 n2=63,即度为 2的结点个数为 63。43.在关系模型中,二维表的行称为 1。(分数:2.00)填空项 1:_ (正确答案:元组)解析:解析 在关系型数据库中,用二维表来表示关系,二维的表名即关系名,二维表的行称为关系的元组,二维表的列,称为关系的属性。44.数据结构分为逻辑结构和存储结构,循环队列属于 1 结构。(分数:2.00)填空项 1:_ (正确答案:存储结构)解析:45.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于 1 的联系。(分数:2.00)填空项 1:_ (正确答案:一对多(或 1:N))解析:解析 两个实体集间的联系实际上是实体