当前位置:学者斋 >

计算机 >C语言 >

C语言备考计算机二级之选择题及答案2017

C语言备考计算机二级之选择题及答案2017

题目不能做过就忘,一定要善于总结经验,发现规则。下面是小编整理的C语言备考计算机二级之选择题及答案,欢迎练习!

C语言备考计算机二级之选择题及答案2017

1.常采用的两种存储结构是(  )。

A.顺序存储结构和链式存储结构

B.散列方法和索引方式

C.链表存储结构和数组

D.线性存储结构和非线性存储结构

2.结构化程序设计主要强调的是(  )。

A.程序的规模

B.程序的效率

C.程序设计语言的先进性

D.程序的易读性

3.在面向对象方法中,(  )描述的是具有相似属性与操作的一组对象。

A.属性

B.事件

C.方法

D.类

4.有下列二叉树.对此二叉树前序遍历的结果为(  )。

DBEYZ

XYZCD

EFXY7

ECFXZ

5.C语青的基本单位是(  )。

A.函数

B.过程

C.子程序

D.子函数

6.算法分析的目的是(  )。

A.找出数据结构的合理性

B.找出算法中输入和输出之间的关系

C.分析算法的易懂性和可靠性

D.分析算法的效率以求改进

7.用链表表示线性表的优点是(  )。

A.便于随机存取

B.花费的存储空间较顺序存储少

C.便于捅入和删除操作

D.数据元素的物理顺序与逻辑顺序相同

8.能正确表示“当x的取值在[1,10]和[100,110]范围内为真,否则为假”的表达式是(  )。

A.(x>=1)&&(x<=10)&&(x>=100)&&(X< =110)

B.(x>=1)||(x<2 10="" x="">=100)||(x<=1l0)

C.(x>=1)&&(x<=10)||(x>=100)&&(x<= 110)

D.(x>=1)||(x<=10)&&(x>=100)||(x<=l 10)

9.以下有4组用户标识符,其中合法的一组是(  )。

-sub

Case

B.4d

DO

Size

C.f2_G3

IF

abc

void

define

10.语句:“printf("%d",(a=)&&(b=-2));”的输出结果是(  )。

A.无输出

B.结果是不确定

C.-1

D.1

11.当c的值不为0时,在下列选项中不能正确将c的值赋给变量a、b的是(  )。

A.c=b=a;

B.(a=c)||(b=c);

C.(a=c)&&(b=c);

D.a=c=b;

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

main(  )

{ int a=3:

printf("%dn",(a+a-=a*a));

}

A.-6

B.12

C.0

D.-12

13.以下能正确定义一维数组的选项是(  )。

a[5]=(0,1,2,3,4,5);

a[]={0,1,2,3,4,5);

a={’A ’,’B’,’C’};

a[5]="0123";

14.有以下程序段:

int x=3;

do

{printf("%d",x-=2);)

while(!(--x));

其输出结果是(  )。

A.1

B.3 0

C.1 -2

D.死循环

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

void fun(int*X,int y)

{ printf("%d%d",*x,*y);*x=3;*y=1;}

main(  )

{ int x=1,y=2;

fun(&y,&x);

printf("%d%d",x,y);

}

A.2 1 4 3

B.1 2 1 2

C.1 2 3 4

D.2 1 1 2

16.对两个数组a和b进行下列初始化:

char m[]1="l234567":

char n[]={’1’,’2 ’,’3’,’4 ’,’5’,’6’,’7’);

则下列叙述正确的是(  )。

A.数组m与数组n完全相同

B.数组m与数组n长度相同

C.数组m比数组n长1

D.数组m与数组n中都存放字符串

17.假定所有变量均已正确说明,下列程序段运行后x 的值是(  )。

a=b=c=0;x=12;

if(!a)x--;

else x=5:

if(c)x=3:

else x=4:

A.11

B.4

C.12

D.3

18.有以下程序:

main(  )

{char a=’a’,b;

printf("%c,",++a);

printf("%cn",b=a++):

)

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

A.b,b

B.b,c

C.a,b

D.a,c

19.在下列给出的表达式中,与while(E)中的(E)不等价的表达式是(  )。

A.(!E==0)

B.(E>0||E<0)

C.(E==0)D.(E!=0)

20.有下列程序:

main(  )

{char s[]="abcde";

s+=2:

printf("%dn",s[0]);

}

执行后的结果是(  )。

A.输出字符a的ASCII码

B.输出字符c的ASCII码

C.输出字符c

D.程序出错

21.下列选项中非法的字符常量是(  )。

A.’t’

B.’39’

C.’,’

D.’n ’

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

main(  )

