1、二级 C语言笔试-207 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.如下程序的输出结果是( )。#includestdio.hmain()float x=20,y;if(x0.0)y=0.0;else if (x10.0)y=1.0/x;else y=110;printf(“%f,y);(分数:2.00)A.0.000000B.0.250000C.0.500000D.1.0000002.有以下程序:#includestdio.hmain()char c1=1,c2=2;c1=getchar( );c2=getchar( ):putch
2、ar(c1):putchar(c2);当运行时输入 a回车后,以下叙述正确的是( )。(分数:2.00)A.变量 c1被赋予字符 a,c2 被赋予回车符B.程序将等待用户输入第 2个字符C.变量 c1被赋予字符 a,c2 中仍是原有字符 2D.变量 c1被赋予字符 a,c2 中将无确定值3.下列叙述中,不属于软件需求规格说明书的作用的是( )。(分数:2.00)A.便于用户、开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析4.有以下程序:#includestring.hmain()char p=a,b,c,
3、q10=a,b,c;printf(“%d%d/n“,strlen(p),strlen(q);以下叙述中正确的是( )。(分数:2.00)A.在给 p和 q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3B.由于 p数组中没有字符串结束符,长度不能确定,但 q数组中字符串长度为 3C.由于 q数组中没有字符串结束符,长度不能确定,但 P数组中字符串长度为 3D.由于 p和 a数组中都没有字符串结束符,故长度都不能确定5.阅读下列程序,当运行函数时,输入 asd af aa z67,则输出为( )。#includestdio.h#includectype.h#includestrin
4、g.hint fun(char *str)int i,j=0;for(i=0;stri!=/0;i+)if(stri!=“)str1+=stri;strj=/0;main()char str81;int n;printf(“Input a string:“);gets(str);puts(str);fun(str);printf(“%s/n“,str);(分数:2.00)A.asdafaaz67B.asd af aa z67C.asdD.z676.下列程序的运行结果是( )。#include“stdio.h“main()inc x=-9,y=5,z=8:if(xy)if(y0)z=0;else
5、 z+=1;printf(:%d/n“,z):(分数:2.00)A.6B.7C.8D.97.现有以下结构体说明和变量定义,如下图所示,指针 p、q、r 分别指向一个链表中连续的三个结点。struct nodechar data;struct node *next;*p,*q,*r;(分数:2.00)A.q-next=r-next;p-next=r;r-next=q;B.p-next=r;q-next=r-next;r-next=q;C.q-next=r-next;r-next=q;p-next=r;D.r-next=q;p-next=r;q-next=r-next;8.以下 4个选项中,不能看
6、成一条语句的是( )。(分数:2.00)A.;B.a=5,b=2.5,c=3.6;C.if(a5);D.if(b!=5)x=2;y=6;9.下面程序中有错误的行是(每行程序前面的数字表示行号)( )。1 main()2 3 int a3=(1);4 int i;5 scanf(“%d,(分数:2.00)A.;B.a=5,b=2.5,c=3.6;C.if(a5);D.if(b!=5)x=2;y=6; 解析:解析 选项 D)为两条语句。9.下面程序中有错误的行是(每行程序前面的数字表示行号)( )。1 main()2 3 int a3=(1);4 int i;5 scanf(“%d,(分数:2.0
7、0)A.;&解析:解析 主要考查了一维数组的定义、初始化及元素的引用方法。第 5行代码中 seanf输入数据时,要求输入项为地址,而数组名即为数组的首地址,所以不应该再在前面加取地址符号。10.如果需要打开一个已经存在的非空文件“Demo”进行修改,下面选项中正确的是( )。(分数:2.00)A.fp=fopen(“Demo“,r);B.fp=fopen(“Demo“,“ab+“);C.fp=fopen(“Demo“,“w+“);D.fp=fopen(“Demo“,“r+“); 解析:解析 此题考查文件打开方式对文件操作的影响。由于打开文件进行修改,可见选项 A)是错误的,因为此种方式打开时,
8、只能读,不能写,当然无法修改;选项 B)是以追加方式“ab+”打开文件读写,以这种方式打开时,新写入的数据只能追加在文件原有内容之后,但可以对以前的数据读出。换言之,“ab+”或“a+”方式打文件后,对于写操作,文件指针只能定位在文件的原有内容之后,但对于读操作,文件指针可以定位在全文件范围内,可见,按此种方式打开文件不能实现文件内容的修改;选项 C)以“w+”方式打开文件,此时,原文件中已存在的内容都被清除,但新写入文件的数据可以被再次读出或再次写入,故也不能实现对文件的修改。只有以“r+”方式打开文件时,才允许将文件原来数据读出,也允许在某些位置上再写入,从而实现对文件的修改。11.下列叙
9、述中,正确的是( )。(分数:1.00)A.用 E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系 B.用 E-R图只能表示实体集之间一对一的联系C.用 E-R图只能表示实体集之间一对多的联系D.用 E-R图表示的概念数据模型只能转换为关系数据模型解析:解析 两个实体之间的联系实际上是实体集合的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向备种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。12.线性表是( )。(分数:1.00)A.有限序列,可以为空 B.有
10、限序列,不能为空C.无限序列,可以为空D.无限序列,不能为空解析:解析 如果一个非空的数据结构满足下列两个条件:第一,有且只有一个根结点;第二,每一个结点最多有一个前件,也最多有一个后件,则称该数据结构为线性结构。线性结构又称线性表。13.已有定义:char a=“xyz“,b=x,y,z;,以下叙述中正确的是( )。(分数:1.00)A.数组 a和 b的长度相同B.a数组长度小于 b数组长度C.a数组长度大于 b数组长度 D.以述说法都不对解析:解析 本题考查的是字符型一维数组的初始化。对字符型一维数组在定义时初始化,既可以使用初始化列表,也可以使用字符串常量。不过由于字符串常量会自动在结尾
11、添加/0字符做结束标志,所以用字符串常量的初始化列表项个数是字符串的长度加 1。因此题目中的 char a=“xyz“;等价于 char a=x,y,z,/0;,所以 a数组长度大于 b数组长度,应该选 C)。14.结构化程序设计主要强调的是( )。(分数:1.00)A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序易读性 解析:解析 结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用 goto语句,总的来说可使程序结构良好、易读、易理解、易维护。15.以下叙述中正确的是( )。(分数:1.00)A.用 C程序实现的算法必须要有输入和输出操作B.用 C程序实现
12、的算法可以没有输出但必须要有输入C.用 C程序实现的算法可以没有输入但必须要有输出 D.用 C程序实现的算法可以既没有输入也没有输出解析:解析 算法具有的 5个特性是:有穷性;确定性;可行性;有 0个或多个输入;有一个或多个输出。所以说,用 C程序实现的算法可以没有输入但必须要有输出。16.在数据管理技术的发展过程中,可实现数据共享的是( )。(分数:1.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段 D.系统管理阶段解析:解析 数据库技术的主要目的是有效地管理和存取数据资源,包括提供数据的共享性,使多个用户能够同时访问数据库中的数据;减少数据的冗余度,以提交数据的一致性和完整性;提
13、供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。17.下面的程序段运行后,输出结果是( )。int i,j,x=0;static int a88;for(i=0;i3;i+)for(j=0;j3;j+)aij=2*i+j;for(i=0;i8;i+)x+=aij;printf(“%d“,x);(分数:1.00)A.9B.不确定值C.0 D.18解析:解析 本题主要考查的是用二维数组首地址和下标来引用二维数组元素的方法。通过分析可知,程序中的双重循环定义了一个如下的二维数组:0 1 22 3 44 5 6由于数组的下标是从 0开始的,所以二维数组元素 aij表示的是二维数组 a的第
14、i+1行、第 j+1列对应位置的元素。18.以下程序中调用 scanf函数给变量 a输入数值的方法是错误的,其错误原因是( )。main()int *p,*q,a,b;p=a;printf“input a;“;scanf(“%d“,*p);(分数:1.00)A.*p表示的是指针变量 p的地址B.*p表示的是变量 a的值,而不是变量 a的地址 C.*p表示的是指针变量 p的值D.*p只能用来说明 p是一个指针变量解析:解析 考查格式输入语句 scanf的使用。本题经过定义语句和赋值后,p 表示的是变量 a的地址,*p表示的是变量 a的值。19.有以下程序:#includestdio.hint f
15、(int x)inc 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);程序的运行结果是( )。(分数:1.00)A.0B.9C.6 D.8解析:解析 函数 int f(int x)是一个递归函数调用,当 x的值等于 0或 1时,函数值等于 3,其他情况下 y=x2-f(x-2),所以在主函数中执行语句 z=f(3)时,y=3*3-f(3-2)=9-f(1)=9-3=6。20.下列选项中,不属于模块间耦合的是( )。(分数:1.00)A.数据耦合B.标记耦合C.异构耦合 D.公共耦合
16、解析:解析 模块之间的耦合程度反映了模块的独立性,也反映了系统分解后的复杂程度。按照耦合程度从强到弱分别是:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合和非直接耦合,没有异构耦合这种方式。21.以下选项中可作为 C语言合法常量的是( )。(分数:2.00)A.-80 B.-080C.-8e1.0D.-80.0e解析:解析 选项 B)中,以 0开头表示是一个八进制数,而八进制数的取值范围是 07,所以-080 是不合法的;选项 C)和 D)中,e 后面的指数必须是整数,所以也不合法。22.有如下程序:main()char ch25=“6937“,“8254“,*p2;int i,j
17、,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-0;printf(“%d/n“,s);该程序的输出结果是( )。(分数:2.00)A.69862358B.5825C.6385 D.693825解析:解析 该题稍微难一点。主要要搞清楚以下几点:定义了一个指针数组 char *p2后,程序中第一个循环 for(i=0;i2;i+)pi=chi;的作用,是使指针数组的 p0元素(它本身是一个指针)指向了二维数组 ch的第一行字符串,并使指针数组的 p1元素指向二维数组 ch的第二行字符串,这样,就使指针数组
18、 p和二维数组 ch建立起了一种对应关系,以后对二维数组 ch的某个元素的引用就有两种等价的形式:chij或 pij。于对二维数组 ch的初始化,使其第一行 ch0中存入了字符串“6937”,第二行 ch1中的内容为字符串“8254”。程序中第二个循环中的循环体 s=s*10+pij-0;的功能是这样的,每执行一次,将 s中的值乘以 10(也即将 s中的数值整体向左移动一位,并在空出来的个位上添一个 0),再将当前 pij中的字符量转换为相应的数字,然后把这个数字加到 s的个位上。注意到内层循环的循环条件 pij/0是指 pij中的字符只要不是字符串结束标志/0就继续循环,语句j+=2;是使下
19、标 j每次增加 2,也即一个隔一个地从 pi所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从 p0所指向的字符串“6937”中一个隔一个地取出字符,分别是6和3,然后从 D1所指向的字符串“8254”中一个隔一个地取出字符,分别是8和5,同时经过转换和相加运算后,结果 s中的值应该是 6385。23.有定义语句:char s10;,若要从终端给 s输入 5个字符,错误的输入语句是( )。(分数:2.00)A.gets(s0);B.scanf(“%s“,s+1);C.gets(s);D.scanf(“%s“,s1); 解析:解析 在格式输入中,要求给出的是变量的地址,而 D)答案
20、中给出的 s1是一个值的表达式。24.若变量均已正确定义并赋值,以下合法的 C语言赋值语句是( )。(分数:2.00)A.x=y; B.x=n5%2.5;C.x+n=i;D.x=5=4+1;解析:解析 赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项 C)和 D)错误。“%”运算符两侧都应当是整型数据,选项 B)错误。25.当变量 C的值不为 2、4、6 时,值也为“真”的表达式是( )。(分数:2.00)A.(c=2)(c=4)(c=6)B.(c=2c=6)(c!=3)(c!=5) C.(c=2c=6)!(c%2)D.(c=2c=6)(c%2!=1)解析:解析 本题主要考查
21、的是逻辑表达式。选项 A)中表达式的意思是:当 c等于 2或 4或 6时,表达式的值为真,苔则为假。所以不满足题意。选项 C)中表达式的意思是:当 c大于等于 2且小于等于 6,并且 c不是奇数时,表达式的值为真,否则为假。这样,满足该表达式的 c,只能取值为 2、4、6 了,所以也不满足题意。选项 D)中后面一个子表达式(c%2!=1)和选项 C)中的!(c%2)是等价的。都是判断 c不是奇数。因此也不满足题意。故本题正确答案为 B)。26.以下选项中,不能作为合法常量的是( )。(分数:2.00)A.1.234e04B.1.234e0.4 C.1.234e+4D.1.234e0解析:解析
22、C 语言的语法规定,字母 e(E)之前必须有数字,且 e(E)后面的指数必须是整数,而选项 B)中,e(E)后面的指数是小数,所以不合法。27.栈和队列的共同特点是( )。(分数:2.00)A.都是先进先出B.都是先进后出C.只允许在端点处插入和删除元素 D.没有共同点解析:解析 考查对栈和队列概念的掌握。栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种“后进先出”的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种“先进先出”的线性表。28.以下程序的输出结果是( )。#includestd
23、io.hstruct stint x;int *y;*p;int dt4=10,20,30,40;struct st aa4=50,dt0,60,dt0,60,dt0,60,dt0main()p=aa;printf(“%d/n“,+(p-x);(分数:2.00)A.10B.11C.51 D.60解析:解析 考查结构体成员数据的引用方法。通过指针来引用结构体成员的方法是(指针变量)一结构体成员名。29.下列程序执行后的输出结果是( )。void func1(int i);void func2(int i);char st=“hello, friend!“;void func1(int i)pri
24、ntf(“%c“,sti);if(i3)(i+=2;func2(i);void func2(int i)printf(“%c“,sti);if(i3m+=2;func1(i);main()int i=0;func1(i);printf(“/n“);(分数:2.00)A.hlloB.heelC.hlo D.hlm解析:解析 考查函数的调用。函数调用的一股形式为:函数名(实参列表)。首先调用函数 func1(0),输出 st0=h。i 值变为 2,并调用函数 func2(2),输出 st2=i值此时变为 4,又调用函数 func1(4),输出 st4=0。此时 i值大于等于 3,执行完毕,因此,输
25、出结果为 hlo。30.设有下列二叉树:(分数:2.00)A.ZBTYCPXAB.ATBZXCYP C.ZBTACYXPD.ATBZXCPY解析:解析 本题考查二叉树的遍历。所谓二叉树的前序遍历(DLR)是指在访问根结点、遍历左子树与遍历右子树这 3者中,首先访问根结点,然后遍历左子树,最后遍历右子树,并且,在遍历左右子树时,上述规则同样适用,即“根左右”,故该二叉树的前序遍历结果为“ATBZXCYP”。31.有以下程序:main()int i,s=1;for(i=1;i50;i+)if(!(i%5)!(i%3)s+=i;printf(“%d/n“,s);程序的输出结果是( )。(分数:2.0
26、0)A.409B.277C.1D.91 解析:解析 本题是计算 50之内的自然数相加之和,题中 if语句括号中的条件表达式!(1%5)!(1%3)表明只有能同时被 5和 3整除的数才符合相加的条件,149 之间满足这个条件的只有 15、30 和 45,因为s的初始值为 1,所以 s=1+15+30+45=91。32.C语言结构体类型变量在程序运行期间( )。(分数:2.00)A.TC环境在内存中仅仅开辟一个存放结构体变量地址的单元B.所有的成员一直驻留在内存中 C.只有最开始的成员驻留在内存中D.部分成员驻留在内存中解析:解析 结构体类型的变量在程序运行期间要作为一个整体占用连续的内存单元。3
27、3.有如下程序:#includestdio.hmain()char c1,c2,c3,c4,c5,c6;scanf(“%c%c%c%c“,c1,c2,c3,c4);c5=getchar();c6=getchar();putchar(c1);putchar(c2);printf(“%c%c/n“,c5,c6);程序运行后,若从键盘输入(从第 1列开始):123回车45678回车则输出结果是( )。(分数:2.00)A.1267B.1256C.1278D.1245 解析:解析 本题考查的是字符输入输出函数的应用。getchar()函数只能接收一个字符,即使输入多个字符后再按回车还是只能将第一个字符
28、读入。scanf()和 printf()是按格式输入输出的函数,当输入123回车,scanf()分别读入字符“1”、“2”、“3”、“回车”;接下来输入 45678回车,则 getchar()读入字符“4”赋值给 c5,字符“5”赋值给 c6,所以输出语句输出结果为 1245。故本题答案为 D)。34.以下不属于对象的基本特点的是( )。(分数:2.00)A.分类性B.多态性C.继承性 D.封装性解析:解析 对象的基本特点:标识唯一性、分类性、多态性、封装性和模块独立性。35.有定义语句:int x,y;。若要通过 scanf(“%d,%d“,x,y);语句使变量 x得到数值 11,变量y得到
29、数值 12,下面四组输入形式中,错误的是( )。(分数:2.00)A.11 12 B.11,12C.11,12D.11,12解析:解析 本题的考查点是格式输入函数。格式输入函数的一般形式:scanf(格式控制,地址表列)。需要注意的是:如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。所以输入的两个数字之间的逗号是不可少的。故本题答案为 A)。36.在位运算中,操作数每右移一位,其结果相当于( )(分数:2.00)A.操作数乘以 2B.操作数除以 2 C.操作数除以 16D.操作数乘以 16解析:解析 本题考查的知识点是:右移运算。根据右移运算的
30、原理,右移一位相当于操作数缩小为原来的二分之一,故本题选 B)。37.有三个关系 R、S 和 T如下:(分数:2.00)A.并B.自然连接C.笛卡儿积D.交 解析:解析 关系 R与 S经交运算后所得到的关系 T是由那些既在 R内又在 S内的有序组所组成。38.有以下程序:#includestdio.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/n“,i1,i2);程序的运行结果是( )。(分数:2.00)A.12 12B.11 7 C.11 11D.12 7解析:
31、解析 根据宏替换的替换规则,我们可知,f(2)=2*N+1=2*5+1=11,f(1+1)=1+1*N+1=1+1*5+1=7。39.有以下程序:#includestdio.hmain()int y=9;for(;y0;y-)if(y%3=0)printf(“%d“,-y);程序的运行结果是( )。(分数:2.00)A.741B.963C.852 D.875421解析:解析 本题考查变量的自加“+”和自减“-”问题。当 y的值为 9、6 或 3时,if 语句的条件成立,执行输出语句,输出表达式-y 的值,y 的自减要先于输出语句执行,故输出结果为 8 5 2。40.请阅读以下程序:#inclu
32、destdio.hmain()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 2:a+,b+;break;printf(“a=%d,b=%d/n“,a,b);上面程序的输出结果是( )。(分数:2.00)A.a=2,b=1 B.a=1,b=1C.a=1,b=0D.a=2,b=2解析:解析 考查 switch语句的使用。switch 语句的执行过程为:进入 switch结构后,对条件表达式进行运算,然后从上至下去找与条件表达式值相匹配的 case,以此作为入口,执行 switch结构中后面的各语句,直到遇到 br
33、eak语句,则跳出 switch语句,如果各 case都不匹配时,则执行 default后面的语句。二、填空题(总题数:15,分数:30.00)41.在长度为 n的线性表中,寻找最大项至少需要比较 1 次。(分数:2.00)填空项 1:_ (正确答案:1 或一)解析:解析 在进行顺序查找过程中,如果线性表中的第一个元素就是被查找元素,则只需做一次比较就查找成功,查找效率最高;但如果被查的元素是线性表中的最后一个元素,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中所有的元素进行比较,这是顺序查找的最坏情况。所以对长度为 n的线性表进行顺序查找,在最坏情况下需要比较 n次。在本题中
34、,如果最大项在第 1个,那么寻找最大项至少需要比较 1次。42.某二叉树中度为 2的结点有 n个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:n+1)解析:解析 在任意一棵二叉树中,度为 0的结点(即叶子结点)总是比度为 2的结点多一个。43.常用的黑箱测试有等价分类法、 1、因果图法和错误推测法 4种。(分数:2.00)填空项 1:_ (正确答案:边值分析法)解析:解析 黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法。44.数据库管理系统常见的数据模型有层次模型、网
35、状模型和 13 种。(分数:2.00)填空项 1:_ (正确答案:关系模型)解析:解析 数据库管理系统是位于用户与操作系统之间的一层系统管理软件,属于系统软件是用户与数据库之间的一个标准接口,其总是基于某种数据模型,可以分为层次模型、网状模型和关系模型。45.在 E-R图中,矩形表示 1。(分数:2.00)填空项 1:_ (正确答案:实体)解析:解析 在 E-R图中用矩形表示实体;椭圆形表示属性;菱形表示联系。46.设变量 a和 b已正确定义并赋初值。请写出与 a-=a+b等价的赋值表达式 1。(分数:2.00)填空项 1:_ (正确答案:a=-b)解析:解析 本题考查的是复合赋值运算符。“m
36、-=n“相当于“m=m-n”。所以,a-=a+b 就相当于 a=a-(a+b)=-b。47.以下程序的输出结果是_。main()char c=z;printf(“%c“,c-25);(分数:2.00)填空项 1:_ (正确答案:a)解析:解析 z的 ASC码值为 122,经过 c-25运算后,得 97,以字符形式输出是 a。48.以下程序运行后的输出结果是_。main()int a,b,c;a=25;b=025;c=0x25;printf(“%d%d%d/n“,a,b,c);(分数:2.00)填空项 1:_ (正确答案:25 21 37)解析:解析 本题考核的知识点是整型数的表示和 print
37、f()函数的输出格式。本题中先定义了整型变量a、b 和 c,然后分别给赋值 a为 25,b 为八进制的 025,c 为十六进制 0x25。然后调用 printf()函数将a、b 和 c分别用十进制输出,且中间用空格隔开,八进制 025转换为十进制的值为 21,十六进制的 0x25转换为十进制的值为 37,故最后的输出结果为 25 21 37。49.以下程序运行后的输出结果是_。main()int x,a=1,b=2,c=3,d=4;x=(ab)?a:b:x=(xc)?x:c:x=(dx)?x:d;printf(“%d/n“,x);(分数:2.00)填空项 1:_ (正确答案:1)解析:解析 本
38、题考核的知识点是条件运算符的运用。三目运算表达式的规则为如果“?”前面表达式的值为真,则取“:”前的表达式的值,否则,取“:”后面表达式的值。在本例中,因为(ab)为真,所以 x=a=1;然后(xc)也为真,所以 x=x值不变;最后(dx)为真,所以还是 x=x值不变。故最后输出的结果是 1。50.以下程序运行后的输出结果是_。main()int a=1,b=2,c=3;if(c=a)printf(“%d/n“,c);else printf(“%d/n“,b);(分数:2.00)填空项 1:_ (正确答案:1)解析:解析 本题是一个陷阱题。在 if语句的判断表达式中,使用的不是逻辑运算符=而是
39、赋值运算符=,使该表达式返回的结果正好相反。如果是 c=a,则结果为假。但是 c=a则是将 a赋给 c,且表达式的结果是赋值之后的 c的值,因此结果为 1是真。故最后输出 c的值 1。51.下面程序的功能是:计算 110 之间的奇数之和与偶数之和,请填空。#includestdio.hmain()int a,b,c,i;a=c=0;for(i=0;i=10;i+=2)a+=i;_;c+=b;printf(“偶数之和=%d“,a);printf(“奇数之和=%d“,c-11);(分数:2.00)填空项 1:_ (正确答案:b=i+1)解析:解析 本题考查了 for循环语句的执行过程。i+=2 是
40、修正表达式,执行一次循环体后 i的值就增加 2,i 的初始值为 0,每次加 2后的和累加至 a,所以 a的值就是 110 之间的偶数之和;b 的值是111 之间的奇数和,但在输出 b值时,c 去掉多加的 11,即为 110 之间的奇数之和。52.以下程序运行后的输出结果是_。main()char a=“123456Y89“,*p;int i=0;p=a;while(*p)if(i%2=0)*p=*;p+;i+;puts(a);(分数:2.00)填空项 1:_ (正确答案:*2*4*6*8*)解析:解析 本题考核的知识点是字符数组的定义、初始化和对该数组中元素的操作。程序中定义了一个字符数组 a
41、,并初始化为 123456789,接着定义了一个指针 p并让它指向数组 a,紧接着执行了一个while循环,此循环的作用是:当 i为偶数时,将“*”赋给 ai,p 指向数组末尾,循环结束,此时数组中 a0、a2、a4、a6和 a8的值都为“*”,所以最后调用 puts()函数输出的 a的值为*2*4*6*8*。53.以下程序的输出结果是_。#includestdio.hmain()int i;for(i=a;if;i+,i+)printf(“%c“,i-a+A);printf(“/n“);(分数:2.00)填空项 1:_ (正确答案:ACE)解析:解析 在本题中,for 循环体每执行完一次,变
42、量 i的值自加两次。i 的初值为 a,执行一次循环后变为 c,之后再变成 e,当其变为 q时,循环条件若不满足,循环终止,故本题共输出 3个字符。表达式“i-a+A”即表示输出 i对应的大写字母,结果为 ACE。54.已有定义:double *p;,请写出完整的语句,利用 malloc函数使 p指向一个双精度型的动态存储单元 1。(分数:2.00)填空项 1:_ (正确答案:p=(double*)malloc(sizeof(double);或 p=(double*)malloc(8);)解析:解析 本题考查的是动态分配内存函数 malloc-|_|-。malloc-|_|-函数只有一个参数,该
43、参数指定了需要分配多少字节的内存。然后将分配好的内存块的首地址作为 void*(未知类型指针)返回。故标准的调用形式应该写成:p=(double*)malloc(sizeof(double)。55.以下程序的运行结果是_。#includestdio.hmain()FILE *fp;int a10=(1,2,3,0,O,i;fp=fopen(“d2.dat“,“wb“);fwrite(a,sizeof(int),5,fp);fwrite(a,sizeof(int),5,fp);fclose(fp);fP=fopen(“d2.dat“,“rb“);read(a,sizeof(int),10,fp);fclose(fp);for(i=0;i10;i+)printf(“%d“,ai);(分数:2.00)填空项 1:_ (正确答案:1230012300)解析:解析 本题考查文件读写函数 fread和 fwrite的用法。fwrite 函数将数组 a的前 5个元素输出到文件 fp中两次,共 10个整型数据,再调用 fread函数从文件 fp中读取这 10个整型数据到数组 a中,此时数组 a的内容就变为1,2,3,0,0,1,2,3,0,0,最后的输出结果为“1230012300”。