荟萃馆

位置:首页 > 计算机 > C语言

2017年计算机二级《C语言》考前押题密卷

C语言8.93K

以下是应届毕业生考试网整理的2017年计算机二级《C语言》考前押题密卷,供考生参考,更多计算机等级考试相关信息请继续关注应届毕业生计算机等级考试网。

2017年计算机二级《C语言》考前押题密卷

一、选择题

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

A.' 'B.'39'C.','D.' '

参考答案:B

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

2下列函数的类型是( )。

fun(double x)

{float y;

y=3*x-4;

return y;

}

.不确定t

参考答案:A

参考解析:本题考查函数值的类型。在函数调用时,尽管y的类型是float,x的类型是double,但是因为函数定义时没有指定类型说明,系统默认函数值的类型为int型,所以计算后Y的类型是int型。

3软件生命周期是指(  )。

A.软件产品从提出、实现、使用维护到停止使用退役的过程

B.软件从需求分析、设计、实现到测试完成的过程

C.软件的开发过程

D.软件的运行维护过程

参考答案:A

参考解析:软件生命周期(SystemsDevelopmenlLifeCyele,SDlC)是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段

4有如下程序:

main()

f int x=23:

do

{printf(”%d”,x——);}

while(!x);

}

该程序的执行结果是(  )。

A.321B.22C.不输出任何内容D.陷入死循环

参考答案:B

参考解析:本题考查d0-while语句,当X一23时,执行d0后的语句,x一一的表达式值为x=x-1,此时X的值为22,而!X为0,因此while循环不成立,退出,故选择B选项。

5已有定义:char C;,程序前面已在命令行中包含ctype.h文件,不能用于判断e中的字符是否为大写字母的表达式是(  )。

per(c)

B.'A'<一c<='Z'

C.'A'<一c&&c<='Z'

D.c<=('z'-32)&&('a'—32)<=c

参考答案:B

参考解析:选项B先计算关系表达式“『A7<一c”的值是0还是l,再比较该值与字符'z'之间的大小关系,不能实现题目所要求的功能。

6下列叙述中不正确的是(  )。

A.在c语言中调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参

B.在c的函数中,最好使用全局变量

C.外部变量可以在函数之间传递数据

D.自动变量实质上是一个函数内部的局部变量

参考答案:B

参考解析:在程序运行中局部变量所在的函数被调用时,编译系统根据需要临时分配内存,调用结束空间解放;全局变量一经定义,编译系统为其分配固定的内存单元,在程序运行的自始至终都占用固定的单元。在考虑内存未知的情况下,最好不要使用全局变量。

7定义下列结构体(联合)数组:

struet St

{char name[15];

int age;

)a[10]={”ZHA()”,14,”WANG”,15,”LIU”,16,”

ZHANG”,17);

执行语句printf(”%d,%c”,a[2],*(a[3]+2))的输出结果为(  )。

A.15,AB.16,HC.16,AD.17,H

参考答案:C

参考解析:本题考查结构体数组。a[2]为结构体a[2]的age成员,即a[3],name为指向结构体a[3]的flame成员的第一个元素的指针,即指向“2”,(a[3]+2)将指针后移两位指向第三个元素“A”,*(a[3]+2)是取指针所指向地址的内容。

8若变量已正确定义为float型,要通过输入语句:scanf(”%f%f%f”,&a,&b,&c);给a赋值11.0,b赋值22.0,e赋值33.0,不正确的输入形式是(  )。

A.11 22 33

B.11.0,22.0,33.0

C.11.0 22.0 33.0

D.1122

参考答案:B

参考解析:B选项中不应该加“,”号。

9以下叙述中正确的是(  )。

A.在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误地表示

B.C程序由主函数组成

C.C程序由若干函数组成

D.C程序中只允许包含一个函数

参考答案:C

参考解析:整型是没有问题的.实型在存诸的时候,是用科学记数法存的,没有办法得到准确值的,是有一定误差的。C程序是由若干的函数组成,不只有主函数,函数是c程序的基本组成部分。但是C程序中必须有一个而且只能有一个以main(主函数)开头的函数,因为c程序的执行是从main函数开始的,所以正确选项为C。

