软件工程师面试题库及答案_第1页
软件工程师面试题库及答案_第2页
软件工程师面试题库及答案_第3页
软件工程师面试题库及答案_第4页
软件工程师面试题库及答案_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程师面试题库及答案软件工程师面试题及答案选择题1:设floata=2,b=4,c=3;,以下C语言表达式与代数式(a+b)+c计算结果不一致的是A.(a+b)*c/2B.(1/2)*(a+b)*cC.(a+b)*c*1/2D.c/2*(a+b)参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,如果改成1/2.0就正确了。2:为了向二进制文件尾部增加数据,打开文件的方式应采用A.″ab″B.″rb+″C.″wb″D.″wb+″参考答案:Ar:打开一个文本文件只读w:打开一个文本文件只写a:对一个文本文件添加rb:打开一个二进制文件只读wb:打开一个二进制文件只写ab:对一个二进制文件添加r+:打开一个文本文件读/写w+:生成一个文本文件读/写a+:打开一个文本文件读/写软件工程师面试题库及答案全文共19页,当前为第1页。rb+:打开二进制文件读/写软件工程师面试题库及答案全文共19页,当前为第1页。wb+:生成二进制文件读/写ab+:打开二进制文件读/写3:下述程序执行后的输出结果是#includemain(){intx='f';printf("%c\n",'a'+(x-'a'+1));}A.gB.hC.iD.j参考答案:A4:C语言中,下列运算符优先级最高的是A.!B.%C.>>D.==软件工程师面试题库及答案全文共19页,当前为第2页。参考答案:A软件工程师面试题库及答案全文共19页,当前为第2页。优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名->成员选择(指针)对象指针->成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式++自增运算符++变量名/变量名++单目运算符--自减运算符--变量名/变量名--单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符软件工程师面试题库及答案全文共19页,当前为第4页。软件工程师面试题库及答案全文共19页,当前为第3页。!软件工程师面试题库及答案全文共19页,当前为第4页。软件工程师面试题库及答案全文共19页,当前为第3页。逻辑非运算符!表达式单目运算符~按位取反运算符~表达式单目运算符sizeof长度运算符sizeof(表达式)3/除表达式/表达式左到右双目运算符*乘表达式*表达式双目运算符%余数(取模)整型表达式/整型表达式双目运算符4+加表达式+表达式左到右双目运算符-减表达式-表达式双目运算符5<<左移变量<<表达式左到右双目运算符>>右移变量>>表达式双目运算符6>大于表达式>表达式左到右双目运算符>=大于等于表达式>=表达式双目运算符<小于表达式<表达式双目运算符<=小于等于表达式<=表达式双目运算符7==等于表达式==表达式左到右双目运算符!=不等于表达式!=表达式双目运算符8&按位与表达式&表达式左到右双目运算符9^按位异或表达式^表达式左到右双目运算符软件工程师面试题库及答案全文共19页,当前为第5页。10软件工程师面试题库及答案全文共19页,当前为第5页。|按位或表达式|表达式左到右双目运算符11&&逻辑与表达式&&表达式左到右双目运算符12||逻辑或表达式||表达式左到右双目运算符13?:条件运算符表达式1?表达式2:表达式3右到左三目运算符14=赋值运算符变量=表达式右到左/=除后赋值变量/=表达式*=乘后赋值变量*=表达式%=取模后赋值变量%=表达式+=加后赋值变量+=表达式-=减后赋值变量-=表达式<<=左移后赋值变量<<=表达式>>=右移后赋值变量>>=表达式&=按位与后赋值变量&=表达式软件工程师面试题库及答案全文共19页,当前为第6页。^=软件工程师面试题库及答案全文共19页,当前为第6页。按位异或后赋值变量^=表达式|=按位或后赋值变量|=表达式15,逗号运算符表达式,表达式,…左到右从左向右顺序运算5:数组定义为“inta[4];”,表达式()是错误的。A.*aB.a[0]C.aD.a++参考答案:D6:执行语句“k=7>>1;”后,变量k的当前值是A.15B.31C.3D.1参考答案:C7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型A.voidB.charC.floatD.int参考答案:D8:若main()函数带参数,参数个数最多是软件工程师面试题库及答案全文共19页,当前为第7页。A.0B.1C.2D.3软件工程师面试题库及答案全文共19页,当前为第7页。参考答案:C只知道有定义形式main(intargc,char*argv[]))9:若有宏定义:#defineMOD(x,y)x%y则执行以下语句后的输出结果是inta=13,b=94;printf(″%d\n″,MOD(b,a+4));A.5B.7C.9D.11参考答案:B10:下列各个错误中,哪一个不属于编译错误A.改变x原值3为5,写作“x==5;”B.花括号不配对C.复合语句中的最后一条语句后未加分号D.变量有引用、无定义参考答案:A11:下列程序段运行后,x的值是()a=1;b=2;x=0;if(!(--a))x--;if(!b)x=7;else++x;软件工程师面试题库及答案全文共19页,当前为第8页。A.0B.3C.6D.7软件工程师面试题库及答案全文共19页,当前为第8页。参考答案:A12:设#defineN3#defineY(n)((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:BY(5+1)传递过去的应该是5+1,而不是简单的把6给替换掉13:若定义了charch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是A.defB.dC.eD.0参考答案:C14:表达式!x等效于A.x==1B.x==0C.x!=1D.x!=0参考答案:B15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为软件工程师面试题库及答案全文共19页,当前为第9页。A.算术运算、赋值运算、关系运算软件工程师面试题库及答案全文共19页,当前为第9页。B.算术运算、关系运算、赋值运算C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算参考答案:B16:设#defineN3#defineY(n)((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:B17:表达式strcmp(“3.14”,“3.278”)的值是一个A.非零整数B.浮点数C.0D.字符参考答案:A18:设struct{shorta;charb;floatc;}cs;则sizeof(cs)的值是软件工程师面试题库及答案全文共19页,当前为第10页。A.4B.5C.6D.7软件工程师面试题库及答案全文共19页,当前为第10页。参考答案:D字节对齐的话应该是819:若变量已正确定义,表达式(j=3,j++)的值是A.3B.4C.5D.0参考答案:A20:C语言中运算对象必须是整型的运算符是A.%B./C.!D.**参考答案:A答问题static有什么用途?(请至少说明两种)

