嵌入式软件工程师C语言笔试题
嵌入式C语言笔试题
经典16道1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
3. 预处理器标识#error的目的是什么?4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?5. 用变量a给出下面的定义a) 一个整型数(An integer)b) 一个指向整型数的指针(A pointer to an integer)c) 一个指向指针的指针,它指向的指针是指向一个整型数(A pointer to a pointer toan integer)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 andreturn an integer )6. 关键字static的作用是什么?7.关键字const是什么含意?下面的声明都是什么意思?const int a;int const a;const int *a;int * const a;int const * a const;8. 关键字volatile有什么含意并给出三个不同的例子。
嵌入式软件开发面试C语言笔试题+答案
Chapter2 系统类
***********************/
1. Linux 和 Uc/os 是如何实现任务调度的?
2. Bootloader 移植过程要注意的事项,要做哪些工作 3. Emacs 用过没有?
/************************
h) int (*a[10]) (int); // An array of 10 pointers to functions that take an in teger argument and return an integer
5. 什么是存储机制里的大、小端模式?试举例说明 大端模式(big-edian):MSB 存放在最低端的地址上。举例,双字节数0x1234以 big-endian 的方式存在起始地
7. 定义一个返回值是指向函数的指针且有一个指向函数的指针作参数的函数。
通用形式如下:
typedef int (*P)( );
// 定义一个函数指针 P 类型
P function( int (*p)( ) );
// 定义一个函数返回值 P 类型,且定义一个指向函数的指针 p 作参数
8. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365) UL // UL 怎么个用法?你暂不要加
SLNode *p,*q; int j; p=head; j=-1; while( (p->next!=NULL) && (j<(i-1)) ) {
int a = 5, b = 7, c;
嵌入式软件工程师笔试题目
1.编写一个函数,判断处理器是使用Big_endian模式(返回0)还是Little_endian模式(返回1)存储数据[cpp]view plaincopyprint?1. i nt 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. b ool 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. i nt 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. c har * 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 成对出现的原则,即"谁申请,就由谁释放"原则。
嵌入式软件工程师笔试题
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。
嵌入式C语言笔试题及答案
嵌入式C语言笔试题及答案预处理器(Preprocessor)1. 用预处理指令define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)define _PER_YEAR (60 某 60 某 24 某 365)UL我在这想看到几件事情:1). define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。
记住,第一印象很重要。
2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
define MIN(A,B) ((A) 6") : puts("6”。
原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。
这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
如果你答错了这个问题,你也就到了得不到这份工作的边缘。
13. 评价下面的代码片断:unsigned int zero = 0;unsigned int compzero = 0某FFFF;/某1's complement of zero 某/对于一个int型不是16位的处理器为说,上面的代码是不正确的。
应编写如下: unsigned int compzero =~0; 这一问题真正能揭露出应试者是否懂得处理器字长的重要性。
在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。
到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。
凹凸 嵌入式软件工程师 C语言笔试
}
===========================================================================
1、嵌入式系统的中断服务程序没有参数和返回值
2、不要在中断服务程序中使用浮点数。ISR不是计算super PI的地方。
b) 在ARM系统中,函数调用的时候,参数是通过哪种方式传递的?
c) 中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别?
5 设周期性任务P1,P2,P3的周期为T1,T2,T3分别为100,150,400;执行时间分别为20,40,100。请设计一种调度算法进行任务调度,满足任务执行周期及任务周期。
1、用在多任务临界区中。因为临界区可能被别的任务所改变。
2、用来描述寄存器。寄存器可能由于硬件原因而改变。
3、中断服务程序与主程序共享的内存空间。
===============================================================
b) C语言中static关键字的具体作用有哪些 ?
a) 关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述)。
===================================================================================
volatile表示变量是易变的。也就是说程序并没有写该变量,该变量的值也有可能改变。因此通知编译器不要对该变量的访问进行优化。
=============================================================
嵌入式C笔试题目 Microsoft Word 文档
嵌入式C开发人员的最好的0x10道笔试题约定:1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了2)数据类型char 一个字节1 byteint 两个字节2 byte (16位系统,认为整型是2个字节)long int 四个字节4 bytefloat 四个字节4 byetdouble 八个字节8 bytelong double 十个字节10 bytepointer 两个字节2 byte(注意,16位系统,地址总线只有16位)第1题: 考查对volatile关键字的认识#include<setjmp.h>static jmp_buf buf;main() { volatile int b; b=3; if(setjmp(buf)!=0) { printf("%d ", b); exit(0); } b=5; longjmp(buf , 1);}请问,这段程序的输出是(a) 3(b) 5(c) 0(d) 以上均不是第2题:考查类型转换main(){ struct node { int a; int b; int c; }; struct node s= { 3,5,6 }; struct node *pt = &s; printf("%d" , *(int*)pt);}这段程序的输出是:(a) 3(b) 5(c) 6(d) 7第3题:考查递归调用int foo ( int x , int n){ int val; val =1; if (n>0) { if (n%2 == 1) val = val*x; val = val * foo(x*x , n/2); } return val;}这段代码对x和n完成什么样的功能(操作)?(a) x^n (x的n次幂)(b) x*n(x与n的乘积)(c) n^x(n的x次幂)(d) 以上均不是第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人main() { int a[5] = {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 foo(int [][3] ); main(){ int a [3][3]= { { 1,2,3} ,{ 4,5,6},{7,8,9}}; foo(a); printf("%d" , a[2][1]);}void foo( int b[][3]) { ++ b; b[1][1] =9;}这段程序的输出是:(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题:考查指针数组main(){ int a[][3] = { 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){ int*ptr; *ptr =10; return ptr;}int*f3(void){ int *ptr; ptr=(int*) malloc(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(*p[2]) ( int *, int);main(){ int a; int b; p[0] = f1; p[1] = f2; a=3; b=5; p[0](&a , b); printf("%d\t %d\t" , a ,b); p[1](&a ,b); printf("%d\t %d\t" , 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 ); main(){ int a; a=3; e(a);}void e(intn){ if(n>0) { 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第12题:考查typedef类型定义,函数指针typedef int (*test) ( float * , float*)test tmp;tmp 的类型是(a) 函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)Pointer to function 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 buf[10] ={ 1,2,3,4,5,6,9,8}; p = (buf+1)[5]; printf("%d" , p);}这段程序的输出是:(a) 5(b) 6(c) 9(d) 以上都不对第14题: 考查指针数组的指针Void f(char**);main(){ char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" }; f( argv );}voidf( char **p ){ char* t; t= (p+= sizeof(int))[-1]; printf( "%s" , t);}这段程序的输出是:(a) ab(b) cd(c) ef(d) gh第15题:此题考查的是C的变长参数,就像标准函数库里printf()那样,这个话题一般国内大学课堂是不会讲到的,不会也情有可原呵呵,#include<stdarg.h>int ripple ( 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<n; ++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; for (i=0; i <=5; i++) j = counter(i);}本程序执行到最后,j的值是:(a) 10(b) 15(c) 6(d) 7详细参考答案第1题: (b)volatile字面意思是易于挥发的。
C语言笔试选择题嵌入式笔试题选择题
C语言笔试选择题嵌入式笔试题选择题 c语言笔试选择题|嵌入式笔试题选择题c语言笔试选择题篇1以下程序的运转结果就是:#include"stdio.h"main(),,{inta,b,d=;a=d/%9b=(一1)&&(一1);printf("%d,%d",a,b);}a)6,1b)2,1c)6,0d)2,0c继续执行以下语句后a的值:inta,b,c;a=b=c=1;++a||++b&&++ca)错误b)0c)2d)1a继续执行以下语句后b的值:inta=5,b=6,w=1,x=2,y=3,z=4;(a=w>x)&&(b=y>z);a)6b)0c)1d)4c以下不正确的if语句形式是:a)if(x>y&&x!=y);b)if(x==y)x+=yc)if(x!=y)scanf("%d",&x)elsescanf("%d",&y);d)if(xac语言笔试选择题篇2*1a一个c程序的继续执行从_____。
a)本程序的main函数开始,到main函数结束b)本程序文件的第一个函数已经开始,至本程序文件的最后一个函数完结c)本程序的main函数开始,到本程序文件的最后一个函数结束d)本程序文件的第一个函数已经开始,至本程序main函数完结*2c以下叙述正确的是:a)在c程序中,main函数必须坐落于程序的最为前面b)c程序的每行中只能写一条语句c)c语言本身没输入输出语句d)在对一个c程序进行编译的过程中,可发现注释中的拼写错误*3d以下描述不恰当的就是。
a)一个c源程序可由一个或多个函数组成b)一个c源程序必须涵盖一个main函数c)c程序的基本组成单位是函数d)在c程序中,注解表明就可以坐落于一条语句的后面*4cc语言规定:在一个源程序中,main函数的位置。
嵌入式软件笔试题(含答案)
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. 编写一个C程序,从键盘读入两个整数a和b,计算它们的和并输出。
```c#include <stdio.h>int main() {int a, b, sum;printf("请输入两个整数:\n");scanf("%d%d", &a, &b);sum = a + b;printf("它们的和为:%d\n", sum);return 0;}```2. 编写一个C函数,判断一个整数是否是奇数,并返回判断结果(1表示奇数,0表示偶数)。
```c#include <stdio.h>int isOdd(int num) {if (num % 2 == 1) {return 1;} else {return 0;}}int main() {int num;printf("请输入一个整数:\n");scanf("%d", &num);if (isOdd(num) == 1) {printf("是奇数\n");} else {printf("是偶数\n");}return 0;}```3. 编写一个C函数,求一个整数数组中的最大值并返回。
#include <stdio.h>int findMax(int array[], int size) {int max = array[0];for (int i = 1; i < size; i++) {if (array[i] > max) {max = array[i];}}return max;}int main() {int size;printf("请输入数组的大小:\n"); scanf("%d", &size);int array[size];printf("请输入数组元素:\n"); for (int i = 0; i < size; i++) {scanf("%d", &array[i]);int max = findMax(array, size);printf("最大值为:%d\n", max);return 0;}```4. 编写一个C程序,实现冒泡排序算法对一个整数数组进行升序排序并输出结果。
XX嵌入式软件工程师笔试题及答案
XX嵌入式软件工程师笔试题及答案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 character。
嵌入式软件工程师笔试题(含答案)
嵌入式软件工程师笔试题(含答案)嵌入式软件工程师笔试题(含答案) (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].
c++嵌入式软件工程师笔试题
c++嵌入式软件工程师笔试题1. C++是什么?2. C++中`this`指针的含义是什么?3. 什么是异常处理?如何在C++中实现?4. 什么是多态?在C++中如何实现?5. 什么是虚函数?6. 什么是构造函数?它在C++中的作用是什么?7. C++中的析构函数有何用途?8. 请描述一下内存分区,并说明堆和栈的区别。
9. 如何定义类的成员函数为静态的?10. 请简述一下拷贝构造函数。
11. `const`关键字在C++中的用途有哪些?12. 在C++中,`inline`关键字有何作用?13. 请描述C++中的RAII技术。
14. `new`和`malloc`在C++中的主要区别是什么?15. 请描述C++中的三种基本控制结构。
16. `switch`语句在C++中允许的变量类型有哪些?17. 如何声明一个常量整型数组?18. `sizeof`运算符在C++中的作用是什么?19. 什么是全局变量和局部变量?它们有什么区别?20. 什么是函数的重载?21. 什么是函数的默认参数?22. C++中的友元函数是什么?23. 请描述一下C++中的内联函数。
24. 什么是STL(标准模板库)?25. `vector`、`list`、`deque`的区别是什么?26. C++中的STL容器如何进行排序?27. 什么是STL中的迭代器?它与指针有何相似之处?28. `auto`关键字在C++中的用途是什么?29. 什么是lambda表达式?如何使用它?30. C++中的STL算法有哪些常见的用途?31. 什么是多线程编程?在C++中如何实现多线程?32. 请描述一下C++中的线程安全问题。
33. C++中的智能指针是什么?它与原始指针有何不同?34. `nullptr`与`NULL`的区别是什么?35. 请解释C++中的深拷贝和浅拷贝。
36. 如何使用C++中的IO流进行文件读写操作?37. 什么是异常安全代码?如何在C++中编写异常安全代码?38. `final`关键字在C++中的含义是什么?它与`override`关键字有何联系?39. C++中的STL容器如何进行查找操作?40. 请描述一下C++中的STL容器的容量和大小。
嵌入式软件工程师笔试题(含答案)
选择题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:谈谈的线程模型。
嵌入式软件工程师笔试题
嵌入式软件工程师笔试题一、题目描述某公司正在招聘一名嵌入式软件工程师,为了筛选合适的人选,决定进行一场笔试。
请根据以下要求完成以下三个问题: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(); // 获取接收到的数据// 对接收到的数据进行处理// ...```根据上述设计方案和示例代码,嵌入式软件工程师可以完成相关开发任务,实现温度监测与风扇控制、数组排序功能以及设备间的简单数据传输。
嵌入式C语言经典笔试题目
嵌入式c语言经典笔试题目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语言课本的附录去找出象这种问题的答案。
当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。
死循环(Infinite loops)4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。
嵌入式软件工程师笔试题
嵌入式软件工程师笔试题一、选择题(每题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架构中,异常处理程序通常存储在向量表的________部分。
嵌入式c语言经典笔试题
嵌入式c语言经典笔试题嵌入式C语言经典笔试题有很多,以下是一些常见的题目,供参考:1. 写出一个宏定义,实现取两个数中的较大值。
c#define MAX(a, b) ((a) > (b) ? (a) : (b))2. 编写一个函数,判断一个整数是否为偶数,如果是则返回1,否则返回0。
cint isEven(int num) {if (num % 2 == 0) {return 1;} else {return 0;3. 实现一个函数,将一个字符串反转。
cvoid reverseString(char* str) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;4. 编写一个函数,计算一个数组中所有元素的和。
cint sumArray(int* arr, int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += arr[i];return sum;5. 实现一个简单的队列数据结构,包括入队、出队和判空操作。
c#define QUEUE_SIZE 100typedef struct {int data[QUEUE_SIZE];int front;int rear;} Queue;void initQueue(Queue* queue) {queue->front = 0;queue->rear = 0;void enqueue(Queue* queue, int value) {if ((queue->rear + 1) % QUEUE_SIZE == queue->front) {// 队列已满return;queue->data[queue->rear] = value;queue->rear = (queue->rear + 1) % QUEUE_SIZE;int dequeue(Queue* queue) {if (queue->front == queue->rear) {// 队列为空return -1;int value = queue->data[queue->front];queue->front = (queue->front + 1) % QUEUE_SIZE;return value;int isEmpty(Queue* queue) {return queue->front == queue->rear;这些题目是嵌入式C语言笔试中常见的题目,希望对你有帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件笔试题(A)
姓名:学校:
专业:电话:
(如无特殊说明,以下所有测试内容都是基于32位嵌入式系统)
1)程序的局部变量存在于中,全局变量存在于中,动态申请数
据存在于中。
2)如何用if来做零值比较
int a : if(a==0)
bool a :
float a :
void * a :
3)
void func( char str[100])
{
printf(“%d”,sizeof( str ) );
}
输出结果是:
有下列定义:
char str[] = “Hello World”;
char *p = str;
int n = 10;
void *ptr = malloc( 100 );
请写出如下表达式的值:
sizeof (str ) = ;
sizeof ( p ) = ;
sizeof ( n ) = ;
sizeof ( ptr )= ;
4)
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x87000000;
p2=(unsigned long *)0x80010000;
请问p1+5 = ;
p2+5 = ;
5)char str[10];
strcpy(str,"0123456789");
产生什么结果?为什么?
6)用C语句,让程序跳转到绝对地址0xFFFF0去执行
7)已知一个数组array,用一个宏定义,求出数组的元素个数
#define ARRAY_COUNT
8)简要说明,为什么标准头文件都有类似以下的结构。
#ifndef __INC_Honeywell_Debug
#define __INC_Honeywell_Debug
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /*__INC_Honeywell_Debug */
9)给定结构
struct token_t
{
char digit:4;
char index:4;
unsigned short data:8;
unsigned long tick;
};
问sizeof(token_t) =
10)在空白处填写完整强制类型转换
short (*day_p)[16];
day_p = ( ) malloc ( );
11)简述:TCP/UDP有何区别?TCP/IP通信建立的过程怎样?端口有什么作用?
12)找出下列嵌入式系统中断处理函数中的错误:
__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
13)请写一个宏,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
3 / 7
14)数组a[N],存放了1至N-1个自然数,其中某个自然数重复一次。
写一个函数,找出被
重复的数字。
要求:(时间复杂度为O(N),可用一种或一种以上方法)
函数原型:
int do_dup(int a[],int N)
5 / 7
15) 基于如下数据结构,实现环形缓冲区的读写函数
#define BUF_SIZE (100)
typedef struct str_data_buf { unsigned char write_index; unsigned char read_index; BOOL full_flag; BOOL empty_flag; int data_buf[BUF_SIZE]; }data_buf_t, *p_data_buf;
static data_buf_t ring_buf;
实现其读写函数:
//---------------------------------------------------------------------------------------------- BOOL write_fifo(int new_data) /* write one item into ring buffer */
BOOL read_item (int* data) /* read one item from ring buffer */
选做部分(C++)
1)类的静态成员和非静态成员有何区别?
2)定义并实现String类,要求有构造函数、析构函数和赋值函数,
7 / 7。