1、计算机二级(C)12 及答案解析(总分:645.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:40,分数:60.00)1.以下叙述中错误的是_。 (分数:1.50)A.用户所定义的标识符允许使用关键字B.用户所定义的标识符应尽量做到“见名知意”C.用户所定义的标识符必须以字母或下划线开头D.用户定义的标识符中,大、小写字母代表不同标识2.有定义语句 int b;char c10;,则正确的输入语句是_。 (分数:1.50)A.scanf(“%d%s“,B.scanf(“%d%s“,C.scanf(“%d%s“,b, ;D.scanf(“%d%s“,
2、b,3.有以下程序 #include stdio.h main( ) printf(“%d/n“,NULL); 程序运行后的输出结果是( )。 (分数:1.50)A.0B.1C.-1D.NULL 没定义,出错4.有以下程序段: typedef struct NODE int num; struct NODE *next; OLD; 以下叙述中正确的是_。 (分数:1.50)A.以上的说明形式非法B.NODE 是一个结构体类型C.OLD 是一个结构体类型D.OLD 是一个结构体变量5.以下程序的功能是进行位运算: main() unsigned char a,b; a=73; b=4 print
3、f(“%d %d/n“,a,b); 程序运行后的输出结果是_。 (分数:1.50)A.4 3B.7 3C.7 0D.4 06.用树形结构表示实体之间联系的模型是_。 (分数:1.50)A.关系模型B.网状模型C.层次模型D.以上三个都是7.若程序中已包含头文件 stdio.h,以下选项中,正确运用指针变量的程序段是( )。(分数:1.50)A.int *i=NULL; scanf(“%d“,i);B.float *f=NULL; *f=10.5;C.char t=m, *c= *c=D.long *L; L=/0;8.以下能正确定义一维数组的选项是_。 (分数:1.50)A.int a5=0,
4、1,2,3,4,5;B.char a=0,1,2,3,4,5;C.char a=A,B,C;D.int a5=“0123“;9.有以下程序 fun(int a, int b) if(ab) return(a); else return(b); main( ) int x=3, y=8, z=6, r; r=fun(fun(x,y), 2*z); printf(“%d/n“, r); 程序运行后的输出结果是( )。 (分数:1.50)A.3B.6C.8D.1210.以下叙述中错误的是_。 (分数:1.50)A.C 程序中的#include 和#define 行均不是 C 语句B.除逗号运算符外,
5、赋值运算符的优先级最低C.C 程序中,j+;是赋值语句D.C 程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算11.有以下程序(提示:程序中 fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件尾向前移 2*sizeof(int)字节) #include stdio.h main( ) FILE *fp; int i,a4=1,2,3,4,b; fp=fopen(“data.dat“,“wb“); for(i=0;iA.2B.1C.4D.312.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10
6、 void arrin(int xN) int i=0; while(iN) scanf(“%d“,_); 在下划线处应填入的是( )。 (分数:1.50)A.x+iB. p= for(i=0;iA.3B.6C.9D.218.在 Windows 环境下,PrintScreen 键的作用是( )。(分数:1.50)A.打印当前窗口的内容B.打印屏幕内容C.复制屏幕到剪贴板D.复制当前窗口到剪贴板19.以下能正确定义字符串的语句是_。 (分数:1.50)A.char str=/064;B.char str=“/x43“;C.char str=;D.char str=“/0“;20.以下选项中可作为
7、 C 语言合法常量的是_。 (分数:1.50)A.-80B.-80C.-8e1.0D.-80.0e21.有以下程序 main() int c=35;printf(“%d/n“,c 程序运行后的输出结果是_。 (分数:1.50)A.0B.70C.35D.122.以下叙述中正确的是( )。(分数:1.50)A.C 程序中注释部分可以出现在程序中任意合适的地方B.花括号“和“只能作为函数体的定界符C.构成 C 程序的基本单位是函数,所有函数名都可以由用户命名D.分号是 C 语句之间的分隔符,不是语句的一部分23.以下程序企图把从终端输入的字符输出到名为 abc.txt 的文件中,直到从终端读入字符#
8、号时结束输入和输出操作,但程序有错。 #include stdio.h main( ) FILE *fout; char ch; fout=fopen(abc.txt,w); ch=fgetc(stdin); while(ch!=#) fputc(ch,fout); ch =fgetc(stdin); fclose(fout); 出错的原因是( )。 (分数:1.50)A.函数 fopen 调用形式有误B.输入文件没有关闭C.函数 fgetc 调用形式有误D.文件指针 stdin 没有定义24.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( )。(分数:1.50)
9、A.c1c2B.c1*sp=“right!“;B.char s10;s=“right!“;C.char s10;*s=“right!“;D.char *sp=“right!“;26.有以下程序 main( ) char str =“xyz“,*ps=str; while(*ps) ps+; for(ps-;ps-str=0;ps-) puts(ps); 执行后输出结果是( )。 (分数:1.50)A.yz xyzB.z yzC.z yz xyzD.x xy xyz27.C 语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( )。(分数:1.50)A.voidB.intC.floatD.
10、double28.若有说明语句:double *p,a;则能通过 scanf 语句正确给输入项读入数据的程序段是_。 (分数:1.50)A.*p= scanf(“%lf“,p);B.*p= scanf(“%f“,p);C.p= scanf(“%lf“,*p);D.p= scanf(“%lf“,p);29.磁盘处于写保护状态时其中的数据( )。(分数:1.50)A.不能读出,不能删改B.可以读出,不能删改C.不能读出,可以删改D.可以读出,可以删改30.两个或两个以上的模块之间关联的紧密程度称为_。 (分数:1.50)A.耦合度B.内聚度C.复杂度D.数据传输特性31.设有如下程序段: int
11、x=2002, y=2003; printf(“%d/n“,(x,y); 则以下叙述中正确的是( )。 (分数:1.50)A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出B.运行时产生出错信息C.输出值为 2002D.输出值为 200332.有以下程序 #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“); 程序运行后,文件 t
12、1.dat 中的内容是_。(分数:1.50)A.startB.endC.startendD.endrt33.有以下程序: main() int p8=11,12,13,14,15,16,17,18,i=0,j=0; while(i+A.42B.45C.56D.6034.设有定义 int a=2,b=3,c=4;,则以下选项中值为 0 的表达式是_。 (分数:1.50)A.(!a=1) p+; q-k=i+; q-; q-k=i; for(i=0;i填空项 1:_64.数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数 据独立性最高的阶段是 1。(分数:40.00)填空项 1
13、:_65.以下程序运行后的输出结果是 1。 main( ) char m; m=B+32; printf(“%c/n“,m); (分数:40.00)填空项 1:_66.软件工程的出现是由于 1。(分数:-1.00)填空项 1:_67.为了便于对照检查,测试用例应由输入数据和预期的 1 两部分组成。(分数:-1.00)填空项 1:_68.在最坏情况下,堆排序需要比较的次数为 1。(分数:-1.00)填空项 1:_69.软件开发环境是全面支持软件开发全过程的 1 集合。(分数:-1.00)填空项 1:_70.面向对象的设计中,用来请求对象执行某一处理或回答某些信息的要求称为 1。(分数:-1.00
14、)填空项 1:_计算机二级(C)12 答案解析(总分:645.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:40,分数:60.00)1.以下叙述中错误的是_。 (分数:1.50)A.用户所定义的标识符允许使用关键字 B.用户所定义的标识符应尽量做到“见名知意”C.用户所定义的标识符必须以字母或下划线开头D.用户定义的标识符中,大、小写字母代表不同标识解析:C 语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。大写字母和小写字母被认为是两个不同的字符,用户在定义标识符时应做到“见名知意”,且不允许使用 关键字作标识
15、符。2.有定义语句 int b;char c10;,则正确的输入语句是_。 (分数:1.50)A.scanf(“%d%s“,B.scanf(“%d%s“, C.scanf(“%d%s“,b, ;D.scanf(“%d%s“,b,解析:scanf 函数中的“格式控制”后面应当是地址,而不是变量名。对于变量,通过地址运算符“ 程序运行后的输出结果是( )。 (分数:1.50)A.0 B.1C.-1D.NULL 没定义,出错解析:4.有以下程序段: typedef struct NODE int num; struct NODE *next; OLD; 以下叙述中正确的是_。 (分数:1.50)A.
16、以上的说明形式非法B.NODE 是一个结构体类型C.OLD 是一个结构体类型 D.OLD 是一个结构体变量解析:typedef 关键字用于声明一个新的类型名代替已有的类型名。本题中如果没有用 typedef 进行定义的 话,则 struct NODE 为结构体类型,现在用 typedef 定义后,相当于用 OLD 代表了 struct NODE 这一结构体 类型,故 OLD 为结构体类型。5.以下程序的功能是进行位运算: main() unsigned char a,b; a=73; b=4 printf(“%d %d/n“,a,b); 程序运行后的输出结果是_。 (分数:1.50)A.4 3
17、 B.7 3C.7 0D.4 0解析:C 语言提供六种位运算符,按优先级由高到低的顺序分别为:取反()左移(b) return(a); else return(b); main( ) int x=3, y=8, z=6, r; r=fun(fun(x,y), 2*z); printf(“%d/n“, r); 程序运行后的输出结果是( )。 (分数:1.50)A.3B.6C.8D.12 解析:10.以下叙述中错误的是_。 (分数:1.50)A.C 程序中的#include 和#define 行均不是 C 语句B.除逗号运算符外,赋值运算符的优先级最低C.C 程序中,j+;是赋值语句D.C 程序中
18、,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算 解析: “%”是求余运算符,其两侧的数值只能为整型,所以它不能用于实型的运算,故选项 D 错误。11.有以下程序(提示:程序中 fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件尾向前移 2*sizeof(int)字节) #include stdio.h main( ) FILE *fp; int i,a4=1,2,3,4,b; fp=fopen(“data.dat“,“wb“); for(i=0;iA.2B.1C.4D.3 解析:12.以下函数的功能是:通过键盘输入数据,为数组中的所
19、有元素赋值。 #define N 10 void arrin(int xN) int i=0; while(iN) scanf(“%d“,_); 在下划线处应填入的是( )。 (分数:1.50)A.x+iB. p= for(i=0;iA.3B.6 C.9D.2解析:18.在 Windows 环境下,PrintScreen 键的作用是( )。(分数:1.50)A.打印当前窗口的内容B.打印屏幕内容C.复制屏幕到剪贴板 D.复制当前窗口到剪贴板解析:19.以下能正确定义字符串的语句是_。 (分数:1.50)A.char str=/064;B.char str=“/x43“;C.char str=;
20、D.char str=“/0“; 解析:C 语言中,字符串是用一对双引号括起来的字符序列,并用字符型数组来存放,故选项 A、C 不属 于字符串, 选项 B 定义的是一个字符变量 str,却用来存放字符串,显然也不正确,所以选项 D 正确。20.以下选项中可作为 C 语言合法常量的是_。 (分数:1.50)A.-80 B.-80C.-8e1.0D.-80.0e解析:C 语言的常量分为整型常量、实型常量和字符型常量。选项 A 属于实型常量中的十进制小数形式的 表示法,是合法的。21.有以下程序 main() int c=35;printf(“%d/n“,c 程序运行后的输出结果是_。 (分数:1.
21、50)A.0B.70C.35 D.1解析: 按位“与”时,1 char ch; fout=fopen(abc.txt,w); ch=fgetc(stdin); while(ch!=#) fputc(ch,fout); ch =fgetc(stdin); fclose(fout); 出错的原因是( )。 (分数:1.50)A.函数 fopen 调用形式有误 B.输入文件没有关闭C.函数 fgetc 调用形式有误D.文件指针 stdin 没有定义解析:24.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( )。(分数:1.50)A.c1c2 B.c1*sp=“right
22、!“;B.char s10;s=“right!“;C.char s10;*s=“right!“;D.char *sp=“right!“; 解析: 选项 A 定义了字符型的指针变量 sp,则*sp 存储的是第一个字符,而给它赋的是字符串,故错;选项 B 表示代表数组的首地址,而题中给它赋的是字符串,所以错误;选项 C 定义了一个字符型的数组 s10,再通过*s 给数组元素赋初值,这时是与选项 A 相同的错误。26.有以下程序 main( ) char str =“xyz“,*ps=str; while(*ps) ps+; for(ps-;ps-str=0;ps-) puts(ps); 执行后输出
23、结果是( )。 (分数:1.50)A.yz xyzB.z yzC.z yz xyz D.x xy xyz解析:27.C 语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( )。(分数:1.50)A.voidB.int C.floatD.double解析:28.若有说明语句:double *p,a;则能通过 scanf 语句正确给输入项读入数据的程序段是_。 (分数:1.50)A.*p= scanf(“%lf“,p);B.*p= scanf(“%f“,p);C.p= scanf(“%lf“,*p);D.p= scanf(“%lf“,p); 解析:p=”,它等效于:int *p; p=,
24、scanf()语句的格式是“scanf(格式控制,地址表列)”, 在选项 D 中,“p”本身就代表着一个地址,故选项 D 正确。29.磁盘处于写保护状态时其中的数据( )。(分数:1.50)A.不能读出,不能删改B.可以读出,不能删改 C.不能读出,可以删改D.可以读出,可以删改解析:30.两个或两个以上的模块之间关联的紧密程度称为_。 (分数:1.50)A.耦合度 B.内聚度C.复杂度D.数据传输特性解析:耦合度是模块间互相连接的紧密程度的度量;内聚度是一个模块内部各个元素间彼此结合的紧密程 度的度量。31.设有如下程序段: int x=2002, y=2003; printf(“%d/n“
25、,(x,y); 则以下叙述中正确的是( )。 (分数:1.50)A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出B.运行时产生出错信息C.输出值为 2002D.输出值为 2003 解析:32.有以下程序 #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 中的内容是_。(分数:1.50)A.s
26、tartB.end C.startendD.endrt解析:两次使用“写入”的方式打开同一个文件,在第二次打开时,文件指针指向文件头,所以此次写入 的数据覆盖了文件原有的数据,故本题中 t1.dat 的内容为 end。33.有以下程序: main() int p8=11,12,13,14,15,16,17,18,i=0,j=0; while(i+A.42B.45 C.56D.60解析:本程序的作用是求除 p0外的其他奇数的和。34.设有定义 int a=2,b=3,c=4;,则以下选项中值为 0 的表达式是_。 (分数:1.50)A.(!a=1) t=x;x=y;y=t;printf(“%d
27、%d “,x,y); main2 int a=3,b=4; swap(a,b); printf(“%d %d“,a,b); (分数:40.00)填空项 1:_ (正确答案:4 3 3 4)解析:用变量作为函数的实参时,属单向传递,即“值传送”方式,此种函数参数的传递方式只能由实参 传给形参,不能由形参传回来给实参。53.以下程序运行后的输出结果是 1。 void fun(int x,int y) x=x+y;y=x-y;x=x-y; printf(“%d,%d,“,x,y); main( ) int x=2,y=3; fun(x,y); printf(“%d,%d/n“,x,y); (分数:4
28、0.00)填空项 1:_ (正确答案:3,2,2,3)解析:本题考点是局部变量的作用范围。54.以下程序运行后的输出结果是 1。 main( ) int a=1,b=3,c=5; if (c=a+b) printf(“yes/n“); else printf(“no/n“); (分数:40.00)填空项 1:_ (正确答案:yes)解析:55.支持 Internet 基本服务的协议是 1。(分数:40.00)填空项 1:_ (正确答案:TCP/IP)解析:56.以下函数 fun 的功能是返回 str 所指字符串中以形参 c 中字符开头的后续字符串的首 地址,例如:str 所指字符串为:Hell
29、o!,c 中的字符为 e,则函数返回字符串:ello!的首地址。若 str 所指字符串为空串或不包含 c 中的字符,则函数返回 NULL。请填空。 char *fun(char *str, char c) int n=0;char *p=str; if(p!=NULL) while(pn!=c if(pn= /0) return NULL; return( 1); (分数:40.00)填空项 1:_ (正确答案:strn 或 *(str+n) 或 pn 或 p+n)解析:此题主要是将形参 c 中的字符与 str 中的字符相比较,返加以形参 c 中字符开头的后续字符串,题目 中的变量 n 起到了
30、记录形参 c 中字符所在 str 字符串中的位置,固返回的结果用 strn或其等效形式表示。57.Internet 的信息服务方式分为基本服务和扩展服务,电子邮件属于 1。(分数:40.00)填空项 1:_ (正确答案:基本服务)解析:58.若有以下程序 int f(int x,int y) return(y-x)*x; main( ) int a=3,b=4,c=5,d; d=f(f(3,4),f(3,5); printf(“%d/n“,d); 执行后输出结果是 1。 (分数:40.00)填空项 1:_ (正确答案:9)解析:59.计算机网络分为广域网和局域网,因特网属于 1。(分数:40.
31、00)填空项 1:_ (正确答案:广域网)解析:60.设函数 findbig( )已定义为求 3 个数中的最大值。以下程序将利用函数指针调用 findbig 函数。请填空。 main( ) int findbig(int,int,int); int (*f)( ),x,y,z,big; f= 1; scanf(“%d%d%d“, big=(*f)(x,y,z); printf(“big=%d/n“,big); (分数:40.00)填空项 1:_ (正确答案:findbig)解析:61.以下程序运行后输入:3,abcde,则输出结果是 1 #include string.h move(char
32、*str, int n) char temp; int i; temp=strn-1; for(i=n-1;i0;i-) stri=stri-1; str0=temp; main( ) char s50; int n, i, z; scanf(“%d,%s“, z=strlen(s); for(i=1; i=n; i+ move(s, z); printf(“%s/n“,s); (分数:40.00)填空项 1:_ (正确答案:cdeab)解析:62.下面程序和运行运行结果是 1。 void swap(int * a,int * b) int * t; t=a; a=b; b=t; main2
33、intx=3,y=5,* p=x,* q=y; swap(p,q); prinff(“%d %d/n“, *p, *q); (分数:40.00)填空项 1:_ (正确答案:3 5)解析:本题 swap-|_|-函数的功能是实现两个数的交换,但它为无返回值型。63.以下程序运行后的输出结果是 1 。 struct NODE int k; struct NODE *link; ; main2 struct NODE m5,*p=m,*q=m+4; int i=0; while(p!=q) p-k=+i; p+; q-k=i+; q-; q-k=i; for(i=0;i填空项 1:_ (正确答案:1
34、3431)解析:程序执行过程如下:p=m,q=m+4,条件 p!=q 成立,执行 p-k=+i;,由于是“前加”,所以 m0.k=1,执行 p+后 p=m+1;执行 q-k=i+;,由于是“后加”,所以 m4.k=1,然后使得 i 加上 1,即 i=2,q-后,q=m+3; p=m+1,q=m+3,条件 p!=q 成立,执行 p-k=+i; ,由于是“前加”,所以 i=3,m0.k=3,执行 p+后 p=m+2; 执行 q-k=i+; ,由于是“后加”,所以 m4.k=3,i=4,q-后,q=m+2;p=m+2,q=m+2,条件 p!=q 不成立,则执行 q-k=i;即 m2.k=4;故输出的
35、值为 13431。64.数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数 据独立性最高的阶段是 1。(分数:40.00)填空项 1:_ (正确答案:数据库系统)解析:在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据 独立性最高的阶段是数据库系统。65.以下程序运行后的输出结果是 1。 main( ) char m; m=B+32; printf(“%c/n“,m); (分数:40.00)填空项 1:_ (正确答案:b)解析:66.软件工程的出现是由于 1。(分数:-1.00)填空项 1:_ (正确答案:软件危机的出现)解析:从 20
36、世纪 60 年代中期到 70 年代中期,随着计算机应用的日益普及,软件数量急剧膨胀,在程序运行时发现的错误必须设法改正,用户有了新的需求时必须相应的修改程序以适应新的环境。种种软件维护工作耗费惊人的资源,更严重的是许多程序个体化使得程序最终无法维护,“软件危机”就这样出现了。为了更有效的开发与维护软件,新兴了一门软件工程学即软件工程。 67.为了便于对照检查,测试用例应由输入数据和预期的 1 两部分组成。(分数:-1.00)填空项 1:_ (正确答案:输出结果)解析:本题主要考查测试的步骤。68.在最坏情况下,堆排序需要比较的次数为 1。(分数:-1.00)填空项 1:_ (正确答案:O(nl
37、og2n))解析:在最坏情况下,冒泡排序所需要的比较次数为 n(n-1)/2;简单插入排序所需要的比较次数为 n(n-1)/2;希尔排序所需要的比较次数为 O(n1.5);堆排序所需要的比较次数为 O(nlog2n)。69.软件开发环境是全面支持软件开发全过程的 1 集合。(分数:-1.00)填空项 1:_ (正确答案:软件工具)解析:70.面向对象的设计中,用来请求对象执行某一处理或回答某些信息的要求称为 1。(分数:-1.00)填空项 1:_ (正确答案:消息)解析:在面向对象技术中,主要用到对象(object)、类(class)、方法(methoD) 、消息(message)、继承(inheritance)、封装(encapsulation)等基本概念。其中消息是用来请求对象执行某一处理或回答某些信息的要求。