当前位置:学者斋 >

计算机 >计算机二级 >

2016最新计算机二级笔试题及答案

2016最新计算机二级笔试题及答案

本文为大家提供的是计算机二级的考试试题,希望能帮助到大家!

2016最新计算机二级笔试题及答案

1)设a、b和c都是int型变量,且a=3、b=4、c=5,则下面的表达式中,值为0的表达式是_______。

A)‘a’&&‘b’ B)a<=b C)a||+c&&b-c D)!((a

1)D

知识点:几种运算符的使用

评析:选项A:‘a’&&‘b’是字符a与b的相与,故不为0。

选项B:a<=b,由题中变量赋值可知,结果为l。

选项c:a||+c&&b-c,此表达式先做算术运算b-c,结果为一1.而+c属于单目运算符,由于c初值为5,经过单目运算符运算后,还是5,下面再进行逻辑与的运算,即5&&-1结果为1(因为C语言中除O代表假外,其他任一个数都代表真),最后a||l,结果为1。

选项D:!((a

2)设有如下程序

#include

main()

{

int **k,*j,i=100;

j=&i; k=&j;

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

}

上述程序的输出结果是_______。

A)运行错误 B)100 c)i的地址 D)j的地址

2)B

知识点:指针变量的引用

评析:j=&i,j的值就是i的地蚍,*j=100,将j的地址赋给k,这时*k=j,那么,**k=*j,而*j=100,所以**k=100,最后的打印结果应当为100。

3)设有以下语句,其中不是对a数组元素的正确引用的是:_______(其中0≤i

int a[10]={0,l,2,3,4,5,6,7,8,9,},*p=a;

A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i))

3)D

知识点:通过指针引用数组元素

评析:观察程序可知.a实际上就是数组a的首地址,所以“*(a+i)”表示的就是数组a中的第i个元素的值,进而,我们可以知道*(*(a+i))必然不是对a数组元素的正确引用。

4)有以下程序:

#include

main(){

char c[6];

int i=0:

for(;i<6;c[i]=getchar(),i++);

for(i=0;i<6;i++)putchar(c[i]);

printf("n");

}

如果从键盘上输入:

ab<回车>

c<回车>

def<回车>

则输出结果为________。

A)a B)a C)ab D)abcdef

b b c

c c d

d d

e

f

4)C

知识点:字符数据的输入、输出

评析:har()

此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。请注意:getchar()只能接受一个字符(回车符也算是一个字符)。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可不赋给任何变量,作为表达式的一部分。

har()

此函数的作用是向终端输出一个字符,也可以输出控制字符,如回车符•使输出的当前位置移到下一行的开头。

本题在输入字符时,ab和c后面的回车符分别赋给了c[2]和c[4],所以,正确答案为C。

5)下面程序

#include

#include

main()

{ char*p1:"abc",*p2="ABC",str[50]= "xyz";

strcpy(str+2,strcat(p1,p2));

printf("%sn",str);

}

的输出是_______。

A)xyzabcABC B)zabcABC

C)yzabcABC D)xyabcABC

5)D

知识点:字符串的连接和拷贝

评析:strcat(字符数组l,字符数组2)的作用是连接两个字符数组中的字符串,把字符串2接到字符串l的后面,结果放在字符数组l中,本题中strcat(p1,p2)函数将*pl和*p2指向的两个串连接了起来,将字符串abcABC放到了*pl所指向的存储单元中:而strcpy(字符数组1,字符串2)函数将字符串2复制到字符数组1中去,本题将字符串abcABC复制到了str+2所指向的存储单元中,即将原str数组中的字符z及z向后的所有字符覆盖,所以在打印输出时,str的值已经等于“xyabcABC”。

6)下面程序

int aa[3][3]={{2},{4},{6}};

main()

{ int i,*p=&aa[0][0];

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

if(i==0)aa[i][i+1]=*p+l;

else ++p;

printf("%d",*p);

}

}

的输出是_______。

A)23 B)26 C)33 D)36

6)A

知识点:for循环语句

评析:观察题目,可以发现,*p=&aa[0][O]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3,*p=2;*p输出的是指针所指向的数组值,此时p所指向的是aa[0][0],输出2,而i=l时执行了++p操作,使指针向后移动指向了aa[0][l],所以在输出*p时应为3。

7)下面程序

main()

{ int x=100,a=10,b=20,okl=5,ok2=0;

if(a

if(b!=15)

if(!okl)x=1;

else if(ok2)x=10;

X=-1;

Ptintf("%dn",x);

}

的输出是_______。

A)-1 B)0 C)1 D)不确定的值

7)A

知识点:判断语句的循环嵌套

评析:第一个判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断……如此循环,在打印输出语句的前一行,程序给变量x赋了值,为一l,所以,无论前期如何变化,最后的x值依然为一l。

8)下面程序

main()

{

int x=32:

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

}

的输出是_______。

A)100 B)160 C)120 D)64

8)D

知识点:位运算

评析:<<是c语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘以2,左移两位相当于该数乘以2的2次方。所以,x<<1=32*2-64。

9)以下程序的输出结果是________。

#include

#define FUDGE(y) 2.84+y

#define PR(a) printf("%d",(int))(a))

#define PRINT l(a) PR(a);putchar(‘n’)

main()

{ int x=2;

PRINT l(FUDGE(5)*X);

}

A)1l B)12 C)13 D)15

9)B

知识点:带参数的宏定义

评析:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换,如果串中包含宏中的形参,则将程序语句中相应的实参代替形参,如果宏定义中的字符串中的字符不是参数字符,则保留,这样就形成了置换的字符串。

