1、二级 C 语言-30 及答案解析(总分:74.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:48.00)1.开发软件时对提高开发人员工作效率至关重要的是 U /U A. 操作系统的资源管理功能 B. 先进的软件开发工具和环境 C. 程序人员的数量 D. 计算机的并行处理能力(分数:1.00)A.B.C.D.2.以下选项中,能定义 s 为合法的结构体变量的是U /U。 A. typedef struct abc double a; char b10; s; B. struct double a; char b10; s; C. struct ABC double a; cha
2、r b10; ABC s; D. typedef ABC double a; char b10; ABC s;(分数:1.00)A.B.C.D.3.一个算法应该具有“确定性”等 5 个特性,下面对另外 4 个特性的描述中错误的是( ) A.有零个或多个输入 B.有零个或多个输出 C.有穷性 D.可行性 (分数:1.00)A.B.C.D.4.以下不能将 s 所指字符串正确复制到 t 所指存储空间的是_。 A.do*t+=*s+;while(*s); B.for(i=0; ti=si; i+); C.while(*t=*s)t+; s+; D.for(i=0, j=0; ti+=sj+; );(分
3、数:4.00)A.B.C.D.5.下列选项中合法的赋值语句是U /U。 A. a-b34 B. a34,b34 C. i-1; D. m(int)(x+y);(分数:1.00)A.B.C.D.6.有以下程序:#includestdio.hmain()FILE*fp;int a10=1,2,3,i,n;fp=fopen(“d1.dat“,“w“);for(i=0;i3;i+)fprintf(fp,“%d“,ai);fprintf(fp,“/n“);fclose(fp);fp=fopen(“d1.dat“,“r“);fscanf(fp,“%d“,n);fclose(fp);printf(“%d/n
4、“,n);程序运行后的输出结果是_。 A.321 B.12300 C.1 D.123(分数:1.00)A.B.C.D.7.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是U /U。 A. DB 包括 DBS 和 DBMS B. DBMS 包括 DB 和 DBS C. DBS 包括 DB 和 DBMS D. 没有任何关系(分数:2.00)A.B.C.D.8.下列选项中不属于结构化程序设计方法的是U /U。 A. 自顶向下 B. 逐步求精 C. 模块化 D. 可复用(分数:2.00)A.B.C.D.9.有定义语句:char s10;,若要从终端给 s 输入 5 个字符,错误
5、的输入语句是 A. gets(则表达式“x=y|yzint num;;void f1(struct STU c) struct STU b=“LiSiGuo“,2042);c=b;void f2(struct STU *c) struct STU b=“SunDan“,2044);*c=b;main()struct STU a=“YangSan“,2041,b=“WangYin“,2043);f1(a);f2(printf(“%d %d/n“,a.num,b.num);执行后输出结果是( )。 A. 2041 2044 B. 2041 2043 C. 2042 2044 D. 2042 204
6、3(分数:1.00)A.B.C.D.20. A. *s B. s C. *s+ D. (*s)+(分数:1.00)A.B.C.D.21.下面对对象概念描述错误的是 A. 任何对象都必须有继承性 B. 对象是属性和方法的封装体 C. 对象间的通讯靠消息传递 D. 操作是对象的动态属性(分数:1.00)A.B.C.D.22.有以下程序: #includestdio.h main() int x; scanf (“%d“,printf( % d, % d/n“, strlen(s),sizeof(s);执行后的输出结果是 _。 A. 赋初值的字符串有错 B. 6,7 C. 5,6 D. 6,6(分数
7、:2.00)A.B.C.D.25.C 语言规定,在一个源程序中,main 函数的位置U /U。 A. 必须在最开始 B. 必须在系统调用的库函数的后面 C. 可以任意 D. 必须在最后(分数:1.00)A.B.C.D.26.以下程序的输出结果是_。#inludestdio.hmain() int a=2,b=5;printf(“a=%d,b=%d/n“,a,b); A. a=2,b=5 B. a=%2,b=%5 C. a=%d,b=%d D. a=%d,b=%d(分数:1.00)A.B.C.D.27.有以下程序#includestdiohmain() FILE*fp;int i=20,j=30
8、,k,n;fp=fopen(“d1dat”,“w”);fprintf(fp,“%d/n”,i);fprintf(fp,“%d/n”,j);fclose(fp);fp=fopen(“d1.dat”,“r”);fscanf(fp,“%d%d”, struct node *next; *p, *q, *r; (分数:1.00)A.B.C.D.32.有以下程序:#includestdio.hvoid fun(int p)int d=2; p=d+; printf(“%d“, p); main()int a=1; fun(a); printf(“%d/n“, a); 程序运行后的输出结果是 A. 32
9、B. 12 C. 21 D. 22(分数:2.00)A.B.C.D.33.若有程序片段:int a120,* p3,* *pp,ifor (i0;i3;i+)pimain()int s=0; int a=5; s+=a+; s+=a+;printf(“%d/n“,s);程序运行后的输出结果是 A. 8 B. 10 C. 7 D. 11(分数:1.00)A.B.C.D.二、B填空题/B(总题数:15,分数:26.00)36.以下程序运行后的输出结果是U U /U /U。 main() char m; m=B+32; printf(“%c/n“,m); (分数:1.00)填空项 1:_37.以下程
10、序中函数 f 的功能是在数组 x 的 n 个数(假定 n 个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。 #include stdio.h voidf(int x,int n) int p0,p1,i,j,t,m; i=j=x0; p0=p1=0; for(m=0;mn;m+) if(xmi i=xm;p0=m; else if(xmj j=xm;p1:m; t=xp0;xp0=xn-1;xn-1)=t t=xp1;xp1=U U /U /U;U U /U /U=t; main() int a10,u; for(u=0;u10;u+) sca
11、nf(“%d“, for(i=0;i3;i+) for(j=i+1;j3;j+) aji=0; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%d “,aij); printf(“/n“); (分数:1.00)填空项 1:_39.一个模块直接调用的其他模块的模块个数称为 1。(分数:2.00)填空项 1:_40.设 Y 是 int 型变量,请写出判断 Y 为奇数的关系表达式U U /U /U。(分数:1.00)填空项 1:_41.设有定义“stmctint a;float b;char cabc,*p_abc= temp=strn-1); for(i=n-1;i0
12、;i-)stri=stri-1; str0=temp main() char s50;iht n,i,z; scanf(“%d,%s“, z=strlen(s); for(i=1;i=n;i+)move(s,z); printf(“s/n“,s); (分数:2.00)填空项 1:_49.数据库系统的主要特点为数据集成性、数据的高 1 和低冗余性、数据独立性和数据统一管理和控制。(分数:2.00)填空项 1:_50.已有文本文件 test.txt,其中的内容为:Hello,everyone!。以下程序中,文件 test.txt 已正确为“读”而打开,由此文件指针 fr 指向文件,则程序的输出结果
13、是_。 #include stdio.h main() FILE *fr; char str40; fgets(str,5,fr); printf(“%s/n,str); fclose(fr); (分数:3.00)二级 C 语言-30 答案解析(总分:74.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:48.00)1.开发软件时对提高开发人员工作效率至关重要的是 U /U A. 操作系统的资源管理功能 B. 先进的软件开发工具和环境 C. 程序人员的数量 D. 计算机的并行处理能力(分数:1.00)A.B. C.D.解析:2.以下选项中,能定义 s 为合法的结构体变量的是U
14、 /U。 A. typedef struct abc double a; char b10; s; B. struct double a; char b10; s; C. struct ABC double a; char b10; ABC s; D. typedef ABC double a; char b10; ABC s;(分数:1.00)A.B. C.D.解析:解析 定义一个结构体类型的变量,可采用三种方法: 先定义结构体类型,再定义变量名。 在定义类型的同时定义变量。 直接定义结构体类型变量,即不出现结构体名。 选项 B)符合第三种定义方法。3.一个算法应该具有“确定性”等 5 个特
15、性,下面对另外 4 个特性的描述中错误的是( ) A.有零个或多个输入 B.有零个或多个输出 C.有穷性 D.可行性 (分数:1.00)A.B. C.D.解析:解析 算法应具有的 5 个特性:有穷性,确定性,可行性,有零个或多个输入,有一个或多个输出。4.以下不能将 s 所指字符串正确复制到 t 所指存储空间的是_。 A.do*t+=*s+;while(*s); B.for(i=0; ti=si; i+); C.while(*t=*s)t+; s+; D.for(i=0, j=0; ti+=sj+; );(分数:4.00)A. B.C.D.解析:解析 do*t+=*s+; while(*s);
16、不能因为当*s=/0时,while(*s)跳出循环,这样字符串结束标志/0没有复制给*t,造成*t 不完整。注意,*t+=*s+是先执行 t=*s,然后才进行 t=t+1, s=s+1。B、C、D 都能将/0复制过去。5.下列选项中合法的赋值语句是U /U。 A. a-b34 B. a34,b34 C. i-1; D. m(int)(x+y);(分数:1.00)A.B.C.D. 解析:解析 选项 A 是一个合法的赋值表达式,但结尾没加分号,所以它不是一个赋值语句:选项 B 是一个逗号表达式,也因为结尾没有加分号而不是合法的赋值语句;选项 C 是一个算术表达式,虽然有分号,但这个表达式没有赋值操
17、作,因此,也不是一条赋值语句。6.有以下程序:#includestdio.hmain()FILE*fp;int a10=1,2,3,i,n;fp=fopen(“d1.dat“,“w“);for(i=0;i3;i+)fprintf(fp,“%d“,ai);fprintf(fp,“/n“);fclose(fp);fp=fopen(“d1.dat“,“r“);fscanf(fp,“%d“,n);fclose(fp);printf(“%d/n“,n);程序运行后的输出结果是_。 A.321 B.12300 C.1 D.123(分数:1.00)A.B.C.D. 解析:解析 程序首先将数组 a10中的元素
18、 1、2、3 分别写入了文件 d1.dat 文件中,然后又将 d1.dat文件中的数据 123,整体写入到了变量 n 的空间中,所以打印 n 时输出的数据为 123。7.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是U /U。 A. DB 包括 DBS 和 DBMS B. DBMS 包括 DB 和 DBS C. DBS 包括 DB 和 DBMS D. 没有任何关系(分数:2.00)A.B.C. D.解析:解析 数据库系统(DBS)由数据库(DBS)、数据库管理系统(DBMS)、数据库管理员、硬件平台和软件平台 5 个部分组成,可见 DB 和 DBMS 都是 DBS 的
19、组成部分。8.下列选项中不属于结构化程序设计方法的是U /U。 A. 自顶向下 B. 逐步求精 C. 模块化 D. 可复用(分数:2.00)A.B.C.D. 解析:解析 结构化程序设计的主要原则概括为自顶向下、逐步求精和限制使用 GOTO 语句。9.有定义语句:char s10;,若要从终端给 s 输入 5 个字符,错误的输入语句是 A. gets(则表达式“x=y|yzint num;;void f1(struct STU c) struct STU b=“LiSiGuo“,2042);c=b;void f2(struct STU *c) struct STU b=“SunDan“,2044
20、);*c=b;main()struct STU a=“YangSan“,2041,b=“WangYin“,2043);f1(a);f2(printf(“%d %d/n“,a.num,b.num);执行后输出结果是( )。 A. 2041 2044 B. 2041 2043 C. 2042 2044 D. 2042 2043(分数:1.00)A. B.C.D.解析:解析 本题中首先定义了一个结构体类型 STU,它由一个字符数组和一个整形变量 hum 组成。然后定义两个函数 f1 和 f2。其中 f1 是值传递的,f2 是地址传递的。主函数中定义两个结构体变量 a 和 b并分别赋初值,接着调用函数
21、 f1(a),由于函数 n 是值传递,故执行该函数后并没有改变 a 的值,再接着调用函数 f2(printf( % d, % d/n“, strlen(s),sizeof(s);执行后的输出结果是 _。 A. 赋初值的字符串有错 B. 6,7 C. 5,6 D. 6,6(分数:2.00)A.B.C. D.解析:解析 本题中定义字符数组 s 时没有指定数组长度,s 初始化后存放的内容为“/n123/0“,其中/n和/是转义字符,所以 strlen(s)=5,sizeof(s)=6。25.C 语言规定,在一个源程序中,main 函数的位置U /U。 A. 必须在最开始 B. 必须在系统调用的库函数
22、的后面 C. 可以任意 D. 必须在最后(分数:1.00)A.B.C. D.解析:解析 不论 main 函数在整个过程中的位置如何,一个 C 程序总是从 main 函数开始执行的。26.以下程序的输出结果是_。#inludestdio.hmain() int a=2,b=5;printf(“a=%d,b=%d/n“,a,b); A. a=2,b=5 B. a=%2,b=%5 C. a=%d,b=%d D. a=%d,b=%d(分数:1.00)A.B.C.D. 解析:27.有以下程序#includestdiohmain() FILE*fp;int i=20,j=30,k,n;fp=fopen(“
23、d1dat”,“w”);fprintf(fp,“%d/n”,i);fprintf(fp,“%d/n”,j);fclose(fp);fp=fopen(“d1.dat”,“r”);fscanf(fp,“%d%d”, struct node *next; *p, *q, *r; (分数:1.00)A. B.C.D.解析:解析 “r-next=q;”表示 r 的下一个结点为 qo“q-next=-next;”则表示 q 的下一个结点是 r 的下一个结点,即 q 结点本身,因此与后续结点便断开了联系。32.有以下程序:#includestdio.hvoid fun(int p)int d=2; p=d+
24、; printf(“%d“, p); main()int a=1; fun(a); printf(“%d/n“, a); 程序运行后的输出结果是 A. 32 B. 12 C. 21 D. 22(分数:2.00)A.B.C. D.解析:解析 程序运行后,首先输出的是 p 的值,然后输出 a 的值。p=d+,得到 p 的值为 d 的初始值2;a 的值不变,仍为 1。33.若有程序片段:int a120,* p3,* *pp,ifor (i0;i3;i+)pimain()int s=0; int a=5; s+=a+; s+=a+;printf(“%d/n“,s);程序运行后的输出结果是 A. 8
25、B. 10 C. 7 D. 11(分数:1.00)A. B.C.D.解析:解析 本题中定义一个全局变量 a 和一个局部变量 a。局部变量和全局变量的不同在于,局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语句)时生成,退出其所在的函数体(或复合语句)时消失,而全局变量是在函数外部任意位置上定义的变量,它的作用域从变量定义的位置开始,到整个源文件结束为止。若全局变量和某一函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,起作用的将是局部变量,与同名的全局变量不发生任何关系。 在程序中首先定义了变量 s 并赋值为 0,接着在嵌套的复合语句中定义了变量 a 并赋初值为
26、5,接着执行语句 s+=a+a;在这条语句中a 加 1,但表达式 a+还是原来的值,故 s=s+5,s 为 5,程序执行到外层,此时内定义的变量 a 不再有效,此时的变量 a 为之前定义的且初值为 3,接着执行后面的语句 s+=a+;相当于执行语句 s=s+(+);即 s=5+3,最后值为 8,所以最后输出的 s 值为 8。所以 4 个选项中 A 正确。二、B填空题/B(总题数:15,分数:26.00)36.以下程序运行后的输出结果是U U /U /U。 main() char m; m=B+32; printf(“%c/n“,m); (分数:1.00)填空项 1:_ (正确答案:B)解析:解
27、析 字符类型的数据在内存中以相应的 ASCII 码存放,另外,字符数据还可以作为整数参加运算。格式控制参数中的格式字符用以指定输出项的数据类型和输出格式,输出字符与其对应的输出项的类型要一致。本题中,“b”的 ASCII 码为 98,字符类型 m 的 ASCII 码为 98+32=130,所以最后输出为 b。37.以下程序中函数 f 的功能是在数组 x 的 n 个数(假定 n 个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。 #include stdio.h voidf(int x,int n) int p0,p1,i,j,t,m; i=j=x
28、0; p0=p1=0; for(m=0;mn;m+) if(xmi i=xm;p0=m; else if(xmj j=xm;p1:m; t=xp0;xp0=xn-1;xn-1)=t t=xp1;xp1=U U /U /U;U U /U /U=t; main() int a10,u; for(u=0;u10;u+) scanf(“%d“, for(i=0;i3;i+) for(j=i+1;j3;j+) aji=0; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%d “,aij); printf(“/n“); (分数:1.00)填空项 1:_ (正确答案:14 1
29、2 3 0 5 6 0 0 9)解析:39.一个模块直接调用的其他模块的模块个数称为 1。(分数:2.00)填空项 1:_ (正确答案:扇出)解析:解析 在结构图中,调用一个给定模块的模块个数称为扇入,一个模块直接调用的其他模块个数称为扇出。40.设 Y 是 int 型变量,请写出判断 Y 为奇数的关系表达式U U /U /U。(分数:1.00)填空项 1:_ (正确答案:Y%2=1 或 Y%2!=0)解析:解析 判断变量是否为奇数可以用变量与 2 取模,判断结果是为 1 或不为 0。本题具体做法如下:Y%2=1 或 Y%2!=0。41.设有定义“stmctint a;float b;char
30、 cabc,*p_abc= temp=strn-1); for(i=n-1;i0;i-)stri=stri-1; str0=temp main() char s50;iht n,i,z; scanf(“%d,%s“, z=strlen(s); for(i=1;i=n;i+)move(s,z); printf(“s/n“,s); (分数:2.00)填空项 1:_ (正确答案:cdeab)解析:解析 本题中函数 move 的实参到形参是按地址传递,故形参的改变会影响实参。根据题目可知在main 函数中,n=3、 s0=a、s1=b、s2=c、s3=d、s4=e,数组元素 s5s49全部为/0,故
31、z= strlen(s)=5。 第 1 次调用函数 move 时,形参 str=“abcd“、n=5,执行完函数 move 后str4=str3=d、str3=str2=c、 str2=str1=b、str1=str0=a、str0=str4=e。即 s0=e、s1=as2、s2=b、s3=c、s4= d。 第 2 次调用函数 move 时,形参str=“eabcd、n=5,执行完函数 move 后 str4=str3=c、str3=str2=b、str 2=str1=a、str1=str0=e、str0=str4=d。即 s0=d、s1ce、s2=a、s3=b、s4=c。 第 3 次调用函数
32、 move 时,形参 str=“deabc“、n=5,执行完函数 move 后 str4=str3=b、str3=str2=a、str2=str1=e、str1=str0=d、str0=str4=c。即 s0=c、s1=d、s2=e、s3=a、s4=b。 所以 printf 函数的输出结果为:cdeab。49.数据库系统的主要特点为数据集成性、数据的高 1 和低冗余性、数据独立性和数据统一管理和控制。(分数:2.00)填空项 1:_ (正确答案:共享性)解析:解析 数据库系统中的数据能被不同的应用程序使用,实现了数据的高度共享,从而降低了数据的冗余,这也是数据库的主要目的。50.已有文本文件
33、test.txt,其中的内容为:Hello,everyone!。以下程序中,文件 test.txt 已正确为“读”而打开,由此文件指针 fr 指向文件,则程序的输出结果是_。 #include stdio.h main() FILE *fr; char str40; fgets(str,5,fr); printf(“%s/n,str); fclose(fr); (分数:3.00)解析:解析 该函数有 3 个参数,第三个参数是文件指针指向要读取数据的文件,第二个参数是一个整数(假设为 n),表示从文件中读 n-1 个字符并在其后加一个/0,第一个参数为存放读取的字符串的内存区的起始地址,读取得数据保存在其中。可见本崽的输出结果为:Hell。