二级C语言笔试题和面试题答案目及答案

Python017

二级C语言笔试题和面试题答案目及答案,第1张

(考试时间120分钟,满分100分)

一、选择题((1)-(40)每小题1分, (41)-(50)每小题2分, 共60分)

下列各题 A) 、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。

(1) 下列设备中只能作为输入设备的是

A) 磁盘驱动器 B) 鼠标器 C) 存储器 D) 显示器

(2) 下列DOS组合控制键中,能使标准输出同时送到屏幕与打印机的是

A) Ctrl+Break B) Ctrl+P C) Ctrl+C D) Ctrl+H

(3) 通常所说的386机是

A) 8位机 B) 16位机 C) 32位机 D) 64位机

(4) 二进制数01100100转换成十六进制数是

A) 64 B) 63 C) 100 D) 144

(5) 十六进制数100转换成十进制数是

A) 1024 B) 512 C) 256 D) 128

(6) 对于存有重要数据的5.25英寸软盘,防止计算机病毒感染的方法是

A) 不要与有病毒的软盘放在一起 B) 在写保护口贴上胶条

C) 保持软盘清洁 D) 定期对软盘格式化

(7) 在启动DOS系统时,启动盘的根录下必须包含的文件是

A) START.COM B) COMMAND.COM C) FORMAT.COM D) BOOT.COM

(8) DOS系统启动后,下列文件中常驻内存的是

A) DOS.COM B) COMMAND.COM C) DISKCOPY.COM D) SYS.COM

(9) 下列名字中,不能作为DOS磁盘文件名的是

A) JTU B) 93GZ.PRG C) CON D) ATT&T.BAS

(10) 下列命令中属于内部命令的是

A) SYS B) COMP C) DIR D) DISKCOMP

(11) 下列文件名中,能与ABC?.?匹配的是

A) AB12.C B) ABCD.FOR C) ABC.TXT D) ABCD.C

(12) 要列出当前盘当前目录中第三个字符为"B"的所有文件的清单,可使用的命令为

A) DIR **B*.* B) DIR ??B*.? C) DIR ??B.* D) DIR ??B*.*

(13) 设当前盘为C盘,其根目录下有两个子目录D1与D2,且当前目录为D1,若要进入子目录D2,可使用的命令为

A) CD D2 B) CD D2\ C) CD \D2 D) CD D1\D2

(14) 设当前盘为C盘,A盘当前目录为根目录。为了删除A盘目录\WS下扩展名为.TXT的所有文件,可用的命令为

A) DEL WS\*.TXT B) DEL \WS\*.TXT C) DEL A:\WS\?.TXT D) DEL A:WS\*.TXT

(15) 设当前盘为C盘,C盘当前目录为\AAA\BBB\A\B\X。下列命令中能正确执行的是

A) MD \AAA\BBB\A B) MD X C) MD \ D) MD \AAA\BBB\A\B\X

(16) 在下列各组的两个命令中,根据给定的条件,执行效果互相等价的是

A) DEL \DOS 与 RD \DOS(当前盘上有目录\DOS)

B) FORMAT A:与 DEL A:*.*(A盘为启动盘)

C) DISKCOPY A: B: 与 COPY A:*.* B:(A盘为启动盘)

D) COPY F1 F2 与 TYPE F1>F2(当前盘当前目录下有文件F1)

(17) 为了在1.2MB的高密驱动器A中格式化一张360KB的启动盘,可用的命令为

A) FORMAT A: B) FORMAT A:/S/1 C) FORMAT A:/S/4 D) FORMAT A:/S

(18) 要在打印机上输出当前盘当前目录下扩展名为.TXT的所有文件内容,正确的命令为

A) COPY *.TXT PRN B) COPY *.TXT>PRN C) TYPE *.TXT PRN D) TYPE *.TXT>PRN

(19) 设B盘目录结构如下:

设B盘的当前目录为\F2,要将A盘当前目录下的文件P.BAS复制到B盘的F3子目录中,可用的命令为

A) COPY P.BAS B: B) COPY A:P.BAS B:\

C) COPY A:P.BAS B:\F3 D) COPY A:P.BAS B:F3\

(20) 设当前盘为A盘,要将B盘当前目录下的两个文件A.TXT与X.TXT连接后以文件名Y.TXT存放到A盘的当前目录中,可用的命令为

A) COPY A.TXT+X.TXT A:Y.TXT B) COPY B:A.TXT+X.TXT A:Y.TXT

C) COPY B:A.TXT+B:X.TXT >Y.TXT D) COPY B:A.TXT+B:X.TXT Y.TXT

(21) C语言中最简单的数据类型包括

A) 整型、实型、逻辑型 B) 整型、实型、字符型

C) 整型、字符型、逻辑型 D) 整型、实型、逻辑型、字符型

(22) C语言中,运乍对象必须是整型数的运算符是

A) % B) \ C) %和\ D) * *

(23) 为表示关系x≥y≥z,应使用C语言表达式

A) (x>=y)&&(y>=z) B(x>=y)AND(y>=z) C)(x>=y>=z) D)(x>=y)&(y>=z)

(24) 下述对C语言字符数组的描术中错误的是

A) 字符数组可以存放字符串

B) 字符数组中的字符串可以整体输入、输出

C) 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值

D) 不可以用关系运算符对字符数组中的字符串进行比较

