嵌入式软件工程师笔试题
嵌入式软件工程师笔试题__面试宝典
1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串/** 题目:将一个字符串逆序* 完成时间:2006.9.30深圳极讯网吧* 版权归刘志强所有* 描述:写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!*/#include <iostream>using namespace std;//#define NULL ((void *)0)char * mystrrev(char * const dest,const char * const src){if (dest==NULL && src==NULL)return NULL;char *addr = dest;int val_len = strlen(src);dest[val_len] = '\0';int i;for (i=0; i<val_len; i++){*(dest+i) = *(src+val_len-i-1); }return addr;}main(){char *str="asdfa";char *str1=NULL;str1 = (char *)malloc(20);if (str1 == NULL)cout<<"malloc failed";cout<<mystrrev(str1,str);free(str1);str1=NULL;//杜绝野指针}p=head;q=p->next;while(q!=NULL){temp=q->next;q->next=p;p=q;q=temp;}这样增加个辅助的指针就行乐。
ok 通过编译的代码:#include <stdio.h>#include <ctype.h>#include <stdlib.h>typedef struct List{int data;struct List *next;}List;List *list_create(void){struct List *head,*tail,*p;int e;head=(List *)malloc(sizeof(List));tail=head;printf("\nList Create,input numbers(end of 0):"); scanf("%d",&e);while(e){p=(List *)malloc(sizeof(List));p->data=e;tail->next=p;tail=p;scanf("%d",&e);}tail->next=NULL;return head;}List *list_reverse(List *head){List *p,*q,*r;p=head;q=p->next;while(q!=NULL) {r=q->next;q->next=p;p=q;q=r;}head->next=NULL; head=p;return head;}void main(void) {struct List *head,*p; int d;head=list_create();printf("\n");for(p=head->next;p;p=p->next)printf("--%d--",p->data);head=list_reverse(head);printf("\n");for(p=head;p->next;p=p->next)printf("--%d--",p->data);}编写函数数N个BYTE的数据中有多少位是1。
嵌入式软件工程师笔试题
1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里( byte )里面有多少bit被置14、搜索给定的字节 (byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串/**题目:将一个字符串逆序*完成时间: 2006.9.30 深圳极讯网吧*版权归刘志强所有*描述:写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!*/#include <iostream>using namespace std;//#define NULL ((void *)0)char * mystrrev(char * const dest,const char * const src){if (dest==NULL && src==NULL)return NULL;char *addr = dest;int val_len = strlen(src);dest[val_len] = '\0';int i;for (i=0; i<val_len; i++){*(dest+i) = *(src+val_len-i-1);}return addr;}main(){char *str="asdfa";char *str1=NULL;str1 = (char *)malloc(20);if (str1 == NULL)cout<<"malloc failed";cout<<mystrrev(str1,str);free(str1);str1=NULL;//杜绝野指针}p=head;q=p->next;while(q!=NULL){temp=q->next;q->next=p;p=q;q=temp;}这样增加个辅助的指针就行乐。
ok 通过编译的代码:#include <stdio.h>#include <ctype.h>#include <stdlib.h>typedef struct List{int data;struct List *next;}List;List *list_create(void){struct List *head,*tail,*p;int e;head=(List *)malloc(sizeof(List));tail=head;printf("\nList Create,input numbers(end of 0):"); scanf("%d",&e);while(e){p=(List *)malloc(sizeof(List));p->data=e;tail->next=p;tail=p;scanf("%d",&e);}tail->next=NULL;return head;}List *list_reverse(List *head){List *p,*q,*r;p=head;q=p->next;while(q!=NULL){r=q->next;q->next=p;p=q;q=r;}head->next=NULL;head=p;return head;}void main(void){struct List *head,*p;int d;head=list_create();printf("\n");for(p=head->next;p;p=p->next)printf("--%d--",p->data);head=list_reverse(head);printf("\n");for(p=head;p->next;p=p->next)printf("--%d--",p->data);}编写函数数 N 个 BYTE的数据中有多少位是1。
嵌入式软件工程师笔试题目
1. 编写一个函数,判断处理器是使用Big_endian 模式(返回0)还是Little_endian 模式(返回1)存储数据[cpp] view plaincopyprint?1. int checkCPU()2. {3. union w4. {5. int a;6. char b;7. }c;8. c.a = 1;9.10. return (c.b == 1);11. }/* 共用体的所有成员都是从地地址开始存放的2. 判断单链表是否存在环形链表问题[cpp] view plaincopyprint?1. bool IsLoop(node *head,node **start)2. {3. node *p1 = head, *p2 = head;4.5. if(head == NULL || head->next= NULL)=6. {7. return false;8. }9. do10. {11. p1 = head->next;12. p2 = head->next->next;13. }while(p2 && p2->next && p1 != p2);14. if(p1 == p2)15. {16. *start = p1;17. return true;18. }19. else20. return false;21. }3. 计算一个无符号32 位整型( unsigned int)的bit 有多少位为 1 或0 [cpp] view plaincopyprint?1. int caculate_bit(unsigned int num)2. {3. unsigned int mask = 1 << 31;4. int n = 0;5. int i;6.7. for(i = 0; i < 32; i++)8. {9. if(num & mask)10. {11. n++;12. }13. num <<= 1;14. }15.16. return n;17. }4. 保证malloc 和free 成对出现[cpp] view plaincopyprint?1. char * function(void)2. {3. char *p;4. p = ( char *)malloc( ⋯);5. if(p==NULL)6. ⋯;7. ⋯/* 一系列针对p 的操作*/8. return p;9. }在某处调用function() ,用完function 中动态申请的内存后将其free,如下:char *q = function();free(q);上述代码明显是不合理的,因为违反了malloc 和free 成对出现的原则,即" 谁申请,就由谁释放"原则。
(完整word版)嵌入式软件工程师笔试题
笔试题1:设float a=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+″参考答案:D3:下述程序执行后的输出结果是#includemain(){int x=’f';printf(“%c\n”,’a’+(x-‘a’+1));}A.gB.hC.iD.j参考答案:A4:C语言中,下列运算符优先级高的是A.!B.%C.>>D.= =参考答案:A5:数组定义为“ int a [ 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()函数带参数,参数个数多是A.0B.1C.2D.3参考答案:C 只知道有定义形式main(int argc,char* argv[])) 9:若有宏定义:#define MOD(x,y) x%y则执行以下语句后的输出结果是int a=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.变量有引用、无定义11:下列程序段运行后, x 的值是( )a=1;b=2;x=0;if(!( — a))x — ;if(!b)x=7;else ++x;A.0B.3C.6D.7参考答案:A12:设#define N 3#define Y(n) ((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是A.defB.dC.eD.0参考答案:C14:下列转义字符中错误的是A.′\000′B.′\14′C.′\x111′D.′\2′参考答案:C error C2022: ‘273’ : too big for character15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为A.算术运算、赋值运算、关系运算B.算术运算、关系运算、赋值运算C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算16:设#define N 3#define Y(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{ short a;char b;float c;}cs;则sizeof(cs)的值是A.4B.5C.6D.7参考答案: D 字节对齐的话应该是819:若变量已正确定义,表达式( j=3 , j++ )的值是A.3B.4C.5D.0参考答案:A20:C 语言中运算对象必须是整型的运算符是A.%B./C.!参考答案:A21:多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?22:01 #include0203 void main()0405 { int c;0607 while ((c=getchar())!= ′\ n ′ )0809 switch(c - ′ 2 ′ )1011 { case 0:1213 case 1:putchar(c+4);break;1415 case 2:putchar(c+4);break;1617 case 3:putchar(c+3);break;1819 default:putchar(c+2);break;2021 }2223 printf( ″\ n ″ );2425 }运行时输入: 2473 ,输出结果:参考答案:6897 VC++6.0测试过23:写一语句实现x是否为2的若干次幂的判断。
嵌入式软件工程师经典笔试题
预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。
记住,第一印象很重要。
2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B) (A) : (B))这个测试是为下面的目的而设的:1). 标识#define在宏中应用的基本知识。
这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2). 三重条件操作符的知识。
这个操作符存在C语言中的原因是它使得编译器能产生比if- then-else更优化的代码,了解这个用法是很重要的。
3). 懂得在宏中小心地把参数用括号括起来4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b);3. 预处理器标识#error的目的是什么?如果你不知道答案,请看参考文献1。
这问题对区分一个正常的伙计和一个书呆子是很有用的。
只有书呆子才会读C语言课本的附录去找出象这种问题的答案。
当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。
4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。
嵌入式软件工程师笔试题目
一、选择题1.在嵌入式系统中,Bootloader的主要作用是:A.提供操作系统的图形界面B.加载并启动操作系统(正确答案)C.管理系统的文件资源D.执行应用程序代码2.下列哪种编程语言常用于嵌入式系统的开发?A.JavaB.PythonC.C/C++(正确答案)D.JavaScript3.嵌入式Linux系统中,用于进程间通信的机制不包括:A.管道(Pipe)B.信号(Signal)C.共享内存(Shared Memory)D.DLL(动态链接库)(正确答案)4.在嵌入式系统开发中,交叉编译是指:A.在目标平台上编译代码以在相同平台上运行B.在一种平台上编译代码以在另一种平台上运行(正确答案)C.使用多种编译器同时编译代码D.编译代码时跳过某些优化步骤5.关于嵌入式系统的中断处理,以下说法错误的是:A.中断是硬件或软件发出的信号,用于请求CPU的注意B.中断向量表用于存储中断服务程序的地址C.中断服务程序是响应中断而执行的代码D.中断处理过程中,CPU不会保存当前正在执行的程序的上下文(正确答案)6.在嵌入式Linux开发中,Makefile文件的主要作用是:A.定义项目的编译规则(正确答案)B.描述项目的文档结构C.存储项目的源代码D.指定项目的版本信息7.下列哪项不是嵌入式系统低功耗设计的方法?A.使用低功耗的硬件组件B.优化软件算法以减少CPU的使用率C.增加系统的时钟频率以提高性能(正确答案)D.在不需要时关闭设备的电源8.关于嵌入式系统的实时性,以下说法正确的是:A.实时系统是指系统能够在任意时间内响应外部事件B.实时系统不需要保证任务在规定的时间内完成(正确答案)【注:此题表述有误,实际上实时系统需要保证任务在规定的时间内完成,但此处按照题目要求标注“正确答案”于错误选项,实际正确选项应为能体现实时系统确保任务按时完成的描述】C.硬实时系统要求所有任务都必须在规定的时间内完成D.软实时系统允许某些任务偶尔错过其截止时间。
嵌入式工程师笔试题目
嵌入式工程师笔试题目嵌入式工程师是指具有C/C++语言、汇编语言等基础,熟悉模拟电子技术等硬件知识,了解处理器体系结构,做嵌入式系统设计和开发,包括硬件系统的建立和相关软件开发、移植、调试等工作的人,下面就是小编整理的嵌入式工程师笔试题目,请看:嵌入式工程师笔试题目【1】1、一根金条长31厘米,如果把它切成数段,使其中的一段或几段能够接成长为1到31中任何整数的金条,请问要切几次?A.4B.5C.6D.7参考答案:A2、运行在多核处理器上的Linux环境中,若临界区非常短,且不允许线程上下文切换的情况下,使用下列哪种机制满足上述需求并且性能最好?A.SpinLockB.MutexC.SemaphoreD.Condition variable参考答案:A3、以下程序输出的结果是()#includeint main(){int x=10,y=10;printf("%d %d",x--,--y);}A.10 10B.9 9C.9 10D.10 9参考答案:D4、下面所述步骤中,不是创建进程所必须的步骤是?A.由调度程序为进程分配CPUB.建立一个进程控制块C.为进程分配内存D.将进程控制块链入就绪队列参考答案:A5、下面描述中,表达正确的有()A.公有继承是基类中的public成员在派生类中仍是public的B.公有继承是基类中的private成员在派生类中仍是private的C.公有继承是基类中的protected成员在派生类中仍是protected的D.私有继承是基类中的public成员在派生类中仍是private的参考答案:ACD6、int listen(SOCKET s, int backlog);该函数中第二个参数的含义是?A.是否打开log信息B.是否打开后台log信息C.后台等待连接队列的最大限制值D.后台等待连接队列的最小限制值参考答案:C7、Java程序中的类名称必须与存放该类的文件名相同。
嵌入式软件工程师笔试题
嵌入式软件工程师笔试题1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(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+@DPTR 5、写出下面分别是什么指针?(1)int *a[10]; (2)int (*a)[10];(3)int (*P)(int) ; (4)int (*a[10])(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 test{int i;short s;char c;union{int a;short b;}}example ;int y ;y = sizeof(example);请问在TC环境下,y=?8、编程实现数组的逆置,例如,“hello,world!”逆置后为“!dlrow,olleh”。
9、你认为嵌入式操作系统包括哪些部分?说说实时操作系统有哪些特点。
10、冯诺依曼结构的计算机由哪几部分组成?11、说说程序,进程,线程的区别。
12、说说你怎样理解程序= 数据+ 结构+ 算法13、根据函数原型编程实现一个数组,按从大到小的冒泡排序。
void tibbule(int a[],int n);//a[]为数组,n为数组长度14、OSI有哪几层?tcp/ip包括哪几层?15、编程实现一个双链表的节点插入和删除。
嵌入式软件 笔试题
嵌入式软件工程师笔试题姓名:得分:一、常识理论题1、简述嵌入式操作系统有哪些,你用过哪几种,简述其特点、优势及劣势?(5分)2、请描述控制及提高嵌入式软件质量有哪些办法,在开发过程中怎么才能保证嵌入式软件的可靠性?(5分)3、你认为在嵌入式开发过程中需要哪些过程控制文档?(5分)4、用变量a给出下面的定义。
(8分)a)一个整型数(An integer)b)一个指向整型数的指针(A pointer to an integer)c)一个指向指针的指针,它指向的指针是指向一个整型数(A pointer to a pointer to aninteger)d)一个有10个整型数的数组(An array of 10 integers)e)一个有10个指针的数组,该指针是指向一个整型数的。
(An array of 10 pointers tointegers)f)一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to afunction that takes an integer as an argument and returns an integer)h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer )5、在嵌入式系统中,动态分配内存可能发生的问题是什么?请给出下面这段代码的输出结果。
(10分)char *ptr;if ((ptr = (char *)malloc(0)) ==NULL)puts("Got a null pointer");else puts("Got a valid pointer");6、请解释下面这段语句的意思及区别?(10分)#define dPS struct s *typedef struct s * tPS;dPS p1,p2;tPS p3,p4;7、请解释关键字static、const、volatile各自的含义及作用,请解释下面这个函数有什么错误?(10分)int square(volatile int *ptr){return *ptr * *ptr;}8、请指出下面代码是什么意思,指出其中的错误。
嵌入式软件工程师招聘试题
一、选择题(10×3=30分)1.STM32F103单片机的每个通用I/O端口有个32位的配置寄存器,个32位的数据寄存器,个32位的置位/复位寄存器,个16位的复位寄存器,个32位的锁定寄存器。
答案是()。
(A)2,1,2,1,1 (B)2,2,1,1,1 (C)2,2,2,1,1 (D)2,2,1,2,12. STM32F103单片机的所有GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为()时可以是激活的或者非激活的。
(A)输入(B)输出(C)推挽(D)开漏3.关于中断嵌套说法正确的是()。
(A)只要响应优先级不一样就有可能发生中断嵌套(B)只要抢占式优先级不一样就有可能发生中断嵌套(C)只有抢占式优先级和响应优先级都不一才有可能发生中断嵌套(D)以上说法都不对4.定时/计数器的定时是指(),定时/计数器的计数是指()。
(A)对时间计数(B)外部事件定时(C)内部时钟计数(D)外部事件计数5.在进行串行通信时,若两机的发送与接收可以同时进行,则称为()。
(A)半双工传送(B)单工传送(C)双工传送(D)全双工传送6.有以下程序#includeint f(int n);main(){ int a=3,s;s=f(a);s=s+f(a);printf(“%d\n”,s);}int f(int n){ static int a=1;n+=a++;return n;}程序运行以后的输出结果是()。
(A)7 (B)8 (C)9 (D)107.在使用STM32固件库函数编程中以下()定义表示通用推挽输出。
(A)GPIO_Mode_Out_OD(B)GPIO_Mode_AF_PP(C)GPIO_Mode_Out_PP(D)GPIO_Mode_AF_OD8.以下能对一维数组a进行初始化的语句是:()。
(A)int a[5]=(0,1,2,3,4,)(B)inta(5)={}(C)int a[3]={0,1,2}(D)int a{5}={10*1}9.STM32嵌套向量中断控制器(NVIC) 具有个可编程的优先等级,在STM32F103 系列上面,又只有个可屏蔽中断。
嵌入式软件笔试题(含答案)
X X X X X
X Y Y Y X
X Y 0 Y X
X Y Y Y X
X X X X X
22:谈谈COM的线程模型。然后讨论进程内/外组件的差别。
23:多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?
参考答案:
虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.
A.15
B.31
C.3
D.1
参考答案:C
7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型
A.void
B.char
C.float
DHale Waihona Puke int 参考答案:D 8:若main()函数带参数,参数个数最多是
A.0
B.1
C.2
D.3
参考答案:C 只知道有定义形式main(int argc,char* argv[]))
#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉
13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是
(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1),
26:写一语句实现x是否为2的若干次幂的判断。
嵌入式工程师笔试题目
嵌入式工程师笔试题目嵌入式工程师笔试题目嵌入式工程师是指具有C/C++语言、汇编语言等基础,熟悉模拟电子技术等硬件知识,了解处理器体系结构,做嵌入式系统设计和开发,包括硬件系统的建立和相关软件开发、移植、调试等工作的人,下面就是整理的嵌入式工程师笔试题目,请看:嵌入式工程师笔试题目【1】1、一根金条长31厘米,如果把它切成数段,使其中的一段或几段能够接成长为1到31中任何整数的金条,请问要切几次?A.4B.5C.6D.7参考答案:A2、运行在多核处理器上的Linux环境中,若临界区非常短,且不允许线程上下文切换的情况下,使用下列哪种机制满足上述需求并且性能最好?A.SpinLockB.MutexC.SemaphoreD.Condition variable参考答案:A3、以下程序输出的结果是()#includeint main(){int x=10,y=10;printf("%d %d",x--,--y);}A.10 10B.9 9C.9 10D.10 9参考答案:D4、下面所述步骤中,不是创建进程所必须的步骤是?A.由调度程序为进程分配CPUB.建立一个进程控制块C.为进程分配内存D.将进程控制块链入就绪队列参考答案:A5、下面描述中,表达正确的有()A.公有继承是基类中的public成员在派生类中仍是public的B.公有继承是基类中的'private成员在派生类中仍是private的C.公有继承是基类中的protected成员在派生类中仍是protected的D.私有继承是基类中的public成员在派生类中仍是private的参考答案:ACD6、int listen(SOCKET s, int backlog);该函数中第二个参数的含义是?A.是否打开log信息B.是否打开后台log信息C.后台等待连接队列的最大限制值D.后台等待连接队列的最小限制值参考答案:C7、Java程序中的类名称必须与存放该类的文件名相同。
嵌入式软件工程师笔试题(含答案)
嵌入式软件工程师笔试题(含答案)嵌入式软件工程师笔试题(含答案) (2019-09-09 22:23)分类:面试题选择题1:设float a=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+″参考答案:D3:下述程序执行后的输出结果是#includemain(){int x='f';printf("%c\n",'a'+(x-'a'+1));}A.gB.hC.iD.j参考答案:A4:C语言中,下列运算符优先级最高的是A.!B.%C.>>D.==参考答案:A5:数组定义为“ int a [ 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()函数带参数,参数个数最多是A.0B.1C.2D.3参考答案:C 只知道有定义形式main(int argc,char* argv[])) 9:若有宏定义:#define MOD(x,y) x%y则执行以下语句后的输出结果是int a=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;A.0B.3C.6D.7参考答案:A12:设#define N 3#define Y(n) ((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是A.defB.dC.eD.0参考答案:C14:下列转义字符中错误的是A.′\000′B.′\14′C.′\x111′D.′\2′参考答案:C error C2022: '273' : too big for character15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为A.算术运算、赋值运算、关系运算B.算术运算、关系运算、赋值运算C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算参考答案:B16:设#define N 3#define Y(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{ short a;char b;float c;}cs;则sizeof(cs)的值是A.4B.5C.6D.7参考答案: D 字节对齐的话应该是819:若变量已正确定义,表达式( j=3 , j++ )的值是A.3B.4C.5D.0参考答案:A20:C 语言中运算对象必须是整型的运算符是A.%B./C.!D.**参考答案:A简答题21:打印一个N*N的方阵,N为每边字符的个数( 3〈N〈20 ),要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0,1,2,3,...例子:当N =5,打印出下面的图形:X X X X XX Y Y Y XX Y 0 Y XX Y Y Y XX X X X X22:谈谈COM的线程模型。
嵌入式软件工程师 经典笔试题
2 char * const p
char const * p
const char *p 上述三个有什么
6 main() {
int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); } 答案:2 5 分析:*(a+1)就是 a[1],*(ptr-1)就是 a[4],执行结果是 2,5 。&a+1 不是首地址+1, 系统会认为加一个 a 数组的偏移,是偏移了一个数组的大小(本例是 5 个 int) int *ptr=(int *)(&a+1); 则 ptr 实际是&(a[5]),也就是 a+5 原因如下: &a 是数组指针, 其类型为 int (*)[5]; 而指针加 1 要根据指针类型加上一定的值,不同类型的指针+1 之 后增加的大小不同 a 是长度为 5 的 int 数组指针,所以要加 5*sizeof(int) 所以 ptr 实际是 a[5] 但是 prt 与(&a+1)类型是不一样的(这点很重要) 所以 prt-1 只会减去 sizeof(int*)。 a,&a 的地址是一样的,但意思不一样,a 是数组首地址,也就是 a[0] 的地址,&a 是对象(数组)首地址,a+1 是数组下一元素的地址,即 a[1],&a+1 是下一个 对象的地址,即 a[5].
嵌入式软件工程师经典笔试题
嵌入式软件工程师经典笔试题嵌入式软件工程师经典笔试题为关怀大家稳固嵌入式工程是根底学问,yjbys 我为大家整理最新嵌入式工程师考试题如下:1、将一个链表逆序LinkList *reverse(LinkList *head){LinkList *p1,*p2 = NULL,*p3 = NULL;if(head == NULL || head-next == NULL)return head;p1 = head-next;while(p1!=NULL){ p3 = p1-next;p1-next = p2;p2 = p1;p1 = p3;}head-next = p2;// head = p2;return head;}2、计算一个字节里(byte)里面有多少bit被置1 #includeint comb(const int c){int count = 0;int i = 0;int cc = c; while(i++8) {if((cc1)==1) {count++;}cc = cc1;}return count; }int main(){ const int c = 0xcf;printf(%d\n,comb(c));return 1;}3、在一个字符串中找到可能的`最长的子字符串#include#include#includechar *commanstring(char shortstring[],char longstring[]) {int i,j;char *substring = malloc(256);if(strstr(longstring,shortstring)!=NULL)return shortstring;for(i=strlen(shortstring)-1;i0;i--){for(j=0;j=strlen(shortstring)-i;j++) {memcpy(substring,shortstring[j],i);substring[i]=\0;if(strstr(longstring,substring)!=NULL) return substring;}}return NULL;}void main(void){ char *str1 = aocdfe;char *str2 = pmcdfa;char *comman = NULL;if(strlen(str1)strlen(str2))comman= commanstring(str2,str1);elsecomman = commanstring(str1,str2);printf(the longest comman string is:%s\n,comman); }4、字符串转换为整数#include#includevoid reverse(char s[]){ //字符串反转int c, i=0, j;for(j=strlen(s)-1;i{ c=s[i];s[i]=s[j];s[j]=c;i++;}}void IntegerToString(char s[],int n){ int i=0,sign;if((sign=n)0)//假设是负数,先转成正数n=-n;do //从个位开头变成字符,直到最高位,最终应当反转 { s[i++]=n%10+0; }while((n=n/10)0);//假设是负数,补上负号if(sign0)s[i++]=-;s[i]=\0;//字符串完毕reverse(s);}void main(){ int m;char c[100];m =215;IntegerToString(c,m);printf(integer = %d string = %s\n, m, c); }5、整数转换为字符串#include#includeint Atoi(char str[]){int i;int weight = 1; // 权重int rtn = 0; // 用作返回for(i = strlen(str) - 1; i = 0; i--) {rtn += (str[i] - 0)* weight; //weight *= 10; // 增重}return rtn; }void main(){char str[32];printf(Input a string :); gets(str);printf(%d\n, Atoi(str)); }6、将一个字符串逆序#include#includechar *strconv(char *p){int length = strlen(p);char *ptr = p;char *ptr_1 = p + length -1; while(ptr ptr_1){char c = *ptr;*ptr = *ptr_1;*ptr_1 = c;++ptr;--ptr_1;}return p;}int main(){ char str[]=abcdef1234; char *p;p = strconv(str);printf(%s,p);return 1;}。
嵌入式软件工程师笔试题
维数组空间的动态申请a.简单的,已经有一维,如char (*c)[5];c=new char[ n][5]; 维的int **p;p=new in t*[m_row];题二:一读程序,写出运行结果#i nelude <>#i nclude <>#i nclude <>#i nclude <>typedef struct{int value;/ char type;}head_t;这是什么东西啊?typedef struct{head_t head;int para;}message_t;void mai n(void){message_t *message二NULL;\ head_t *head=NULL;message=(message_t *)malloc(sizeof(message_t));o assert(message); 目标文件,不进行连接(一般很少单独使用)。
o make clea n删除编译产生的目标文件和依赖文件。
o make clea nail删除目标文件、依赖文件以及可执行文件。
o make rebuild重新编译和连接程序。
相当于make clea n && make all 。
下面提供两个例子来具体说明上面Makefile 的用法。
例一Hello World 程序这个程序的功能是输出Hello, world! 这样一行文字。
由、、三个文件组成。
前两个文件是C程序,后一个是C++程序,因此这是一个C和C++混编程序。
代码:/* File n ame:* C header file*/ #ifndef HELLO H#defineHELLO_H#ifdef __cplusplus \extern "C" { #en dif voidprin t_hello();#ifdef __cplusplus} #en dif #en dif代码:代码:/* File name: * C++ source file. */ #i nclude ""mai n() { prin t_hello(); return 0; }建立一个新的目录,然后把这三个文件拷贝到目录中,也把Makefile 文件拷贝到目录中。
嵌入式软件工程师笔试题
嵌入式软件工程师笔试题一、题目描述某公司正在招聘一名嵌入式软件工程师,为了筛选合适的人选,决定进行一场笔试。
请根据以下要求完成以下三个问题:1. 设计一个嵌入式软件系统,要求对温度进行实时监测,并根据温度变化控制一个风扇的转速。
2. 编写一个C语言函数,实现对一个整型数组的排序功能。
3. 使用C语言编写一个简单的通信协议,实现两个设备之间的数据传输。
二、嵌入式软件系统设计在嵌入式软件系统设计方面,以下是一个简要的设计方案:1. 硬件配置:a. 主控芯片:选择一款适合的低功耗嵌入式处理器,如ARM Cortex-M系列。
b. 温度传感器:选择一款精度高、稳定性好的温度传感器,可通过I2C或SPI接口与主控芯片通信。
c. 风扇控制器:选择一款与主控芯片兼容的风扇控制器,可通过PWM信号控制风扇转速。
2. 软件设计:a. 主程序循环:主控芯片通过定时器中断实现周期性监测温度并控制风扇的转速。
b. 温度读取:通过I2C或SPI通信协议读取温度传感器的温度值。
c. 温度判断:根据温度值判断是否需要调整风扇转速。
d. 风扇控制:通过PWM信号控制风扇的转速,根据温度变化调整占空比。
三、整型数组排序函数实现以下是一个简单的C语言函数,实现对一个整型数组的排序功能:```cvoid arraySort(int arr[], int length) {int i, j, temp;for (i = 0; i < length - 1; i++) {for (j = 0; j < length - i - 1; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}```四、简单通信协议设计以下是一个使用C语言编写的简单通信协议,实现两个设备之间的数据传输:```c// 发送端void sendData(uint8_t data) {// 将数据通过串口发送给接收端UART_send(data);}// 接收端void receiveData() {while (!UART_dataAvailable()) {} // 等待数据接收完成uint8_t data = UART_receive(); // 获取接收到的数据// 对接收到的数据进行处理// ...```根据上述设计方案和示例代码,嵌入式软件工程师可以完成相关开发任务,实现温度监测与风扇控制、数组排序功能以及设备间的简单数据传输。
嵌入式软件工程师笔试题
嵌入式软件工程师笔试题一、选择题(每题2分,共20分)1. 在C语言中,下列哪个关键字用于定义结构体?A. ifB. switchC. structD. for2. 在嵌入式系统中,通常用于实现实时多任务操作的机制是:A. 线程B. 进程C. 中断D. 信号量3. 下列哪种存储器属于非易失性存储器?A. RAMB. ROMC. EEPROMD. SDRAM4. 在ARM架构中,用于存储程序计数器(PC)的寄存器是:A. R0B. R1C. R15D. SP5. 以下哪种通信协议不属于工业通信协议?A. ModbusB. CANC. HTTPD. Profibus6. 在嵌入式Linux开发中,设备树(Device Tree)的主要作用是:A. 描述硬件信息B. 配置内核参数C. 管理文件系统D. 运行应用程序7. 以下哪个是实时操作系统(RTOS)的特点?A. 支持多任务B. 支持多线程C. 支持图形界面D. 支持网络通信8. 在C语言中,用于动态分配内存的函数是:A. mallocB. freeC. callocD. realloc9. 以下哪种传感器通常用于测量物体的速度?A. 加速度传感器B. 陀螺仪C. 霍尔传感器D. 光电传感器10. 在嵌入式系统中,串行通信接口UART的主要作用是:A. 连接显示器B. 连接键盘C. 连接鼠标D. 连接串行设备二、填空题(每题2分,共20分)11. 在C语言中,使用关键字________可以定义一个指向函数的指针。
12. 在嵌入式系统中,________是一种常用的低功耗无线通信技术。
13. 为了在嵌入式设备中实现网络功能,通常需要使用________协议栈。
14. 在嵌入式Linux系统中,使用________命令可以查看当前系统的进程信息。
15. 一个典型的嵌入式系统通常包括硬件平台、________、外设和应用程序。
16. 在ARM架构中,异常处理程序通常存储在向量表的________部分。
嵌入式软件工程师笔试题汇总
1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串/** 题目:将一个字符串逆序* 完成时间:2006.9.30深圳极讯网吧* 版权归刘志强所有* 描述:写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!#include <iostream>using namespace std;//#define NULL ((void *)0)char * mystrrev(char * const dest,const char * const src){if (dest==NULL && src==NULL)return NULL;char *addr = dest;int val_len = strlen(src);dest[val_len] = '\0';int i;for (i=0; i<val_len; i++){*(dest+i) = *(src+val_len-i-1); }return addr;}main(){char *str="asdfa";char *str1=NULL;str1 = (char *)malloc(20);if (str1 == NULL)cout<<"malloc failed";cout<<mystrrev(str1,str);free(str1);str1=NULL;//杜绝野指针}p=head;q=p->next;while(q!=NULL){temp=q->next;q->next=p;p=q;q=temp;}这样增加个辅助的指针就行乐。
ok 通过编译的代码:#include <stdio.h>#include <ctype.h>#include <stdlib.h>typedef struct List{int data;struct List *next;}List;List *list_create(void){struct List *head,*tail,*p;int e;head=(List *)malloc(sizeof(List));tail=head;printf("\nList Create,input numbers(end of 0):"); scanf("%d",&e);while(e){p=(List *)malloc(sizeof(List));p->data=e;tail->next=p;tail=p;scanf("%d",&e);}tail->next=NULL;return head;}List *list_reverse(List *head) {List *p,*q,*r;p=head;q=p->next;while(q!=NULL){r=q->next;q->next=p;p=q;q=r;}head->next=NULL;head=p;return head;}void main(void){struct List *head,*p;int d;head=list_create();printf("\n");for(p=head->next;p;p=p->next)printf("--%d--",p->data);head=list_reverse(head);printf("\n");for(p=head;p->next;p=p->next)printf("--%d--",p->data);}编写函数数N个BYTE的数据中有多少位是1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)1什么是预编译,何时需要预编译:答案:1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
2 char * const p char const * p const char *p 上述三个有什么区别?答案:char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *p3char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5 = "abc";const char *str6 = "abc";char *str7 = "abc";char *str8 = "abc";cout < < ( str1 == str2 ) < < endl;cout < < ( str3 == str4 ) < < endl;cout < < ( str5 == str6 ) < < endl;out < < ( str7 == str8 ) < < endl;结果是:0 0 1 1str1,str2,str3,str4是数组变量,它们有各自的存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。
4以下代码中的两个sizeof用法有问题吗?[C易]void UpperCase( char str[] ) // 将str 中的小写字母转换成大写字母{for( size_t i=0; i <sizeof(str)/sizeof(str[0]); ++i )if( 'a' <=str[i] && str[i] <='z' )str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout < < "str字符长度为: " < < sizeof(str)/sizeof(str[0]) < < endl;UpperCase( str );cout < < str < < endl;答案:函数的sizeof有问题。
根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。
函数外的str是一个静态定义的数组,因此其大小为6,因为还有'\0',函数的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。
5一个32位的机器,该机器的指针是多少位答案:指针是多少位只要看地址总线的位数就行了。
80386以后的机子都是32的数据总线。
所以指针的位数就是4个字节了。
6 main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}答案:2 5分析:*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5 。
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)int *ptr=(int *)(&a+1); 则ptr实际是&(a[5]),也就是a+5 原因如下:&a是数组指针,其类型为int (*)[5]; 而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同a是长度为5的int数组指针,所以要加5*sizeof(int) 所以ptr实际是a[5] 但是prt与(&a+1)类型是不一样的(这点很重要) 所以prt-1只会减去sizeof(int*)。
a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].7请问以下代码有什么问题:int main(){ char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;}答案:没有为str分配存空间,将会发生异常,问题出在将一个字符串复制进一个字符变量指针所指地址。
虽然可以正确输出结果,但因为越界进行存读写而导致程序崩溃。
8Char * s="AAA";printf("%s",s);s[0]='B';printf("%s",s); 有什么错?答案:"AAA"是字符串常量。
s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA"; 然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
9写一个“标准”宏,这个宏输入两个参数并返回较小的一个。
答案:.#define Min(X, Y) ((X)>(Y)?(Y):(X))//结尾没有‘;’10 嵌入式系统中经常要用到无限循环,你怎么用C编写死循环?答案:while(1){}或者for(;;)11 关键字static的作用是什么?答案:定义静态变量或静态函数12 关键字const有什么含意?答案:表示常量不可以修改的变量。
13 关键字volatile有什么含意?并举出三个不同的例子?答案:提示编译器对象的值可能在编译器未监测到的情况下改变。
(1)并行设备的硬件寄存器(如状态寄存器)(2)中断函数中会访问到的非自动变量(3)多线程应用中被几个任务共享的变量14 int (*s[10])(int) 表示的是什么啊?答案:int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。
15 有以下表达式:int a=248,b=4;int const c=21;const int *d=&a;int *const e=&b;int const *f const =&a; 请问下列表达式哪些会被编译器禁止?为什么?答案:*c=32; d=&b; *d=43; e=34; e=&a; f=0x321f; *c 这是个什么东东,禁止*d 说了是const,禁止e = &a 说了是const 禁止const *f const =&a; 禁止16 交换两个变量的值,不使用第三个变量。
即a=3,b=5,交换之后a=5,b=3;答案:有两种解法, 一种用算术算法, 一种用^(异或) 。
a = a + b; b = a - b; a = a - b;或者 a = a^b;// 只能对int,char.. b = a^b; a = a^b; or a ^= b ^= a;17 c和c++中的struct有什么不同?答案:c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct 可以。
c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private18.#include <stdio.h>#include <stdlib.h>void getmemory(char *p){p=(char *) malloc(100);strcpy(p,"hello world");}int main( ){char *str=NULL;getmemory(str);printf("%s/n",str);free(str);return 0;}答案:程序崩溃,getmemory中的malloc 不能返回动态存,free()对str操作很危险19char szstr[10];strcpy(szstr,"0123456789");产生什么结果?为什么?答案:长度不一样,会造成非法的OS20 列举几种进程的同步机制,并比较其优缺点答案:原子操作信号量机制自旋锁管程,会合,分布式系统21.进程之间通信的途径答案:共享存储系统消息传递系统管道:以文件系统为基础22.进程死锁的原因答案:资源竞争及进程推进顺序非法23.死锁的4个必要条件答案:互斥、请求保持、不可剥夺、环路24.死锁的处理答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁25.操作系统中进程调度策略有哪几种?答案:FCFS(先来先服务),优先级,时间片轮转,多级反馈26.类的静态成员和非静态成员有何区别?答案:类的静态成员每个类只有一个,非静态成员每个对象一个27.纯虚函数如何定义?使用时应注意什么?答案:virtual void f()=0; 是接口,子类必须要实现28.数组和链表的区别答案:数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变29.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?答案:应用层表示层会话层传输层网络层链路层物理层;tcp /udp属于传输层;TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
与TCP 不同,UDP 并不提供对IP 协议的可靠机制、流控制以及错误恢复功能等。
由于UDP 比较简单,UDP 头包含很少的字节,比TCP 负载消耗少。
tcp: 提供稳定的传输服务,有流量控制,缺点是大,冗余性不好udp: 不提供稳定的服务,小,开销小30:(void *)ptr 和(*(void**))ptr的结果是否相同?其中ptr为同一个指针答案:.(void *)ptr 和(*(void**))ptr值是相同的31:int main(){int x=3;printf("%d",x);return 1;}问函数既然不会被其它函数调用,为什么要返回1?答案:mian中,c标准认为0表示成功,非0表示错误。