精选范本,供参考!
精选范本 ,供参考!
软件工程师试题及答案()
一、选择题(每题2分)
将产生溢出。
若某计算机采用8位整数补码表示数据,则运算
A.-127+1B.-127-+1D.“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
答:#defineMIN(A,B)((A)<=(B)(A):(B))
这个测试是为下面的目的而设的:
.标识#de巾ne在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)
操作符变
为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
.三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-
then-else更优化的代码,了解这个用法是很重要的。
.懂得在宏中小心地把参数用括号括起来
3、下面的代码输出是什么,为什么?
voidfoo(void)
{
unsignedinta=6;
intb=-20;
(a+b>6)puts(">6"):puts("<=6");
}
答:这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发
者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是“>6”。
原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大
的正整数,所以该表达式计算出的结果大于6o这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。
4、下面的结构是合法的吗,如果是,运算结束后,a,b,c的值分别是多少,为什么
inta=5,b=7,c;
c=a+++b;
精选范本,供参考!
精选范本 ,供参考!
答:上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:
c=a+++b;
因此,这段代码持行后a=6,b=7,c=12。
三、程序题:(每题10分)
.两个int型的数相除,请写程序计算他们相除后四舍五入的结果,注意不能使用浮点运算。
答:
#include""intmain()
{
intiDividend,iDivisor;
scanf("%d%d",&iDividend,&iDivisor);
intiTemp;
iTemp=(iDividend<<1)/(iDivisor);
intiAnw;
if((iDividend>=0&&iDivisor>0)||(iDividend<0&&iDivisor<0))
iAnw=(iTemp&1)?((iTemp>>1)+1):(iTemp>>1);
else
iAnw=-((iTemp&1)?((-iTemp>>1)+1):(-iTemp>>1));
printf("anw:%d”,iAnw);
return1;
}
.培养池现有一个刚分裂的细胞,这种细胞在分裂的两小时后,每小时都分裂出一个新细胞,新分裂的细胞也按如此规律分裂。如果细胞都不死去
软件工程师试题答案 来自淘豆网m.daumloan.com转载请标明出处.