(25) 设有如下定义: int x=10,y=3,z则语句

printf("%d\n",z=(x%y,x/y))的输出结果是

A) 1 B) 0 C) 4 D) 3

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

main()

{ int x=10,y=10

printf("%d %d\n",x--,--y)}

A) 10 10 B) 9 9 C) 9 10 D) 10 9

(27) 定义如下变题和数组:

int i

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

则下面语句的输出结果是

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

A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9

(28) 若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为

A) a<>0 B) !a C) a=0 D) a

(29) 阅读程序:

#include

main()

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

p=a

printf("%x\n",p)

printf("%x\n",p+9)}

该程序有两个printf 语句, 如果第一个printf 语句输出的是194, 则第二个printf语句的输出结果是

A) 203 B) 204 C) 1a4 D) 1a6

(30) 设有如下函数定义:

int f(char *s)

{ char *p=s

while(*p!='\0') p++

return(p-s)}

如果在主程序中用下面的语句调用上述函数,则输出结果为

printf("%d\n",f("goodbey!"))

A) 3 B) 6 C) 8 D) 0

(31) 以下说法中正确的是

A) C语言程序总是从第一个的函数开始执行

B) 在C语言程序中,要调用的函数必须在main()函数中定义

C) C语言程序总是从main()函数开始执行

D) C语言程序中的main()函数必须放在程序的开始部分 12 3 4

{ char x=0xFFFFprintf("%d\n",x--)}

A.-32767

B.FFFE

C.1

D.32768

22.下面的函数调用语句中func函数的实参个数是( )。

func((f2v1,v2),(v3,v4,v5),(v6,max(v7,v8)))

A.3

B.4

C.5

D.8

23.语句“printf("akbre"\’hi\’y\\\bou\n")”的输出结果是( )。

A.akbre\’hi\’y ’\\\bou

B.a\bre\’hi\\y\bou

C.re ’hi’you

D.abre’hi’y\bou

24.下面程序输出的是( )。

main()

{ int t=lfun(fun(t))}

fun(int h)

{ static int a[3]={1.2.3}

int k

for(k=0k<3k++)a[k]+=a[k]-h

for(k=0k<3k++)printf("%d",a[k])

printf("\n")

return(a[h])}

A.1,2,3,

1,5,9,

B.1,3,5,

1,3,j,

C.1,3,5,

0,4,8,

D.1,3。5,

-1,3,7,

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

A.预处理命令行必须位于C源程序的起始位置

B.在C语言中,预处理命令行都以“#”开头

c.每个C程序必须在开头包含预处理命令行:#include

D.C语言的预处理不能实现宏定义和条件编译的功能

26.为了避免在嵌套的条件语句if else中产生二义性,C语言规定,else子句总是与( )配对。

A.缩排位置相同if

B.其前面最近的if

C.其后面最近的if

D.同一行上的if

27.设有下列程序段:

char str[]="HelloWorld":

char* plr

ptr=str:

执行上面的程序段后,*(ptr+10)的'值为( )。

A.’\0 ’

B.’0’

C.不确定的值

D.’0’的地址

28.有以下程序:

void swap(char*x,char*y)

{ char t

t=*x*x=*y*y=t

}

main()

{ char*s1="abe",*s2="123":

swap(s1,s2)

printf("%s,%s\n",s1,s2)

}

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

A.123,abe

B.abc.123

C.1bc,a23

D.321,cba

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

#include

main()

{ static char a[]="Languagef",b[]="programe":

char*p1,*p2int k

p1=ap2=b

for(k=0k<=8k++)

if(*(p1+k)==*(p2+k))

printf("%c",*(p1+k)):

}

A.gae

B.ang

C.program

D.有语法错

30.下列程序的运行结果为( )。

#define MAX(x,y)(x)>(y)?(x):(y)

main()

{ int a=2,b=3,C=1,d=3,t:

printf("%d\n",(MAX(a+h,c+d))*100):

}

A.500

B.5

C.4

D.400

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=&c1p2=*c2fun(p1,p2)

printf("%C%c\n",c1,c2)

}

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

A.Ab

B.aa

C.Aa

D.Bb

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("%d\n",

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,%d\n",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=0s[k]k++)

{switch(s[k])

{case’1’:i=0

case’2’:i=1

case’3’:i=2

}

printf("%d\n",num)

}

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

A.35

B.37

C.39

D.3975

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

main()

{char st[20]="hello\0\t\\\"

printf("%d%d\n",strlen(st).sizeof(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=li<=10i++)

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

break

}

printf("%d\n",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=1i<=ni++)f*=i:

B.F=1:

for(i=li<2ni++)f*=i:

C.f=l:

for(i=ni>1i++)f*=i:

D.f=1

for(i=ni>=2i--)f*=i:

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

#include

main()

{ char a[2][4]

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

a[0][3]=’&’

printf("%s\n",a):

}

A.are&you

B.you

C.are

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,x14.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成立,即表达式的值为11与任何数都为进行或(||)运算,结果都为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的空间不够字符串存储要有结束符’\0’,且要占用一个空间,printf用来输出字符,不能输入字符串。

25.D。【解析】由题目ee线性链表的定义可知,要将q 和r所指的结点交换前后位置,只要使q指向r的后一个结点,p指向r结点,r指向q结点即可。而在选项D由,r->next=q,这时r指向的节点为qp->next r,这时p指向的节点为rq->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