1、二级 C语言笔试-443 及答案解析(总分:96.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.软件工程的理论和技术性研究的内容主要包括软件开发技术和( )。A) 消除软件危机 B) 软件工程管 C) 程序设计自动化 D) 实现软件可重用(分数:1.00)A.B.C.D.2.软件需求分析阶段的工作,可以分为 4个方面:需求获取、需求分析、编写需求规格说明书以及( )。A) 阶段性报告 B) 需求评审 C) 总结 D) 都不正确(分数:2.00)A.B.C.D.3.有 3个关系 R、S 和 T如下:(分数:2.00)A.B.C.D.4.以下叙述中正确的是A) C程序
2、的基本组成单位是语句 B) C 程序中每一行只能写一条语句C) 简单 C语句必须以分号结束 D) C 语句必须在一行内写完(分数:1.00)A.B.C.D.5.以下程序的运行结果是( )。 #includestdio.h main() int a=3,b=4,c=8,d=4,m=1,n=3; printf(“%d/n“,(m=ab)printf(“%d/n“,e程序运行后的输出结果是 _。A) 0 B) 70 C) 35 D) 1(分数:2.00)A.B.C.D.7.设 a和 b均为 int型变量,且 a=6、b=11、c=3,则能使值为 3的表达式是( )。A) b%(c%4) B) b%(
3、c-a%5) C) b%a-a%5 D) (b%a)-(a%4)(分数:1.00)A.B.C.D.8.若有定义:double a=22;int i=0, k=18;,则不符合 C语言规定的赋值语句是A) a=a+, i+; B) i=(a+k)=(i+k);C) i=a%11; D) i=!a;(分数:1.00)A.B.C.D.9.x,y,z 被定义为 int型变量,若从键盘给 x,y,z 输入数据,正确的输入语句是A) INPUTx、y、z; B) scanf(“%d%d%d“,printf(“%d%d/n“,x-,-y);A) 8 8 B) 7 7 C) 7 8 D) 8 7(分数:2.0
4、0)A.B.C.D.12.若 w、x、y、z、m 均为 int型变量,则执行下列的语句后 m的值是( )。w=2, x=3, y=4, z=5;m=(wx)?w:x;m=(mz)?m:z;m=(my)?m:y;A) 2 B) 3 C) 5 D) 4(分数:1.00)A.B.C.D.13.设 ab、c、d、m、n 均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=aB)k=kc?c:k;执行该程序段后,k 的值是_。A) 3 B) 2 C) 1 D) 0(分数:2.00)A.B.C.D.16.有如下嵌套的 if语句:if(ab)if(ac)k=a;else
5、 k=c:elseif(bc)k=b;else k=c;以下选项中与上述 if语句等价的语句是( )。Ak=(ab)?a:b;k=(bc)?b:c;Bk=(ab)?(bc)?a:b):(bc)?b:c);Ck=(ab)?(ac)?a:c):(bc)?b:c);Dk=(ab)?a:b;k=(ac)?a:c;(分数:1.00)A.B.C.D.17.有以下结构体说明和变量定义,相应的链表如图所示:(分数:1.00)A.B.C.D.18.有如下程序:#include stdiohmain()float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x;else
6、 y=1.0;printf(“%f/n“,y);该程序的输出结果是( )。A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000(分数:1.00)A.B.C.D.19.在 C语言中,函数返回值的类型最终取决于_。A) 函数定义时的函数首部所说明的函数类型B) return语句中表达式值的类型C) 调用函数时主调函数所传递的实参类型D) 函数定义时形参的类型(分数:2.00)A.B.C.D.20.在执行完下列的 C语句段之后,则 B的值是( )。char a=A;int b;B=(34 A) 0 B) 1 C) TRUE D) FALSE(分数:2.00)
7、A.B.C.D.21.若有定义语句:double x5=1.0,2.0,3.0,4.0,5.0,*P=x;,则错误引用 x数组元素的是A) *p B) x5 C) *(p+1) D) *x(分数:2.00)A.B.C.D.22.以下数组定义中错误的是A) int x 3=0; B) int x23=1,2,3,4,5,6;C) int x 3=1,2,3,4,5,6; D) int x23=1,2,3,4,5,6;(分数:2.00)A.B.C.D.有下列程序:#includestdio.hmain()int x=1,y=2,z=3;if(xy)if(yz)printf(“%d“,+z);els
8、e printf(“%d“,+y);printf(“%d/n“,x+);程序的运行结果是( )。A331 B41 C2 D1(分数:3.00)A.B.C.D.A.B.C.D.23.下面程序段的运行结果是( )。#includestdio.hvoid main()char str=“ABC“,*p=str;pfintf(“%d/n“,*(p+3);A) 67 B) 0 C) 字符C的地址 D) 字符C(分数:2.00)A.B.C.D.24.若个外部变量的定义形式为 static int x;,那么,其中 static的作用应该是_。A) 将变量存储在静态存储区B) 使变量 x可以由系统自动初始化
9、C) 使 x只能在本文件内引用D) 使 x的值可以永久保留(分数:2.00)A.B.C.D.25.有以下程序:void swap(char *x,char *y)char t;t=*x; *x=*y; *y=t;main()char*s1=“abc“,*s2=“123“;swap(s1,s2);printf(“%s, %s/n“,s1,s2);程序执行后的输出结果是_。A) 123,abc B) abc,123C) 1bc,a23 D) 321,cba(分数:2.00)A.B.C.D.26.设变量已正确定义,则下列能正确计算 f=n!的程序段是( )。A) f=0; for(i=1;i=n;i
10、+)f*=i;B) f=1;for(i=1;in;i+)f*=i;C) f=1;for(i=n;i1;i+)f*=i;D) f=1;for(i=n;i=2;i-)f*=i;(分数:2.00)A.B.C.D.27.有以下字符串,说明表达式 strlen(s)值的是( )。char s10=a,/n,a,b,/t,c;A) 10 B) 1 C) 6 D) 7(分数:2.00)A.B.C.D.28.设有定义:int n1=0,n2,*p=,下列赋值语句中与 n2=n1; 语句等价的是( )。A) *p=*q; B) p=q; C) *p= D) p=*q;(分数:2.00)A.B.C.D.29.若有
11、说明:int a3=0,0;则不正确的叙述是( )A) 数组 a的每个元素的初值都是 0B) 数组 a的第一维大小为 1C) 数组 a的行数为 1D) 只有元素 a00和 a01可得到初值 0,其余元素均得不到初值 0(分数:1.00)A.B.C.D.30.若有以下定义和语句,则输出结果是char s110=“abed!“, *s2=“/n123/“;printf(“%d %d/n“, strlen(s1), strlen(s2);A) 5 5 B) 10 5 C) 10 7 D) 5 8(分数:2.00)A.B.C.D.31.有以下程序:#includestdio.h#define N 8v
12、oid fun(int*x,int i)*x=*(x+i);main()int aN=1,2,3,4,5,6,7,8),i;fun(a,2);for(i=0;iN/2;i+)printf(“%d“,ai);print*r(”/n”);程序运行后的输出结果是( )。A1313 B2234 C3234 D1234(分数:1.00)A.B.C.D.32.若有定义:“int a23;“则对 a数组的第 i行第 j列元素的正确引用为( )。A) *(*(a+i) j) B) (a+i)jC) *(a+i+j) D) * (a+i) +j(分数:1.00)A.B.C.D.33.以下程序运行时若要正确输出函
13、数的入口地址和输入数的绝对值,应在程序空缺处填入的正确选项是abs(int x)if(x=0)return x;else return-x;main()int y,z,(*p)(int x)=abs;scanf(“ %d“ , float m; AA;(B) struct aa int n; float m; td;(C) struct int n; float m; aa; struct aa td;(D) struct int n; float m; td;(分数:2.00)A.B.C.D.36.以下叙述中正确的是_。A) 局部变量说明为 static存储类,其生存期将得到延长B) 全局变
14、量说明为 static存储类,其作用域将被扩大C) 任何存储类的变量在未赋初值时,其值都是不确定的D) 形参可以使用的存储类说明符与局部变量完全相同(分数:1.00)A.B.C.D.37.在位运算中,操作数每左移两位,其结果相当于( )。A) 操作数乘以 2 B) 操作数除以 2 C) 操作数除以 4 D) 操作数乘以 4(分数:2.00)A.B.C.D.38.若 fp是指向某文件的指针,且尚未读到文件末尾,则函数 feof(fp)的返回值是( )A) EOF B) -1 C) 非零值 D) 0(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:30.00)39.在结构化设计方法
15、中,数据流图表达了问题中的数据流与加工间的关系,并且每一个 1 实际上对应一个处理模块。(分数:2.00)填空项 1:_40.按照“先进先出”的原则组织数据的结构是 1。(分数:2.00)填空项 1:_41.有以下程序:void f(int v,int w)int t;t=v;v=w;w=t;main()int x=1,y=3,z=2if(xy) f(x,y);else if(yz) f(y,z);else f (x,z);printf(“%d,%d,%d/n“,x,y,z);执行后的输出结果是U /U。(分数:2.00)填空项 1:_42.深度为 5的满二叉树中,叶子结点的个数为 1。(分数
16、:2.00)填空项 1:_43.面向对象的模型中,最基本的概念是对象和U /U。(分数:2.00)填空项 1:_44.栈的 3种基本运算是:入栈、退栈和 1。(分数:2.00)填空项 1:_45.度为 10的线性表进行冒泡排序,最坏情况下需要比较的次数为 1。(分数:2.00)填空项 1:_46.在 C语言中,while 和 dowhile循环的主要区别是 1 的循环至少被执行一次。(分数:2.00)填空项 1:_47.若有定义 doublea 5;,则 a数组元素下标的上限为 1。(分数:2.00)填空项 1:_48.以下程序的输出结果是_。#includestdio.hint fun(in
17、t x)static int t=0;return(t+=x);main( )int s,i;for(i=1;i=5;i+) s=fun(i);prinff(“%d/n“,s);(分数:2.00)填空项 1:_49.下列程序的运行结果是_。main()int i,a10;a0=a1=1;for(i=2;i5;i+)ai=ai-2+ai-1;for(i=0;i5;i+)if(i%2=0) printf(“/n“);printf(“%d“,ai);(分数:2.00)填空项 1:_50.有以下结构体说明和变量的定义,且指针 p指向变量 a,指针 q指向变量 b,则不能把结点 b连接到结点 a之后的语
18、句是_。struct nodechar data;struct node *next;a,b(分数:2.00)填空项 1:_51.以下程序的功能是:借助指针变量找出数组元素中最大值所在的位置并输出该最大值。请在输出语句中填写代表最大值的输出项。 #includestdio.h main() int a10, *p, *s; for(p=a;p-a10;p+) scanf(“%d“, p); for(p=a, s=a;p-a10;p+) if(*p*s) s=p; printf(“max=%d/n“, _); (分数:2.00)填空项 1:_52.下列程序的运行结果是_。#includestdi
19、o.hfunc(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:_53.下列程序的运行结果是_。#define P(A) printf(“%d“,A) main()int j,a=1,2,3,4,5,6,7,i=5;for(j=3;j1;j-)switch(j)case 1:case2:P(ai+);break;case 3:P(a-i);(分数:2.00)填空项 1
20、:_二级 C语言笔试-443 答案解析(总分:96.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.软件工程的理论和技术性研究的内容主要包括软件开发技术和( )。A) 消除软件危机 B) 软件工程管 C) 程序设计自动化 D) 实现软件可重用(分数:1.00)A.B. C.D.解析:解析 软件工程的目标是:在给定的成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。基于这一目标,软件工程的理论和技术性研究的内容主要包括软件开发技术和软件工程管理。2.软件需求分析阶段的工作,可以分为
21、 4个方面:需求获取、需求分析、编写需求规格说明书以及( )。A) 阶段性报告 B) 需求评审 C) 总结 D) 都不正确(分数:2.00)A.B. C.D.解析:解析 需求分析是软件定义时期的最后一个阶段。可以概括为 4个方面:需求获取;需求分析;编写需求规格说明书;需求评审。3.有 3个关系 R、S 和 T如下:(分数:2.00)A.B.C.D. 解析:解析 在关系运算中,交的定义如下:设 R1和 R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则 R1R2 为交运算,结果仍为度等于 n的关系,其中,交运算的结果既属于 R1又属于 R2。4.以下叙述中正确的是A
22、) C程序的基本组成单位是语句 B) C 程序中每一行只能写一条语句C) 简单 C语句必须以分号结束 D) C 语句必须在一行内写完(分数:1.00)A.B.C. D.解析:解析 函数是 C程序的基本组成单位;C 语言的书写风格很自由,不但一行可以写多条语句,还可以将一条语句写在多行中。5.以下程序的运行结果是( )。 #includestdio.h main() int a=3,b=4,c=8,d=4,m=1,n=3; printf(“%d/n“,(m=ab)printf(“%d/n“,e程序运行后的输出结果是 _。A) 0 B) 70 C) 35 D) 1(分数:2.00)A.B.C. D
23、.解析:解析 “int i=0, k=18;,则不符合 C语言规定的赋值语句是A) a=a+, i+; B) i=(a+k)=(i+k);C) i=a%11; D) i=!a;(分数:1.00)A.B.C. D.解析:解析 C 语言的语法要求,运算符“%”两侧的运算量必须是整型量,选项 C中变量 a不是整型量。9.x,y,z 被定义为 int型变量,若从键盘给 x,y,z 输入数据,正确的输入语句是A) INPUTx、y、z; B) scanf(“%d%d%d“,printf(“%d%d/n“,x-,-y);A) 8 8 B) 7 7 C) 7 8 D) 8 7(分数:2.00)A.B.C.D
24、. 解析:解析 本题考查自减(-)运算符的使用。“x-”是先引用 x的值然后将 x的值减 1,所以输出的x值为 8;“-y”是先将 y的值减 1然后再引用 y的值,所以输出的 y值为 7。12.若 w、x、y、z、m 均为 int型变量,则执行下列的语句后 m的值是( )。w=2, x=3, y=4, z=5;m=(wx)?w:x;m=(mz)?m:z;m=(my)?m:y;A) 2 B) 3 C) 5 D) 4(分数:1.00)A. B.C.D.解析:解析 条件表达式“a?b:c”的含义是:当 a为真时,其值等于表达式 b的值,当 a为假时,其值等于表达式 c的值。表达式运算过程:第 1个表
25、达式:w=2x=3 为真,所以返回 w的值,即 m=w=2;第 2个表达式:m=2z=5为真,所以返回 m的值,即 m=2;第个表达式:w=2y=4 为真,所以返回 m的值,即 m=2。13.设 ab、c、d、m、n 均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=aB)k=kc?c:k;执行该程序段后,k 的值是_。A) 3 B) 2 C) 1 D) 0(分数:2.00)A.B. C.D.解析:解析 本题考查条件表达式的概念。第一个条件表达式“ab?b:a=12? 2:1=2”,并将 2赋给k,第二个条件表达式“kc?c:k=23?3:2=2”,并将
26、 2再赋给 k,此时 k的值为 2。16.有如下嵌套的 if语句:if(ab)if(ac)k=a;else k=c:elseif(bc)k=b;else k=c;以下选项中与上述 if语句等价的语句是( )。Ak=(ab)?a:b;k=(bc)?b:c;Bk=(ab)?(bc)?a:b):(bc)?b:c);Ck=(ab)?(ac)?a:c):(bc)?b:c);Dk=(ab)?a:b;k=(ac)?a:c;(分数:1.00)A.B.C. D.解析:解析 条件运算符(?:)是 C语言中唯一的一个三目运算符,它是对第一个表达式做真/假检测,然后根据结果返回另外两个表达式中的一个。表达式 1?表达
27、武 2:表达式 3。在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式 2的值:如果为假,则返回表达式 3的值。17.有以下结构体说明和变量定义,相应的链表如图所示:(分数:1.00)A.B.C.D. 解析:解析 本题定义了结构体类型的指针变量 p,q,r,并各自有两个成员变量 data和 next, data用于存放数据,next 用于存放下一个结点的地址,所以,要想将 q所指结点从链表中删除,同时保持链表的连续,必须使 P结点的 next指向 r,选项 D)不对。18.有如下程序:#include stdiohmain()float x=2.0,y;if(x0.0) y=0.0;
28、else if(x10.0) y=1.0/x;else y=1.0;printf(“%f/n“,y);该程序的输出结果是( )。A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000(分数:1.00)A.B.C.D. 解析:解析 本题中,x=2.0,因此执行 else y=1.0,并且以“%f”输出。19.在 C语言中,函数返回值的类型最终取决于_。A) 函数定义时的函数首部所说明的函数类型B) return语句中表达式值的类型C) 调用函数时主调函数所传递的实参类型D) 函数定义时形参的类型(分数:2.00)A. B.C.D.解析:解析 函数的返回值类
29、型最终取决于定义函数时所定义的函数的类型。20.在执行完下列的 C语句段之后,则 B的值是( )。char a=A;int b;B=(34 A) 0 B) 1 C) TRUE D) FALSE(分数:2.00)A.B. C.D.解析:解析 本题考查 C语言 3个知识点:将一个字符赋给一个字符变量时,并不是将该字符本身存储到内存中,而是将该字符对应的 ASCII码存储到内存单元中;大写字母的 ASCII码值小于其对应小写字母的 ASCII码值;只要逻辑与运算符 B) int x23=1,2,3,4,5,6;C) int x 3=1,2,3,4,5,6; D) int x23=1,2,3,4,5,
30、6;(分数:2.00)A.B. C.D.解析:解析 二维数组的初始化有以下几种形式:分行进行初始化;不分行进行初始化;部分数组元素进行初始化;省略第一维的定义,不省略第二维的定义。选项 B) 等号右边分了 3行,大于等号左边数组的行数 2。有下列程序:#includestdio.hmain()int x=1,y=2,z=3;if(xy)if(yz)printf(“%d“,+z);else printf(“%d“,+y);printf(“%d/n“,x+);程序的运行结果是( )。A331 B41 C2 D1(分数:3.00)A.B.C.D. 解析:解析 C 语言中规定,else 与离它最近的
31、if相匹配。x=1,y=2,z=3,所以第一个 if的条件(xy)不成立,直接执行“printf(“%d/n“,x+1);”语句,输出x的值 1,再把 x加 1。A. B.C.D.解析:解析 分析 fun函数程序段,可知 fun函数要实现的功能是将 s中第(t+1)个元素以前的元素逆置赋给数组 p。由于 fun中函数定义了静态变量 t=3,因此,在主函数中调用函数 fun(a,pfintf(“%d/n“,*(p+3);A) 67 B) 0 C) 字符C的地址 D) 字符C(分数:2.00)A.B. C.D.解析:解析 先定义了一个指向字符型数组 str的指针 P,指针 P指向数组 str的首地
32、址,p+3 将指针指向 str3,又因为字符型数组在存放字符串时会自动在末尾加上/0,所以*(p+3)=0。24.若个外部变量的定义形式为 static int x;,那么,其中 static的作用应该是_。A) 将变量存储在静态存储区B) 使变量 x可以由系统自动初始化C) 使 x只能在本文件内引用D) 使 x的值可以永久保留(分数:2.00)A.B.C. D.解析:评析 事实上,无论有无 static修饰,外部变量都具有 A、B 和 C三科特性。作为种修饰,static仅是限制此类型外部变量的引用范围:只能在定义它的文件范围内使用。25.有以下程序:void swap(char *x,ch
33、ar *y)char t;t=*x; *x=*y; *y=t;main()char*s1=“abc“,*s2=“123“;swap(s1,s2);printf(“%s, %s/n“,s1,s2);程序执行后的输出结果是_。A) 123,abc B) abc,123C) 1bc,a23 D) 321,cba(分数:2.00)A.B.C. D.解析:解析 函数 swap()实现的功能为交换字符指钊 x和 y首位的数值。26.设变量已正确定义,则下列能正确计算 f=n!的程序段是( )。A) f=0; for(i=1;i=n;i+)f*=i;B) f=1;for(i=1;in;i+)f*=i;C)
34、f=1;for(i=n;i1;i+)f*=i;D) f=1;for(i=n;i=2;i-)f*=i;(分数:2.00)A.B.C.D. 解析:解析 要正确计算函数 f=n!,由 n!的数学定义可知 n!=n*(n-1)*(n-2)*1。在选项 A)中,由于 f的初值为 0,在 for循环语句中,f 依次乘以 1,2,3,n。最后计算 f=n!=0,所以选项 A)不正确。在选项 B)中,f 的初值为 1,在 for循环语句中,f 依次乘以 1,2,3,(n-1)。最后计算得到 f=(n-1)!,所以选项 B)不正确。在选项 C)中,f 的初值为 1,在 for循环语句中,f 依次乘以n,n+1,
35、n+2,所以选项 C)不正确。在选项 D)中,f 的初值为 1,在 for循环语句中,f 依次乘以n,n-1,n-2,2。最后计算 f=n!,所以选项 D)正确。27.有以下字符串,说明表达式 strlen(s)值的是( )。char s10=a,/n,a,b,/t,c;A) 10 B) 1 C) 6 D) 7(分数:2.00)A.B.C. D.解析:解析 strlen(s)返回 s字符串中字符的个数,若 s是一个数组,则返回数组元素的个数。28.设有定义:int n1=0,n2,*p=,下列赋值语句中与 n2=n1; 语句等价的是( )。A) *p=*q; B) p=q; C) *p= D)
36、 p=*q;(分数:2.00)A. B.C.D.解析:解析 在定义指针变量 p和 q时,分别把变量 n2和 n1的地址赋给了指针变量 p和 q,所以*p 和*q中内容就分别是变量 n2和 n1的值,所以语句*p=*q 与语句 n2=n1等价。因此选项 A)正确。29.若有说明:int a3=0,0;则不正确的叙述是( )A) 数组 a的每个元素的初值都是 0B) 数组 a的第一维大小为 1C) 数组 a的行数为 1D) 只有元素 a00和 a01可得到初值 0,其余元素均得不到初值 0(分数:1.00)A.B.C.D. 解析:解析 本题考查给二维数组元素赋值。给二维数组元素赋值时应注意下列两点
37、:在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取 0。二维数组第一维的大小由下列规则确定:当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小;当初值的个数不能被第二维的常量表达式的值除尽时,第一维的大小等于所得商数加 1。30.若有以下定义和语句,则输出结果是char s110=“abed!“, *s2=“/n123/“;printf(“%d %d/n“, strlen(s1), strlen(s2);A) 5 5 B) 10 5 C) 10 7 D) 5 8(分数:2.00)A. B.C.D.解析:解析 strlen 函数的作用是求出字符串的实际长
38、度。字符串“abcd!“的实际长度为 5,字符串“/n123/“的实际长度也为 5(/n为 1个字符,/为 1个字符)。31.有以下程序:#includestdio.h#define N 8void fun(int*x,int i)*x=*(x+i);main()int aN=1,2,3,4,5,6,7,8),i;fun(a,2);for(i=0;iN/2;i+)printf(“%d“,ai);print*r(”/n”);程序运行后的输出结果是( )。A1313 B2234 C3234 D1234(分数:1.00)A.B.C. D.解析:解析 本题考查了宏定义与局部变量的区别,宏定义的作用范围
39、为整个程序,而变量的作用范围只在定义它的函数体的部分,因此,主函数中定义的 i与 fun()中的 i互不相干。32.若有定义:“int a23;“则对 a数组的第 i行第 j列元素的正确引用为( )。A) *(*(a+i) j) B) (a+i)jC) *(a+i+j) D) * (a+i) +j(分数:1.00)A. B.C.D.解析:解析本题考查如何通过地址来引用数组元素。通过地址来引用数组元素的方法有下列 5种:aij;*(ai+j);*(*(a+i)+j);*(aij;*( float m; AA;(B) struct aa int n; float m; td;(C) struct
40、int n; float m; aa; struct aa td;(D) struct int n; float m; td;(分数:2.00)A.B.C. D.解析:36.以下叙述中正确的是_。A) 局部变量说明为 static存储类,其生存期将得到延长B) 全局变量说明为 static存储类,其作用域将被扩大C) 任何存储类的变量在未赋初值时,其值都是不确定的D) 形参可以使用的存储类说明符与局部变量完全相同(分数:1.00)A. B.C.D.解析:解析 如果在定义了一个局部变量时使用了关键字 static,那么这个局部变量就被定义成了一个静态的局部变量,静态的局部变量在函数调用结束之后不
41、会被销毁,并且在下一次调用时,还会保留上一次的值。因此说 A选项是正确的。而全局变量其作用域不可能因为增加了一个 static就变大了。每一个存储类的变量在赋值之前,系统都会随机的分配一个初始值,因此 C选项错误。D 的说法是错误的,形参使用的变量只是一个说明,不能起到任何意义。37.在位运算中,操作数每左移两位,其结果相当于( )。A) 操作数乘以 2 B) 操作数除以 2 C) 操作数除以 4 D) 操作数乘以 4(分数:2.00)A.B.C.D. 解析:解析本题主要考查左移、右移对数据值的影响,左移 n位相当于乘以 2的 n次幂,右移 n位相当于除以 2的 n次幂。38.若 fp是指向某
42、文件的指针,且尚未读到文件末尾,则函数 feof(fp)的返回值是( )A) EOF B) -1 C) 非零值 D) 0(分数:2.00)A.B.C.D. 解析:解析 文件状态检测函数 feof(fp)的功能是:测试所指的文件的位置指针是否已达到文件尾,如果已到达文件尾,则函数返回非。值;否则返回 0,表示文件尚未结束。二、填空题(总题数:15,分数:30.00)39.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关系,并且每一个 1 实际上对应一个处理模块。(分数:2.00)填空项 1:_ (正确答案:加工)解析:解析 数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的
43、移动变换过程。其中的每一个加工对应一个处理模块。40.按照“先进先出”的原则组织数据的结构是 1。(分数:2.00)填空项 1:_ (正确答案:队列)解析:解析 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫做“队尾”,删除元素的一端叫做“队头”,先插入的元素先被删除,是按先进先出的原则组织数据的。41.有以下程序:void f(int v,int w)int t;t=v;v=w;w=t;main()int x=1,y=3,z=2if(xy) f(x,y);else if(yz) f(y,z);else f (x,z);printf(“%d,%d,%d
44、/n“,x,y,z);执行后的输出结果是U /U。(分数:2.00)填空项 1:_ (正确答案:1,3,2)解析:解析 函数 f的形参是简单变量,形参的改变不能影响实参,所以正确答案为 1,3,2。42.深度为 5的满二叉树中,叶子结点的个数为 1。(分数:2.00)填空项 1:_ (正确答案:16)解析:解析 满二叉树的叶子结点都在最后一层,即第 4层,且第 4层的结点达到最大数,即 25-1=16。43.面向对象的模型中,最基本的概念是对象和U /U。(分数:2.00)填空项 1:_ (正确答案:类)解析:评析 面向对象模型中,最基本的概念是对象和类。对象是现实世界中实体的模型化;将属性集
45、和方法集相同的所有对象组合在一起,可以构成一个类。44.栈的 3种基本运算是:入栈、退栈和 1。(分数:2.00)填空项 1:_ (正确答案:读栈顶元素)解析:解析 栈的基本运算有 3种:入栈、退栈和读取栈顶元素。其中,入栈是指在栈顶插入一个新的元素:退栈是指取出栈顶元素并赋值给一个变量;读栈顶元素是将栈顶元素赋值给一个指定的变量,不删除栈顶元素。45.度为 10的线性表进行冒泡排序,最坏情况下需要比较的次数为 1。(分数:2.00)填空项 1:_ (正确答案:45)解析:解析 对于长度为 N的线性表,在最坏情况下(即线性表中元素现在的顺序与目标顺序正好相反),冒泡排序需要经过 N/2遍的从前
46、往后的扫描和 N/2遍的从后往前的扫描,需要的比较次数为 N(N-1)/2。46.在 C语言中,while 和 dowhile循环的主要区别是 1 的循环至少被执行一次。(分数:2.00)填空项 1:_ (正确答案:dowhile)解析:解析考查 while和 dowhile循环的主要区别。while 循环的控制出现在循环体之前,只有当while后面的表达式的值为非零时,才可能执行循环体:在 dowhile构成的循环体中,总是先执行一次循环体,然后再求表达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。47.若有定义 doublea 5;,则 a数组元素下标的上限为 1。(分数:2.00)填空项 1:_ (正确答案:4)解析:解析 一维数组元素的定义形式为:数组名N,则该数组中元素的下限是 0,上限是 N-1。48.以下程序的输出结果是_。#includestdio.hint fun(int x)static int t=0;return(t+=x);main( )int s,i;