1、二级 C 语言笔试-287 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.以下定义语句中正确的是( )。(分数:2.00)A.int a=b=0;B.char A=65+1,b=b;C.float a=1,*b=a,*c=b;D.double a=0.0;b=1.1;2.设有定义:char p=1,2,3),*q=p;,以下不能计算出一个 char 型数据所占字节数的表达式是( )。(分数:2.00)A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p0)3.算法具有五个特性,以下选项中不属于算法
2、特性的是( )。(分数:2.00)A.有穷性B.简洁性C.可行性D.确定性4.有以下程序:#include stdio.h#define N 4void fun(int aN,int b)int i;for (i=0;iN;i+)bi=aii;main)int xN=1,2,3,4,5,6,7,8,9,10,yN,i;fun(x,y);for (i=0;iN;i+)printf(“%d,“,yi);printf(“/n“);程序的运行结果是()。(分数:2.00)A.1,2,3,4,B.1,0,7,0,C.1,4,5,9,D.3,4,8,10,5.设有部门和职员两个实体,每个职员只能属于一个部
3、门,一个部门可以有多名职员,则部门与职员实体之间的联系类型是( )。(分数:2.00)A.mB.1:mC.m:kD.1:16.以下叙述中正确的是( )。(分数:2.00)A.C 程序的基本组成单位是语句B.C 程序中的每一行只能写一条语句C.简单 C 语句必须以分号结束D.C 语句必须在一行内写完7.以下程序执行后 x 的值是( )。main()int x,y=252,1=386,*m=y,*z=i;x=(z=m):printf(“%d“,x);(分数:2.00)A.252B.1C.OD.运行时出错,x 无定值8.以下不合法的字符常量是( )。(分数:2.00)A./018B./“C./D./
4、xcc9.有以下程序:int fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return sum;main()int a=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“%d/n“,s);程序执行后的输出结果是()。(分数:2.00)A.45B.50C.60D.5510.关系运算中的选择运算是( )。(分数:2.00)A.从关系中找出满足给定条件的元组的操作B.从关系中选择若干个属性组成新的关系的操作C.从关系中选择满足给定条件的属性的操作D.和 B)11.面向对象程序设
5、计中程序运行的最基本实体是( )。(分数:1.00)A.对象B.类C.方法D.函数12.下列叙述中正确的是( )。(分数:1.00)A.break 语句只能用于 switch 语句B.在 switch 语句中必须使用 defaultC.break 语句必须与 switch 语句中的 case 配对使用D.在 switch 语句中,不一定使用 break 语句13.若有语句:char *line5;,以下叙述中正确的是( )。(分数:1.00)A.定义 line 是一个数组,每个数组元素是一个基类型为 char 的指针变量B.定义 line 是一个指针变量,该变量可以指向一个长度为 5 的字符型
6、数组C.定义 line 是一个指针数组,语句中的*号称为间址运算符D.定义 line 是一个指向字符型函数的指针14.如果进栈序列为 e1,e2,e3,e4,则可能的出栈序列是( )。(分数:1.00)A.e3,e1,e4,e2B.e2,e4,e3,e1C.e3,e4,e1,e2D.任意顺序15.以下不正确的定义语句是( )。(分数:1.00)A.double x5=2.0,4.0,6.0,8.0,10.0;B.int y5=0,1,3,5,7,9;C.char c1=1,2,3,4,5;D.char c2=x10,/xa,/x8;16.下列关于字符串的说法中错误的是( )。(分数:1.00)
7、A.在 C 语言中,字符串是借助于字符型一维数组来存放的,并规定以字符/0作为字符串结束标志B./0作为标志占用存储空间,计入串的实际长度C.在表示字符串常量的时候不需要人为在其末尾加入/0D.在 C 语言中,字符串常量隐含处理成以/0结尾17.设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是( )。(分数:1.00)A.k+B.k+=1C.+kD.k+118.有以下程序:int fl(int x,int y)return xy?x:y;int f2int x,int y return xy?y:x;main()int a=4,b=3,c=5,d=2,e,f,g
8、;e=f2(f1(a,b),f1(c,d);f=f1(f2(a,b),f2(c,d);g=a+b+c+d-e-f;printf“%d,%d,%d/n“,e,f,g);程序运行后的输出结果是()。(分数:1.00)A.4,3,7B.3,4,7C.5,2,7D.2,5,719.已有定义:char c;,程序前面已在命令行中包含 ctype.h 文件,不能用于判断 c 中的字符是否为大写字母的表达式是( )。(分数:1.00)A.isupper(c)B.A=c=ZC.A=c=ZD.c=(z-32)(a-32)=c20.下列对于软件测试的描述中正确的是( )。(分数:1.00)A.软件测试的目的是证明
9、程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误D.软件测试的目的是使程序符合结构化原则21.若有定义语句:char s10=“1234567/0/0“;,则 strlen(s)的值是( )。(分数:2.00)A.7B.8C.9D.1022.设有以下语句:char x=3,y=6,z;z=xy2;则 z 的二进制值是()。(分数:2.00)A.00010100B.00011011C.00011100D.0001100023.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是( )。(分数:2.00)A.if(ab)(bc)k=1;
10、else k=0;B.if(ab)|(bc)k=1; else k=0;C.if(a=b)k=0; else if(b=c)k=1;D.if(ab)k=1;else if(bc)k=1;else k=0;24.以下程序的输出结果是()。#includestdio.hint fun(int n,int*s)int f1,f2;if(n=0)(n=1)*S=1;elsefun(n-1,f1);fun(n-2,f2);*s=f1+f2;void main()int x;fun(6,x);prinf(“/n%d“,x);(分数:2.00)A.7B.13C.9D.1025.若要求定义具有 10 个 in
11、t 型元素的一维数组 a,则以下定义语句中错误的是( )。(分数:2.00)A.#define N 10 int aN;B.#define n 5int a2*n;C.int a5+5;D.int n=10,an.;26.阅读下列程序,则在执行后,程序的运行结果为( )。#include “stdio.h“#include “string.h“main()char a30=“nice fo meet you!“;strcpy(a+strlen((分数:2.00)A./2,“ you“);printf(“% s/n“ ,a);A) n27.设有以下说明语句:typedef structint n
12、:char ch8;PER;则下面叙述中正确的是()。(分数:2.00)A.PER 是结构体变量名B.PER 是结构体类型名C.typedef struct 是结构体类型D.struct 是结构体类型名28.结构化程序由三种基本结构组成,三种基本的结构组成的算法( )。(分数:2.00)A.可以完成任何复杂的任务B.只能完成部分复杂的任务C.只能完成符合结构化的任务D.只能完成一些简单的任务29.下列数据模型中,具有坚实理论基础的是( )。(分数:2.00)A.层次模型B.网状模型C.关系模型D.以上三个都是30.下列不属于软件工程的 3 个要素的是( )。(分数:2.00)A.工具B.过程C
13、.方法D.环境31.下列程序执行后的输出结果是( )。void func(int *a,intb)b0=*a+6;main()int a,b5;a=0; b0=3;func(a,b);printf(“%d/n“,b0);(分数:2.00)A.6B.7C.8D.932.以下程序的输出结果是( )。#includestdio.hint a33=1,2,3,4,5,6,7,8,9,*p;main()p=(int*)malloc(sizeof(int);f(p,(分数:2.00)A.;,以下正确的程序段是( )。(分数:2.00)A.p=n;scanf(“%d“,p);B.p=n;scanf(“%d“
14、,*p)C.scanf(“%d“,n);*p=n;D.p=n;*p=m;35.下列程序的输出结果是( )。main()double d=3.2;int x,y;x=1.2; y=(x+3.8)/5.0:printf“%d/n“,d*y;(分数:2.00)A.3B.3.2C.OD.3.0736.线性表 L:(a1,a2,a3,ai,an),下列说法正确的是( )。(分数:2.00)A.每个元素都有一个直接前件和直接后件B.线性表中至少要有一个元素C.表中诸元素的排列顺序必须是由小到大或由大到小D.除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件37.对下述程序的判断
15、中,正确的是( )。#includestdio.hvoid main()char*p,s128;p=s;while(strcmp(s,“End“)printf(“Input a string:“);gets(s);p=s;while(*p)putchar(*p+);(分数:2.00)A.此程序循环接收字符串并输出,直到接收字符串“End”为止B.此程序循环接收字符串,接收到字符串“End”则输出,否则程序终止C.此程序循环接收字符串并输出,直到接收字符串“End”为止,但因为代码有错误,程序不能正常工作D.此程序循环接收字符串并将其连接在一起,直到接收字符串“End”为止,输出连接在一起的字符
16、串38.数据库、数据库系统和数据库管理系统之间的关系是( )。(分数:2.00)A.数据库包括数据库系统和数据库管理系统B.数据库系统包括数据库和数据库管理系统C.数据库管理系统包括数据库和数据库系统D.三者没有明显的包含关系39.有以下程序:void ss(char *s,char t)while(*s)if(*s=t)*s=t-a+A;S+;main()char strl100=“abcddfefdbd“,c=d:ss(strl,c);printf(“% s/n“ ,strl);程序运行后的输出结果是()。(分数:2.00)A.ABCDDEFEDBDB.abcDDfeDbDC.abcAAf
17、efAbAD.Abcddfefdbd40.已知:int t=0;while(t=1).则以下叙述正确的是()。(分数:2.00)A.循环控制表达式的值为 OB.循环控制表达式的值为 1C.循环控制表达式不合法D.以上说法都不对二、填空题(总题数:14,分数:30.00)41.对于顺序存储的栈,因为栈的空间是有限的,在 1 运算时,可能发生栈的上溢。(分数:2.00)填空项 1:_42.在最坏情况下,堆排序需要比较的次数为 1。(分数:2.00)填空项 1:_43.在深度为 S 的满二叉树中,叶子结点的个数为 1。(分数:2.00)填空项 1:_44.结构化程序设计方法的主要原则可以概括为自顶向
18、下、逐步求精、_和限制使用 goto 语句。(分数:2.00)填空项 1:_45.在数据库管理系统提供的数据定义语言,数据操纵语言和数据控制语言中,_负责数据的模式定义与数据的物理存取构建。(分数:2.00)填空项 1:_46.若变量 a、b 已定义为 int 类型并赋值 21 和 55,要求用 printf 函数以 a=21,b=55 的形式输出,请写出完整的输出语句 1。(分数:2.00)填空项 1:_47.执行以下程序时输入 1234567CR,则输出结果是_。#include stdio.hmain()int a=1,b;scanf(“%2d%2d“,a,b);printf(“%d%d
19、/n“,a,b);(分数:2.00)填空项 1:_48.阅读下面语句,则程序的执行结果是_。#include “stdio.h“main()int a=-1,b=1,k;if(+a0)!(b-=0)printf(“%d,%d/n“,a,b);else printf(“%d,%d/n“,b,a);(分数:2.00)填空项 1:_49.下面程序的功能是输出数组 s 中最大元素的下标,请填空。main()int k,p,s=1,-9,7,2,-10,3):for(p=0,k=p;p6;p+)if(spsk)_printf(“%d/n“,k);(分数:2.00)填空项 1:_50.以下程序的输出结果是
20、_。void reverselint al,int n)int i,1;for(i=0;in/2;1+)t=ail;ai=an-1-i;an-1-i=t;main)int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0;reverse(b,8);for(1=6;i10;i+)s+=bi;printf(“% d/n“);(分数:2.00)填空项 1:_51.以下程序的输出结果是_。#include stdio.h#include string.hchar *fun(char*t)char *p=t;return (p+strlen(t)/2);main()char *str
21、=“abcdefgh“;str=fun(str);puts(str);(分数:2.00)填空项 1:_以下函数 rotate 的功能是:将 a 所指 N 行 N 列的二维数组中的最后一行放到 b 所指二维数组的第 0 列中,把 a 所指二维数组中的第 0 行放到 b 所指二维数组的最后一列中,b 所指二维数组中其他数据不变。#define N 4void rotade(int aN,int b1N)int i,j;for(i=0;iN;i+)biN-1= (12) ; (13) =aN-1i;(分数:4.00)填空项 1:_填空项 1:_52.下面程序的功能是:将字符数组 a 中下标值为偶数的
22、元素从小到大排列,其他元素不变。请填空。#includestdio.h#includestring.hmain()char a=“clanguage“,t;int i,j,k;k=strlen(a);for(i=0;i=k-2;1+=2)for(j=1+2;j=k;j+=2)if_ t=ai;ai=aj;aj=t;puts(a);printf(“)n“);(分数:2.00)填空项 1:_53.以下程序的输出结果是_。#include stdio. hmain()int a5=2,4,6,8,10,*p;p=a:p+:printf(“%d“,*p);(分数:2.00)填空项 1:_二级 C 语言
23、笔试-287 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.以下定义语句中正确的是( )。(分数:2.00)A.int a=b=0;B.char A=65+1,b=b; C.float a=1,*b=a,*c=b;D.double a=0.0;b=1.1;解析:解析 本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间要用逗号隔开,因此选项 A)和 D)错误。在选项 C)中,变量 c 是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量 b,故选项 C)错误。2.设有定义:char p=1,2,3),*q=p;,以下不
24、能计算出一个 char 型数据所占字节数的表达式是( )。(分数:2.00)A.sizeof(p) B.sizeof(char)C.sizeof(*q)D.sizeof(p0)解析:解析 在本题中,p 和 q 同为指向字符类型数据的指针。*q 和 p0同为字符型数据。选项 B)、C)和 D)都符合题目的要求;选项 A)计算得出的是指针类型数据所占的内存字节数。3.算法具有五个特性,以下选项中不属于算法特性的是( )。(分数:2.00)A.有穷性B.简洁性 C.可行性D.确定性解析:解析 本题考查的是算法的特性。一个算法应当具有以下 S 个特性:有穷性;确定性;可行性;有零个或多个输入;有一个或
25、多个输出。简洁性不属于这 5 个特性,所以本题应该选择 B) 。4.有以下程序:#include stdio.h#define N 4void fun(int aN,int b)int i;for (i=0;iN;i+)bi=aii;main)int xN=1,2,3,4,5,6,7,8,9,10,yN,i;fun(x,y);for (i=0;iN;i+)printf(“%d,“,yi);printf(“/n“);程序的运行结果是()。(分数:2.00)A.1,2,3,4,B.1,0,7,0, C.1,4,5,9,D.3,4,8,10,解析:解析 本题考查的是二维数组的定义、赋初值和对二维数组
26、元素的引用。分析程序可知,函数fun()中的 for 循环作用,是将数组前 4 行中的对角线上的元素,即 a00、a11、a22和 a33分别赋到 b0、b1、b2、b3中。在主函数中首先定义了一个 4 行 4 列的二维数组 x,并初始化为1,2,3,4,5,6,7,8,9,10。然后调用 fun()函数,将 x 的对角线元素赋给一维数组y。接着通过循环输出数组 y 中的值。从数组 x 的初始化列表中我们可以看出,这 4 个值依次为1,0,7,0。5.设有部门和职员两个实体,每个职员只能属于一个部门,一个部门可以有多名职员,则部门与职员实体之间的联系类型是( )。(分数:2.00)A.mB.1
27、:m C.m:kD.1:1解析:解析 实体之间的联系类型主要有一对一、一对多、多对多,按题意可知部门与职员之间的联系类型是一对多(1:m),所以本题应选 B) 。6.以下叙述中正确的是( )。(分数:2.00)A.C 程序的基本组成单位是语句B.C 程序中的每一行只能写一条语句C.简单 C 语句必须以分号结束 D.C 语句必须在一行内写完解析:解析 本题考查的是 C 语言的基本概念。C 程序的基本组成单位是函数,所以选项 A)不正确;C程序中一行能写多条语句,所以选项 B)不正确;一条 C 语句可以写在多行上,所以选项 D)不正确。简单C 语句必须以分号结束是正确的,故本题应该选择 C)。7.
28、以下程序执行后 x 的值是( )。main()int x,y=252,1=386,*m=y,*z=i;x=(z=m):printf(“%d“,x);(分数:2.00)A.252B.1C.O D.运行时出错,x 无定值解析:解析 本题考查复合的赋值表达式。指针变量 m 和 z 分别指向整型变量 y 和 i,所以这两个指针变量中存储的地址是不同的。变量 x 接受的是一个关系运算的结果,因为两个地址是不同的,所以“Z=m”的判断结果为 0。故本题应选 C) 。8.以下不合法的字符常量是( )。(分数:2.00)A./018 B./“C./D./xcc解析:解析 本题考查的知识点是字符常量中的转义字符
29、。转义字符是以一个“/”开头的字符序列,它只代表一个字符。在选项 A)中,“/”后跟着三个数字,是表示一个 ASC码值等于这三位数字所组成的八进制数数值的字符,但是八进制数只能是由 07 这八个数字表示,而选项 A)中出现了数字 8 所以是不合法的。选项 B)是表示一个双引号的转义字符表示方法;选项 C)表示的是一个反斜杆;选项 D)表示一个ASC值为十六进制值 cc 的字符。故应该选择 A)。9.有以下程序:int fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return sum;main()int a=1,2,3,4,5
30、,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“%d/n“,s);程序执行后的输出结果是()。(分数:2.00)A.45B.50C.60 D.55解析:解析 函数 fun 的功能是求数组的 n 个元素之和。fun (a,5)=15。由于 sum 是静态局部变量,所以保持 15 不变,fun(b,4)=45,所以 s=fun(a,5) +fun(b,4) =60。10.关系运算中的选择运算是( )。(分数:2.00)A.从关系中找出满足给定条件的元组的操作 B.从关系中选择若干个属性组成新的关系的操作C.从关系中选择满足给定条件的属性的操作D.和 B)解析:
31、解析 关系运算中的选择运算是从关系中找出满足给定条件的元组的操作;投影运算是从关系中选择若干个属性组成新的关系的操作;连接运算是关系的横向结合。11.面向对象程序设计中程序运行的最基本实体是( )。(分数:1.00)A.对象 B.类C.方法D.函数解析:解析 面向对象程序由若干个对象构成;结构化程序由数据和相应算法构成。12.下列叙述中正确的是( )。(分数:1.00)A.break 语句只能用于 switch 语句B.在 switch 语句中必须使用 defaultC.break 语句必须与 switch 语句中的 case 配对使用D.在 switch 语句中,不一定使用 break 语句
32、 解析:解析 本题主要考查 switch 语句的概念。break 语句除了能用于 switch 语句外,还可以用于循环语句中,因此选项 A) 不正确。在 switch 语句中,可以使用 default 来执行所有 case 均失配时的分支,也可以不使用 default,此时若所有 case 均失配则跳出 switch,因此选项 B) 不正确。在 switch 语句中,每个 case 的作用就是标出一个执行的起点,当符合某个 case 时,程序就从该 case 所标出的起点处开始执行,若没有 break 语句中断执行的话,程序会一直执行到 switch 的最后一条语句,而不是碰到下一个case
33、中断执行。13.若有语句:char *line5;,以下叙述中正确的是( )。(分数:1.00)A.定义 line 是一个数组,每个数组元素是一个基类型为 char 的指针变量 B.定义 line 是一个指针变量,该变量可以指向一个长度为 5 的字符型数组C.定义 line 是一个指针数组,语句中的*号称为间址运算符D.定义 line 是一个指向字符型函数的指针解析:解析 C 语言中比*优先级高,因此 line 先与5结合,形成 line5形式,这是数组形式,它有 5 个元素,然后再与 line 前面的“+”结合,表示此数组是一个指针数组,每个数组元素都是一个基类型为 char 的指针变量。1
34、4.如果进栈序列为 e1,e2,e3,e4,则可能的出栈序列是( )。(分数:1.00)A.e3,e1,e4,e2B.e2,e4,e3,e1 C.e3,e4,e1,e2D.任意顺序解析:解析 由栈“后进先出”的特点可知:A)中 e1 不可能比 e2 先出,C)中 e1 不可能比 e2 先出,D)中栈是先进后出的,所以不可能是任意顺序。B)中出栈过程如下图所示:*15.以下不正确的定义语句是( )。(分数:1.00)A.double x5=2.0,4.0,6.0,8.0,10.0;B.int y5=0,1,3,5,7,9; C.char c1=1,2,3,4,5;D.char c2=x10,/x
35、a,/x8;解析:解析 在一维数组中要注意的是作为下标表达式的常量表达式的值必须大干等于 0,选项 B) 中定义有 5 个元素,但赋值时有 6 个元素,所以是错误的。16.下列关于字符串的说法中错误的是( )。(分数:1.00)A.在 C 语言中,字符串是借助于字符型一维数组来存放的,并规定以字符/0作为字符串结束标志B./0作为标志占用存储空间,计入串的实际长度 C.在表示字符串常量的时候不需要人为在其末尾加入/0D.在 C 语言中,字符串常量隐含处理成以/0结尾解析:解析 /0作为标志占用存储空间,但是不计入串的实际长度。当给一个字符型指针赋值时,赋给这个指针的是这个字符串的地址。17.设
36、有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是( )。(分数:1.00)A.k+ B.k+=1C.+kD.k+1解析:解析 本题考查的知识点是+运算符。+运算符有前缀和后缀两种形式,本题中的选项 C)就是前缀形式,选项 A)是后缀形式。它们的区别在于其表达式的值不同,前缀形式表达式的值为增 1 后的值,而后缀形式表达式的值为增 1 之前的值。又因为选项 B)和 D)的表达式值都是 k 加 1 之后的值,故本题应该选择 A)。18.有以下程序:int fl(int x,int y)return xy?x:y;int f2int x,int y return xy?
37、y:x;main()int a=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d);f=f1(f2(a,b),f2(c,d);g=a+b+c+d-e-f;printf“%d,%d,%d/n“,e,f,g);程序运行后的输出结果是()。(分数:1.00)A.4,3,7 B.3,4,7C.5,2,7D.2,5,7解析:解析 本题考查的是函数的综合应用。程序开头定义了两个函数 f1()、f2(),每个函数都只有一条语句,在 f1()中是“如果 xy 则返回 x 否则返回 y”,即返回两个参数中较大的那一个,f2()则正好相反,返回较小的。主函数的语句 e=f2(f1(a
38、,b),f1(c,d);是使用两次调用 f1()函数的返回值作为f2()函数的参数,并将 f2()的返回值赋给变量 e。a、b 中较大的数是 a 为 4,c、d 中较大的数是 c 为5,4 和 5 中较小的数是 4,所以结果 e=4。同理可以推出 f=3,那么 g=a+b+c+d -e-f=4+3+5+2-4-3=7。故本题应该选择 A) 。19.已有定义:char c;,程序前面已在命令行中包含 ctype.h 文件,不能用于判断 c 中的字符是否为大写字母的表达式是( )。(分数:1.00)A.isupper(c)B.A=c=Z C.A=c=ZD.c=(z-32)(a-32)=c解析:解析
39、 在本题中,选项 B) 实际是先计算关系表达式“A=C”的值是 0 还是 1,再比较该值与字符Z之间的大小关系,显然不能实现题目所要求的功能,而选项 A)、C)、D)都可以。20.下列对于软件测试的描述中正确的是( )。(分数:1.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误 D.软件测试的目的是使程序符合结构化原则解析:解析 软件测试是为了发现错误而执行程序的过程,且为了达到好的测试效果,应该由独立的第三方来构造测试,程序员应尽量避免检查自己的程序。21.若有定义语句:char s10=“1234567/0/0
40、“;,则 strlen(s)的值是( )。(分数:2.00)A.7 B.8C.9D.10解析:解析 本题考查的是字符串的长度。字符数组中可以存放字符串,但字符数组的长度并不是字符串的长度,字符串的长度是指字符数组中存放的有效字符个数,即/0之前的字符数。字符数组 s 中依次存放的字符是:1234567 和 2 个字符串结束标记/O,故字符串的长度是 7,所以应该选择 A) 。22.设有以下语句:char x=3,y=6,z;z=xy2;则 z 的二进制值是()。(分数:2.00)A.00010100B.00011011 C.00011100D.00011000解析:解析 本题考查两个位运算符。
41、按位异或运算符“”是双目运算符,其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为 1。左移运算符“”是双目运算符,其功能是把“”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移动的位数,高位丢弃,低位补 0,并且“”运算符的优先级高于“”。23.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是( )。(分数:2.00)A.if(ab)(bc)k=1; else k=0; B.if(ab)|(bc)k=1; else k=0;C.if(a=b)k=0; else if(b=c)k=1;D.if(ab)k=1;else if(bc)k=1;els
42、e k=0;解析:解析 本题考核的知识点是三目运算符“?:”的运用。三目运算表达式的规则为如果“?”前面的表达式的值为真,则取“:”前的表达式的值,否则,取“:”后面表达式的值。分析题目中给出的表达式可知,如果 ab 和 bc 同时成立,k=1,否则 k=0。所以,4 个选项中选项 A)符合题意。24.以下程序的输出结果是()。#includestdio.hint fun(int n,int*s)int f1,f2;if(n=0)(n=1)*S=1;elsefun(n-1,f1);fun(n-2,f2);*s=f1+f2;void main()int x;fun(6,x);prinf(“/n%
43、d“,x);(分数:2.00)A.7B.13 C.9D.10解析:解析 考查函数的递归调用。n=0 或 n=1 是递归的终止条件,然后利用已知值逐步递推求出未知值。通过传送地址值,在被调用函数中直接改变调用函数中的变量的值。25.若要求定义具有 10 个 int 型元素的一维数组 a,则以下定义语句中错误的是( )。(分数:2.00)A.#define N 10 int aN;B.#define n 5int a2*n;C.int a5+5;D.int n=10,an.; 解析:解析 在选项 D) 中,n 是一个整型的变量。C 语言规定,在一维数组的定义中,其下标只能是常量表达式,不能包含变量
44、。26.阅读下列程序,则在执行后,程序的运行结果为( )。#include “stdio.h“#include “string.h“main()char a30=“nice fo meet you!“;strcpy(a+strlen((分数:2.00)A./2,“ you“);printf(“% s/n“ ,a);A) n解析:解析 考查通过赋值的方式给一维数组赋初值。字符串复制函数 strcpy 调用形式为:strcpy(s1,s2),此函数用来把 s2 所指字符串的内容复制到 s1 所指存储空间中,函数返回 s1 的值,即目的串的首地址;求字符串长度函数 strlen 的调用形式如下:st
45、rlen(s),此函数计算出以 s 为起始地址的字符串长度,并作为函数值返回。注意这一长度不包括串的结束标志。27.设有以下说明语句:typedef structint n:char ch8;PER;则下面叙述中正确的是()。(分数:2.00)A.PER 是结构体变量名B.PER 是结构体类型名 C.typedef struct 是结构体类型D.struct 是结构体类型名解析:解析 本题中,typedef 声明新的类型名 PER 来代替已有的类型名,PER 代表上面指定的一个结构体类型,此时,也可以用 PER 来定义变量。28.结构化程序由三种基本结构组成,三种基本的结构组成的算法( )。(
46、分数:2.00)A.可以完成任何复杂的任务 B.只能完成部分复杂的任务C.只能完成符合结构化的任务D.只能完成一些简单的任务解析:解析 本题考核的知识点是 C 程序的三种基本结构。C 程序由三种基本的结构组成,分别为顺序结构、选择结构和循环结构,这三种结构可以组成任何复杂的 C 程序,即可以完成任何复杂的任务,故选项 B)、选项 C)和选项 D)都不正确。所以,4 个选项中选项 A)符合题意。29.下列数据模型中,具有坚实理论基础的是( )。(分数:2.00)A.层次模型B.网状模型C.关系模型 D.以上三个都是解析:解析 关系模型较之格式化模型(网状模型和层次模型)有以下几方面的优点,即数据结构比较简单、具有很高的数据独立性、可以直接处理多对多的联系,以及有坚实的理论基础。30.下列不属于软件工程的 3 个要素的是( )。(分数:2.00)A.工具B.过程C.方法D.环境 解析:解析 软件工程包括 3 个要素。即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理和文档生成;过程支持软件开发的各个环节的控制和管理。31.下列程序执行后的输出结果是( )。void func(int *a,intb)b0=*a+6;main()int a,b5;a=0; b0=3;func(a,b);printf(