10C语言中运算对象必须是整型的运算符是(  )。

A.%B./C.!D.**

参考答案:A

参考解析:%既然求余数,运算对象必须是整数。

11下列关于定点数与浮点数的叙述中错误的是(  )。

A.在实数的浮点表示中,阶码是一个整数

B.整数是实数的特例,也可以用浮点数表示

C.实数的补码是其对应的反码在最后一位加1

D.相同长度的浮点数和定点数,前者可表示数的范围要大于后者

参考答案:C

参考解析:正整数的补码与其原码一致;负整数的褂 码是其对应的反码在最后一位加l。

12表达式'5'-'1'的值是(  )。

A.整数4B.字符4C.表达式不合法D.字符6

参考答案:A

参考解析:在C语言中,字符都是变为其对应的ASCIl码值来参加算术运算的,但字符间的相对位置关系还是不变的,字符5和字符1的ASCIl码值相差仍是4。

13有以下程序:

#include

main()

{int a[10]={1,2,3,4,5,6,7,8,9,10),*p=a;

printf(”%a ”,*(p+2));

)

程序的输出结果是(  )。

A.3B.4C.1D.2

参考答案:A

参考解析:*p—a;P指向首地址,*(p+2))往后移

动两个元素,指向3,所以正确答案为A。

14在C语言中,函数返回值的类型最终取决于(  )。

A.函数定义时在函数首部所说明的函数类型

rn语句中表达式值的类型

C.调用函数时主调函数所传递的实参类型

D.函数定义时形参的类型

参考答案:A

参考解析:在C语言中,函数返回的类型最终取决于函数定义时在函数首部所说明的函数类型,与调用函数时主调函数所传递的实参类型和函数定义时形参的类型无关,而retllrn语句表达式的值将强制转换为函数定义时在函数首部所说明的函数类型返回。

15下列程序的运行结果是(  )。

#included

void main()

