1、二级 C 语言笔试-303 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.以下数组定义中错误的是( )。(分数:2.00)A.int x3=0;B.int x23=1,2,3,4,5,6;C.inf x3=1,2,3,4,5,6);D.int x23=1,2,3,4,5,6;2.数据流程图(DFD 图)是( )。(分数:2.00)A.软件概要设计的工具B.软件详细设计的工具C.结构化方法的需求分析工具D.面向对象方法的需求分析工具3.以下能正确定义一维数组的选项是( )。(分数:2.00)A.int a5=0,1,2,3,4,5;B.in
2、t a=0,1,2,3,4,5;C.char a=(A,B,C);D.int a5=“0123“;4.以下选项中不能作为 C 语言合法常量的是( )。(分数:2.00)A.cdB.0.1e+6C.“/a“D./0115.有以下程序:#include int f(int x)int y;lf (x=0|x=1)return(3);y=x*x-f(x-2);return y;main()int Z;z=f(3);printf(“%d/n“,z);程序的运行结果是( )。(分数:2.00)A.0B.9C.6D.86.对于现实世界中事物的特征,在窦体一联系模型中使用( )。(分数:2.00)A.属性描
3、述B.关键字描述C.二维表格描述D.实体描述7.下列描述中正确的是( )。(分数:2.00)A.软件工程只是解决软件项目的管理问题B.软件工程主要解决软件产品的生产率问题C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D.软件工程只是解决软件开发中的技术问题8.设有以下定义和语句:int a32=1,2,3,4,5,6,*p3;p0=a1;则*(p0+1)所代表的数组元素是( )。(分数:2.00)A.a01B.a10C.a11D.a129.有以下程序:#include int fun(int(*s)4,int n,int k)int m,i;m=s0k;for (i=l;in;
4、i+)if (sikm)m=sik;return m;main()int a44=1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34;printf(“%d/n“,fun(a,4,0);程序的运行结果是( )。(分数:2.00)A.4B.34C.31D.3210.在长度为 64 的有序线性表中进行顺序查找,最坏情况下需要比较的次数为( )。(分数:2.00)A.63B.64C.6D.711.下列叙述中正确的是( )。(分数:1.00)A.break 语句只能用于 switch 语句B.在 switch 语句中必须使用 defaultC.break 语句必须与
5、switch 语句中的 case 配对使用D.在 switch 语句中,不一定使用 break 语句12.以下叙述中错误的是( )。(分数:1.00)A.gets 函数用于从终端读入字符串B.getchar 函数用于从磁盘文件读入字符C.fputs 函数用于把字符串输出到文件D.fwrite 函数用于以二进制形式输出数据到文件13.有以下程序:#include main()int i=5;doif(i%3=1)if(i%S=2)printf(“*%d“,i);break;i+;while(i!=0);printf(“/n“);程序的运行结果是( )。(分数:1.00)A.*7B.*3*5C.*
6、5D.*2*614.以下不能定义为用户标识符是( )。(分数:1.00)A.MainB.0C.intD.sizeof15.以下关于 long、int 和 short 类型数据占用内存大小的叙述中正确的是( )。(分数:1.00)A.均占 4 个字节B.根据数据的大小来决定所占内存的字节数C.由用户自己定义D.由 C 语言编译系统决定16.有以下程序:#include #include typedef struct char name9;char sex;float score2; STU;void f(STU(分数:1.00)A.STU b=“2hao“,m,85.0,90.0;int i;s
7、trcpy(a.name,b.name);a.sex=b.sex;for(i=0;12;i+)a.scorei=b.scorei;main()STU c=“Qian“,f,95,92;f(C) ;printf(“%s,%c,%d,%d“,c.name,c.sex,c.score0,c.score1);A) Qian,f,95,92B.Qian,m,85,90C.Zhao,f,95,92D.Zhao,m,85,9017.有以下程序:int fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return sum;main()inf a
8、=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“%d/n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45B.50C.60D.5518.若有以下宏定义:#define N 2#define Yn)(N+1)*n)则执行语句 Z=2+(N+Y(5);后结果是( )。(分数:1.00)A.语句有误B.Z=34C.Z=70D.Z 无定值19.以下叙述中错误的是( )。(分数:1.00)A.对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行
9、中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D.可以通过赋初值的方式确定数组元素的个数20.下列叙述中正确的是( )。(分数:1.00)A.软件测试应该由程序开发者来完成B.程序经调试后一般不需要再测试C.软件维护只包括对程序代码的维护D.以上三种说法都不对21.设变量已正确定义,则以下能正确计算 f=n!的程序段是( )。(分数:2.00)A.f=0;for(i=1;i=n;i+)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;fori=n;i=2;i-)f*=i;22.有以下程序:#in
10、clude main()struct STUchar name9;char sex;double score2;struct STU a=“Zhao“,m,85.0,90.0,b=“Qian“,f,95.0,92.0,b=a;prinf(“%s,%c,%2.Of,%2.Of/n“,b.name,b.sex,b.score0,b.score1);程序的运行结果是( )。(分数:2.00)A.Qian,f,95,92B.Qian,m,85,90C.Zhao,f,95,92D.Zhao,m,85,9023.有以下程序:#include void WriteStr(char*fn,char*str)F
11、ILE*fp;fp=fopen(fn,“w“);fputs(str.fp);fclose(fp);main()WriteStr(“t1.dat“,“start“);WriteStr(“t1.dat“,“end“);程序运行后,文件 t1.dat 中的内容是( )。(分数:2.00)A.startB.endC.startendD.endrt24.若 x=2,y=3,则 x&y 的结果是( )。(分数:2.00)A.0B.2C.3D.525.以下程序的输出结果是( )。#include void swap(int*a,int*B) int*t;t=a;a=b;b=t;main()int i=3,j
12、=5,*p=&i,*q=&j;swap(p,q);printf(“%d%d/n“,*p,*q);(分数:2.00)A.23B.34C.35D.4526.有以下程序:#include main()FILE*pf;char*s1=“China“,*s2;“Beijing“;pf=fopen(“abc.dat“,“wb+“);fwrite(s2,7,1,pf);rewind(pf);/*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf):以上程序执行后 abc.dat 文件的内容是( )。(分数:2.00)A.ChinaB.ChinangC.ChinaBeijing
13、D.BeijingChina27.有以下程序:main()int i;for(i=1;1=40;i+)if(i+%5=0)if(+i%8=0)printf(“%d“,i);printf(“/n“);执行后的输出结果是( )。(分数:2.00)A.5B.24C.32D.4028.用 C 语言编写的代码程序( )。(分数:2.00)A.可立即执行B.是一个源程序C.经过编译即可执行D.经过编译解释即可执行29.有以下程序;main()inf a=2,4,6,8,10,y=0,x,*p;p=&a1;for(x=1;x3;x+)y+=px;printf(“%d/n“,y);程序运行后的输出结果是( )
14、。(分数:2.00)A.10B.11C.14D.1530.下列叙述中错误的是( )。(分数:2.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持31.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度也必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对32.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指( )。(分数:2.00)A.数
15、据与程序独立存放B.不同的数据被存放在不同的文件中C.不同的数据只能被对应的应用程序所使用D.以上三种说法都不对33.在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是( )。(分数:2.00)A.(!E=0)B.(E0|E0)C.(E=0)D.(E!=0)34.下面不属于软件工程的 3 个要素的是( )。(分数:2.00)A.工具B.过程C.方法D.环境35.有以下程序:char fun(char x ,char y)if(xy)return x;return y;main()int a=9,b;8,c=7;printf“%c/n“,fun(fun(a,B) ,fun(b,
16、C) );程序的执行结果是( )。(分数:2.00)A.函数调用出错B.8C.9D.736.设有如下三个关系表:(分数:2.00)A.T=RSB.T=RSC.T=RSD.T=R/S37.若变量均已正确定义并赋值,以下合法的 C 语言赋值语句是( )。(分数:2.00)A.x=y=5;B.x=n%2.5;C.x+n=i;D.x=5=4+1;38.有以下程序:main()char s=“ABCD“,*p;for(p=s+1;ps+4;p+)printf(“%s/n“,p);程序运行后的输出结果是( )。(分数:2.00)A.ABCDBCDCDDB.ABCDC.BCDD.BCDCDD39.有以下定义
17、:#include char a10,*b=a;不能给数组 a 输入字符串的语句是( )。(分数:2.00)A.geB.gets(a0);C.gets(&a0);D.ge40.有以下程序: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);程序执行后的输出结果是( )。(分数:2.00)A.123,abcB.abc,123C.1bc,a23D.321,cba二、填空题(总题数:15,分数:30.00)41.设某循环队列的容
18、量为 50,如果头指针 front=45(指向队头元素的前一位置),尾指针 rear=10(指向队尾元素),则该循环队列中共有 1 个元素。(分数:2.00)填空项 1:_42.线性表的存储结构主要分为顺序存储结构和链式存储结构。队列是一种特殊的线性表,循环队列是队列的 1 存储结构。(分数:2.00)填空项 1:_43.在深度为 7 的满二叉树中,度为 2 的结点个数为 1。(分数:2.00)填空项 1:_44.软件生命周期可分为多个阶段。一般分为定义阶段、开发阶段和维护阶段。编码和测试属于_阶段。(分数:2.00)填空项 1:_45.在 E-R 图中,图形包括矩形框、菱形框、椭圆框。其中表
19、示实体联系的是_框。(分数:2.00)填空项 1:_46.已有定义:char c=“;int a:1,b;(此处 c 的初值为空格字符),执行 b=!c&a;后 b 的值为 1。(分数:2.00)填空项 1:_47.有以下程序:#includemain()int x=1,y=2,z=3;if(xy)if(yz)printf(“%d%“,+z);else printf(%d%,+y);printf(“%d%/n“,x+);程序运行后的输出结果是_。(分数:2.00)填空项 1:_48.有以下程序:main()int i,j;for(i=1;i4;i+)for (j=i;j4;j+)printf(
20、“%d*%d=%d“,i,j,i*j);printf(“/n“);程序运行后的输出结果是_。(分数:2.00)填空项 1:_49.有以下程序:main()int x32=0,1;for(i=0;i3;1+)scanf(“%d“,xi);printf(“%3d%3d%3d/n“,x00,x01,x10);若运行时输入:2 4 6回车,则输出结果为_。(分数:2.00)填空项 1:_50.有以下程序:main()int a=1,2,3,4,S,6,7,8,9,0,*p;for(p=a;pa+10;p+)printf(“%d,“,*p);程序运行后的输出结果是_。(分数:2.00)填空项 1:_51
21、.若有定义语句:int a36;,按在内存中的存放顺序,a 数组的第 10 个元素是 1。(分数:2.00)填空项 1:_52.有以下程序:prtint *m,int n)int i;for(i=0;in;i+)mi+;main()int a=1,2,3,4,5,i;prt(a,5);for(i=0;i5;i+)printf(“%d,“,ai);程序运行后输出结果是_。(分数:2.00)填空项 1:_53.能正确表示代数式 2ab/cd 的 C 语言表达式是 1。(分数:2.00)填空项 1:_54.有以下程序:main()char p=a,b,c),q=“abc“;printf(“%d %d
22、/n“,sizeof(p),sizeof(q);程序运行后的输出结果是_。(分数:2.00)填空项 1:_55.有以下程序:# include main()int a=1,2,3,4,5,6,7,8,9,10,11,12,*p=a+5,*q=NULL;*q=*(p+5);printf(“%d%d/n“,*p,*q);程序运行后的输出结果是_。(分数:2.00)填空项 1:_二级 C 语言笔试-303 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.以下数组定义中错误的是( )。(分数:2.00)A.int x3=0;B.int x23=1,2
23、,3,4,5,6; C.inf x3=1,2,3,4,5,6);D.int x23=1,2,3,4,5,6;解析:解析 本题考核的知识点是二维数组的定义及初始化。在定义一个二维数组同时初始化时,其第一维的长度可以省略。二维数组的初始化列表可以只使用一重花括号,其中的每个值依次代表从第 1 行的第 1 个元素起,直到第 1 行满,接着代表第 2 行、第 3 行的每一个元素,若第 1 维长度没有省略,则这些值总个数不得超过两个维度的乘积。故选项 A)和 D)是正确的。二维数组的初始化列表还可以使用二重花括号括起来,其中每一个内花括号代表一行的值,在内花括号中值的个数不得超过数组第二维的长度,若不足
24、第 2 维长度,则该行多出部分值被初始化为 0,若第一维省略,花括号的个数代表行数。B)选项第一维为 2,故只有两行,但有三个花括号超出了行的要求,所以 B)错误。2.数据流程图(DFD 图)是( )。(分数:2.00)A.软件概要设计的工具B.软件详细设计的工具C.结构化方法的需求分析工具 D.面向对象方法的需求分析工具解析:解析 常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析就是使用数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化规格说明的目标文档。3.以下能正确定义一维数组的选项是( )。(分数:2.00)A.int
25、 a5=0,1,2,3,4,5;B.int a=0,1,2,3,4,5; C.char a=(A,B,C);D.int a5=“0123“;解析:解析 本题考查的是一维数组的定义及初始化。定义并初始化一维数组的一般形式如下:类型名 数组名常量表达式=初始化列表;当使用初始化列表初始化数组时,需要注意以下几点:初始化列表项的个数必须小于等于常量表达式的值,因此选项 A)是错误的;常量表达式可以省略,但不能省略其外面的中括号,因此选项 C)是错误的;当类型名为 char 时,(初始化列表可以用一个字符串常量来代替,由于字符串常量必须以/0结尾,所以此时的初始化列表项的个数是字符串常量的长度加 1,
26、选项 D)的类型是 int,不能使用字符串常量初始化,所以 D)错误。4.以下选项中不能作为 C 语言合法常量的是( )。(分数:2.00)A.cd B.0.1e+6C.“/a“D./011解析:解析 本题考查的是 C 语言的常量。0.1e+6 是实型常量的指数形式,代表 0.110 的 6 次方,所以选项 B)是合法的;“/a“是合法的字符串常量,/a 是一个非打印的转义字符表示响铃,所以选项 C)是合法的;/011是一个字符常量,/011 是一个用 3 位八进制表示的转义字符,所以选项 D)也是合法的。在C 语言中,字符常量是用单引号括起来的一个字符,选项 A)中的cd包含了 2 个字符,
27、所以是不正确的。5.有以下程序:#include int f(int x)int y;lf (x=0|x=1)return(3);y=x*x-f(x-2);return y;main()int Z;z=f(3);printf(“%d/n“,z);程序的运行结果是( )。(分数:2.00)A.0B.9C.6 D.8解析:解析 本题主要考查的是递归函数。题目中的 f()函数直接调用了自身,是一个递归函数。主函数中调用 f()函数时传人的参数是 3,所以会跳过 if 语句,执行 y=x*x-fx-2);,也就是 y=3*3-f(1);,再次调用川函数,传入参数 1,此时满足 if 语句的条件,返回
28、3。所以前面的 y=3*3-f(1);就等价于y=3*3-3;,结果是 6,所以返回给主函数的结果是 6。故本题应该选择 C)。6.对于现实世界中事物的特征,在窦体一联系模型中使用( )。(分数:2.00)A.属性描述 B.关键字描述C.二维表格描述D.实体描述解析:解析 本题考查对实体一联系模型的理解和掌握。在实体一联系模型中,用属性来描述现实世界中对象的属性所表示的对象的性质、特征和行为,因此正确答案为选项 A)。7.下列描述中正确的是( )。(分数:2.00)A.软件工程只是解决软件项目的管理问题B.软件工程主要解决软件产品的生产率问题C.软件工程的主要思想是强调在软件开发过程中需要应用
29、工程化原则 D.软件工程只是解决软件开发中的技术问题解析:解析 软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科,所谓软件工程是指,采用工程的概念、原理、技术和方法指导软件的开发与维护。软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。由此可见,选项 A)、选项 B)和选项 D)的说法均不正确,选项 C)正确。8.设有以下定义和语句:int a32=1,2,3,4,5,6,*p3;p0=a1;则*(p0+1)所代表的数组元素是( )。(分数:2.00)A.a01B.a10C.a11 D.a12解析:解析 本题考核的知识点是二维数组的定义和指针数组的基本概念。
30、本题中首先定义了一个 3 行2 列的数组 a,一个长度为 3 的指针数组 p,接着把地址 a1赋给 p0此时 p0为 a10的地址,p0+1 为 a11的地址,故+(p0+1)代表的元素为 a11。所以,4 个选项中选项 C)符合题意。9.有以下程序:#include int fun(int(*s)4,int n,int k)int m,i;m=s0k;for (i=l;in;i+)if (sikm)m=sik;return m;main()int a44=1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34;printf(“%d/n“,fun(a,4,0);
31、程序的运行结果是( )。(分数:2.00)A.4B.34C.31 D.32解析:解析 本题考查的是二维数组的定义、赋初值和对二维数组元素的引用。在 fun()函数中,首先将 s0k的值赋给 m,然后通过 for 循环,遍历 s1k-sn-1k之中的数,将遇到的比 m 大的数保存到 m 中。很显然,这是搜索最大值的算法,搜索的是 s0ksn-1k之间的最大值。所以,主函数中 fun (a,4,0)的功能就是搜索 a00-a30之间的最大值,这 4 个值分别是 1、11、21、31,所以最终输出结果是 31,应该选择 C)。10.在长度为 64 的有序线性表中进行顺序查找,最坏情况下需要比较的次数
32、为( )。(分数:2.00)A.63B.64 C.6D.7解析:解析 对有序线性表进行顺序查找,首先用被查找的数据和线性表的第一个数据元素进行比较,若相等,则查找成功;否则,继续进行比较,即和线性表的第二个数据元素进行比较。同样,若相等,则查找成功;否则,继续进行比较。依次类推,直到在线性表中查找到该数据或查找到线性表的最后一个元素,算法才结束。因此,在长度为 64 的有序线性表中进行顺序查找,最坏的情况下需要比较 64 次。11.下列叙述中正确的是( )。(分数:1.00)A.break 语句只能用于 switch 语句B.在 switch 语句中必须使用 defaultC.break 语句
33、必须与 switch 语句中的 case 配对使用D.在 switch 语句中,不一定使用 break 语句 解析:解析 本题主要考查 switch 语句的概念。break 语句除了能用于 switch 语句外,还可以用于循环语句中,因此选项 A)不正确。在 switch 语句中,可以使用 default 来执行所有 case 均失配时的分支,也可以不使用 default,此时若所有 case 均失配则跳出 switch,因此选项 B)不正确。在 switch 语句中,每个 case 的作用就是标出一个执行的起点,当符合某个 case 时,程序就从该 case 所标出的起点处开始执行,若没有
34、break 语句中断执行的话,程序会一直执行到 switch 的最后一条语句,而不是碰到下一个break 才停止执行,所以 C)不正确。12.以下叙述中错误的是( )。(分数:1.00)A.gets 函数用于从终端读入字符串B.getchar 函数用于从磁盘文件读入字符 C.fputs 函数用于把字符串输出到文件D.fwrite 函数用于以二进制形式输出数据到文件解析:解析 本题主要考查的是输入输出函数。从终端输入的函数有:scanf、getchar、gets。输出到屏幕的函数有:printf、putchar、puts。从磁盘文件输入的函数有:fscanf、fgetc、fgets、fread、
35、getc。输出到磁盘文件的函数有:fprintf、fputc、fputs、fwrite、putc。由此可见,选项 B)的说法是错误的。13.有以下程序:#include main()int i=5;doif(i%3=1)if(i%S=2)printf(“*%d“,i);break;i+;while(i!=0);printf(“/n“);程序的运行结果是( )。(分数:1.00)A.*7 B.*3*5C.*5D.*2*6解析:解析 本题考查的是 break 语句。dowhile 循环是“先执行,后判断”,所以无论条件如何,它都至少会执行一遍。程序首先初始化变量 i 为 5,然后进入 dowhil
36、e 循环体,首先判断(i%3=1),因为 5%3=2,所以 if 条件不满足,跳过下面的 if 语句,执行 i+,i 变为 6。第 1 遍循环结束,判断(i!=0)为真,继续循环。现在 1%3=6%3=0,所以 if 语句还是不被执行,继续 i+,i 变为 7,仍然满足(i!=0),继续循环。第 3 遍循环 1%3=7%3=1,满足条件(i%3=1),继续判断条件 i%5=2 成立,即输出*7,然后执行 break 语句跳出循环。14.以下不能定义为用户标识符是( )。(分数:1.00)A.MainB.0C.intD.sizeof 解析:解析 本题考查的是 C 语言中的标识符与关键字。合法的标
37、识符由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。另外,C 语言规定了一批关键字,它们在程序中都代表着固定的含义,不能另作他用,所以合法的标识符也不能是 C 语言的任一关键字。本题中,选项 A)、B)、C)都符合上述条件,只有选项 D)sizeof 是 C 语言中的关键字,所以,4 个选项中选项 D)符合题意。15.以下关于 long、int 和 short 类型数据占用内存大小的叙述中正确的是( )。(分数:1.00)A.均占 4 个字节B.根据数据的大小来决定所占内存的字节数C.由用户自己定义D.由 C 语言编译系统决定 解析:解析 在 C 语言的标准中,short 占 2
38、个字节、long 占 4 个字节,但 int 的大小和编译系统相关。例如在 Turbo C 2.0 中,int 占 2 个字节,但在 Visual C+ 6.0(VC6 可以用做 C 语言编译器)中占 4 个字节。故本题应该选择 D)。16.有以下程序:#include #include typedef struct char name9;char sex;float score2; STU;void f(STU(分数:1.00)A.STU b=“2hao“,m,85.0,90.0;int i;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;12;i+)a.
39、scorei=b.scorei;main()STU c=“Qian“,f,95,92;f(C) ;printf(“%s,%c,%d,%d“,c.name,c.sex,c.score0,c.score1);A) Qian,f,95,92 B.Qian,m,85,90C.Zhao,f,95,92D.Zhao,m,85,90解析:解析 本题考查的是结构体变量用作函数参数。结构体变量用作函数参数时是传值调用,即在函数内部无论怎样修改形参结构体变量的内容,都不会影响到调用函数时传递给函数的实参结构体变量。因此,本题的川函数没有任何实际作用,它改变不了什么内容。故本题的结果是定义结构体 c 时给出的初始值
40、,应该选择 A)。17.有以下程序:int fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return sum;main()inf a=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“%d/n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45B.50C.60 D.55解析:解析 本题主要考查的知识点是静态局部变量的运用。如果在定义一个局部变量时使用了 static关键字,则这个局部变量就被定义成了一个静态局部变量。一般的局部变量随着函数被调用而诞生,在函数
41、返回时被销毁。而静态局部变量在函数调用结束后不会被销毁,在下一次该函数被调用时,还会保留上一次函数调用结束时的值。本题中 fun()函数通过一个 for 循环来累计形参数组 x 的前 n 个元素之和。在主函数中,第 1 次调用 fun (a,5)时,返回的值应该是数组 a 的前 5 个元素的和,而第 2 次调用fun(b,4)时,返回的值除了本次累计的数组 b 前 4 个元素和之外还有上次累计的数组 a 的前 5 个元素的和,所以累加结果为 60。18.若有以下宏定义:#define N 2#define Yn)(N+1)*n)则执行语句 Z=2+(N+Y(5);后结果是( )。(分数:1.0
42、0)A.语句有误B.Z=34 C.Z=70D.Z 无定值解析:解析 本题考查的是带参数的宏。在此处需要直接替换整个式子,2*(N+Y(5)即为 2+(2+(2+1)+5),可得结果为 34。19.以下叙述中错误的是( )。(分数:1.00)A.对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 D.可以通过赋初值的方式确定数组元素的个数解析:解析 本题考查的是数组的基本概念。在 C 语言中,除字符数组外,一个数组不能通过数组名对数组
43、进行整体引用,因此选项 A)是对的。数组名中存放的是一个地址常量,它代表整个数组的首地址,因此选项 B)是对的。C 语言程序在运行过程中,系统不自动检验数组元素的下标是否越界,因此选项 C)是错误的。C 语言规定可以通过赋初值来定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大小,因此选项 D)也是正确的。所以,4 个选项中选项 C)符合题意。20.下列叙述中正确的是( )。(分数:1.00)A.软件测试应该由程序开发者来完成B.程序经调试后一般不需要再测试C.软件维护只包括对程序代码的维护D.以上三种说法都不对 解析:解析 因为-测试的目的在于发现错误,从心理学角度讲,由程序的编
44、写者自己进行测试是不合适的,为了达到最好的测试效果,应该由独立的第三方进行测试工作,所以选项 A)错误;程序调试,修改一个错误的同时可能引入了新的错误,解决的办法是在修改了错误之后,必须进行回归测试,所以选项 B)错误;所谓软件维护,就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程,可见选项 C)也是错误的。21.设变量已正确定义,则以下能正确计算 f=n!的程序段是( )。(分数:2.00)A.f=0;for(i=1;i=n;i+)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;fori=n;i=
45、2;i-)f*=i; 解析:解析 本题考查的是 for 循环的应用。n!表示 1*2+3*n。因此,for 循环应该遍历 1(或者2)n 的范围,而 f 的初始值应该为 1,然后让 f 累乘每次循环的循环变量即可。选项 A)让 f 初始化为 0不正确,因为 0 乘以任何数都为 0,最后结果肯定是 0;选项 B)的循环变量是从 1n-1,也不对;选项 C)的for 循环是一个死循环;选项 D)的循环从 n 递减到 2 故满足要求,所以选 D)。22.有以下程序:#include main()struct STUchar name9;char sex;double score2;struct ST
46、U a=“Zhao“,m,85.0,90.0,b=“Qian“,f,95.0,92.0,b=a;prinf(“%s,%c,%2.Of,%2.Of/n“,b.name,b.sex,b.score0,b.score1);程序的运行结果是( )。(分数:2.00)A.Qian,f,95,92B.Qian,m,85,90C.Zhao,f,95,92D.Zhao,m,85,90 解析:解析 本题考查的是结构体变量赋值。在 C 语言中,相同类型的结构体变量可以通过等号直接赋值,它会将对应成员一一对应赋值。所以,本题声明并初始化了两个 STU 结构体变量 a 和 b,然后将 a 赋给 b,最后逐个输出 b
47、的各个成员,其实就是初始化 a 的内容,故本题应该选择 D)。23.有以下程序:#include void 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 中的内容是( )。(分数:2.00)A.startB.end C.startendD.endrt解析:解析 本题考查的是文件操作。题中“fopen(fn,“w“)”的作用是打开 fn 所指向的文件,使用文件方式为“写入”;“fputs(str,fp)”的