z
软件工程师试题及答案〔〕
一、选择题〔每题2分〕
假设*计算机采用8位整数补码表示数据,则运算____将产生溢出。
A.-127+1 B.-127-1 +1 -1
答:C
编写汇编语言{
char *bp;
for (bp=b;*bp;bp+=2)
printf("%s",bp);
printf("\n");
}
答:ABCDEFCDEFEF
2、写一个“标准〞宏MIN,这个宏输入两个参数并返回较小的一个。
答:*define MIN(A,B) ((A) <= (B) (A) : (B))
这个测试是为下面的目的而设的:
1). 标识*define在宏中应用的根本知识。这是很重要的,因为直到嵌入(inline)操作符变
为标准C的一局部,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能到达要求的性能,嵌入代码经常是必须的方法。
2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-
then-else更优化的代码,了解这个用法是很重要的。
3). 懂得在宏中小心地把参数用括号括起来
z
3、下面的代码输出是什么,为什么.
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) puts("> 6") : puts(" <= 6");
}
答:这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是“>6〞。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大
的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。
4、下面的构造是合法的吗,如果是,运算完毕后,a,b,c的值分别是多少,为什么
int a = 5, b = 7, c;
c = a+++b;
z
答:上面的例子是完全符合语 法的。,根据最处 理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:
c = a++ + b;
因此, 这段代码持行后a = 6, b = 7, c = 12。
三、程序题:〔每题10分〕
1. 两个int型的数相除,请写程序计算他们相除后四舍五入的结果,注意不能使用浮点运算。
答:
*include ""
int main()
{
int iDividend, iDivisor;
scanf("%d %d", &iDividend, &iDivisor);
int iTemp;
iTemp = ( iDividend << 1 ) / ( iDivisor );
int iAnw;
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));
z
printf("anw:%d", iAnw);
return 1;
}
2. 培养池现有一个刚分裂的细胞,这种细胞在分裂的两小时后,每小时都分裂出一个新细胞,新分裂的细胞也按如此规律分裂。如果细胞都不死去,请问到第12小时时,。
答案: 迭代的公式为:
Un = U(n-1) + U(n-2)
程序为:
*include ""
int main()
{
int sum = 0;
int un_0 = 1;
int un_1 = 1;
for(int i = 3; i <= 12; i++)
{
sum = un_1+ un_0;
un_0 = un_1;
un_1 = sum;
}
printf("ans: %d", sum);
z
return 1;
}
:
假设有一种控制系统要解析*种工业设备当前的状态信息,解析状态信息的函数头如下:
void a(unsigned char *message)
软件工程施工师试题答案v3.0 来自淘豆网m.daumloan.com转载请标明出处.