{ char ch[3][4]={"123","456","78"),*p[3];int i;

for(i=0;i<3;i++)p[i]=ch[i];

for(i=0;i<3;i++)printf("%s",p[i]);}

A.123456780

B.123 456 780

C.12345678

D.147

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

main(  )

{ char w[][10]={"ABCD","EFGH","IJKL","

MNOP"),K;

for(k=1;k<3;k++)printf("%sn",w[k]);

FGH

KL

EFG

U

JK

O

UKL

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

union myun

{ struct

{int x,y,z;)u;

int k:

}a;

main(  )

{ a.u.x=4;a.u.y=5;a.u.z=6;

a.k=0;

printf(%dn",a.u.x);

}

A.4

B.5

C.6

D.0

25.若有以下定义和语句:“double r=99,*p=&r;*P =r;”,则以下正确的叙述是(  )。

A.两个*p含义相同,都说明给指针变量p赋值

B.在“double r=99,*p=&r;”中,把r的地址赋值给了P所指的存储单元

c.语句“*p=r;”把变量r的值赋给指针变量P

D.语句“*p=r;”取变量r的值放回r中

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

main(  )

{int x=0.5;char z=’a’;

printf("%dn",(x&1)&&(z<’2’));}

A.0

B.1

C.2

D.3

27.若希望下列的程序运行后输出25,程序空白处的正确选项是(  )。

main(  )

{int id=50,a[]=(7,4,10,5,8};

for( )

j+=a[i];

printf("%d",j-40);

}

A.i=1;i<4;++i

B.i=l;i<3;++i

C.i=4;i>2;i--

D.i=2;i<4;++i

28.若二维数组a有m列,则在a[i][j]前的元素个数为(  )。

A.i*m+j-1

B.i*m+j

C.J*m+i

D.i*m+j+1

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

#include

int fun(int a)

{int b=0;

static int c=4:

a=c++:b++;

return(a):

main(  )

{int a=2,i,c;

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

c=f(a+1):

printf("%dn",c);

}

A.4

B.7

C.6

D.5

30.定义结构体数组:

struct stu

{int num;

char nameE20];

}X[5]={1,"LI",2,"ZHAO",3,"WANG",4," ZHANG",5,"LIU");

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

printf("%d%c",x[i],x[i][2]);

以上程序段的输出结果为(  )。

A.2A3N4A5U

B.112A3H4I

C.1A2N3A4U

D.2H3A4H5I

31.设int x=7,则~x的值是(  )。

A.-8

B.7

C.-1

D.1

32.有以下程序:

void fun(char*a,char*b)

{a=b; (*a)++; }

main(  )

{char c1=’A ’,c2=’a’,*p1,*p2;

p1=&c1;p2=*c2;fun(p1,p2);

printf("%C%cn",c1,c2);

}

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

33.有以下程序:

int fun(int n)

{if(n==l)return l;

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

34.有以下程序:

void f(int x,int y)

{int t;

if(x  }

main(  )

{int a=4,b=3,c=5;

f(a,b);f(a,c);f(b,c);

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

}

执行后输出结果是(  )。

A.3,4,5

B.5,3,4

C.5,4,3

D.4,3,5

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

main(  )

{char*s="12134211";

int v[4]=(0,0,0,0),k,i;

for(k=0;s[k];k++)

{switch(s[k])

{case’1’:i=0;

case’2’:i=1;

case’3’:i=2;

case’4’:i=3;}

}

v[i]++:

}

for(k=0;k<4;k++)printf("%d",v[k]);

A.4 2 1 1

B.0 0 0 8

C.4 6 7 8

D.8 8 8 8

36.有以下程序:

main(  )

{int x=102,y=012;

printf("%2d,%2dn",x,y);

}

执行后输出结果是(  )。

A.10,01

B.02,12

C.102,10

D.02,10

37.有以下程序:

main(  )

{int x=0,y=5,z=3;

while(z-->0&&++x<5)y=y-l;

printf("%d,%d,%dn",x,y,z);

}

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

A.3,2,0

B.3。2. 1

C.4,3,-1

D.5,2.-5

38.有以下程序:

main(  )

{int i,n=0:

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

{do

{if(i%3) continue:

n++:

}while(!i);

n++:

}

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

}

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

A.n=5

B.n=2

C.n=3

D.n=4

39.下面程序的功能是输出以下形式的金字塔图案:main(  )

{int i,j; *

for(i=l;i<-4;i++)***

{for(j=1;j<=4-i;j++)printf("");

*****

for(j=1;j<=____;j++)printf("

*"); *******

printf("n");

}

}

在下划线处应填入的是(  )。

A.i

B.2*i一1

C.n=2*i+1

D.i+2

40.函数ftell(fp)的作用是(  )。

A.得到fp所指向文件的当前读写位置

B.初始化流式文件的位置指针

c.移动流式文件的位置指针

D.以上答案均正确

  选择题答案与解析

1.A。【解析】线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。

2.D。【解析】程序不光是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,即程序的易读性,“清晰第一,效率第二”。

3.D。【解析】类(class)描述的是具有相似属性与操作的一组对象,具体对象是类的实例。

4.D。【解析】所谓二叉树的前序遍历是指先访问根结点,访问左子树,最后访问右子树,本题中序为DYBEAFCZX,后序为YDEBFZXCA。

5.A。【解析】C语言是函数式的语言。它的基本组成单位是函数,在c语言中任何程序都是由一个或者多个函数组成的。

6.D。【解析】算法分析是指对一个算法的运行时间和占用空间做定量的分析,计算相应的数量级,并用时间复杂度和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。

7.C。【解析】数据的存储结构有顺序存储结构和链式存储结构两种。不同存储结构的数据处理效率不同。由于链表采用链式存储结构,元素的物理顺序并不连续,对于插入和删除无需移动元素,很方便,当查找元素时就需要逐.个元素查找,因此查找的时间相对更长。

8.C。【解析】本题考查逻辑与(&&)和逻辑或(||)运算符的使用。x值在[1,10]之间,C语言中可以写成x值在[100,11O]之间,C语言表达式应写成“(x>=100)&&(x> =110)”;[1,1O]和[100,110]满足任意条件就可以,所以是逻辑或的关系,因此只要将前两个表达式用逻辑或运算符连接起来即可,所以最后的表达式:(x>=1)&&(x<=10) &&(x<=110)。

9.C。【解析】在C语言中,标识符是由字母、数字和下划线组成,其中开头必须是字母或下划线,排除选项A和B。C语言中还规定标识符不能为C语言的关键字,而选项D中的void为关键字。

10.D。【解析】因为在逻辑表达式中,两边的赋值表达式都成立,即值为1,故选择D选项。

11.C。【解析】选项A是先将a的值赋给变量b,再将变量b的值赋给变量c,不合题意;B选项中由于c的值不为0,在将c的值赋给变量a后,表达式a=c的值为1,不再对表达式b=c计算;对于c选项,表达式a=c的值为1,再求表达式b=c的值为1,然后进行逻辑与运算;D选项将b的值赋给c后再赋给e,故选择C选项。

12.D。【解析】本题可以写成:a+a+(a-(a*a)),所以*的优先级最高,其次是-=的,+的优先级最低,因此先求a-=a*a=9,表达式变为a+a+-=9,a即a=a-9= -6,再次变为a+(-6)=-12,故选择D选项。

13.B。【解析】数组1标从0开始,A选项中所赋值的个数超过了数组的长度;C选项中定义a为字符型变量,而不是数组,赋值错误;D选项中,整型数组不能赋字符串。

14.C。【解析】本题考查do-while循环,先执行d0输出的x的值为1,接着执行 while语句,此时--x的值为0,x也为0,而非0为1,循环成立,接着执行do输出X值为- 2,执行--x后,表达式为-2,而!(--x)为0,退出循环。

15.C。【解析】当执行fun函数时,因为参数传递时是地址传递,因此形参值的改变会影响实参中的数,在执行fun 函数时先输出1 2,接着把*X赋3,*y赋4,此时带回主函数中,输出的值为3 4。

16.C。【解析】在m数组中赋值的是字符串,其长度为7,末尾有结束符’ ’,故字节数为8,而n数组中赋的是字符,其长度为7,故C选项正确。

17.B。【解析】本题考查if…else语句。if条件为真则执行后面的表达式,如果if为假则执行else语句。

18.A。【解析】++a与a++的区别是前者先自加再运算,后者是先运算后自加。

19.B。【解析】在while(E)中,表达式E可以是C语言中任意合法的条件表达式,但不能为空,由它来控制循环体是否执行。在选项8中表达式E>0||E<0是一个逻辑表达式。

20.D。【解析】因为字符数组s[]中的数组名s表示的是一个地址常量。所以语句“s+=2;”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。

21.B。【解析】水平制表符中,’t’表示的是横向跳若干格;选项B中,’39’错误,’39 ’是八进制形式表的字符,最大数为7,但其中出现’ 9’,’,’是字符逗号;选项D中,’n ’表示的是换行。

22.B。【解析】第一个for循环的作用是让p指向每行的首地址,第二个for循环的作用是把它指向的字符串输出,故选择B选项。

23.D。【解析】当k=1时,循环成立,输出w[l]的数组即EFGH,接着执行k++后k为2;当k=2时,循环成立,输出w[2]的数组即IJKL,接着执行k++后,k为3;当k= 3时,循环不成立,退出。

24.D。【解析】因为a是结构体变量,最后一次输入的值为结构体中的值,即a中的任何一个值都为0。

25.B。【解析】在定义*p=&r时,是表示r的地址赋给了p所指的存储单元,因此选项B正确。

26.B。【解析】(x&1)&&(z<’ 2 ’)=(0.5&1)&&(’a’ <’z’)=1&&1=1,故选择B选项。

27.D。【解析】要想使程序输出25,则j-40=25,j=65,而j初值是50,所以填入for循环的语句,使引用的数组元素累加65-50=15即可,D选项中,i下标从0开始,i=2指向第3个数50+a[2]=50+10=60,继续循环60+a[3]= 60+5=65,此时i=4跳出,循环结束。

28.B。【解析】二维数组的元素可以看成是按矩阵形式存放的,数组第一维的下标是i,说明它前面还有i行,有i* m个元素,数组第二维的下标是j,说明它前面还有j列,有j 个元素,所以共有i*m+j个元素。

29.D。【解析】static变量是局部度量,函数无法修改,所以当i=1时,第2次进入f函数时c=5,所以最终main(  ) 函数中C的值为5。

30.A。【解析】本题主要考查结构体数组的使用。x [i]为结构体x[i]中的hum成员,x[i][2]是结构体x[i]中name成员的第3个元素。程序执行循环过程时:第1次循环,i=1,输出x[i],x[1][2]的值;第2次循环,i=2,输出x[2],x[2][2]的值,即3N;第3 次循环,i=3,输出X[3],x[3][2]的值,即4A;第4 次循环,i=4,输出x[4],x[4][2]的值,即5U。

31.A。【解析】本题主要考查按位求反运算和C语言正负数的表示,“O”代表正数,“1”代表负数;x=7的二进制为00111,第一个0代表正数,~x为11000,第一个l代表负数,值为8。

32.A。【解析】函数fun的.作用是将指针a指向指针b 的内容,然后将该内容加1。执行语句“fun(p1,p2);”后,pl 和p2指向的地址并未改变,只是将p2指向的存储单元的值增加l。所以,答案是A。

33.A。【解析】函数int fun(int n)的功能是求1+2+…+n的值并返回。所以执行程序时,给变量x输入10后,执行语句“x=fun(x);”,X的值将变为1到10中10个整数的累加和,即55。

34.D。【解析】a、b、C都是按值传递给函数f,函数f不能改变它们的值。所以,a、b、t的值仍然是4、3、5。

35.B。【解析】本题考查switch,case语句,当k=0时,循环体成立,执行switch后表达式的值为’1’,执行case’1 ’,i的值为0,因为没有break语句,继续执行其后的语句,到最后一个语句时i的值为3,此时v[i] ++,v[3]=1,接着执行k++ 后,k的值为1,当k=1时,循环成立。执行switch后的表达式的值为’2 ’,执行case’2’,i的值为1,因为没有break语句,继续执行其后的语句,到最后一小语句时,i的值为3,此时v[i] ++,v[3]=2,接着执行k++后,k的值为2,依次下去,case

’4 ’也会执行,最后i的值一定为3,到v[3]=8时循环结束,而v[0]~v[2]的值一直没有变化,故选择8选项。

36.C。【解析】x的值为寸进制数102,而Y的值为八进制数012,根据题意将y用十进制表示为10%md,rn为指定输出数据的宽度,若位数小于m则左端补以空格,若位数大于m则按实际输出。所以答案是C。

37.B。【解析】while语句执行如下:

当z=3,x=0时,表达式Z-->0 &&++x<5为真,z的值变为2,x的值变为1,执行语句“y=y-1;”,y的值变为4;

当z=2,x=1时,表达式z-->O&&++x<5为真,z的值变为1,x的值变为2,执行语句“y=y-1;”,y的值变为3;

当z=1,x=2时,表达式z-->0&&++x<5为真,z的值变为0,X的值变为3,执行语句“y=y-1;”,y的值变为2;

当z=0,x=3时,表达式z-->0为假,表达式(Z-->O&&++x<5)为假,z的值为-1,不进行++x<5的判断,不执行语句y=y-1;;

所以x的值为3,y的值为2,z的值为-1。答案为B。

38.D。【解析]continue语句的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。

39.B。【解析】对于第i行,程序先输出4-i个空格,然后输出2×i-1个"*",所以答案是B。

40.A。【解析】位置指针当前值函数ftell(  )的基本调用格式为ftell(fp)。

ftell函数的功能:得到fp所指向文件的当前读写位置,即位置指针的当前值,如果函数的返回值为-1L,表示出错。

  • 文章版权属于文章作者所有,转载请注明 https://xuezhezhai.com/jsj/cyuyan/go6x9v.html