计算机二级C语言选择题及答案解析2017

学习犹如逆水行舟,不进则退。同学们要保持学习哦。下面是小编整理的计算机二级C语言选择题及答案解析,欢迎阅读!

计算机二级C语言选择题及答案解析2017

1.算法的空间复杂度是指(  )。

A.算法程序的长度

B.算法程序中的指令条数

C.算法程序所占的存储空间

D.算法执行过程中所需要的存储空间

2.下列叙述中正确的是(  )。

A.一个逻辑数据结构只能有一种存储结构

B.逻辑结构属于线性结构,存储结构属于非线性结构

C.一个逻辑数据结构可以有多种存储结构,且各种存诸结构不影响数据处理的效率

D.一个逻辑数据结构可以有多种存储结构,且各种存诸结构影响数据处理的效率

3.简单的交换排序方法是(  )。

A.快速排序

B.选择排序

c.堆排序

D.冒泡排序

4.关于结构化程序设计原则和方法的描述错误的是(  )。

A.选用的结构只准许有一个入口和一个出口

B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现

c.不允许使用GOTO语句

D.语言中若没有控制结构,应该采用前后一致的方法来模拟

5.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和(  )。

A.可重用性差

B.安全性差

C.非持久性

D.冗余性

6.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是(  )。

A.模拟现实世界中不同事物之间的联系

B.强调模拟现实世界中的算法而不强调概念

C.使用现实世界的概念抽象地思考问题从而自然地解决问题

D.不强调模拟现实世界中的算法而强调概念

7.对如下二叉树进行后序遍历的结果为(  )。

EF

FC

CF

CA

8.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指(  )。

A.模块间的关系

B.系统结构部件转换成软件的过程描述

C.软件层次结构

D.软件开发过程

9.下面描述中,不属于软件危机表现的是(  )。

A.软件过程不规范

B.软件开发生产率低

C.软件质量难以控制

D.软件成本不断提高

10.下列描述错误的是(  )。

A.继承分为多重继承和单继承

B.对象之问的通信靠传递消息来实现

C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征

D.类是具有共同属性、共同方法的对象的集合

11.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是(  )。

包含DBS和DBMS

包含DB和DBS

包含DB和DBMS

D.没有任何关系

12.下列合法的声明语句是(  )。

abc=50;

le int=3+5e2.5;

do=1L;

t 3 asd=3e一3;

13.设x、y和z是int型变量,且x=4,y=6,z=8,则下列表达式中值为0的是(  )。

A.x&&y

B.x<=y

C.x||y+z&&y—Z

D.!((x  14.若ch为char型变量,k为int型变量(已知字符a的

ASCII码是97),则执行下列语句后输出的结果为(  )。

cb=’b’;

k=10;

printf("%X,%o,”,ch,ch,k);

printf("k=%%dn",k);

A.因变量类型与格式描述符的类型不匹配,输出无定值

B.输出项与格式描述符个数不符,输出为0值或不定值

C.62,142,k=%d

D.62,142,k=%10

15.有下列程序:

fun(int X,int y){return(x+y);}

main()

{int a=1,b=2,C=3,sum;

sum=fun((a++,b++,a+b),c++);

printf("%dn",sum);

}

执行后的输出结果是(  )。

A.6

B.7

C.8

D.9

16.假定X和Y为double型,则表达式x=2,y=x+3/2的值是(  )。

A.3.500000

B.3

C.2.000000

D.3.000000

17.有如下程序:

main()

{ int x=1,a=0,b=0;

switch(x)

{

case 0:b++;

case 1:a++;

case 2:a++.b++;

}

printf("a=%d,b=%dn",a,b);

}

该程序的输出结果是(  )。

A.a=2,b=1

B.a=1,b=1

C.a=1,b=0

D.a=2,b=2

18.下列程序的输出结果是(  )。

main()

{int i=1,j=2,k=3;

if(i++==1&&(++j==3==||k++==

3))

printf("%d%d%dn",i,j,k);

}

A.1 2 3

B.2 3 4

C.2 2 3

D.2 3 3

19.下列程序的输出结果是(  )。

#include

main()

{int a=0,i;

for(i=1;i<5;i++)

{switch(i)

{ case 0:

case 3:a+=1;

case 1;

case 2:a+=2;

default:a+=3;

}

}

printf("%d",i);

}

A.19

B.1

C.6

D.8

20.有以下程序:

main()

{ int x,i;

for(i=l;i<=50;i++)

{ x=i:

if(x%2=0)

if(x%3=0)

if(X%7=0)

printf(”%d,i)”;

}

}

输出结果是(  )。

A.28

B.27

C.42

D.4l

21.以下程序的输出结果是(  )。

main()

{ int a[3][3]=“l,2),{3,4),{5,6)},i,j,s=0;

for(i=1;i<3;i++)

for(j=0;j<=i;j++)s+=a[i][j];

printf(”%dn”,s);

}

A.18

B.19

C.20

D.21

22.有下列程序:

main()

{int k=5:

while(--k)printf("%d",k=1);

printf("n");

}

执行后的输出结果是(  )。

A.1

B.2

C.4

D.死循环

23.若有定义:“int a[2][3];”,则对a数组的第i行第j 列元素的正确引用为(  )。

A.*(*(a+i)+j)

B.(a+i)[j]

C.*(a+i+j)

D.*(a+i)+j

24.下列能正确进行字符串赋值的是(  )。

s[5]={”ABCI)E”);