根据以上原则,我们将实参带入已经定义的宏中,可以得出答案,最后打印出来的是“12”。

10)以下程序段给数组所有的元素输入数据,请选择正确答案填入:

#include

main()

{

int a[10],i=0;

while(i

:

:

}

A)a+(i++) B)&a[i+l] C]a+i D]&a[++i]

10)A

知识点:格式输入函数scanf()

评析:因为a实际上就是数组a的首地址,而a+x则是数组中第x个元素的地址,所以在四个选项中,选项B和C只能输入一个数据,选项D不能给a[0]输入数据,只有选项A可以完成给数组所有的元素输入数据的任务。

11)字符(char)型数据在微机内存中的存储形式是________。

A)反码 B)补码

C)EBCDIC码 D)ASCII码

11)D

知识点:字符数据在内存中的存储形式

评析:将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码值放到存储单元中。

12)下面程序的输出是________。

typedef union

{ long x[2];

int y[4];

char z[8];

}MYTYPE;

MYTYPE them;

main()

{ printf("%dn",sizeof(them));}

A)32 B)16 C)8 D)24

12)C

知识点:共用体的长度

评析:sizeof(x)是一个标准c函数,它的返回值是x型的数据结构占用的内存字节数。题目中定义了一个共用体,共用体变量在内存中所占的长度等于最长的成员的.长度,所以共用体MYTYPE需要8个字节的存储空间,由它定义的变量的长度当然也是8。

13)不能把字符串:“Hello!”赋给数组b的语句是________。

A)char b[10]={‘H’,‘e’,‘l’,‘l’,‘0’,‘!’};

B)char b[10]={‘h’,‘e’,‘l’,‘l’,‘0’,‘!’};

C)char b[10];strcpy(b,"Hello!");

D)char b[10]="Hello!";

13)B

知识点:给数组赋值

评析:在c语言中,大写字母和小写字母被认为是两个不同的字符,因此,“hello!”和“Hello!”是两个不同的字符串。

14)下面程序的输出是________。

main()

{ int x=3,y=6,a=0;

while(x++!=(y—=1))

{ a+=1;

if(y

}

printf("x:%d,y:%d,a=%dn",x,y,a);

}

A)x=4.v=4,a=1 B)x=5,y=5,a=1

C)x=5,y=4,a=3 D)x=5,y=4,a=l

14)D

知识点:运算符

评析:注意在x++中x值的引用时,这里应当是先引用,后自加,具体执行过程如下:

第一次while循环:x=3与y=5比较,条件为真,执行a=a+1=1;此时,x的值己为4,判断y

第二次while循环:x=4与y=4比较,条件为假,此时x的值已为5,退出while循环,执行printf。

15)下面程序的输出是_______。

main()

{char*s:"12134211";

int vl=0,v2=0,V3=0,v4=0,k;

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

switch(s[k])

{ default:V4++;

case‘1’:vl++:

case‘3’:v3++:

case‘2’:v2++:

}

printf("vl=%d,v2=%d,v3=%d,v4=%dn",vl,v2,v3,V4);

}

A)vl=4,v2=2,v3=l,v4=1 B)vl=4,V2=9,V3=3,V4=l

C)vl=5,v2=8,v3=6,v4=1 D)vl=8,V2=8,V3=8,v4=8

15)C

知识点:switch()语句

评析:当switch后面括弧内的表达式的值与某一个case后面的常量的表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。本题中,for循环的条件是s数组的数组元素值,只要将数组的值一一代入程序逐步求解即可。

16)下面程序的输出是_______。

main()

{int k=ll;

printf("k=%d,k=%o,k=%xn",k,k,k);

}

A)k=11.k=12,k=ll B)k=ll,k=13,k=13

C)k=ll,k=013,k=0xb D)k=ll,k=13,k=B

16)D

知识点:格式字符

评析:在c语言格式字符的输出中,“%d”是以带符号的十进制形式输出整数,即k=ll:“%o”是以8进制无符号形式输出整数(不输出前导符0),即k=13:“%x”是以16进制无符号形式输出整数(不输出前导符0x),即k=B。

17)以下叙述中正确的是_______。

A)c语言比其他语言高级

B)C语言可以不用编译就能被计算机识别执行

c)c语言以接近英语国家的自然语言和数学语言作为语言的表达形式

D)C语言出现的最晚,具有其他语言的一切优点

17)C

知识点:c语言风格

评析:计算机语言分为低级语言、汇编语言和高级语言,c语言属于高级语言,但并不是说c语言比其他语言高级,所以选项A错误;除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B错误;c语言出现于1972年到1973年问,并不是出现最晚的语言,所以选项D也是错误的。

18)下列可用于c语言用户标识符的一组是_______。

A)void define WORD B)a3_b3 _123 Car

C)For -abc IFCase D)2a D0 sizeof

18)B

知识点:c语言的标识符

评析:c语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,所以排除c和D。c语言还规定标识符不能为c语言的关键字,从而选项A是错误的,因为void为关键字。

19)请选出正确的程序段________。

A)int*p B)int*s,k;

Scanf("%d",p); *s=100;

……

C)int*s,k: D)int*s,k;

Char*p,c; char*p,e;

s=&k; s=&k;

p=&c; p=&c;

*p=‘a’; s=p;

…… *s=l;

……

19)C

知识点:指针变量

评析:本题的A和B犯了一个同样的错误,即指针变量p定义后并没有指向具体的变量。也就是说,p中没有确定的地址值,它的值是不可预见的,所指向的单元也是不可预见的,因此不能进行赋值操作。另外,在选项D中,s是int指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变最s。

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