嵌入式软件工程师笔试题目Word文档格式.docx

上传人:b****3 文档编号:15066797 上传时间:2022-10-27 格式:DOCX 页数:9 大小:24.70KB
下载 相关 举报
嵌入式软件工程师笔试题目Word文档格式.docx_第1页
第1页 / 共9页
嵌入式软件工程师笔试题目Word文档格式.docx_第2页
第2页 / 共9页
嵌入式软件工程师笔试题目Word文档格式.docx_第3页
第3页 / 共9页
嵌入式软件工程师笔试题目Word文档格式.docx_第4页
第4页 / 共9页
嵌入式软件工程师笔试题目Word文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

嵌入式软件工程师笔试题目Word文档格式.docx

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

嵌入式软件工程师笔试题目Word文档格式.docx

}

do

10.

11.

p1=

head->

next;

12.

p2=

next->

13.

}while(p2&

&

p2->

next&

p1

!

=p2);

14.

if(p1

==p2)

15.

16.

*start=p1;

17.

returntrue;

18.

19.

else

20.

21.}

3.计算一个无符号32位整型(unsignedint)的bit有多少位为1或0

1.intcaculate_bit(unsignedintnum)

2.{

3.

unsignedintmask=1<

<

31;

intn=0;

inti;

for(i=0;

i<

32;

i++)

if(num&

mask)

n++;

num<

=1;

returnn;

4.保证malloc和free成对出现

1.char*function(void)

3.char*p;

4.p=(char*)malloc(⋯);

5.if(p==NULL)

6.⋯;

7.⋯/*一系列针对p的操作*/

8.returnp;

9.}

在某处调用function(),用完function中动态申请的内存后将其free,如下:

char*q=function();

free(q);

上述代码明显是不合理的,因为违反了malloc和free成对出现的原则,即"

谁申请,就由谁释放"

原则。

不满足这个原则,会导致代码的耦合度增大,因为用户在调用function函数时

需要知道其内部细节!

正确的做法是在调用处申请内存,并传入function函数,如下:

char*p=malloc(⋯);

if(p==NULL)function(p);

free(p);

p=NULL;

而函数function则接收参数p,如下:

voidfunction(char*p)

⋯/*一系列针对p的操作*/

6.编写一个函数实现求两个整数的最大公约数

1.intfuc(inta,intb)

3.if(a%b==0)

4.returnb;

5.returnfuc(b,a%b);

6.}

7.将对称的二维数组逆转

1.#defineN3

2.inti,j,a[N][N]={1,2,3,4,5,6,7,8,9};

3.inttemp;

4.for(i=0;

N;

5.{

6.for(j=i;

j<

j++)

7.{

8.if(i==j)

9.continue;

temp=a[i][j];

a[i][j]=a[j][i];

a[j][i]=temp;

14.}

8.冒泡排序和选择排序和插入排序

1.#defineN5

2.//冒泡排序

3.for(i=0;

N-1;

5.for(j=0;

N-i-1;

6.{

7.if(a[j]>

a[j+1])

8.{

9.temp=a[j];

10.a[j]=a[j+1];

11.a[j+1]=temp;

12.}

13.}

14.}

15.//选择排序

16.for(i=0;

i++)

17.{

18.k=i;

19.for(j=k+1;

N;

20.{

21.if(a[k]>

a[j])

22.k=j;

23.}

24.temp=a[k];

25.a[k]=a[i];

26.a[i]=temp;

27.}

28.//插入排序

29.for(j=1;

30.{

31.key=a[j];

32.i=j-1;

33.while(i>

=0;

&

a[i]>

key)

34.{

35.a[i+1]=a[i];

36.i--;

37.}

38.a[i+1]=key;

39.}

9.字符串的链接函数(不能用系统自带的函数实现)[cpp]viewplaincopyprint?

1.voidstring_strcat(char*dest,char*src)

3.char*p=dest;

//记录头位置

4.while(*dest++);

5.dest--;

6.while(*dest++=*src++);

7.*dest=\'

0'

;

8.}

10.用#define声明一个常数,用以表明一年中有多少秒

365)UL

#defineSECONDS_PER_YEA(6R0*60*24

11.关键字volatile有什么含义

定义为volatile的变量可能会被意想不到的改变,这样编译器就不会去假设这个变量的值,准确的说,优化器在用到volatile变量时候必须小心地重新读取该变量的值,而不是使用保存在寄存器的备份,用到volatile的三个例子

【1】并行设备的硬件寄存器(如:

状态寄存器)。

【2】一个中断服务字程序中汇访问到的非自动变量。

【3】多线程应用中被几个任务共享的变量

12.多线程同步的方式

【1】临界区。

通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问

【2】互斥量。

为协同共同对一个共享资源的单独访问而设计的。

【3】信号量。

为控制一个具有有限数量用户资源而设计的。

P操作:

S减1;

若S减1后仍大于等于零,则进程继续执行;

若S减1后小于零,则进程

阻塞

V操作:

S加1;

若S加1后大于零,则进程继续执行;

若S减1后小于等于零,则从该信

号的等待队列中唤醒一个等待进程

【4】事件。

用来通知线程有一些事件已经发生,从开启动后继任务的开始。

13.函数指针问题

1.<

PREclass=cppname="

code"

>

/PRE>

//改错

1:

//改为(在C或C++中):

p=(char*)malloc(sizeof(

char)*num);

*p=(char*)malloc(sizeof(char)*num);

5.}

6.voidTest()

voidTest()

7.{

char*str=NULL;

GetMemory(str,100);

GetMemory(&

str,100);

strcpy(str,"

hello"

);

11.}

13.//或者改为(在C++中):

14.voidGetMemory(char*&

p,intnum)

15.{

16.p=(char*)malloc(sizeof(char)*num);

17.}

18.voidTest()

19.{

20.char*str=NULL;

21.strcpy(str,"

22.}

23.

24.

25.

26.

27.//改错2:

28.char*GetString(void)

29.{{

30.charp[]="

31.returnp;

32.}

33.voidTest()

34.{{

35.char*str=NULL;

//改为:

voidGetString(

p="

char*str=

36.

str=GetString();

char*&

p)//GetString(char**p)

//*p="

NULL;

GetString(str);

//GetString(&

str)

 

37.}<

38.<

P>

/P>

39.<

PRE>

40.<

41.<

42.<

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

当前位置:首页 > 高等教育 > 院校资料

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

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