s[5]={’A’,’B’,’C’,’D’,’E’};

*s;s="ABCDE";

*s;printf("%S",s);

25.现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指定一个链表中连续的3个结点。

struct node

{bar data;

struct node*next;}*p,*q,*r;

现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是(  )。

A.q->next=r->next;P >next=r;r- >next =q;

B.q->next=r;q->next=r->next;r->next=q;

C.q->next=r->next;r->next=q;P->next=r:

D.q->next=q;P->next=r;q->next=r-> next;

26.有下列程序:

main()

{int i,j,x=0;

for(i=0,i<2;i++)

{x++;

for(j=0;j<=3;j++)

{if(j%2)continue;

x++:

}

x++:

}

printf("x=%dn",x);

}

程序执行后的输出结果是(  )。

A.x=4

B.x=8

C.x=6

D.x=12

27.有下列程序:

int funl(double a){return a*=a;)

int fun2(double x,double y)

{double a=0,b=0;

a=funl(x);b=funl(y);return(int)(a+h);

}

main()

{double w;w=fun2(1.1,2.0),……)

程序执行后变量w中的值是(  )。

A.5.21 B.5

C.5.0 D.0.0

28.有下列程序:

main()

{int i,s=0,t[]={1,2,3,4,5,6,7,8,9);

for(i=0;i<9;i+=2)s+=*(t+i);

printf("%dn",s);

}

程序执行后的输出结果是(  )。

A.45

B.20

C.25

D.36

29.有下列程序:

int fun(int n)

{if(n==1)}return 1;

else

return(n+fun(n-1));

}

main()

{int x;

scanf("%d",&x);x=fun(x);printf("%dn",x);

)

执行程序时,给变量x输入10,程序的输出结果是(  )。

A.55

B.54

C.65

D.45

30.有下列程序:

int fun(int x[],int n)

{static int sum=0,i:

for(i 0;i  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("%dn",s):

}

程序执行后的输出结果是(  )。

A.45

B.50

C.60

D.55

31.有下列程序:

main()

{char*p[]={"3697","2584"};

int i,j;long num=0;

for(i=0;i<2:i++)

{j=0;

while(p[i][j]!=’’)

{if((p[i][j]-’ ’)%2)num=1O*num+p

[j][j]-’0’;

j+=2;

}

}

printf("%dn",num);

}

程序执行后的输m结果是(  )。

A.35

B.37

C.39

D.3975

32.以下程序的输出结果是(  )。

main()

{char st[20]="hellot";

printf("%d%dn",strlen(st)of(st));

}

A.9 9

B.5 20

C.13 20

D.20 20

33.若有以下的定义:‘int t[3][2];”,能正确表示t数组元素地址的表达式是(  )。

A.&t[3][2]

B.t[3]

C.t[l]

D.t[2][2]

34.函数fseek(pf,OL,SEEK END)中的SEEK ENE 代表的起始点是(  )。

A.文件开始

B.文件末尾

C.文件当前位置

D.以上都不对

35.下述程序的输出结果是(  )。

#include

main()

{ int i;

for(i=l;i<=10;i++)

{if(i*i>=20)&&(i*i<=100))

break;

}

printf("%dn",i*i);

}

