2022年嵌入式软件工程师笔试题 .pdf

上传人:C****o 文档编号:42690940 上传时间:2022-09-16 格式:PDF 页数:16 大小:230.82KB
返回 下载 相关 举报
2022年嵌入式软件工程师笔试题 .pdf_第1页
第1页 / 共16页
2022年嵌入式软件工程师笔试题 .pdf_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《2022年嵌入式软件工程师笔试题 .pdf》由会员分享,可在线阅读,更多相关《2022年嵌入式软件工程师笔试题 .pdf(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、嵌入式软件工程师笔试题1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少 bit 被置 1 4、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串1、c51 单片机的串口异步通信和同步通信的区别,说说他们的优缺点。2、C51 单片机的数据总线和地址总线是如何复用的,说明原理。3、C51 单片机的绝对寻址范围是多少k?4、说明下面的寻址方式(1)MOV A,#30H (2)MOV A,R0 (3)ADD A,R4 (4)MOV A+DPTR5、写出下面分别是什么指针?(1)int*a10;(2)int (*a)

2、10;(3)int (*P)(int);(4)int(*a10)(int);6、void swap(int a,int b)int temp;temp=a;a=b;b=temp;main(void)int x=3,y=4;swap(x,y);问 上面程序执行完后x=?,y=?7、typedef struct testint i;名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 16 页 -short s;char c;unionint a;short b;example;int y;y=sizeof(example);请问在 TC 环境下,y=?8、编程实现数组的逆置,例如,“he

3、llo,world!”逆置后为“!dlrow,olleh”。9、你认为嵌入式操作系统包括哪些部分?说说实时操作系统有哪些特点。10、冯诺依曼结构的计算机由哪几部分组成?11、说说程序,进程,线程的区别。12、说说你怎样理解程序=数据+结构+算法13、根据函数原型编程实现一个数组,按从大到小的冒泡排序。void tibbule(int a,int n);/a为数组,n 为数组长度14、OSI 有哪几层?tcp/ip 包括哪几层?15、编程实现一个双链表的节点插入和删除。5。写一个数据类型:一个有10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数。6。嵌入式系统总是要用户

4、对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的 bit 3,第二个清除 a 的 bit 3。在以上两个操作中,要保持其它位不变。7。嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为 0 x67a9的整型变量的值为0 xaa66。编译器是一个纯粹的ANSI 编译器。写代码去完成这一任务。8。字符串倒序。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 16 页 -9。float a,b,c 问下列两个的值:(a+b)+c=(b+a)+c(a+b)+c=(a+c)+b10。关键字 static 的作用是什么?关键字 c

5、onst 有什么含意?11。关键字 volatile有什么含意?并给出三个不同的例子。1)一个参数既可以是const 还可以是 volatile吗?解释为什么。2)一个指针可以是 volatile 吗?解释为什么。3)下面的函数有什么错误:int square(volatile int*ptr)return*ptr*ptr;12。嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为 0 x67a9的整型变量的值为0 xaa66。编译器是一个纯粹的ANSI 编译器。写代码去完成这一任务。13。动态内存分配下面的代码片段的输出是什么,为什么?char*ptr;

6、if(ptr=(char*)malloc(0)=NULL)puts(Got a null pointer);else puts(Got a valid pointer);14。Typedef 在 C 语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:#define dPS struct s*typedef struct s*tPS;以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s 指针。哪种方法更好呢?(如果有的话)为什么?15。中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展让标准 C 支持中断。具代

7、表事实是,产生了一个新的关键字_interrupt。下面的代码就使用了_interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。_interrupt double compute_area(double radius)double area=PI*radius*radius;printf(nArea=%f,area);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 16 页 -return area;16。下面的代码输出是什么,为什么?void foo(void)unsigned int a=6;int b=-20;(a+b 6)?puts(6):pu

