经典c语言面试题目.docx

上传人:b****7 文档编号:24063885 上传时间:2023-05-23 格式:DOCX 页数:42 大小:30.79KB
下载 相关 举报
经典c语言面试题目.docx_第1页
第1页 / 共42页
经典c语言面试题目.docx_第2页
第2页 / 共42页
经典c语言面试题目.docx_第3页
第3页 / 共42页
经典c语言面试题目.docx_第4页
第4页 / 共42页
经典c语言面试题目.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

经典c语言面试题目.docx

《经典c语言面试题目.docx》由会员分享,可在线阅读,更多相关《经典c语言面试题目.docx(42页珍藏版)》请在冰豆网上搜索。

经典c语言面试题目.docx

经典c语言面试题目

一、选择题(

(1)~(10)每小题2分,(11)~(50)每小题1分,共60分)

下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选

项涂写在答题卡相应位置上,答在试卷上不得分。

(1)数据的存储结构是指____D____。

A)存储在外存中的数据  B)数据所占的存储空间量

C)数据在计算机中的顺序存储方式  D)数据的逻辑结构在计算机中的表示

答案:

D

评析:

数据的逻辑结构在计算机存储空间中的存放形式形式称为数据的存储结构(也称数据的物理结构)。

(2)下列关于栈的描述中错误的是___B_____。

A)栈是先进后出的线性表

B)栈只能顺序存储

C)栈具有记忆作用

D)对栈的插入与删除操作中,不需要改变栈底指针

答案:

B

评析:

栈是一种特殊的线性表,又称先进后出表(FILO—FirstInLastOut)。

(3)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是

____D____。

A)冒泡排序为n2  B)冒泡排序为n

C)快速排序为n    D)快速排序为n(n一1)/2

答案:

D

评析:

假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后扫描和n/2遍的从后往前扫描,需要比较次数为n(n-1)/2。

快速排序法的最坏情况比较次数也是n(n-1)/2。

(4)对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为____C____。

A)log2n  B)n/2    C)n    D)n+l

答案:

C

评析:

顺序查找过程中,如果被查找的元素是线性表中的最后一个元素,或者元素不在线性表中,则需要与线性表中所有的元素进行比较。

对长度为n的线性表进行顺序查找,在最坏情况下需要比较n次。

(5)下列对于线性链表的描述中正确的是___A_____。

A)存储空间不一定是连续,且各元素的存储顺序是任意的

B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面

C)存储空间必须连续,且前件元素一定存储在后件元素的前面

D)存储空间必须连续,且各元素的存储顺序是任意的

答案:

A

评析:

在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。

(6)下列对于软件测试的描述中正确的是___C_____。

A)软件测试的目的是证明程序是否正确

B)软件测试的目的是使程序运行结果正确

C)软件测试的目的是尽可能多地发现程序中的错误

D)软件测试的目的是使程序符合结构化原则

答案:

C

评析:

关于软件测试的目的,GrenfordJ.Myers再《TheArtofSoftwareTesting》一书中给出了深刻的阐述,整体来说,软件测试的目的就是尽可能多地发现程序中的错误。

(7)为了使模块尽可能独立,要求___B_____。

A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强

B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱

C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱

D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强

答案:

B

评析:

模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。

软件设计,应尽量做到高内聚,低耦合,有利于提高模块的独立性。

(8)下列描述中正确的是___D_____。

A)程序就是软件

B)软件开发不受计算机系统的限制

C)软件既是逻辑实体,又是物理实体

D)软件是程序、数据与相关文档的集合

答案:

D

评析:

计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。

(9)数据独立性是数据库技术的重要特点之一,所谓数据独立性是指__D______。

A)数据与程序独立存放

B)不同的数据被存放在不同的文件中

C)不同的数据只能被对应的应用程序所使用

D)以上三种说法都不对

答案:

D

评析:

数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。

也就是说,数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。

选项A、B、C三种说法都是错误的。

(10)用树形结构表示实体之间联系的模型是__C______。

A)关系模型  B)网状模型  C)层次模型  D)以上三个都是

答案:

C

评析:

层次模型是最早发展起来的数据库模型,它的基本结构是树形结构。

(11)算法具有五个特性,以下选项中不属于算法特性的是___B_____。