A.49

B.36

C.25

D.64

36.若有定义“int b[8],*p=b;”,则p+6表示(  )。

A.数组元素b[6]的值

B.数组元素b[6]的地址

C.数组元素b[7]的地址

D.数组元素b[o]的值加上6

37.设变量已正确定义,则以下能正确计算f=n!的程序是(  )。

A.f=0:

for(i=1;i<=n;i++)f*=i:

B.F=1:

for(i=l;i<2n;i++)f*=i:

C.f=l:

for(i=n;i>1;i++)f*=i:

D.f=1;

for(i=n;i>=2;i--)f*=i:

38.下述程序执行的输出结果是(  )。

#include

main()

{ char a[2][4];

strcpy(a,"are");strcpy(a[1],"you");

a[0][3]=’&’;

printf("%sn",a):

}

&you

D.&

39.设x=011050,则x=x&01252的值是(  )。

A.0000001000101000

B.1111110100011001

C.0000001011100010

D.1100000000101000

40.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用(双引号)括起时,寻找被包含文件的方式是(  )。

A.直接按系统设定的标准方式搜索目录

B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索

C.仅仅搜索源程序所在目录

D.仅仅搜索当前目录

选择题答案与解析

1.D。【解析】算法的空间复杂度,是指执行这个算法所需的存储空间。算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间、算法执行过程中所需要的额外空间。

2.D。【解析】数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,用的存储结构有顺序和链式结构。用不同的存储结构,其处理的效率是不同的。

3.D。【解析】所谓的交换排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序通过相邻元素的交换,逐步将线性表变成有序是一种最简单的交换排序方法。

4.C。【解析】结构化程序设计的原则和方法之一是限制使用GOT0语句,但不是绝对不允许使用GOT0语句。其他三项为结构化程序设计的原则。

5.D。【解析】文件系统所管理的数据文件基本上是分散、相互独立的。相对于数据库系统,以此为基础的数据处理存在3个缺点:数据冗余大、数据的不一致性、程序与数据的依赖性强。

6.C。【解析】面对象的设计方法的基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。它虽强调模拟现实世界中的概念而不强调算法,但是它鼓励开发者在软件开发的过程中从应用领域的概念角度去思考。

7.D。【解析】所谓的后序遍历是指,首先遍历左子树,然后遍历右子树,最后访问根结点,并且在遍历左、右树时,仍然先遍历左子树,然后遍历右子树,最后访问根点。因此,后序遍历二叉树的过程也是一个递归过程。

8.B。【解析】软件的过程设计是指系统结构部件转换成软件的过程描述。

9.A。【解析】①对软,牛开发的进度和费用估计不准确:②用户对已完成的软件系统不满意的现象时常发生;③软件产品的质量往往靠不住;④软件常常是不可维护的;⑤软件通常没有适当的文档;⑥软件成本在计算机系统总成本中所占的比例逐年上升;⑦软件开发生产率提高的速度远远跟不上计算机应用迅速普能及深入的趋势。

10.C。【解析】对象的封装性是指从外面看只能看到对象的外部特性,而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。

11.C。【解析】数据库系统由如下5个部分组成:数据库(DB)、数据库管理系统fDBMS)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。其中 DB(DataBase)即数据库,是统一管理的相关数据的集合;DBMS即数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,为用户或应用完程序提供访问DB的方法。由以上可知,选C为正确答案。

12.A。【解析】标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。B选项int不是表达变量类型的标识符,它不能再用做变量名和函数名。C 选项do是C语言的一个关键字。D选项标识符只能以字母或下划线开始。

