1、二级 C 语言笔试-437 及答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.下列数据结构中,能用二分法进行查找的是( )。A) 无序线性表 B) 线性链表 C) 二叉链表 D) 顺序存储的有序表(分数:2.00)A.B.C.D.2.下列数据结构中,能用二分法进行查找的是( )。A) 顺序存储的有序线性表 B) 线性链表 C) 二叉链表 D) 有序线性链表(分数:1.00)A.B.C.D.3.下列叙述中正确的是_。A) 软件交付使用后还需要维护 B) 软件一旦交付使用就不需要维护C) 软件交付使用后其生命周期就结束 D) 软件维护是指修复程序中
2、被破坏的指令(分数:2.00)A.B.C.D.4.结构化程序设计主要强调的是( )。A) 程序的规模 B) 程序的效率C) 程序设计语言的先进性 D) 程序的易读性(分数:1.00)A.B.C.D.5.有下列二叉树,对此二叉树前序遍历的结果为( )。(分数:2.00)A.B.C.D.6.某系统总体结构图如下图所示:(分数:2.00)A.B.C.D.7.下列选项中不属于结构化程序设计方法的是( )。A) 自顶向下 B) 逐步求精 C) 模块化 D) 可复用(分数:2.00)A.B.C.D.8.下列特征中不是面向对象方法的主要特征的是( )。A) 多态性 B) 继承 C) 封装性 D) 模块化(分
3、数:2.00)A.B.C.D.9.下列不属于软件工程的 3 个要素的是( )A) 工具 B) 过程 C) 方法 D) 环境(分数:2.00)A.B.C.D.10.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。A一对一 B一对多C多对一 D多对多(分数:1.00)A.B.C.D.11.在学校中,“班级”与“学生”两个实体集之间的联系属于( )关系。A) 一对一 B) 一对多 C) 多对一 D) 多对多(分数:2.00)A.B.C.D.12.下列叙述中,正确的是A) 用 E-R 图能够表示实体集间一对一的联系、一对多的联系和多对多的联系B) 用 E-R 图只能表示实体集之间一对一的联系
4、C) 用 E-R 图只能表示实体集之间一对多的联系D) 用 E-R 图表示的概念数据模型只能转换为关系数据模型(分数:2.00)A.B.C.D.13.待排序的关键码序列为(33,18,9,25,67,82,53,95,12,70) ,要按关键码值递增的顺序排序,采取以第一个关键码为基准元素的快速排序法,第一趟排序后关键码 33 被放到第 ( )个位置。A) 3 B) 5 C) 7 D) 9(分数:2.00)A.B.C.D.14.数据的存储结构是指( )。A) 存储在外存中的数据 B) 数据所占的存储空间量C) 数据在计算机中的顺序存储方式 D) 数据的逻辑结构在计算机中的表示(分数:1.00)
5、A.B.C.D.15.以下叙述中正确的是( )。AC 语言程序将从源程序中第一个函数开始执行B可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行CC 语言规定必须用 main 作为主函数名,程序将从此开始执行,在此结束Dmain 可作为用户标识符,用以命名任意一个函数作为主函数(分数:1.00)A.B.C.D.16.下列程序的输出结果是( )。mainint x8,y8;printf(“%d%d/n“,x-,-y);A) 88 B) 77 C) 78 D) 87(分数:1.00)A.B.C.D.17.下列程序的输出结果是_。main()int i=3;switch(i)case
6、1:case2:printf(“%d“,i)case3:case4:break;default:printf(“OK“);A) 0 B) 3 C) OK D) 没有任何输出(分数:1.00)A.B.C.D.18.已有定义:char c;,程序前面已在命令行中包含 ctypeh 文件,不能用于判断 c 中的字符是否为大写字母的表达式是A) isupper(c) B) A=c=ZC) A=c x+; printf(“x=%d/n“,x);程序执行后的输出结果是( )。Ax=4 Bx=8 Cx=6 Dx=12(分数:1.00)A.B.C.D.21.有以下程序main()int i=1,j=2,k=3
7、;if(i+=1程序运行后的输出结果是_。A) 1 2 3 B) 2 3 4 C) 2 2 3 D) 2 3 3(分数:1.00)A.B.C.D.22.已定义下列函数:int fun(int*p)return *p;)fun 函数返回值是( )。A) 不确定的值 B) 一个整数C) 形参 p 中存放的值 D) 形参 p 的地址值(分数:2.00)A.B.C.D.23.下列程序执行后的输出结果是void funcl(int i);void func2(int i);char st=“hello,friend!“;void funcl(int i)printf(“%c“,sti);if(i3)i+
8、=2;func2(i);void func2(int i)printf(“%c“,sti);if(i3)i+=2;func1(i);main()int i=0;func1(i);printf(“/n“);A) hello B) hel C) hlo D) hlm(分数:2.00)A.B.C.D.24.有以下程序#includestdio.hdouble f(double x);main()double a=0;int i;for(i=0;i30;i+=10)a+=f(double)i);printf(“%5.0f/n“,a);double f(double x)return x*x+1;程序运
9、行后的输出结果是( )。A)503 B)401 C)500 D)1404(分数:2.00)A.B.C.D.25.下列叙述中不正确的是( )。A) 在 C 语言中调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B) 在 C 的函数中,最好使用全局变量C) 外部变量可以在函数之间传递数据D) 自动变量实质上是一个函数内部的局部变量(分数:2.00)A.B.C.D.26.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。A) 函数调用可以作为独立的语句存在 B) 函数调用可以作为一个函数的实参C) 函数调用可以出现在表达式中 D) 函数调用可以作为一个函数的形参(分数:
10、1.00)A.B.C.D.27.以下程序的输出结果是_。main()chsr st20=“bello/0/t/“;print(“%d%f/n“,strlen(st),sizeof(st);A) 99 B) 520 C) 1320 D) 2020(分数:2.00)A.B.C.D.28.设有下列语句int a=1,b=2,c;c=a(b2);执行后,C 的值为( )。A) 6 B) 7 C) 8 D) 9(分数:2.00)A.B.C.D.29.以下程序运行后的输出结果是#includestdio.hmain( )int i,j;for(i=3;i=1;i-)for(j=1;j=2;j+)print
11、f(“%d“,i+j);printf(“/n“);A) 2 3 43 4 5B) 4 3 25 4 3C) 2 33 44 5D) 4 53 42 3(分数:2.00)A.B.C.D.30.下列叙述错误的是( )。A) 函数名是属于用户标识符,需符合 C 语言对标识符的规定B) 形参只能是变量C) 为保证程序的正常运行,函数中定义的变量不能与其他函数中的变量同名D) 函数中定义的变量可以与其他函数中的变量同名(分数:2.00)A.B.C.D.31.下列程序的输出结果是( )。#includestdio.hvoid main()int b6=2,4,6,8,10,12;int *p=b,*q=p
12、rintf(“%d“,*(p+);printf(“%d,“,*q);A) 4,4 B) 2,2 C) 4,5 D) 2,4(分数:2.00)A.B.C.D.32.设有下列的程序段:char str=“Hello World“;char*ptr;ptr=str;执行上面的程序段后,*(ptr+10)的值为( )。A) /0 B) 0 C) 不确定的值 D) 0的地址(分数:2.00)A.B.C.D.33.若希望下列的程序运行后输出 25,程序空白处的正确选项是( )。main()int i,j50,a7,4,10,5,8;for( )j+ai;primf(“%d,j-40);A) i1;i4;+
13、i B) i1;i3;+i C) i4;i2;i- D) i2;i4;+i(分数:2.00)A.B.C.D.34.以下程序运行后的输出结果是#includestdio.h#includestdlib.hint fun(int n)int *p;p=(int*)malloe( sized ( int );* p=n; return * p;main( )int a;a=fun(10);printf(“%d/n“,a+fun(10);A) 0 B) 10 C) 20 D) 出错(分数:2.00)A.B.C.D.35.设有定义:int n1=0,n2,*p=,下列赋值语句中与 n2=n1; 语句等价
14、的是( )。A) *p=*q; B) p=q; C) *p= D) p=*q;(分数:2.00)A.B.C.D.36.若要求从键盘读入含有空格字符的字符串,应使用函数_。(A) getc()(B) gets()(C) getchar()(D) scanf()(分数:2.00)A.B.C.D.37.若有函数 max(a,b),为了让函数指针变量 p 指向函数 max,当调用该函数时,正确的赋值方法是A) (*p)max(a,b) B) *pmax(a,b)C) p=max(a,b) D) *p=max(a,b)(分数:2.00)A.B.C.D.38.根据下列的定义,能打印出字母 P 的语句是(
15、)。struct stu char name10;iht age;struct stu s10=“John“,11,“Paul“, 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);(分数:1.00)A.B.C.D.39.有以下程序:int a=2;int f(int n)static int a=3;int t=0;if(n%2)static int a=4;t+=a+;elsestatic i
16、nt a=5;t+=a+;return t+a+;main()int s=a,i;for(i=0;i3;i+)s+=f(i);printf(“%d/n“,s);程序运行后的输出结果是_。A) 26 B) 28 C) 29 D) 24(分数:2.00)A.B.C.D.40.有以下程序#include stdio.hvoid WriteStr(char *fn,char *str)FILE *fp;fp=fopen(fn,“w“);fputs(str,fp);fclose(fp);main()WriteStr(“t1.dat“,“start“);WriteStr(“t1.dat“,“end“);程
17、序运行后,文件 t1.dat 中的内容是_。A) start B) end C) startend D) endrt(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:32.00)41.数据的独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,这称为 1。(分数:2.00)填空项 1:_42.按照“先进先出”的原则组织数据的结构是 1。(分数:2.00)填空项 1:_43.栈的 3 种基本运算是:入栈、退栈和 1。(分数:2.00)填空项 1:_44.程序测试分为静态测试和动态测试。其中 1 是指不执行程序,而只是对
18、程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。(分数:2.00)填空项 1:_45.数据库设计分为以下 6 个设计阶段:需求分析阶段、_、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。(分数:2.00)填空项 1:_46.以下程序运行后的输出结果是_。main()int m=011,n=11;printf(“%d %d/n“,+m,n+); (分数:2.00)填空项 1:_47.以下程序给指针 p 分配三个 double 型动态内存单元,请填空。#include stdio.h#include stdlib.hmain()double *p;p=(double *)mall
19、oc(U /U);p0=1.5;p1=2.5;P2=3.5;printf(“%f%f%f/n“,p0,p1,p2);(分数:2.00)填空项 1:_48.下列程序的输出结果是_。#includestdio.hmain()int x=3,y=2,z=1;if(xy)if (y0) z=0;else z+=1;printf(“%d/n“,z);(分数:2.00)填空项 1:_49.有以下程序:main()int a33,*p,i;p=for(i=0;i9;i+)pi=i+1;printf(“%d/n“,a12);程序运行后的输出结果是U /U。(分数:2.00)填空项 1:_50.若有定义:int
20、 a44=1,2,3,4,0,4,6,8,10,1,3,5,7,则初始化后,a22得到的初值是 1。(分数:2.00)填空项 1:_51.以下程序运行后的输出结果是_。 #includestdio.h int *f(int *p, int *q); main() int m=1, n=2, *r= r=f(r, printf(“%d/n“, *r); int *f(int *p, int *q) return( *p*q) ? p:q; (分数:2.00)填空项 1:_52.下列程序的输出结果是_。#includestdiohint(int x,int y,int cp,int dp)cp=x
21、*x+y*y;dp=x*x-y*y;main()int a=1,b=8,c=7,d=9;t(a,b,c,d);printf(“%d%d/n“,c,d);(分数:2.00)填空项 1:_53.下面程序的运行结果是U /U。#includestdioh#define SIZE 12main()char sSIZE;int i;for(i=0;iSIZE;i+) si=A+i+321;sub(s,7,SIZE-1);for(i=0;iSIZE;i+) printf(“%c“,si);printf(“/n“);sub(char *a,int t1,int t2)char ch;while(t1t1)c
22、h=*(a+t1);*(a+t1)*(a+t2);*(a+t2)ch;t1+;t2-; (分数:2.00)填空项 1:_54.已知 bead 指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。以下函数求出链表中所有连接点数据域的和值作为函数值返回。请在横线处填入正确内容。int data; struct link *next;main()struct link *head;sam(_);stmct link *p;int s=0;p=head-next;while(p)s+=p-data;p=p-next;return(s);(分数:2.00)
23、填空项 1:_55.下面函数的功能是:找出一维数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中 x 是数组名,n 是 x 中的数据个数,max 存放最大值,index 存放最大值所在元素的下标。请填空。#includestdlib.h#includestdio.hvoid fun(inta,int n,int *max,int *d)int i;*max=a0;*d=0;for(i=0;U /U;i+)if(*maxU /U)*max=ai;*d=i;main()int i,x20,max,index,n=10;randomize(
24、);for(i=0;in;i+)xi=rand()%50;printf(“%4d“,xi);printf(“/n“);fun(x,n,printf(“%d%d/n“,x-,-y);A) 88 B) 77 C) 78 D) 87(分数:1.00)A.B.C.D. 解析:解析 本题考查自减(-)运算符的使用。“x-”是先引用 x 的值然后将 x 的值减 1,所以输出的x 值为 8; “-y”是先将 y 的值减 1 然后再引用 y 的值,所以输出的 y 值为 7。17.下列程序的输出结果是_。main()int i=3;switch(i)case 1:case2:printf(“%d“,i)case
25、3:case4:break;default:printf(“OK“);A) 0 B) 3 C) OK D) 没有任何输出(分数:1.00)A.B.C.D. 解析:评析 在题中,i 的值为 3,由于“case 3:”后面没有 break 语句,所以继续向下执行“case 4”后面的语句,由于“case 4:”后面的语句为 break 强行退出 switch 语句,所以,本题没有任何输出。18.已有定义:char c;,程序前面已在命令行中包含 ctypeh 文件,不能用于判断 c 中的字符是否为大写字母的表达式是A) isupper(c) B) A=c=ZC) A=c x+; printf(“x
26、=%d/n“,x);程序执行后的输出结果是( )。Ax=4 Bx=8 Cx=6 Dx=12(分数:1.00)A.B. C.D.解析:解析 当 i=0 时,i2 成立,执行第一个 for 循环 x 自加为 1,接着执行第二个 for 循环,j=0时 j=3 成立,此时 if 不成立执行 x+后,x 为 2,接着 j=1 时,j=3 成立,继续循环,此时 if 成立,continue 是跳出本次循环继续下一次循环,不再执行 x+了,接着 j=2 时,j=3 成立,此时 if 不成立,执行其后的语句,当 j=4 时,退出第二个循环,接着执行其后的 x+,x 为 4,当 i=1 时,i2 成立,执行第
27、一个循环,x=5,此时接着执行其后的语句,即第二个循环,j=0 时 j3 成立,此时 if 不成立,x+后,x 为 6,接着 j 为 1 时,j=3 成立,继续循环,此时 if 成立不再执行 x+了,接着 j=2 时,j=3 成立,此时 if 不成立,执行其后的 x+,x 为 7,j=3 时,j=3 成立,此时 if 成立,不再执行其后的语句了,当 j=4 时,退出第二个循环,执行循环外部的语句,所以 x 为 8,故选 B 选项。21.有以下程序main()int i=1,j=2,k=3;if(i+=1程序运行后的输出结果是_。A) 1 2 3 B) 2 3 4 C) 2 2 3 D) 2 3
28、 3(分数:1.00)A.B.C. D.解析:解析 在 C 语言中,计算逻辑或(|)和逻辑与()fun 函数返回值是( )。A) 不确定的值 B) 一个整数C) 形参 p 中存放的值 D) 形参 p 的地址值(分数:2.00)A.B. C.D.解析:解析 由函数 int fun(int *p)return*p;的定义可知,返回值为整型指针变量 p 所指向的数据。23.下列程序执行后的输出结果是void funcl(int i);void func2(int i);char st=“hello,friend!“;void funcl(int i)printf(“%c“,sti);if(i3)i+
29、=2;func2(i);void func2(int i)printf(“%c“,sti);if(i3)i+=2;func1(i);main()int i=0;func1(i);printf(“/n“);A) hello B) hel C) hlo D) hlm(分数:2.00)A.B.C. D.解析:命题目的 考查函数的调用。解题要点 函数调用的一般形式为:函数名(实参列表)首先调用函数 func1(0),输出 st0)=h。i 值变为 2,并调用函数 func2(2),输出 st2=1。i 值此时变为 4,又调用函数 func1(4),输出 st4=0。此时 i 值大于等于 3,执行完毕,
30、因此,输出结果为 hlo。考点链接 函数调用的一般格式以及函数的返回值。24.有以下程序#includestdio.hdouble f(double x);main()double a=0;int i;for(i=0;i30;i+=10)a+=f(double)i);printf(“%5.0f/n“,a);double f(double x)return x*x+1;程序运行后的输出结果是( )。A)503 B)401 C)500 D)1404(分数:2.00)A. B.C.D.解析:解析 由于函数 f 的作用是对形参 x 求平方再加 1,所在在主函数中,循环第一次执行后变量 a的值等于 1,
31、第二次执行后,变量 a 的值等于 102,第三次执行后,变量 a 的值等于 503。25.下列叙述中不正确的是( )。A) 在 C 语言中调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B) 在 C 的函数中,最好使用全局变量C) 外部变量可以在函数之间传递数据D) 自动变量实质上是一个函数内部的局部变量(分数:2.00)A.B. C.D.解析:解析 编译时,编译系统不为局部变量分配内存单元,而是在程序运行中,当局部变量所在的函数被调用时,编译系统根据需要要临时分配内存,调用结束空间释放;全局变量一经定义,编译系统为其分配固定的内存单元,在程序运行的自始至终都占用固定的单元。在考虑
32、内存不定的情况下,最好使用全局变量。26.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。A) 函数调用可以作为独立的语句存在 B) 函数调用可以作为一个函数的实参C) 函数调用可以出现在表达式中 D) 函数调用可以作为一个函数的形参(分数:1.00)A.B.C.D. 解析:解析 本题中 A) 和 C) 选项显然是正确的。通过函数调用形参和实参的特点,可以知道函数调用可以作为一个函数的实参,而不能作为形参,所以 B) 正确,D) 错误。27.以下程序的输出结果是_。main()chsr st20=“bello/0/t/“;print(“%d%f/n“,strlen(st),
33、sizeof(st);A) 99 B) 520 C) 1320 D) 2020(分数:2.00)A.B. C.D.解析:评析 C 语言中字符串是以/0字符结束的,且 strlen()函数计算的是/0 字符前的所有字符的个数。本题中 strlen(st)应为 5。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。sizeof()函数是计算变量或数组的所分配到的内存空间的大小。所以本题的 sizeof(st)为 20。28.设有下列语句int a=1,b=2,c;c=a(b2);执行后,C 的值为( )。A) 6 B) 7 C) 8 D) 9(分数:2.00)A.B.C.D. 解
34、析:解析 变量 b 的初值等于 2,所以表达式 b2 表示 b 的值二进制左移两位,即扩大 4 倍,所以变量 b 的等于 8。然后与 a 的值 1 进行异或运算,得 9。29.以下程序运行后的输出结果是#includestdio.hmain( )int i,j;for(i=3;i=1;i-)for(j=1;j=2;j+)printf(“%d“,i+j);printf(“/n“);A) 2 3 43 4 5B) 4 3 25 4 3C) 2 33 44 5D) 4 53 42 3(分数:2.00)A.B.C.D. 解析:解析 在循环嵌套中,外层 for 变量 i 分别取值为 3、2、1,内层 f
35、or 变量 j 分别取值为 1、2。当 i=3 时,输出 i+j 的值为 4 5;当 i=2 时,输出 i+j 的值为 3 4;当 i=1 时,输出 i+j 的值为 2 3。30.下列叙述错误的是( )。A) 函数名是属于用户标识符,需符合 C 语言对标识符的规定B) 形参只能是变量C) 为保证程序的正常运行,函数中定义的变量不能与其他函数中的变量同名D) 函数中定义的变量可以与其他函数中的变量同名(分数:2.00)A.B.C. D.解析:解析 本题考查函数调用时参数的作用域。在函数调用时,函数体内定义的变量的作用域连函数体内,因而在不同函数体内定义的变量可以相同,不影响各个变量的使用。31.
36、下列程序的输出结果是( )。#includestdio.hvoid main()int b6=2,4,6,8,10,12;int *p=b,*q=printf(“%d“,*(p+);printf(“%d,“,*q);A) 4,4 B) 2,2 C) 4,5 D) 2,4(分数:2.00)A.B.C.D. 解析:解析 首先定义了一个指向一维数组 b 的指针 p,一个指向指针 p 的指针变量 q,输出*(p+)是先输出*p 即 b0的值,再将指针 p 指向数组的下一个元素 b1,输出*q 是输出指针 p 所指单元的内容,即 b1的值。32.设有下列的程序段:char str=“Hello Worl
37、d“;char*ptr;ptr=str;执行上面的程序段后,*(ptr+10)的值为( )。A) /0 B) 0 C) 不确定的值 D) 0的地址(分数:2.00)A. B.C.D.解析:解析 本题涉及字符数组和指针两个知识点:在 C 语言中,字符型数组在存放字符串时会自动在末尾加上/0,所以题中数组 str 有 11 个元素;ptr 指向数组 str 的首地址,ptr+10 是指向 str10,*(ptr+10)是引用 str10的值。33.若希望下列的程序运行后输出 25,程序空白处的正确选项是( )。main()int i,j50,a7,4,10,5,8;for( )j+ai;primf
38、(“%d,j-40);A) i1;i4;+i B) i1;i3;+i C) i4;i2;i- D) i2;i4;+i(分数:2.00)A.B.C.D. 解析:解析 要想使程序输出是 25,则 j-4025,j65,而 j 初值是 50,所以填入 for 循环中的语句,使引用的数组元素累加为 65-5015 即可。34.以下程序运行后的输出结果是#includestdio.h#includestdlib.hint fun(int n)int *p;p=(int*)malloe( sized ( int );* p=n; return * p;main( )int a;a=fun(10);prin
39、tf(“%d/n“,a+fun(10);A) 0 B) 10 C) 20 D) 出错(分数:2.00)A.B.C. D.解析:解析 fun 函数中,p 是一个可以指向基类型为 int 的指针变量,函数带 10 返回。因此,输出10+10 的结果 20。35.设有定义:int n1=0,n2,*p=,下列赋值语句中与 n2=n1; 语句等价的是( )。A) *p=*q; B) p=q; C) *p= D) p=*q;(分数:2.00)A. B.C.D.解析:解析 在定义指针变量 p 和 q 时,分别把变量 n2 和 n1 的地址赋给了指针变量 p 和 q,所以*p 和*q 中内容就分别是变量 n
40、2 和 n1 的值,所以语句*p=*q 与语句 n2=n1 等价。因此选项 A)正确。36.若要求从键盘读入含有空格字符的字符串,应使用函数_。(A) getc()(B) gets()(C) getchar()(D) scanf()(分数:2.00)A.B. C.D.解析:37.若有函数 max(a,b),为了让函数指针变量 p 指向函数 max,当调用该函数时,正确的赋值方法是A) (*p)max(a,b) B) *pmax(a,b)C) p=max(a,b) D) *p=max(a,b)(分数:2.00)A.B.C. D.解析:命题目的 考查指向函数的指针变量的使用。解题要点 在本题中,将
41、函数的入口地址赋给指针后就可以用该指针调用函数了。考点链接 函数的指针形参。38.根据下列的定义,能打印出字母 P 的语句是( )。struct stu char name10;iht age;struct stu s10=“John“,11,“Paul“, 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);(分数:1.00)A.B.C.D. 解析:解析本题主要考查按结构数组元素方式引用结构成员。
42、字母 P 为“Paul”的第一个字母,是结构体 s1的 name 成员的第一个元素的值,即 s1.name0的值。39.有以下程序:int a=2;int f(int n)static int a=3;int t=0;if(n%2)static int a=4;t+=a+;elsestatic int a=5;t+=a+;return t+a+;main()int s=a,i;for(i=0;i3;i+)s+=f(i);printf(“%d/n“,s);程序运行后的输出结果是_。A) 26 B) 28 C) 29 D) 24(分数:2.00)A.B.C. D.解析:解析 定义“int a=2;
43、”中的全局变量 a,起作用的范围是从定义此变量的位置开始到本源文件结束;定义“static int a=3;”中的静态局部变量 a 的作用范围是其所在的函数 f,并对其只赋一次初值,以后每次调用函数时不再重新赋值,而只保留上次函数调用结束时的值;复合语句“staticint a=4;t+=a+;”和“static int a=5;t+=a+;)”中定义的两个变量 a 属于复合语句中定义的变量,作用的范围只在其本身所在的复合语句内,对于本程序来讲,第三行定义的静态局部变量并不会对第4、5 两行的复合语句产生作用,这是因为复合语句也定义了与其同名的静态局部变照。40.有以下程序#include s
44、tdio.hvoid WriteStr(char *fn,char *str)FILE *fp;fp=fopen(fn,“w“);fputs(str,fp);fclose(fp);main()WriteStr(“t1.dat“,“start“);WriteStr(“t1.dat“,“end“);程序运行后,文件 t1.dat 中的内容是_。A) start B) end C) startend D) endrt(分数:1.00)A.B. C.D.解析:解析 本题考查打开文件函数 fopen()。本题中,fopen(fn,“w“)的第一个参数是需要打开的文件名,第二个参数指定文件打开的方式。“w
45、“表示为写而打开一个文本文件,如果文件不存在,则新建一个文件,否则将清空原文件。fputs(str,fp)是将 str 的内容写入文件。fclose()是关闭文件。在主函数中两次调用写文件函数,但因为写入的是同一个文件,所以只有最后一次的写入才有效。所以选项 B 正确。二、填空题(总题数:15,分数:32.00)41.数据的独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,这称为 1。(分数:2.00)填空项 1:_ (正确答案:物理独立性)解析:解析 数据的独立性是指数据和应用程序相互独立,分为物理独立性和逻辑独立性。其中物理
46、独立性是指数据的物理结构(包括存储结构、存取方式)改变时,不需要修改应用程序。而逻辑独立性是指当逻辑结构改变时,不需要修改应用程序。42.按照“先进先出”的原则组织数据的结构是 1。(分数:2.00)填空项 1:_ (正确答案:队列)解析:解析 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫做“队尾”,删除元素的一端叫做“队头”,先插入的元素先被删除,是按先进先出的原则组织数据的。43.栈的 3 种基本运算是:入栈、退栈和 1。(分数:2.00)填空项 1:_ (正确答案:读栈顶元素)解析:解析 栈的基本运算有 3 种:入栈、退栈和读取栈顶元素。其中,入栈是指在栈顶插入一个新的元素;退栈是指取出栈顶元素并赋值给一个变量;读栈顶元素是将栈顶元素赋值给一个指定的变量,不删除栈顶元素。44.程序测试分为静态测试和动态测试。其中 1 是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。(分数:2.00)填空项 1:_ (正确答案:静态测试)解析:解析 静态测试指不在计算机上运行被测试程序,而采用其他手段来达到对程序进行检测的目的,包括人工测试和计算机辅助静态分析方法。动态测试指通过在计算机上运行被测试程序,并用所设计的测试用例对程序进行检测的方法。45.数据库设计分为以下 6 个设计阶段:需求分析阶