嵌入式工程师笔试题文档格式.docx

上传人:b****6 文档编号:20821231 上传时间:2023-01-25 格式:DOCX 页数:54 大小:57.04KB
下载 相关 举报
嵌入式工程师笔试题文档格式.docx_第1页
第1页 / 共54页
嵌入式工程师笔试题文档格式.docx_第2页
第2页 / 共54页
嵌入式工程师笔试题文档格式.docx_第3页
第3页 / 共54页
嵌入式工程师笔试题文档格式.docx_第4页
第4页 / 共54页
嵌入式工程师笔试题文档格式.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

嵌入式工程师笔试题文档格式.docx

《嵌入式工程师笔试题文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式工程师笔试题文档格式.docx(54页珍藏版)》请在冰豆网上搜索。

嵌入式工程师笔试题文档格式.docx

while(q!

=NULL)

{

temp=q->

q->

next=p;

p=q;

q=temp;

}

这样增加个辅助的指针就行乐。

ok通过编译的代码:

/*一个链表逆序*/

stdio.h>

ctype.h>

stdlib.h>

typedefstructList{

intdata;

structList*next;

}List;

List*list_create(void)

structList*head,*tail,*p;

inte;

head=(List*)malloc(sizeof(List));

tail=head;

printf("

\nListCreate,inputnumbers(endof0):

);

scanf("

%d"

&

e);