8、ts(0)if(n%2=1)val=val*x;val=val*foo(x*x,n/2);return val;这段代码对 x 和 n 完成什么样的功能(操作)?(a)xn(x的 n 次幂)(b)x*n(x与 n 的乘积)(c)nx(n的 x 次幂)(d)以上均不是第 4 题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人main()int a5=1,2,3,4,5;int*ptr=(int*)(&a+1);printf(%d%d,*(a+1),*(ptr-1);这段程序的输出是:(a)2 2(b)2 1(c)2 5(d)以上均不是第 5 题:考查多维数组与指针void fo

9、o(int 3);main()int a 33=1,2,3,4,5,6,7,8,9;foo(a);printf(%d,a21);void foo(int b3)+b;b11=9;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 16 页 -这段程序的输出是:(a)8(b)9(c)7(d)以上均不对第 6 题:考查逗号表达式main()int a,b,c,d;a=3;b=5;c=a,b;d=(a,b);printf(c=%d,c);printf(d=%d,d);这段程序的输出是:(a)c=3 d=3(b)c=5 d=3(c)c=3 d=5(d)c=5 d=5第 7 题:考查指针数组m

10、ain()int a3=1,2,3,4,5,6;int(*ptr)3=a;printf(%d%d,(*ptr)1,(*ptr)2);+ptr;printf(%d%d,(*ptr)1,(*ptr)2);这段程序的输出是:(a)2 3 5 6(b)2 3 4 5(c)4 5 0 0(d)以上均不对第 8 题:考查函数指针int*f1(void)int x=10;return(&x);int*f2(void)名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 16 页 -int*ptr;*ptr=10;return ptr;int*f3(void)int*ptr;ptr=(int*)mal

11、loc(sizeof(int);return ptr;上面这 3 个函数哪一个最可能引起指针方面的问题(a)只有 f3(b)只有 f1 and f3(c)只有 f1 and f2(d)f1,f2,f3第 9 题:考查自加操作(+)main()int i=3;int j;j=sizeof(+i+i);printf(i=%d j=%d,i,j);这段程序的输出是:(a)i=4 j=2(b)i=3 j=2(c)i=3 j=4(d)i=3 j=6第 10 题:考查形式参数,实际参数,指针和数组void f1(int*,int);void f2(int*,int);void(*p2)(int*,int)

12、;main()int a;int b;p0=f1;p1=f2;a=3;b=5;p0(&a,b);printf(%dt%dt,a,b);p1(&a,b);名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 16 页 -printf(%dt%dt,a,b);void f1(int*p,int q)int tmp;tmp=*p;*p=q;q=tmp;void f2(int*p,int q)int tmp;tmp=*p;*p=q;q=tmp;这段程序的输出是:(a)5 5 5 5(b)3 5 3 5(c)5 3 5 3(d)3 3 3 3第 11 题:考查自减操作(-)void e(int)

13、;main()int a;a=3;e(a);void e(int n)if(n0)e(-n);printf(%d,n);e(-n);这段程序的输出是:(a)0 1 2 0(b)0 1 2 1(c)1 2 0 1(d)0 2 1 1名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 16 页 -第 12 题:考查 typedef类型定义,函数指针typedef int(*test)(float*,float*)test tmp;tmp 的类型是(a)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)Pointer to functio

14、n of having two arguments that is pointer to float(b)整型(c)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型Pointer to function having two argument that is pointer to float and return int(d)以上都不是第 13 题:数组与指针的区别与联系main()char p;char buf10=1,2,3,4,5,6,9,8;p=(buf+1)5;printf(%d,p);这段程序的输出是

15、:(a)5(b)6(c)9(d)以上都不对第 14 题:考查指针数组的指针void f(char*);main()char*argv=ab,cd,ef,gh,ij,kl;f(argv);void f(char*p)char*t;t=(p+=sizeof(int)-1;printf(%s,t);这段程序的输出是:(a)ab(b)cd 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 16 页 -(c)ef(d)gh第 15 题:此题考查的是 C的变长参数,就像标准函数库里 printf()那样,这个话题一般国内大学课堂是不会讲到的,不会情有可原#include int ripple

16、(int,);main()int num;num=ripple(3,5,7);printf(%d,num);int ripple(int n,)int i,j;int k;va_list p;k=0;j=1;va_start(p,n);for(;j i=va_arg(p,int);for(;i;i&=i-1)+k;return k;这段程序的输出是:(a)7(b)6(c)5(d)3第 16 题:考查静态变量的知识int counter(int i)static int count=0;count=count+i;return(count);main()int i,j;名师资料总结-精品资料欢迎

17、下载-名师精心整理-第 11 页,共 16 页 -for(i=0;i 0)if(n%2=1)product=product*val;/*如果是奇数次幂,x(val)要先乘上一次,;偶数次幂,最后返回时才会到这里乘以1*/val=val*val;n=n/2;return product;/*用二元复乘策略*/算法描述(while n0)if next most significant binary digit of n(power)is one then multiply accumulated product by current val,reduce n(power)sequence by

18、a factor of two using integer division.get next val by multiply current value of itself 第 4 题:(c)a 的类型是一个整型数组,它有 5 个成员。&a 的类型是一个整型数组的指针,所以&a+1指向的地方等同于 a6,所以*(a+1)等同于 a1 ptr 等同 a6,ptr-1就等同与 a5第 5 题:(b)题目自身就给了足够的提示b00=4 b10=7第 6 题:(c)考查逗号表达式,逗号表达式的优先级是很低的,比 赋值(=)的优先级低.逗号表达式的值就是最后一个元素的值逗号表达式的还有一个作用就是分割

19、函数的参数列表.E1,E2,.,En 上面这个表示式的左右是,E1,E2,.En的值被分别计算出来,En 计算出来的结构赋给整个逗号表达式c=a,b;/*yields c=a*/d=(a,b);/*d=b*/第 7 题:(a)ptr 是一个数组的指针,该数组有 3 个 int 成员第 8 题:(c)f1 显然有问题,它返回一个局部变量的指针,局部变量是保存在stack 中的,退出函数后,局部变量就销毁了,保留其指针没有意义,因为其指向的 stack 空间可能被其他变量覆盖了f2 也有问题,ptr是局部变量,未初始化,它的值是未知的,*ptr不知道指向哪名师资料总结-精品资料欢迎下载-名师精心整

20、理-第 13 页,共 16 页 -里了,直接给*ptr赋值可能会覆盖重要的系统变量,这就是通常说的野指针的一种第 9 题:(b)sizeof 操作符给出其操作数需要占用的空间大小,它是在编译时就可确定的,所以其操作数即使是一个表达式,也不需要在运行时进行计算.(+i+i)是不会执行的,所以 i 的值还是 3第 10 题:(a)很显然选 a.f1 交换*p 和 q 的值,f1 执行完后,*p 和 q 的值的确交换了,但 q 的改变不会影响到 b 的改变,*p 实际上就是 a 所以执行 f1 后,a=b=5 这道题考查的知识范围很广,包括 typedef自定义类型,函数指针,指针数组void(*p

21、 2)(int*,int);定义了一个函数指针的数组p,p 有两个指针元素.元素是函数的指针,函数指针指向的函数是一个带 2 个参数,返回 void 的函数,所带的两个参数是指向整型的指针,和整型p 0 =f1;p 1 =f2 contain address of function.function name without parenthesis represent address of function Value and address of variable is passed to function only argument that is effected is a(addres

22、s is passed).Because of call by value f1,f2 can not effect b第 11 题:(a)考查-操作和递归调用,仔细分析一下就可以了第 12 题:(c)建议不会的看看 C 专家编程从左往有,遇到括号停下来,将第一个括号里的东西看成一个整体第 13 题:(c)考查什么时候数组就是指针.对某些类型 T而言,如果一个表达式是T(T 的数组),这个表达式的值实际上就是指向该数组的第一个元素的指针.所以(buf+1)5实际上就是*(buf+6)或者 buf6第 14 题:(b)sizeof(int)的值是 2,所以 p+=sizeof(int)指向 ar

23、gv2,这点估计大家都没有什么疑问(p+=sizeof(int)-1 指向 argv1,能理解吗,因为(p+=sizeof(int)-1 就相当于(p+=2)-1,也就是(p+2-1)第 15 题:(c)在 C 编译器通常提供了一系列处理可变参数的宏,以屏蔽不同的硬件平台造成的差异,增加程序的可移植性。这些宏包括va_start、va_arg和 va_end等。采用 ANSI 标准形式时,参数个数可变的函数的原型声明是:type funcname(type para1,type para2,.)这种形式至少需要一个普通的形式参数,后面的省略号不表示省略,而是函数原型的一部分。type 是函数返

24、回值和形式参数的类型。不同的编译器,对这个可变长参数的实现不一样,gcc4.x中是内置函数.关于可变长参数,可参阅名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 16 页 -/2004-11/26.html/2004-11/24.html程序分析va_list p;/*定义一个变量,保存 函数参数列表的指针*/va_start(p,n);/*用 va_start宏 初始化变量 p,va_start宏的第 2 个参数n,是一个固定的参数,必须是我们自己定义的变长函数的最后一个入栈的参数也就是调用的时候参数列表里的第1 个参数*/for(;j i=va_arg(p,int);/*v

25、a_arg取出当前的参数,并认为取出的参数是一个整数(int)*/for(;i;i&=i-1)/*判断取出的 i 是否为 0*/+k;/*如果 i 不为 0,k 自加,i 与 i-1 进行与逻辑运算,直到 i 为 0 这是一个技巧,下面会谈到它的功能*/当我们调用 ripple函数时,传递给 ripple函数的 参数列表的第一个参数n 的值是 3.va_start 初始化 p 士气指向第一个未命名的参数(n 是有名字的参数),也就是 is 5(第一个).每次对 va_arg的调用,都将返回一个参数,并且把 p 指向下一个参数.va_arg 用一个类型名来决定返回的参数是何种类型,以及在var_

26、arg的内部实现中决定移动多大的距离才到达下一个参数(;i;i&=i-1)k+/*计算 i 有多少 bit 被置 1*/5 用二进制表示是(101)2 7 用二进制表示(111)3 所以 k 返回 5(2+3),也即本题应该选 c 举个例子,就很好理解了令 i=9=1001 i-1=1000(i-1)+1=i 1000+1 1001 因为 i 与 i-1 的最右边的那位(最低位)肯定是不同,如果 i1,i-1肯定是 0,反之亦然.i&i-1 这个运算,在二相补的数字系统中,将会消除最右边的1 位第 16 题:(b)答案是(b)相传高斯小学一年级的时候就会做这类等比数列的题目了.这道题考查的是静

27、态变量的知识,当每次调用完函数之后,静态变量的值不会丢失,这与栈中的临时局部变量明显不同的地方.所以,第一次调用 counter(0)之后,count=0 第二次调用counter(1)后 count=0+1;第三次调用counter(2)count=1+2;/*count=count+i*/第四次调用counter(3)count=3+3;第五次调用counter(4)count=6+4;第六次调用counter(5)count=10+5;名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 16 页 -1.用宏定义写出 swap(x,y)2.数组 aN,存放了 1 至 N-1 个

28、数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:int do_dup(int a,int N)3 一语句实现 x 是否为 2 的若干次幂的判断4.unsigned int intvert(unsigned int x,int p,int n)实现对 x 的进行转换,p 为起始转化位,n 为需要转换的长度,假设起始点在右边.如 x=0b0001 0001,p=4,n=3转换后 x=0b0110 0001.Ros:1,确实可以有两种方法#defineSWAP(x,y)x+=y;y=x-y;x=x-y#defineSWAP(x,y)x=y;y=x;x=y第一中

29、较通用,同类型都可以。第二种,以为采用位操作符,而float,double 型的位操作是不能通过编译器的。但我始终觉得,不管是用什么数据类型,在内存中最终是二进制,这样第二种中逻辑上应该是能行的通的,只是不能通过编译。2,int do_dup(int a,int N)char*p_count,i;p_count=(*char)malloc(N);/时间复杂度是 o(N)但占用的空间多了点for(i=0;i N;i+)*(p_count+a i)+;if(*(p_count+a i)=2)return a i;free(p_count);当然,有人用 hash 表做的,可惜我没 hash 过。不过思路也没什么差异3,Key:2 的 n 次幂在二进制上有共性,都是只有一个bit 为 1,其余全为 0;(x&(x-1)?0:1/1 for true,0 for false4,转换,其实就是每位都与1 做异或的结果unsigned int intvert(unsigned int x,int p,int n)return x=(1n)-1)p);/(1n)-1 to get n 1 is so smart.名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 16 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com