A)有穷性  B)简洁性  C)可行性  D)确定性

答案:

B

评析:

有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性是算法的基本特性。

(12)以下选项中可作为c语言合法常量的是___A_____。

A)-80.  B)-080  C)-8e1.0  D)-80.0e

答案:

A

评析:

c语言的常量分为整型常量、实型常量和字符型常量。

选项A属于实型常量中的十进制小数形式的表示法,是合法的。

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

A)用C程序实现的算法必须要有输入和输出操作

B)用C程序实现的算法可以没有输出但必须要输入

C)用C程序实现的算法可以没有输入但必须要有输出

D)用C程序实现的算法可以既没有输入也没有输出

答案:

C

评析:

算法的特性中包括“有零个或多个输入”及“有一个或多个输出”这两个特性。

一个算法得到的结果就是算法的输出,没有输出的算法是没有意义的,所以一个算法必须至少有一个输出。

(14)以下不能定义为用户标识符的是___D_____。

A)Main  B)_0    C)_int    D)sizeof

答案:

D

评析:

C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。

注意:

大写字母和小写字母被认为是两个不同的字符。

A中Main与主i函数名main不同。

(15)以下选项中不能作为合法常量的是___B_____。

A)1.234e04  B)1.234e0.4  C)1.234e+4D)1.234e0

答案:

B

评析:

指数形式的实型常量要求字每e(或E)之前必需有数字,且e后面的指数必须为整数,所以本题中选项B非法。

(16)数字字符0的ASCII值为48,若有以下程序

main()

{chara=”1″,b=”2″;

printf(“%c,”,b++);

printf(“%d\n”,b-a);

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

A)  3,2  B)50,2  C)2,2  D)2,50

答案:

C

评析l执行语句“printf(“%c,ll,b++);”后,b的值变成字符3,执行“printf(“%d\n”,b-a);”,即‘3’-‘1’。

(17)有以下程序

main(  )

{

intm=12,n=34;

printf(“%d%d”,m++,++n);

printf(“%d%d\n”,n++,++m);

}

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

A)12353514  B)12353513  C)12343514  D)12343513

答案:

A

评析:

执行“printf(“%d%d”m++,++n);”后,输出的是m和n+l的值1235,接着执行

“printf(“%d%d\n”,n++,++m);”输出n和m+l的值3514。

(18)有定义语句:

intb;charc[10];,则正确的输入语句是___B_____。

A)  scanf("%d%s",&b,&C);  B)  scanf("%d%s",&b,C);

C)  scanf("%d%s",b,C);    D)  scanf("%d%s",b,&C);

答案:

B

评析:

scanf函数中的“格式控制”后面应当是地址,而不是变量名。

对于变量,通过地址运算符“&”求出内存中的地址;对于数组c[10],数组名c即为数组在内存中的地址。

(19)有以下程序

main()

{intm,n,p;

scanf(“m=%dn=%dp=%d”,&m,&n,&p);

printf(“%d%d%d\n”,m,n,p);

}

若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,

则正确的输入是___A_____。

A)  m=123n=456p=789    B)  m=123  n=456  p=789

C)  m=123,n=456,p=789  D)  123  456  789

答案:

A

评析:

根据本题的数据输入形式“scanf(“m=%dn=%dp=%d”&m,&n,&p);”说明在输入数据时,必须输入“m=”、“n=”、“p=”字符,且中间不能含有空格。

(20)有以下程序

main()

{inta,b,d=25;

a=d/10%9;

b=a&&(-1);

printf(”%d,%d\n”,a,b);

}

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

A)6,l    B)2,l    C)6,0    D)2,0

答案:

B

评析:

本题中“a=d/10%9;”的值为25/10%9=2;“b=a&&(-1);”为2&&(-1)=1(注意:

-1表示真,只有O才表示假),所以a,b的值分别为2,1。

(21)有以下程序

main()

{

inti=1,j=2,k=3;

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

printf(“%d%d%d\n”,i,j,k);

}

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

A)l23    B)234    C)  223.  D)233

答案:

D

评析:

执行“i++==1&&(++j==3‖k++==3)”时,表达式“i++==1”嗨值为真,其值为1,表达式“++j=3”的值为真,根据短路原理,右边的表达式“k++==3”不再进行运算。