1.限制变量的作用域

2.设置变量的存储域引用与指针有什么区别?

1)引用必须被初始化,指针不必。

2)引用初始化以后不能被改变,指针可以改变所指的对象。

2)不存在指向空值的引用,但是存在指向空值的指针。描述实时系统的基本特性

在特定时间内完成特定的任务,实时性与可靠性软件工程师面试题库及答案全文共19页,当前为第11页。全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

全局变量储存在静态数据库,局部变量在堆栈软件工程师面试题库及答案全文共19页,当前为第11页。请写出下列代码的输出内容

#include<stdio.h>

main()

{

inta,b,c,d;

a=10;

b=a++;

c=++a;

d=10*a++;

printf("b,c,d:%d,%d,%d",b,c,d);

return0;

}

答:10,12,120对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

答:c用宏定义,c++用inline软件工程师面试题库及答案全文共19页,当前为第12页。用宏定义写出swap(x,y)

#defineswap(x,y)\

x=x+y;\

y=x-y;\

x=x-y;

软件工程师面试题库及答案全文共19页,当前为第12页。如何定义一个有10个元素的整数型指针数组。

既然只是定义而不是初始化,那就很简单且没有争议了:int*array[10];。解释C语言关键字extern、static的含义。这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:

1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。解释C语言关键字volatile、const的含义。软件工程师面试题库及答案全文共19页,当前为第13页。我只要一听到被面试者说:"const意味着常数",我就知道我正在和一个业余者打交道。去年DanSaks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:EmbeddedSystemsProgramming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)

如果应试者能正确回答这个问题,我将问他一个附加的问题:

下面的声明都是什么意思?

constinta;

intconsta;

constint*a;

int*consta;

intconst*aconst;

/******/

前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带软件工程师面试题库及答案全文共19页,当前为第14页。提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:

1)关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)

2)通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。

3)合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

软件工程师面试题库及答案全文共19页,当前为第13页。软件工程师面试题库及答案全文共19页,当前为第14页。软件工程师面试题库及答案全文共19页,当前为第15页。关键字volatile有什么含意?并给出三个不同的例子。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

1)并行设备的硬件寄存器(如:状态寄存器)

2)一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables)

3)多线程应用中被几个任务共享的变量

回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到volatile变量。不懂得volatile的内容将会带来灾难。

假设被面试者正确地回答了这是问题(嗯,怀疑是否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。

1)一个参数既可以是const还可以是volatile吗?解释为什么。

2);一个指针可以是volatile吗?解释为什么。

3);下面的函数有什么错误:

intsquare(volatileint*ptr)

{

return*ptr**ptr;

}

下面是答案:

1)是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

软件工程师面试题库及答案全文共19页,当前为第16页。2);是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。

3)这段代码有点变态。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:

intsquare(volatileint*ptr)

{

inta,b;

a=*ptr;

b=*ptr;

returna*b;

}

由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:

longsquare(volatileint*ptr)

{

inta;

a=*ptr;

returna*a;

软件工程师面试题库及答案全文共19页,当前为第17页。}软件工程师面试题库及答案全文共19页,当前为第15页。软件工程师面试题库及答案全文共19页,当前为第16页。软件工程师面试题库及答案全文共19页,当前为第17页。 用变量a给出下面的定义a)一个整型数(Aninteger)b)一个指向整型数的指针(Apointertoaninteger)c)一个指向指针的的指针,它指向的指针是指向一个整型数(Apointertoapointertoaninteger)d)一个有10个整型数的数组(Anarrayof10integers)e)一个有10个指针的数组,该指针是指向一个整型数的(Anarrayof10pointerstointegers)f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers)g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumen

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论