MTK深圳公司嵌入式软件工程师笔试题(答案详解)
2014-08-25 17:16
253 查看
1.
分析:此题主要考查宏定义的理解及运用。对于编译器而言,遇到宏是直接替换而不会做任何其它动作的。此题中Area(R)
pi*R*R, 而R赋值为r1-r2, 所以预编译后的结果为:
pi*r1-r2*r1-r2, 计算结果为3.700000
另外一个就是浮点数运算, 输出结果为双精度类型,float型的有效位数为6位,所以结果是3.700000.
如果是long double型,则输出结果为:? 很奇怪,我在ubuntu上测试,无论类型修改成float, double,long double,输出结果都一样,这是为什么?有待验证。另外,就是在ubuntu上测试printf("float:%d,double:%d,long double:%d\n",sizeof(float),sizeof(double),sizeof(long double)); 输出结果是4,8,12. 应该结果不一样才对。
2. 函数 int compare(int
a,int b),定义为该函数的函数指针P:
int (*p)(int a, int b);
p= compare;
这个简单,不做解释;
3.
这道题具有很大的迷惑性,基础知识不扎实,很容易得到错误的结果。乍一看,很容易认为是排序程序,从而得到"ACEddee".
但实际运行程序会得到segment falt的错误。这是因为s是一个指针,而不是一个数组。
4.交换两个变量的值,不使用第三个变量,即a=3,b=5, 交换后b=3,a=5。
这个答案是很经典的,反正我是做不出来。
5.
内存分配相关的考量:
结果为:str1:NULL,str2: 乱码。 str1为什么是NULL?
内动态分配函数参考的内存,在函数执行完成后是否会自动释放,是否是因为此原因?
str2返回乱码,是因为p是一个局部变量,在函数执行完成后,p已经指向未知的地方,所以显示乱码.
1 #define pi 3.14 2 #define Area(R) pi*R*R 3 main() 4 { 5 int r1=5,r2=2; 6 double s=0; 7 s=Area(r1-r2); 8 printf("The area is %f",s); 9 } 10 11 #define pi 3.14 12 #define Area(R) pi*R*R 13 main() 14 { 15 int r1=5,r2=2; 16 double s=0; 17 s=Area(r1-r2); 18 printf("The area is %f",s); 19 }
分析:此题主要考查宏定义的理解及运用。对于编译器而言,遇到宏是直接替换而不会做任何其它动作的。此题中Area(R)
pi*R*R, 而R赋值为r1-r2, 所以预编译后的结果为:
pi*r1-r2*r1-r2, 计算结果为3.700000
另外一个就是浮点数运算, 输出结果为双精度类型,float型的有效位数为6位,所以结果是3.700000.
如果是long double型,则输出结果为:? 很奇怪,我在ubuntu上测试,无论类型修改成float, double,long double,输出结果都一样,这是为什么?有待验证。另外,就是在ubuntu上测试printf("float:%d,double:%d,long double:%d\n",sizeof(float),sizeof(double),sizeof(long double)); 输出结果是4,8,12. 应该结果不一样才对。
2. 函数 int compare(int
a,int b),定义为该函数的函数指针P:
int (*p)(int a, int b);
p= compare;
这个简单,不做解释;
3.
1 #include<stdio.h> 2 void sub(char*s,int num) 3 { 4 int i ,j=num; 5 char t; 6 while(j-->1) 7 { 8 for(i=0;i<j;i++) 9 { 10 if(s[i]<s[i+1]) 11 { 12 t=s[i]; 13 s[i]=s[i+1]; 14 s[i+1]=t; 15 } 16 } 17 } 18 } 19 main() 20 { 21 char *s="CEAeded"; 22 sub(s,7); 23 printf("%s\n",s); 24 25 return; 26 }
这道题具有很大的迷惑性,基础知识不扎实,很容易得到错误的结果。乍一看,很容易认为是排序程序,从而得到"ACEddee".
但实际运行程序会得到segment falt的错误。这是因为s是一个指针,而不是一个数组。
4.交换两个变量的值,不使用第三个变量,即a=3,b=5, 交换后b=3,a=5。
这个答案是很经典的,反正我是做不出来。
1 unsigned char a=3,b=5; 2 a = a + b; 3 b = a - b; 4 a = a - b; 5 6 或者 7 a = a^b; 8 b = a^b; 9 a = a^b;
5.
内存分配相关的考量:
1 #define N 100 2 void GetMemory1(char*p) 3 { 4 p=(char*)malloc(sizeof(char)*N); 5 strcpy(p,"Have a good day!"); 6 } 7 8 char*GetMemory2(void) 9 { 10 char p[]="Have a good day!"; 11 return p; 12 } 13 14 void main(void) 15 { 16 char*str1=NULL,*str2=NULL; 17 GetMemory1(str1); 18 GetMemory2(str2); 19 printf("\nstr1:%s",str1); 20 printf("\nstr2:%s",str2); 21 }
结果为:str1:NULL,str2: 乱码。 str1为什么是NULL?
内动态分配函数参考的内存,在函数执行完成后是否会自动释放,是否是因为此原因?
str2返回乱码,是因为p是一个局部变量,在函数执行完成后,p已经指向未知的地方,所以显示乱码.
相关文章推荐
- MTK深圳公司嵌入式软件工程师笔试题(答案详解)
- MTK深圳公司嵌入式软件工程师笔试题(答案详解)
- MTK深圳公司嵌入式软件工程师笔试题(含部分答案)
- 嵌入式软件工程师笔试题(含答案)
- 嵌入式软件开发——嵌入式软件工程师笔试题(含答案)
- 【转】嵌入式程序员C语言笔试题目及参考答案-东软集团
- C/C++ linux 嵌入式相关 带答案的笔试题 汇总~~
- 2011Android技术面试整理附有详细答案(包括百度、新浪、中科软等多家公司笔试面试题)
- 今天去面试某公司的.net笔试题(答案自己做的,大家多指教)
- 2011Android技术面试整理附有详细答案(包括百度、新浪、中科软等多家公司笔试面试题)
- 嵌入式软件工程师经典笔试题
- 北京某嵌入式公司2013校园招聘笔试题
- 简单详解:x^6+4x^4+2x^3+x+1 至少要需要多少次乘法? (某公司实习生招聘笔试试题)
- 2007年11月神州数码软件工程师(网络公司)招聘笔试题目
- 深圳市共进电子 嵌入式软件工程师笔试题
- 2014-03-01,深圳某手游公司php笔试题
- JAVA答案整理---->微软等公司数据结构、算法面试笔试题(v_JULY_v博主发布)
- 迅雷四川大学(整个西南地区)C++第二轮笔试题(详解答案)
- 深圳嵌入式培训软件工程师周末班
- 嵌入式软件工程师笔试必看经典题