while(e){

p=(List*)malloc(sizeof(List));

p->

data=e;

tail->

tail=p;

next=NULL;

returnhead;

List*list_reverse(List*head)

List*p,*q,*r;

p=head;

q=p->

while(q!

{

r=q->

q=r;

}

head->

head=p;

voidmain(void)

structList*head,*p;

intd;

head=list_create();

\n"

for(p=head->

p;

p=p->

next)

--%d--"

p->

data);

head=list_reverse(head);

for(p=head;

p->

/*编写函数数N个BYTE的数据中有多少位是1。

*/

解:

此题按步骤解:

先定位到某一个BYTE数据;

再计算其中有多少个1。

叠加得解。

#incluede<

#defineN10

//定义BYTE类型别名

#ifndefBYTE

typedefunsignedcharBYTE;

#endif

intcomb(BYTEb[],intn)

intcount=0;

intbi,bj;

BYTEcc=1,tt;

//历遍到第bi个BYTE数据

for(bi=0;

bi<

n;

bi++)

{

//计算该BYTE的8个bit中有多少个1

tt=b[bi];

 

for(bj=0;

bj<

8;

bj++)

//与1相与或模2结果是否是1?

测试当前bit是否为1

//if(tt%2==1)

if((tt&

cc)==1)

count++;

}

//右移一位或除以2,效果相同

//tt=tt>

>

1;

tt=tt/2;

returncount;

//测试

intmain()

BYTEb[10]={3,3,3,11,1,1,1,1,1,1};

cout<

comb(b,N)<

endl;

return0;

/*编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。

char*search(char*cpSource,charch)

char*cpTemp=NULL,*cpDest=NULL;

intiTemp,iCount=0;

while(*cpSource)

if(*cpSource==ch)

iTemp=0;

cpTemp=cpSource;

while(*cpSource==ch)

++iTemp,++cpSource;

if(iTemp>

iCount)

iCount=iTemp,cpDest=cpTemp;

if(!

*cpSource)

break;

++cpSource;

returncpDest;

string.h>

//

//自定义函数MyAtoI

//实现整数字符串转换为证书输出

//程序不检查字符串的正确性,请用户在调用前检查

intMyAtoI(charstr[])

inti;

intweight=1;

//权重

intrtn=0;

//用作返回

for(i=strlen(str)-1;

i>

=0;

i--)

rtn+=(str[i]-'

0'

)*weight;

//

weight*=10;

//增重

returnrtn;

voidmain()

charstr[32];

printf("

Inputastring:

gets(str);

%d\n"

MyAtoI(str));

#include<

voidreverse(chars[])

//字符串反转

intc,i=0,j;

for(j=strlen(s)-1;

i<

j;

j--)

c=s[i];

s[i]=s[j];

s[j]=c;

i++;

voidIntegerToString(chars[],intn)

inti=0,sign;

if((sign=n)<

0)//如果是负数,先转成正数 

n=-n;

do//从个位开始变成字符,直到最高位,最后应该反转

s[i++]=n%10+'

}while((n=n/10)>

0);

//如果是负数,补上负号

if(sign<

0)

s[i++]='

-'

s[i]='

//字符串结束

reverse(s);

intm;

charc[100];

请输入整数m:

"

m);

IntegerToString(c,m);

integer=%dstring=%s\n"

m,c);

1、 

解释C语言关键字extern、static的含义。

2、 

解释C语言关键字volatile、const的含义。

3、举例说明typedef和define的用法。

 4、语句for(;

1;

)有什么问题?

它是什么意思?

  5、do……while和while……do有什么区别?

  6、请写出下列代码的输出内容

  #include

  main()

  {

   inta,b,c,d;

   a=10;

   b=a++;

   c=++a;

   d=10*a++;

   printf("

b,c,d:

%d,%d,%d"

,b,c,d);

   return0;

  }

答:

  7、设有以下说明和定义:

(32位编译器情况下)

  typedefunion{longi;

intk[5];

charc;

}DATE;

  structdata{intcat;

DATEcow;

doubledog;

}too;

  DATEmax;

  则语句printf("

sizeof(structdate)+sizeof(max));

的执行结果是:

_______

8、下面是51单片机最小系统电路图,试分析该电路结构以及实现原理?

9、谈谈汇编语言、C和C++三种语言在嵌入式开发中的区别和特点?

简述你对嵌入式概念的理解?

10、列举常见的嵌入式操作系统和单片机?

简要介绍你以前做过的项目,在项目中用过什么处理器和操作系统,实现什么功能以及关键技术。

威盛的一场笔试

1.什么是平衡二叉树?

编写一个删除平衡二叉树的程序?

2.写一个程序,求有向有权图两点之间的最小权?

3.根据你的理解,写出Cstring类的构造函数和析构函数?

4.使用C语言实现对ini文件的访问,使程序可以对int,double,字符串类进行读写。

5.n×

n个方格(n为任意整数),定义若两个格有公共边则称两个格相邻。

现将n个格中的N个格子图黑,使每个格子都与黑格子相邻。

试编程,使N最小。

1、char 

*strconv(char 

*p)

int 

i,length;

char 

temp;

length 

strlen(p);

for(i 

0;

length/2;

i++)

temp 

*(p 

i);

i) 

+length 

return 

src[100];

*p;

scanf("

%s"

src);

strconv(src);

%s\n"

p);

3、int 

cal(int 

data) 

//calculation 

the 

number 

of 

bit 

in 

one 

byte

a;

count 

data 

100;

while 

(a 

!

0)

+= 

2;

/= 

count;

d,count;

d);

cal(d);

%d 

one\n"

count);

4、#include<

void 

findmax(char 

0,max 

record[200];

recordmax[200];

for(int 

if((*(p 

== 

'

) 

|| 

(*(p 

))

if(count 

max)

max 

record[j] 

strcpy(recordmax,record);

else

++;

if(*(p 

break;

recordmax);

str[]="

zeng 

weidsfdsaf 

langd 

hah"

str);

findmax(str);

北京诚亚科技有限责任公司笔试题

预处理器(Preprocessor)

1.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#defineSECONDS_PER_YEAR(60*60*24*365)UL

我在这想看到几件事情:

1).#define语法的基本知识(例如:

不能以分号结束,括号的使用,等等)

2).懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

3).意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。

4).如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。

记住,第一印象很重要。

2.写一个"

标准"

宏MIN,这个宏输入两个参数并返回较小的一个。

#defineMIN(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语言课本的附录去找出象这种

问题的答案。

当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。

死循环(Infiniteloops)

4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?

这个问题用几个解决方案。

我首选的方案是:

while

(1){}

一些程序员更喜欢如下方案:

for(;

){}

这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。

如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的

基本原理。

如果他们的基本答案是:

我被教着这样做,但从没有想到过为什么。

这会给我留下一个坏印象。

第三个方案是用goto

Loop:

...

gotoLoop;

应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。

数据声明(Datadeclarations)

5.用变量a给出下面的定义

a)一个整型数(Aninteger)

b)一个指向整型数的指针(Apointertoaninteger)

c)一个指向指针的的指针,它指向的指针是指向一个整型数(Apointertoapointertoaninteger)

d)一个有10个整型数的数组(Anarrayof10integers)

e)一个有10个指针的数组,该指针是指向一个整型数的(Anarrayof10pointerstointegers)

f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers)

g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger)

h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger)

答案是:

a)inta;

//Aninteger

b)int*a;

//Apointertoaninteger

c)int**a;

//Apointertoapointertoaninteger

d)inta[10];

//Anarrayof10integers

e)int*a[10];

//Anarrayof10pointerstointegers

f)int(*a)[10];

//Apointertoanarrayof10integers

g)int(*a)(int);

//Apointertoafunctionathattakesanintegerargumentandreturnsaninteger

h)int(*a[10])(int);

//Anarrayof10pointerstofunctionsthattakeanintegerargumentandreturnaninteger

6.关键字static的作用是什么?

这个简单的问题很少有人能回答完全。

在C语言中,关键字static有三个明显的作用:

1).在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2).在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。

它是一个本地的全局变量。

3).在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。

那就是,这个函数被限制在声明它的模块的本地范围内使用。

大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。

这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。

7.关键字const是什么含意?

我只要一听到被面试者说:

const意味着常数"

,我就知道我正在和一个业余者打交道。

去年DanSaks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:

EmbeddedSystemsProgramming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"

只读"

就可以了。

尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。

(如果你想知道更详细的答案,仔细读一下Saks的文章吧。

)如果应试者能正确回答这个问题,我将问他一个附加的问题:

下面的声明都是什么意思?

constinta;

intconsta;

constint*a;

int*consta;

intconst*aconst;

前两个的作用是一样,a是一个常整型数。

第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。

第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。

最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。

顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?

我也如下的几下理由:

1).关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。

如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。

(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。

2).通过给优化器一些附加的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1