括号中表达的值为l,作与运算后整个表达式的值也为l,输出i.j,k时,由于未执行过k,所以它们的值分别为2,3,3。

(22)若整型变量a、b、c、d中的值依次为:

1、4、3、2。

则条件表达式a

a:

c

c:

d的值是___A_____。

A)l    B)2    C)3    D)4

答案:

A

评析:

条件表达式的一般形式为:

表达式1?

表达式2:

表达式3

本题先求的是a

a:

c

c:

d”的值为a的值1。

(23)有以下程序

main()

{

intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;p[]从p[0]开始自动赋值

while(i++<7)

{

if(p[i]%2)

j+=p[i];

}

printf(“%d\n”,j);

}

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

A)42    B)45    C)56  D)60

答案:

B

评析:

本程序的作用是求除p[0]外的其它奇数的和。

(24)有以下程序

main()

{

chara[7]=“a0\OaO\0”;inti,j;

i=sizeof(a);j=strlen(a);

printf(“%d%d\n”,i,j);

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

A)22    B)76    C)72    D)62

答案:

C

评析:

c语言中以‘\0’作为字符串的结束符,且strlen()函数计算的是‘\0’字符前的所有字符的个数。

数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。

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

A)inta[5]={0,1,2,3,4,5};    B)chara[]={0,1,2,3,4,5};

C)chara={’A’,’B’,’C’};    D)inta[5]=”0123″;

答案:

B

评析:

选项A中定义的是5个数组元素,但赋值的时候赋的是6个元素,所以出错;选项c不符合数组定义形式,数组名后应加上“[]”;选项D的类型说明符错误,如果用char定义就对了;选项B中的0,1,2,3,4,5分别表示对应字符的ASCII码,所以选项B是正确的。

(26)有以下程序

intfl(intx,inty){returnx>y?

x:

y;}

intf2(intx,inty){returnx>y?

y:

x;}

main()

{

inta=4,b=3,c=5,d=2,e,f,g;

e=f2(f1(a,b),f1(c,d));f=fl(f2(a,b),f2(c,d));

g=a+b+c+d-e-f;

printf(“%d,%d,%d\n”,e,f,g);

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

A)4,3,7    B)3,4,7    C)5,2,7    D)2,5,7

答案:

A

评析:

函数n的功能是返回两个数中比较大的值,f2的功能是返回两个数中比较小的值。

(27)已有定义:

chara[]=”xyz”,b[]={’x’,’y’,’z’};,以下叙述中正确的是________。

A)数组a和b的长度相同    B)a数组长度小于b数组长度

C)a数组长度大于b数组长sizeof度  D)上述说法都不对

答案:

C

评析:

c语言规定‘\0’为字符串结束标志。

所以“chara[]=“xyz””的数组长度为4,而“b[]={‘x’,‘y’,‘z’};”的数组长度为3,数组长度与strlen函数所求的长度不同,本题是指数组占内存空间的大小。

(28)有以下程序

Voidf(int*x,int*y)

{

intt;

t=*x;*x=*y;’*y=t;

main()

{

inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;

p=a;q=&a[7];

while(p

{f(p,q);p++;q–;}  。

for(i=0;i<3;i++)printf(“%d”,a[1][i]);

}

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

A)8,2,3,4,5,6,7,1,  B)5,6,7,8,1,2,3,4.

C)1,2,3,4,5,6,7,8,  D)8,7,6,5,4,3,2,l,

答案:

D

评析;本程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。

(29)有以下程序

main()

{

ima[3][3],*p,i;

p=&a[0][0];

for(i=0;i<9;i++)p[i]=I;

for(i=0;i<3;i++)printf(“%d”,a[1][i]);

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

A)012  B)123  C)234  D)345

答案:

D

评析:

本题赋值后,a的数组元素的值分别为a[01[0]=0,a[0][1]=1,a[0][2]=2,a[1][0]=3,a[1][1]=4,a[1][2]=5,a[2][0]=6,a[2][1]=7,a[2][2]=8,故本题输出的值为345。

(30)以下叙述中错误的是____C____。

A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B)数组名代表的是数组所占存储区的首地址,其值不可改变

C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越

界”的出错信息

D)可以通过赋初值的方式确定数组元素的个数