{int s=0,k;

for(k=7;k>1;k--)

{switch(k)

{case 1:

case 4:

case 7:

s++:

break;

case 2:

case 3:

case 6:break;

case 0:

case 5:

s+=2:

break;

))

print[(”S=%d”,s);

}

A.S=3B.s=4C.s=5D.无输出结果

参考答案:B

参考解析:运行程序,当k一7时switch(7)执行case:7,s+十后S一1,break跳出。k一一,k=7继续循环switch(6),执行case6;直接跳出循环,k一一变成5,继续循环switch(5),执行case5后面的语句s+=2,也相当于s—s+2,此时S为3,break跳出,k变为4,继续循环,执行ease4为空,继续执行case7;s++为4跳出循环,k一一变为3,继续循环,执行case3,空语句往下执行case6,跳出,k一一为2,继续循环,执行case2;空语句往下执行ease3,空语句再执行case7,跳出循环,k一一为1不符合循环,退出,此时s=4。

16设x为int型变量,则执行以下语句后,X的值为(  )。

x=10;x=x-=x-x:

A.10B.20C.40D.30

参考答案:A

参考解析:执行x—X--=X--x语句可写成x=x一(x—x),可看出结果为10,故A选项正确。

17有以下程序:

#include

void WriteStr(char**str)

{FILE*fp

fp=fopen(fn,”w”);fputs(str,fp);fclose(fp);)

main()

{ WriteStr(””,”start”);

WriteStr(””,”end”);)

程序运行后,文件中的内容是(  )。

te t

参考答案:B

参考解析:用”w”方式打开文件,意思是如果文件名相同则覆盖原来的文件,所以当再次输入时覆盖了第一次的内容,B选项正确。

18若程序中有宏定义行:#define N 100,则以下叙述中正确的是(  )。

A.宏定义行中定义了标识符N的值为整数100

B.在编译程序对C源程序进行预处理时用100替换标识符N

C.对C源程序进行编译时用100替换标识符N

D.在运行时用100替换标识符N

参考答案:B

参考解析:C语言中,凡是以“#”号开头的行,都称为“编译预处理”。对c源程序进行编译前,由编译预处理程序对这些编译预处理命令进行处理。

19合法的八进制数是(  )。

A.0B.028C.-077D.01.0

参考答案:A

参考解析:八进制数里没有8,7完了就要进位的,并且八进制里没有小数位的。因此选项A是正确的。

20以下选项中不合法的用户标识符是(  )。

A._tfC.A$

参考答案:C

参考解析:c语言规定标识符只能由字母、数字、下划线组成,并且只能由字母或下划线开头,不能以数字开头。c项中包含$特殊符号,所以c项不合法。

21若有以下程序:

#include

void fun(float*a,float*b)

( float w;

*a=*a+*a;w= *a;*a= *b;*b=W;

}

main()

{ float x=2..0,y=3.0,*px=&x,*py=&y;

fun(px,py);printf(”%,%2.0fkn”,X,y);

)

程序的输出结果是( )。

A.4,3B.2,3C.3,4D.3,2

参考答案:C

参考解析:include

voidfun(float*a,float*b)//a即指向px的指针,b即指向py的指针,则*a指向x,*b指向y

{

floatW;

*a-*a+*a;//将x地址存放的数据自加,x变为4

W=*a:*a=*b:*b=w;//将x和Y地址里面的数据互换,则x变

为3,Y变为4)

main(){

floatx=2.0,y=3.0,*px=&x,*py=&-y;//px和py分别是指向X和Y地址的指针

fun(px,PY);

printf(”%,% ”,x,y);//%2.0f表示结果前面有2个空格,小数点后有0位,即保留到个位}

22下列程序的运行结果是(  )。

#include

#define ADD(x)X+X

main()

{ int m=1,n=2,k=3:

int s=ADD(m十n)*k;

printf(”s=%d”,s):

}

====25

参考答案:B

参考解析:本题考查带参数的宏的定义:“#defineADD(x)X+x”中x代表m+n,故s写成s=m+n+m+r*k=l+2十1+2*3=l0。

23若有以下说明,则(  )不是对strcpy库函数正确的调用。

strcpy库函数用于复制一个字符串:char*str1==”abed”,str1[10],*str3="hijklmn",*str4[-2],*str5=”aaaa”;

py(str2,str1)

py(str3,str1)

py(str1,str2)

py(str5,str1)

参考答案:C

参考解析:strcpy(s1,s2)函数的功能是将字符串s2复制到字符串s1中。要保证s1存储区能容纳下s2字符串。

24C语言中,字符(char)型数据在微机内存中的存储形式是(  )。

A.反码B.补码IC码l码

参考答案:D

参考解析:其他3个是用来进行数值处理的。

25有以下程序:

#include

main()

{int a[J一{1,2,3,4,5,6,7,8,9,10,11,12),*P=a

+5;

*q=NULL;+q=*(p+5);

printf(”%d%d ”,*q,*q);

}

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

A.运后后报错B.6 6C.6 11D.5 10

参考答案:A

参考解析:本题中首先定义了一个一维数组。并初始化,由于定义该数组的时候省了长度,因此该数组的长度为初始化时候赋初值的个数即为12。数组名a代表数组的首地址,所以*p-a+5语句使得P指向数组的第6个元素,而在程序中定义了一个指针q并让它指向空,实际上程序并没有在内存中为指针q开辟存储空间,这样给q赋值不允许的,故该程序运行后报错。第25题 笔记记录我的笔记(0) | 精选笔记(11)选择笔记标签:试题内容(11)答案解析(0)

26有以下程序:

#include

main()

{int i,X[3][3]={1,2,3,4,5,6,7,8,9};

for(i=0;i<3;i++)printf(”%d,”,x[i][2-i]);

{

程序的输出结果是(  )。

A.1,5,9,B.1,4,7,C.3,5,7,D.3,6,9,

参考答案:C

参考解析:即输出xE03[2]x[1][1]x[2][o]分别为357。

27有以下程序:

main()

{int a=0,b=10,c=0,d=0;

if(a=1)b=1;c=2;

else d=3:

printf(”%d,%d,%d,%d ”,a,b,c,d);

}

程序输出(  )。

A.0,1,2,0B.0,0,0,3C.1,1,2,0D.编译有错

参考答案:D

参考解析:语法错误。else与if之间不应再用其他语句,如果满足if条件,则继续执行if后面的语句;不满足就执行else语句。

28下列程序输出结果是(  )。

#include%stdio.h>

main()

{char aE3一{'a','b','c','d','e','f','o');

int i,j;

A.7,7B.7,6C.6,6D.6.7

参考答案:B

参考解析:本题要注意sizeof()和strlen()的区别,sizeof()函数的功能是返回字符串所占的字节数,strlen()函数的功能是返回字符串长度,'o'是一个转义符,它占存储空间,但不计入串的长度。

29有以下程序

#include

int a=1:

int f(int c)

{ static int a=2;

c=c+1.

return(a++)+c;

}

main()

{ int i,k=0;

for(i=0;i<2;i++){int a=3;k+=f(a);)

k+=a;

printf(”%d ”,k);

程序运行结果是(  )。

A.14B.15C.16D.17

参考答案:A

参考解析:在主函数中,k的初值为0,首先调用函数f(3),返回值为6,k的值变为6,而函数intfun(intc)中的局部静态变量a等于3。第二次调用函数f(3)时,返回值为7,所以k-6+7—13。退出循环语句,k再加上全局变量a的值1,其最终的值为14。

30按照“先进后出”原则组织数据的结构是(  )。

A.队列B.栈C.双向链表D.二叉树

参考答案:B

参考解析:栈是线性表的一种,其插入和删除运算都只在表的一端进行。进行插入、删除的一端称为栈顶,封闭的一端称为栈底。栈顶元素按先进后出的原则组织数据,它是最后插入的.元素,不是最后被删除的元素。

31若整型变量a、b、c、d中的值依次为2、2、3、4,则条件表达式a

A.1B.2C.3D.4

参考答案:C

32若有定义:“int*P,x=0,*P,P=&x;”,则语句“printf(”%d ”,*p);”的输出结果是(  )。

A.随机值B.0C.x的地址D.P的地址

参考答案:B

参考解析:*P的意思是取其指向地址的内容,P是指向x地址的指针,因此输出*P也就是输出X的内容,即0,故选择B选项。

33下列程序中C的二进制值是( )。

char a=2,b=4,c;

c=a^b>>2;

A.00000011B.00010100C.00011100D.00011000

参考答案:A

参考解析:本题主要考查右移运算和按位异或。把b化为二进制数为00000100,右移两位后为00000001,a的二进制为00000010,两者异或为00000011。

34有下列程序:

main()

{char*p[]={¨3697”.”2584”);

int i,j;long ntlm=0;

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

{ j=0;

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

{if((p[i][j]-'')%2)num=10*num+p

[j][j]-'0';

j+=2;

}

}

print[(“%d ”,num);

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

A.35B.37C.39D.3975

参考答案:D

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

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

A.*(*(a+i)+j)B.(a+i)[j]C.*(a+j+j)D.*(a+i)+j

参考答案:A

参考解析:通过地址来引用数组元素的方法有下列5种:①a[i][j];②*(a[i]+J);③*(*(a+i)+j);④*(aEiJEj]);⑤(&a[o]EoJ+3*i十j)。故A正确。

38设有以下语句:

int a=1,b=2,c;

c=a^(b<<2);

执行后,c的值为( )。

A.6B.7C.8D.9

参考答案:D

参考解析:本题考查两个知识点,按位异或左移把b左移2位化成二进制c=a^(b<<2)=a^(oooolo<<2)=a^o01000=0000001^001000=9,故选择D。

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

A.i*m+j-1B.i*m+jC.j*m+iD.i*m+j+1

参考答案:B

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

40已知大写字母A的ASCIl码是65,小写字母a的ACSII码是97。下列能将变量C中的大写字母转换为对应小写字母的语句是(  )。

A.c=(c-'A')%26+'A'

B.C=c+32

C.c=c-'A'+'A'

D.c=('A'+C)%26—'a'

参考答案:B

参考解析:根据ASCIl码选项可知大写字符A与小写字符a的ASCIl码相差32,而选项D中应该是加上'a’,选项A和C左侧的表达式都是大写字符c与大写字符A的差与…a的ASCIl代码的和就是小写字符c的ASCIl代码。