1、二级 C语言笔试-423 及答案解析(总分:99.00,做题时间:90 分钟)一、选择题(总题数:40,分数:63.00)1.下列叙述中正确的是 A) 线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B) 线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C) 线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 D) 上述 3种说法都不对(分数:2.00)A.B.C.D.2.下列选项中,不是一个算法的基本特征的是( )。A) 完整性 B) 可行性 C) 有穷性 D) 拥有足够的情报(分数:2.00)A.B.C.D.3.一颗二叉树中共有 70个叶子结点与 80个度为
2、 1的结点,则二叉树的总结点数为_。(A) 219(B) 221(C) 229(D) 231(分数:2.00)A.B.C.D.4.源程序的文档化不包括( )。A) 符号名的命名要有实际意义 B) 正确的文档形式C) 良好的视觉组织 D) 正确的程序注释(分数:2.00)A.B.C.D.5.关于结构化程序设计原则和方法描述错误的是( )。A) 选用的结构只准许有一个入口和一个出口B) 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C) 不允许使用 GOTO语句D) 语言中所没有的控制结构,应该采用前后一致的方法来模拟(分数:2.00)A.B.C.D.6.为了使模块尽可能独立,要求_。A) 模
3、块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B) 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强(分数:1.00)A.B.C.D.7.能将高级语言程序转换成目标语言程序的是_。A) 调试程序 B) 解释程序 C) 编译程序 D) 编辑程序(分数:1.00)A.B.C.D.8.C语言规定,在一个源程序中,main 函数的位置A) 必须在最开始 B) 必须在系统调用的库函数的后面C) 可以任意 D) 必须在最后(分数:1.00)A.B.C.D.9.下列不合法的用户标识符是
4、( )。A) j2_KEY B) Double C) 4d D) _8_(分数:1.00)A.B.C.D.10.下列选项可以正确表示字符型常量的是A) /r B) “a“ C) “/897“ D) 296(分数:1.00)A.B.C.D.11.以下程序的功能是进行位运算:main()unsigned chara,b;a=73;b= 4 break;case 1:a+;Cswitch(a)default:a+;break;case 1:a=b;Dswitch(a=1)case 1:a=b;break;case 0:a+;(分数:1.00)A.B.C.D.14.若有代数式*,(其中 P仅代表自然对
5、数的底数,不是变量),则下列能够正确表示该代数式的 C语言表达式是( )。 A) sqrt(abs(nx+ex) B) sqrt(fabs(pow(n,x)+pow(x,e) C) sqrt(fabs(pow(n,x)+exp(x) D) sqrt(fabs(pow(x,n)+exp(x)(分数:1.00)A.B.C.D.15.以下程序运行后的输出结果是 #includestdio.h main() int y=10; while(y-); printf(“y=%d/n“, y); A) y=0 B) y=-1 C) y=1 D) while构成无限循环(分数:2.00)A.B.C.D.16.
6、下列程序的输出结果是( )。main()int i=1,j=2,k=3;if(i+= =1A) 1 2 3 B) 2 3 4C) 2 2 3 D) 2 3 3(分数:2.00)A.B.C.D.17.有以下程序:#includestdio.hmain()char c1,c2,c3,c4,c5,c6;scanf(“%c%c%c%c“, main()int a=3, b=4, c=5, d;d=f(f(a, b), f(a, c);printf(“%d/n“, d);A) 10 B) 9 C) 8 D) 7(分数:2.00)A.B.C.D.19.若有定义语句:int a410,*p,*q4;且 0i
7、4,则错误的赋值是A) p=a B) qi=aiC) p=ai D) p=for(i=j=0;stri!=/0;i+)if(stri!=astrj+=stri;strj=/0;void main()char str=“abcdef“;abc(str);printf(“str=%s“,str);A) str=bcdef B) str=abcdefC) str=a D) str=ab(分数:2.00)A.B.C.D.23.下列叙述错误的是( )。A) 函数名是属于用户标识符,需符合 C语言对标识符的规定B) 形参只能是变最C) 为保证程序的正常运行,函数中定义的变量不能与其他函数中的变量同名D)
8、函数中定义的变量可以与其他函数中的变量同名(分数:1.00)A.B.C.D.24.以下程序运行后的输出结果是int f(int n)if(n=1)return 1;else return f(n-1)+1;main( )int i,j=0;for(i=1;i3;i+) j+=f(i);printf(“%d/n“,j);A) 4 B) 3 C) 2 D) 1(分数:2.00)A.B.C.D.25.有以下函数int fun(char *x,char *y)int n=0;while(*x=*y) y+; n+;return n;函数的功能是( )。A)查找 x和 y所指字符串中是否有/0B)统计
9、x和 y所指字符串中最前面连续相同的字符个数C)将 y所指字符串赋给 x所指存储空间D)统计 x和 y所指字符串中相同的字符个数(分数:2.00)A.B.C.D.26.有如下说明:int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则数值为 9的表达式是( )。A) *p+9 B) *(p+8) C) *p+=9 D) p+8(分数:1.00)A.B.C.D.27.执行以下程序后,a,b 的值分别是( )。#include stdiohmain()int a,b,k=4,m=6,*p1= B) int b35=0,0,0;C) intb4=1,2,3,4,5,6; D) int
10、 b32=(1,2) ,(3,4) ,(5,6) ;(分数:1.00)A.B.C.D.29.下列程序的运行结果是( )。#includestdio.h#includestring.hmain()char*s1=“abDuj“;char*s2=“ABdUG“;int t;t=strcmp(s1,s2);printf(“%d“,t);A) 正数 B) 负数 C) 零 D) 不确定的值(分数:2.00)A.B.C.D.30.s1和 s2已正确定义并分别指向两个字符串。若要求:当 s1所指串大于 s2所指串时,执行语句 S。则以下选项中正确的是_。A) if(s1s2)S; B) if(strcmp(
11、s1, s2)S;C) if(strcmp(s2, s1)0)S; D) if(strcmp(s1, s2)0)S;(分数:2.00)A.B.C.D.31.以下程序运行时若要正确输出函数的入口地址和输入数的绝对值,应在程序空缺处填入的正确选项是abs(int x)if(x=0)return x;else return-x;main()int y,z,(*p)(int x)=abs;scanf(“ %d“ , printf(“%d,“,p-y);printf(“%d/n“,(+p)-x);A) 10,1 B) 20,1 C) 10,2 D) 20,2(分数:2.00)A.B.C.D.33.下列描
12、述中正确的是( )。A) 在 C语言程序中预处理是指完成宏替换和文件包含指定的文件的调用B) 预处理指令只能位于 C源程序文件的首部C) 预处理命令可以放在程序中的任何位置D) 预处理命令结尾需要加分号(分数:1.00)A.B.C.D.34.有以下程序:#include stdio.hint a=2;int f(int *a)return (*a) +;main()int s=0;int a=5;s+=f(s+=f(printf(“%d/n“,s)执行后的输出结果是( )。A) 10 B) 9 C) 7 D) 8(分数:1.00)A.B.C.D.35.设有定义:char *c;,以下选项中能够
13、使字符型指针 c正确指向一个字符串的是A) char str=“string“;c=str;B) scarf(“%s“,c);C) c=getchar();D) *c=“string“;(分数:2.00)A.B.C.D.36.设 int x=7,则x 的值是( )。A) -8 B) -7 C) -1 D) 1(分数:1.00)A.B.C.D.37.已定义以下函数:fun(int*p)return *p; 该函数的返回值是 _。A) 不确定的值B) 形参 p中存放的值C) 形参 p所指存储单元中的值D) 形参 p的地址值(分数:2.00)A.B.C.D.38.若文本文件 filea.txt中原有
14、内容为:hello,则运行以下程序后,文件 filea.txt中的内容为#includestdio.hmain()EILE *f;f=fopen(“filea.txt“, “w“);fprintf(f, “abc“);fclose(f);A) helloabc B) abclo C) abc D) abchello(分数:2.00)A.B.C.D.39.请读程序:#include stdio.hint a=2,4,6,8,;main()int i;int *p=a;for( i=0;i4;i+) ai=*p+;priatf(“%d/n“,a2);上面程序的输出结果是( )。A) 6 B) 8
15、C) 4 D) 2(分数:2.00)A.B.C.D.40.有以下程序#includestdio.h#includestring.htypedef structchar name9;char sex;float score2;)STU;STU f(STU a)STU b=“Zhao“,in,85.0,90.0);int i;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;i2;i+) a.scorei=b.scorei;return a;main()STU c=“Qian“,f,95.0,92.0,d;d=f(c);printf(“%s,%c,%2.0f,%2
16、.0f“,d.name,d.sex,d.score0,d.score1);程序的运行结果是( )。Aqian,f,95,92 Bqian,m,85,90CZhaO,m,85,90 DZhao,f,95,92(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:36.00)41.注释说明了程序的功能,它分为U /U注释和功能性注释。(分数:2.00)填空项 1:_42.在 1 个容量为 32的循环队列中,若头指针 front3,尾指针 rear2,则该循环队列中共有 2 个元素。(分数:2.00)填空项 1:_43.以下函数 rotate的功能是:将 a所指 N行 N列的二维数组中的
17、最后一行放到 b所指二维数组的第 0列中,把 a所指二维数组中的第 0行放到 b所指二维数组的最后一列中,b 所指二维数组中其他数据不变。# define N 4void rotate(int aN, int bN)int i, j;for(i=0; iN; i+)biN-1=a0i;U /U=aN-1i;(分数:2.00)填空项 1:_44.栈的 3种基本运算是:入栈、退栈和 1。(分数:2.00)填空项 1:_45.x和 y都是 double型变量,x 的初值为 4.0,y的初值为 2.0,则表达式 pow(y.fabs(x)的值为 1。(分数:2.00)填空项 1:_46.表示“整数 x
18、的绝对值大于 5”时值为“假”的 C语言表达式是 1。(分数:2.00)填空项 1:_47.设变量已正确定义为整型,则表达式 n=i=2,+i,i+的值为 1。(分数:2.00)填空项 1:_48.下列程序运行时输入 1234567CR,则输出结果是_。#includestdio.hmain()int a=1,b;scanf(“%2d%2d“,sum=count=0;for(i=0; i20; i+)scanf(“% d“,U /U);for(i=0; i20; i+)if(ai0)count+;sum+=ai;printf(“sum=% d, count=% d/n“, sum, count
19、);(分数:2.00)填空项 1:_50.已有定义如下:struct nodeint data;struct node *next;*p;以下语句调用 malloc函数,使指针 p指向一个具有 struct node类型的动态存储空间。请填空。p=(struct node *)malloc(U /U);(分数:2.00)填空项 1:_51.以下程序运行后的输出结果是U /U。#include stdio.hmsin()int i,n=0,0,0,0,0;for(i=1;i=4;i+)ni=ni-1*2+1;printf(“%d“,ni);(分数:2.00)填空项 1:_52.有下面的程序:#i
20、nclude stdio, hmain ( )enum team my,your=4,his,her=his+10;prinff(“ % d %d %d %d /n“ ,my,your,his,her);此程序的输出结果是U /U。A) 0 1 2 3 B) 0 4 0 1 0 C) 0 4 5 1 5 D) 1 4 5 1 5(分数:2.00)填空项 1:_53.以下程序中函数 huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出,所谓回文即正向与反向的拼写都一样,例如:adgda,请填空。#include c
21、har *huiwen(char *str)char *p1,*p2;int i,t=0;p1=str; p2=_;for(i=0;i=strlen(str)/2;i+)if(*p1+!=*p2-)t=1;break;if(t=0)return(“yes!“);else return(“no!“);main()char str50;printf(“Input:“);scanf(“%s“,str);printf(“%s/n“, huiwen(str);(分数:2.00)填空项 1:_54.下面 rotate函数的功能是:将 n行 n列的矩阵 A转置 A,例如(分数:8.00)填空项 1:_55.
22、在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_二级 C语言笔试-423 答案解析(总分:99.00,做题时间:90 分钟)一、选择题(总题数:40,分数:63.00)1.下列叙述中正确的是 A) 线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B) 线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C) 线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 D) 上述 3种说法都不对(分数:2.00)A.B. C.D.解析:解析 本题考查线性表的存储结构。顺序存储结构只存储结点数据,而链式存储结构不仅要存储结点数据,还要存储指向下一个结点的指针
23、,所以线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构。选项 B正确。2.下列选项中,不是一个算法的基本特征的是( )。A) 完整性 B) 可行性 C) 有穷性 D) 拥有足够的情报(分数:2.00)A. B.C.D.解析:解析 作为一个算法,一般应该具有下列 4个特征:可行性,即考虑到实际的条件能够达到一个满意的结果;确定性,算法中的第一个步骤都必须是有明确定义的;有穷性,一个算法必须在有限的时间内做完;拥有足够的情报。3.一颗二叉树中共有 70个叶子结点与 80个度为 1的结点,则二叉树的总结点数为_。(A) 219(B) 221(C) 229(D) 231(分数:2.00)A.
24、 B.C.D.解析:4.源程序的文档化不包括( )。A) 符号名的命名要有实际意义 B) 正确的文档形式C) 良好的视觉组织 D) 正确的程序注释(分数:2.00)A.B. C.D.解析:解析 源程序的文档化主要包括 3点:符号名应具有一定实际的含义,便于理解程序功能;正确的程序注释;良好的视觉组织(利用空格、空行、缩进等技巧使程序层次清晰)。5.关于结构化程序设计原则和方法描述错误的是( )。A) 选用的结构只准许有一个入口和一个出口B) 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C) 不允许使用 GOTO语句D) 语言中所没有的控制结构,应该采用前后一致的方法来模拟(分数:2.00
25、)A.B.C. D.解析:解析 限制使用 GOTO语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用 GOTO语句。其他 3项为结构化程序设计的原则。6.为了使模块尽可能独立,要求_。A) 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B) 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强(分数:1.00)A.B. C.D.解析:解析 衡量模块的独立程度使用耦合性和内聚性两个定性的度量标准。内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。内聚性是从功能角
26、度来度量模块内的联系。模块内聚的程度越高,越独立。耦合性是模块间互相连接的紧密程度的度量。耦合程度越低,越独立。7.能将高级语言程序转换成目标语言程序的是_。A) 调试程序 B) 解释程序 C) 编译程序 D) 编辑程序(分数:1.00)A.B.C. D.解析:评析 用高级语言编写的程序称为“源程序”,而计算机只能识别和执行由 O和 1组成的二进指令,所以高级语言必须先用种称为“编译程序”的软件,把源程序翻译成二进制形式的“目标程序”。8.C语言规定,在一个源程序中,main 函数的位置A) 必须在最开始 B) 必须在系统调用的库函数的后面C) 可以任意 D) 必须在最后(分数:1.00)A.
27、B.C. D.解析:解析 C 程序总是从 main函数开始执行,但 main函数在程序中的位置可以是任意的。9.下列不合法的用户标识符是( )。A) j2_KEY B) Double C) 4d D) _8_(分数:1.00)A.B.C. D.解析:解析 在 C语言程序中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。10.下列选项可以正确表示字符型常量的是A) /r B) “a“ C) “/897“ D) 296(分数:1.00)A. B.C.D.解析:解析 C 语言中,一个字符常量代表 ASCII字符集中的一个字符,在程序中用单引号括起来作为
28、字符常量,字符常量的的范围是 0127。由于字符常量用单引号括起来,所以选项 B),C)错误,选项 D)超过了字符常量的表示范围。11.以下程序的功能是进行位运算:main()unsigned chara,b;a=73;b= 4 break;case 1:a+;Cswitch(a)default:a+;break;case 1:a=b;Dswitch(a=1)case 1:a=b;break;case 0:a+;(分数:1.00)A.B. C.D.解析:解析 题中当 a的值为 1时,关系表达式 a=1的值为真即 1,因此程序将跳转到 case1执行a+操作,与题干程序刚好相反。14.若有代数式
29、*,(其中 P仅代表自然对数的底数,不是变量),则下列能够正确表示该代数式的 C语言表达式是( )。 A) sqrt(abs(nx+ex) B) sqrt(fabs(pow(n,x)+pow(x,e) C) sqrt(fabs(pow(n,x)+exp(x) D) sqrt(fabs(pow(x,n)+exp(x)(分数:1.00)A.B.C. D.解析:解析 n 和 e的 x幂次方,要分别调用 C语言的数学库函数 double pow(n,x)和 double exp(x),因为这两个函数的返回值都为 double型,对两者的和计算绝对值,调用库函数 doublefabs(pow(n,x)+
30、exp(x),求出和的绝对值,再调用开平方函数 doublesqrt(fabs(pow(n,x)+exp(x),这样计算出的结果就是题干中表达式的值。15.以下程序运行后的输出结果是 #includestdio.h main() int y=10; while(y-); printf(“y=%d/n“, y); A) y=0 B) y=-1 C) y=1 D) while构成无限循环(分数:2.00)A.B. C.D.解析:解析 程序中 while循环的条件是“y-”,循环体是一条空语句。条件中,“-”后置,所以先取出 y的值进行条件判断,然后再对 y进行减 1的操作,因此当 y的值等于 0时
31、,循环条件为假先终止循环,再对 y进行减 1的操作,所以 y的值变为了-1。16.下列程序的输出结果是( )。main()int i=1,j=2,k=3;if(i+= =1A) 1 2 3 B) 2 3 4C) 2 2 3 D) 2 3 3(分数:2.00)A.B.C.D. 解析:解析 本题考查自增运算符“+”、逻辑与运算符“ main()int a=3, b=4, c=5, d;d=f(f(a, b), f(a, c);printf(“%d/n“, d);A) 10 B) 9 C) 8 D) 7(分数:2.00)A.B. C.D.解析:解析 d=f(f(a, b),f(a, c);中,将 a
32、、b、c 的值分别代入 f(a, b)和 f(a, c),d=f(f(3, 4),f(3, 5);。f(3, 4)调用,返回 3;f(3, 5)调用,返回 6;再进行 f(3, 6)调用,返回 9。19.若有定义语句:int a410,*p,*q4;且 0i4,则错误的赋值是A) p=a B) qi=aiC) p=ai D) p=for(i=j=0;stri!=/0;i+)if(stri!=astrj+=stri;strj=/0;void main()char str=“abcdef“;abc(str);printf(“str=%s“,str);A) str=bcdef B) str=abcd
33、efC) str=a D) str=ab(分数:2.00)A. B.C.D.解析:解析 本题考查函数调用时的参数传递。通过函数 abc的执行,将字符串中的字母 a去掉,保留剩下的。由于是通过指针调用,所以改变字符串的结果。23.下列叙述错误的是( )。A) 函数名是属于用户标识符,需符合 C语言对标识符的规定B) 形参只能是变最C) 为保证程序的正常运行,函数中定义的变量不能与其他函数中的变量同名D) 函数中定义的变量可以与其他函数中的变量同名(分数:1.00)A.B.C. D.解析:解析本题考查函数调用时参数的作用域。在函数调用时,函数体内定义的变量的作用域连函数体内,因而在不同函数体内定义
34、的变量可以相同,不影响各个变量的使用。24.以下程序运行后的输出结果是int f(int n)if(n=1)return 1;else return f(n-1)+1;main( )int i,j=0;for(i=1;i3;i+) j+=f(i);printf(“%d/n“,j);A) 4 B) 3 C) 2 D) 1(分数:2.00)A.B. C.D.解析:解析 在 main函数中,j 的值是对 f(1)和 f(2)的值进行累加的结果。本题中,f(1)=1,f(2)=f(1)+1=2,j 的值为 1+2=3。25.有以下函数int fun(char *x,char *y)int n=0;wh
35、ile(*x=*y) y+; n+;return n;函数的功能是( )。A)查找 x和 y所指字符串中是否有/0B)统计 x和 y所指字符串中最前面连续相同的字符个数C)将 y所指字符串赋给 x所指存储空间D)统计 x和 y所指字符串中相同的字符个数(分数:2.00)A.B. C.D.解析:解析 在 while循环中的判断表达式为(*x=*y)则数值为 9的表达式是( )。A) *p+9 B) *(p+8) C) *p+=9 D) p+8(分数:1.00)A.B. C.D.解析:解析 数组元素 a0可以用表达式。(p+0),即*p 来引用;数组元素 a1可以用表达式*(p+1)来引用,在这里
36、,p+1 的值就是数组元素 a1的地址,*(p+1)就代表存储单元 a1,这里的一对圆括号不可少。同样,数组元素 a9可以用表达式。(p+9)引用。因此,当指针变量 p指向 a数组的起始地址时,若 0i10,则数组元素 ai可以用*(p+i)来表示。27.执行以下程序后,a,b 的值分别是( )。#include stdiohmain()int a,b,k=4,m=6,*p1= B) int b35=0,0,0;C) intb4=1,2,3,4,5,6; D) int b32=(1,2) ,(3,4) ,(5,6) ;(分数:1.00)A.B.C.D. 解析:解析 在对二维数组元素赋初值时,可
37、以只对部分元素赋初值,未赋初值的元素自动取 0;C 语言规定,对于二维数组,只可以省略第 1个方括号中的常量表达式,而不能省略第 2个方括号中的常量表达式;赋的初值不能多于事先定义好的数组元素个数。在选项 D)赋值表达式中对每一维的元素赋初值应用 ,而不是()。29.下列程序的运行结果是( )。#includestdio.h#includestring.hmain()char*s1=“abDuj“;char*s2=“ABdUG“;int t;t=strcmp(s1,s2);printf(“%d“,t);A) 正数 B) 负数 C) 零 D) 不确定的值(分数:2.00)A. B.C.D.解析:
38、解析 本题考查字符串比较函数和两个字符串比较的原则两个知识点:原则是依次比较两个字符串同一位置的一对字符,若它们的 ASCII码值相同,则继续比较下一对字符,若它们的 ASCII码值不同,则 ASCII 码值较大的字符所在的字符串较大;若所有字符相同,则两个字符串相等;若一个字符串全部i个字符与另一个字符串的前 i个字符相同,则字符串较长的较大。strcmp(s1,s2)的返回值,当str1str2 时,返回值0;当 str1=str2时,返回值为 0;当 str1str2,返回值0。30.s1和 s2已正确定义并分别指向两个字符串。若要求:当 s1所指串大于 s2所指串时,执行语句 S。则以
39、下选项中正确的是_。A) if(s1s2)S; B) if(strcmp(s1, s2)S;C) if(strcmp(s2, s1)0)S; D) if(strcmp(s1, s2)0)S;(分数:2.00)A.B.C.D. 解析:解析 C 语言中,用 strcmp(s1,s2)来比较串 s1和 s2的大小,当 s1s2 时,strcmp 的值为正数;当 s1=s2时,strcmp 的值为 0;当 s1s2 时,strcmp 的值为负数。因此 D选项的 if语句正确。31.以下程序运行时若要正确输出函数的入口地址和输入数的绝对值,应在程序空缺处填入的正确选项是abs(int x)if(x=0)
40、return x;else return-x;main()int y,z,(*p)(int x)=abs;scanf(“ %d“ , printf(“%d,“,p-y);printf(“%d/n“,(+p)-x);A) 10,1 B) 20,1 C) 10,2 D) 20,2(分数:2.00)A.B.C. D.解析:解析 正确地给结构体数组赋初值,data0.x=1、data0.y=10、data1.x=2、data1.y=20;首先,p 指向 data0,第一条打印语句输出 p-y,即 data0.y的值 10;(+p)-x 含义是先+p,此时 p指向 data1,第二条打印语句输出(+p)
41、-x,即 dala1.x的值 2。33.下列描述中正确的是( )。A) 在 C语言程序中预处理是指完成宏替换和文件包含指定的文件的调用B) 预处理指令只能位于 C源程序文件的首部C) 预处理命令可以放在程序中的任何位置D) 预处理命令结尾需要加分号(分数:1.00)A.B.C. D.解析:解析本题考查预处理命令的特点,编译预处理命令的特点:为了区别一般的语句,预处理命令行都必须以“#”号开始,结尾不加分号;预处理命令可以放在程序中的任何位置;在程序中凡是以“#”号开始的语句行都是预处理命令行。34.有以下程序:#include stdio.hint a=2;int f(int *a)retur
42、n (*a) +;main()int s=0;int a=5;s+=f(s+=f(printf(“%d/n“,s)执行后的输出结果是( )。A) 10 B) 9 C) 7 D) 8(分数:1.00)A.B.C. D.解析:解析 在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用这些变量。对于 main函数中的int a=5;s+=f(,a 只在花括号内有效。在函数之外定义的变量称为外部变量,外部变量是全局变量,它的有效范围是从定义该变量的位置开始到本源文件结束。程序开头的定义 int a=2;使 a成为全局变量,main 函数中第二个 s+ =f( 该函
43、数的返回值是 _。A) 不确定的值B) 形参 p中存放的值C) 形参 p所指存储单元中的值D) 形参 p的地址值(分数:2.00)A.B.C. D.解析:解析 函数 fun的形参是指针变量,*p 的含义是指针变量 p所指存储单元的内容,因此正确答案为 C。38.若文本文件 filea.txt中原有内容为:hello,则运行以下程序后,文件 filea.txt中的内容为#includestdio.hmain()EILE *f;f=fopen(“filea.txt“, “w“);fprintf(f, “abc“);fclose(f);A) helloabc B) abclo C) abc D) a
44、bchello(分数:2.00)A.B.C. D.解析:解析 “w“表示建立一个供写入的文件。如果文件不存在,则系统将用在 fopen调用中指定的文件名建立一个新文件;如果指定的文件已存在,则将从文件的起始位置开始写入,文件中原有的内容将全部消失。39.请读程序:#include stdio.hint a=2,4,6,8,;main()int i;int *p=a;for( i=0;i4;i+) ai=*p+;priatf(“%d/n“,a2);上面程序的输出结果是( )。A) 6 B) 8 C) 4 D) 2(分数:2.00)A. B.C.D.解析:解析 本题考查通过指针引用数组元素。程序通
45、过 ai=*p+;语句,循环地将 2赋给 a0,4赋给 a1,6 赋给 a2,8 赋给 a3,所以输出结果为 6。40.有以下程序#includestdio.h#includestring.htypedef structchar name9;char sex;float score2;)STU;STU f(STU a)STU b=“Zhao“,in,85.0,90.0);int i;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;i2;i+) a.scorei=b.scorei;return a;main()STU c=“Qian“,f,95.0,92.0,
46、d;d=f(c);printf(“%s,%c,%2.0f,%2.0f“,d.name,d.sex,d.score0,d.score1);程序的运行结果是( )。Aqian,f,95,92 Bqian,m,85,90CZhaO,m,85,90 DZhao,f,95,92(分数:1.00)A.B.C. D.解析:解析 f()函数的功能是对形参 a的各个成员用结构体变量 b的各个成员进行赋值后,返回变量a。二、填空题(总题数:15,分数:36.00)41.注释说明了程序的功能,它分为U /U注释和功能性注释。(分数:2.00)填空项 1:_ (正确答案:序言性)解析:评析 注释一般分为序言性注释和功能性注释。42.在 1 个容量为 32的循环队列中,若头指针 front3,尾指针 rear2,则该循环队列中共有 2 个元素。(分数:2.00)填空项 1:_ (正确答案:31)解析:解析 设队列容量为 m,如果:rearfront,则队列中元素个数为 rear-front;如果rearfront,则队列中元素个数为 m+(rear-front)。本题 rearfront,则 m32+(2-3)31。43.以下函数 rotate的功能是:将 a所指 N行 N列的二维数组中的最后一行放到 b所指二维数组的第 0列中,