答案:

C

评析:

在c语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出“下标越界”的错误提示。

(31)有以下程序

#defineN20

fun(inta[],intn,intm)

{  inti,j;

for(i=m;i>=n;i–)a[i+1]=a[i];

}

main()

{

inti,a[N]={1,2,3,4,5,6,7,8,9,10};

fun(a,2,9);

for(i=O;i<5;i++)printf(“%d”,a[i]);

}

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

A)10234  B)12344  C)12334  D)12234

答案:

C

评析:

本题函数fun的作用是将指定的数组元素(从下标n到下标m)向后移一位。

由函数调用“fun(a,2,9);”可知,函数fun用于将a[2]到a[9]的各元素依次向后移一位,移完后,a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10,故输出的前5个数组元素为12334。

(32)有以下程序

main()

{

inta[3][2]={0},(*ptr)[2],i,j;

for(i=0;i<2;i++)  {ptr=a+i;  scanf(“%d”,ptr);  ptr++;}

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

{  for(i=0;j<2;j++)printf(“%2d”,a[i][j]);

printf(“\n”);

}

}

若运行时输入:

123<回车>,则输出结果是___B____。

A)产生错误信息

B)l0  C)l2  D)l0

2O    30    20

00    0O    30

答案:

B

评析:

二维数组a,通过a[3][2]={0}将数组中的各个元素初始化为0,指针变量ptr,指向包含2个元素的一维数组。

a[0][0]:

l,a[1][0]=2,故本题的输出选B。

(33)有以下程序

prt(int*m,intn)

{  inti;

for(i=0;i

main()

{

inta[]={1,2,3,4,5},i;

prt(a,5);

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

printf(“%d,”,a[i]);

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

A)l,2,3,4,5,  B)2,3,4,5,6,  C)3,4,5,6,7,  D)2,3,4,5,1,

答案:

B

评析:

用数组名作函数实参时,不是把数组的值传递给形参,而是把实参数组的起始地址传递给形参数组,这样两个数组就共同占用同一段内存单元。

(34)有以下程序

main()

{  inta[]={1,2,3,4,5,6,7,8,9,0},*p;

for(p=a;p

}

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

A)l,2,3,4,5,6,7,8,9,0,  B)2,3,4,5,6,7,8,9,10,1,

C)0,1,2,3,4,5,6,7,8,9,  D)l,l,1,l,l,l,l,l,l,l,

答案:

A

评析:

c语言规定数组变量名代表数组的首地址,即第0号元素的地址。

本题将a数组中的值全部输出,即为l,2,3,4,5,6,7,8,9,0,。

(35)有以下程序

#defineP3

voidF(intx){return(P*x*x);}

main()

{printf(“%d\n”,F(3+5));}

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

A)192  B)29  C)25  D)编译出错

答案:

D

评析:

return语句用于从被调函数带回一个函数值。

void关键字表示“无类型”,即不需要从被调函数中带回函数值,所以不需要return语句,故编译时出错。

(36)有以下程序

main()

{intc=35;printf(“%d\n”,c&c);}

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

A)0  B)70  C)35  D)1

答案:

C

评析:

按位“与”时,1&1=1,其他都等O。

因为本题中相与的两个值相等,即对应位上的二进制值相等,所以“与”的结果也即为其值本身。

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

A)预处理命令行必须位于源文件的开头

B)在源文件的一行上可以有多条预处理命令

C)宏名必须用大写字母表示

D)宏替换不占用程序的运行时间

答案:

D

评析:

通常,预处理命令位于源文件的开头,也可以写在函数与函数之间;不能在一行上写多条预处理命令:

宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母。

(38)若有以下说明和定义

uniondt

{inta;charb;doublec;}data;

以下叙述中错误的是___C_____。

A)data的每个成员起始地址都相同

B)变量data所占的内存字节数与成员c所占字节数相等

C)程序段:

data.a=5;pintf(“%f\n”,data.c);输出结果为5.000000

D)data可以作为函数的实参(√)

答案:

C

评析:

union是表示共用体的关键字,成员a,b,c共占用同一个内存空间,data的每个成员起始地址都相同;共用体变量所占的内存长度等于最长的成员的长度,故变量’data所占的内存字节数与成

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1