13.D。【解析】本题考查逻辑运算符的使用。当“&&”的两个运算对象都是逻辑1时,表达式返回值才是1;“||” 的两个运算对象至少有一个是逻辑1时,表达式返回值也是1,x  14.C。【解析】第1个printf函数,格式说明的个数是2,而输出项的个数是3,所以对于多余的输出项k不予输出;第2个printf函数,有两个%说明,第1个%后面的字符要原样输出。本题考查printf函数的格式。①“%x”和“%0”分别表示以十六进制和八进制无符合型输出整型数据(不带前导ox或0);②printf函数中格式说明符之前插入的`任何字符都原样输出;③格式说明与输出项的个数,也要相等,如果格式说明的个数少于输出项的个数,则对于多余的输出项不予输出。

15.C。【解析】函数fun(int x,int y)的功能是返回x+y的值。在主函数中,变量a,b,c的初始值分别为1,2,3。因此,逗号表达式“a++,b++,aq b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。

16.D。【解析】在x=2,y=x+3/2中,3/2=1。2+1= 3,因此表达式的值为3,因为x,y为double型变量,故选择D选项。

17.A。【解析】当x为1时,执行case 1,a自加等于1,因为case 1后没有break,接着执行case 2,此时a的值为2,b自加为1,故选择A选项。

18.D。【解析】本题考梦自增运算符“++”、逻辑与运算符“&&”和逻辑或运算符“||”。自增运算符“++”出现在变量之前,表示先使用变量的值加l,再使用变量的值进行运算;出现在变量之后,表示先使用变量的值进行运算,再使用变量的值加l。当逻辑与运算符“&&’’两边的运算对象都为真时,逻辑表达式的值才为真;当逻辑或运算符“||”只要一个值为1,值就为1。根据运算符的优先级,题中应先计算内层括号中的值。++j是先自加后运算,因此运算时j的值等于3,所以表达式++j=3成立,即表达式的值为1;1与任何数都为进行或(||)运算,结果都为1,因此k=3的表达式i++是先运算后自加,因此运算时i为1,所以i++=1成立,自加1后i=2。if语句的条件为真即“1”,所以输出i、j、k的值分别是2,3,3。

19.A。【解析】本题考查switch语句。当i一1时,执行case 1,因为没有遇到break语句,所以依次往下运行,“a=a+ 2=2,a=a+3=5”;当i=2时,执行case 2,因为没有遇到break语句,所以依次往下执行,“a=a+2=7,a=a+3= 10”;当i=3时,执行case 3,a=a+1=11,因为没有遇到break语句,所以依次往下运行,a—a+2—13,a—a+3一l6:当i=4时,执行default,a=a+3=19,结束循环。

20.C。【解析】只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i的值,而从0到50能够同时被2、3、7整除的数只有42,故选择C选项。

21.A。【解析】循环的作用是求行下标从1到2列下标从0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][0]+a [2][1]+a[2][2]=3+4+5+6+0=18。

22.A。【解析】在程序语句中,k的初始值为5,进行第l次while循环后,k自减1为4,非0,执行循环体里的printf语句,输出k,此时k的值变为1。程序执行第2次循环时,k 自减1变为0,为假,退出while循环语句。所以程序的最后结果为1。

23.A。【解析】通过地址来引用数组元素的方法有下列5种:

(1)a[i][j];(2)*(a[i]+j);(3)*(*(a+j)+i);(4)* (a[i][j]);(5)(&aE0][0]q-3*i+j)。故A正确。

24.C。【解析】选项A、B的空间不够;字符串存储要有结束符’’,且要占用一个空间,printf用来输出字符,不能输入字符串。

25.D。【解析】由题目ee线性链表的定义可知,要将q 和r所指的结点交换前后位置,只要使q指向r的后一个结点,p指向r结点,r指向q结点即可。而在选项D由,r-> next=q,这时r指向的节点为q;p->next r,这时p指向的节点为r;q->next=r->next,因为r节点已经指向q,所以执行这个语句后q又指向q,所以选项D不正确。

26.B。【解析】在第1次外层for循环中,首先x++得到x=1。进入到内层for循环,只有循环j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加两次,当退出内层for循环时,x=3,然后执行x++,得到x=4。在进入执行第2次外层for循环中,首先x++得到x=5。进入到内层for循环,只有循环变量j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量X的值自加1两次,当退出内层for循环时,x=7,然后执行x++,得到x=8,所以打印输出变量x的值为8。

27.C。【解析】子函数fun1(double a)的功能是返回a的平方值的整数部分。子函数fun2(double x,double y)的功能是返回X的平方值的整数部分与Y的平方值的整数部分的和。又因为题中变量w的定义为double型,函数fun(2) 的定义为int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。所以双精度型变量w的值为5.O。

28.C。【解析】在for循环语句中自变量i从0开始,每次自加2,执行s+=*(t+i)语句,因为C语言规定数组名做表达式相当于数组的首地址,也就是第一个元素的地址。因此,*(t+i)代表数组的第i+1个元素。所以程序运行的结果是1+3+5+7+9=25,即变量S的值等于25。

29.A。【解析】本题在函数int fun(int n)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量x时,递归调用的过程为

fun(10)=10…fun(9)=104-94-fun(8)=104-9+84- fun(7)

=10+9++8++7++fun(6)=10+9++8+7+6+fun (6)

=10+9++8+7+6+5+fun(4)

=10+9++8+7+6+5+4+fun(3)

=10+9++8+7+6+5+4+3+fun(2)

=10+9++8+7+6+5+4+3+2+fun(1)

=10+9++8+7+6+5+4+3+2=55

30.C。【解析】在函数int fun(int xE],int n)的定义中,变量sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储中占据着永久的存储单元。函数int fun(int x[],int n)的功能是求出数组X[]各个元素的和,所以在j三函数中,调用函数fun(a,5)后,变量sum =1+2+3+4+5=15,当再次调用fun(b,4)后,变量sum= 15+6+7+8+9=45,所以S=l5+45=60。

31.D。【解析】执行第一次for循环时,用表达式p[i] [j]!=’’来判断字符串数组指针P是否到达字符串的结尾,如果没有到达,继续执行while中的语句。if语句表示(p[i][j]-’’)除2的余数不为0时,即字符串所有奇数,执行后面的语句。所以退出第1次for的循环体时,输出为397,执行第2次循环体。对字符串“2584”进行处理,输出结果为5,因而最后输出结果为3975。

32.B。【解析】从题目中可知,’ ’、’t’、’’分别为一个字符,而sizeof是装字节个数的函数,其中包括’O’占的字节,strlen函数是求数组长度的函数;其以’’结束,因此

strlen的值为5,sizeof的值为20。

33.C。【解析】数组的下标是从0开始的,A中越界,行下标和列下标都不能越界;B中,虽然是个地址,但是也同样越界了;选项C中表示的是第一个的首地址;选项D表示的为其元素的值,并不是地址。

34.B。【解析】SEEK_SET代表文件的开始,SEEK_ END代表文件末尾,SEEK_CUR代表文件当前位置。

35.C。【解析】当if执行到第一个满足(i*i>一20) &&(i*i<=100)这个条件的i出现时,通过break语句跳出循环,执行下面的printf语句。

36.B。【解析】指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中p+6指的是将指针向后移动了6个存储单元,即指向b[6],存放的是b[6]的地址。

37.D。【解析】由i"1 1的数字定义可知n!=n*(n-1) *(n-2)*…*1。在选项A中,由于f的初值为0,在for 循环语句中,f依次乘以1,2,3,…,n,最后计算得到f=n! 一0,所以选项A不正确。在选项B中,f的初值为1,在for 循环语句中,f依次乘以1,2,3,…,(n-1),最后计算得到f =(n-1)!,所以选项B不正确。在选项C中,f的初值为1,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项c不正确。在选项D中,f的初值为l,在for循环语句中,f依次乘以n,n-1,n-2,…,2,最后计算得到f=n!,所以选项D正确。

38.A。【解析】strcpy实现的功能是复制,该操作把are 复制到a中,a[0][3]=’&’,且strcpy(a[1],"you")把you 复制到a[1]中,故输出a为“are&you”。

39.A。【解析】本题主要考查按位与运算,x=011050 的二进制形式为00010010000101000,01252的二进制形式为0000001010101010,两者相与得000000100010lO00。

40.B。【解析】#include"文件名",预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。