关键词不能为空

当前您在: 主页 > 英语 >

嵌入式软件工程师笔试题

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 12:41
tags:

-

2021年3月3日发(作者:航程)


























WORD


格式










可编辑


























(一)



1


什么是预编译,何时需要预编译:




答案:




1、总是使用不经常改动的大型代码体。




2、


程序由多个模块组成,


所有模块都使用一组标准的包含文件和相同的编译选项。


在这种


情况下,可以将所有包含文件预编译为一个预编译头。





2 char * const p


char const * p


const char *p


上述三个有什么区别?




答案:




char * const p; //


常量指针,

< p>
p


的值不可以修改




char const * p



//


指向常量的指针,指向的常量值不可以改



const char *p




//



char const *p




3


char str1[] =



char str2[] =



const char str3[] =



const char str4[] =



const char *str5 =



const char *str6 =



char *str7 =



char *str8 =



cout < < ( str1 == str2 ) < < endl;



cout < < ( str3 == str4 ) < < endl;



cout < < ( str5 == str6 ) < < endl;



out < < ( str7 == str8 ) < < endl;



结果是:


0 0 1 1



str1,str2,str3,str4


是数组变量,它们有各自的内 存空间;而


str5,str6,str7,str8


是指针, 它们指


向相同的常量区域。





4


以下代码中的两个


sizeof


用法有问题吗?




[C



]



void UpperCase( char str[] )












//




str


中的小写字母转换成大写字母




{


for( size_t i=0; i










if( 'a' <=str[i] && str[i] <='z' )















str[i] -= ('a'-'A' );



}



char str[] =




cout < <


字符长度为


:



UpperCase( str );



cout < < str < < endl;



答案:


函数内的

sizeof


有问题。根据语法,


sizeof

< p>
如用于数组,只能测出静态数组的大小,


无法检测动态分配的或外部数组大 小。函数外的


str


是一个静态定义的数组,因此其大小为


6


,因为还有


'0'


,函数内的


str


实际只是一个指向字符串的指针,没有任何 额外的与数组相





























专业知识整理分享














































WORD


格式










可编辑


























关的信息,因此


sizeof


作用于上只将其当指针看,一个指针为


4


个字 节,因此返回


4






5


一个< /p>


32


位的机器


,


该机器的指针是多少位



答案:




指针是多少位只要看地址总线的位数就行了

< br>。


80386


以后的机子都是


3 2


的数据总线。所以


指针的位数就是


4


个字节了。





6 main()


{



int a[5]={1,2,3,4,5};



int *ptr=(int *)(&a+1);



printf(


}




答案:


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


之后增加的大小不同


< /p>


a


是长度为


5



int


数组指针,所以要加



5*sizeof(int)


所以


p tr


实际是


a[5]


但是

< p>
prt



(&a+1)


类 型是不一


样的


(


这点很重要

< p>
)


所以


prt-1


只会 减去


sizeof(int*)



< /p>


a,&a


的地址是一样的,但意思不一样,


a


是数组首地址,也就是


a[0]


的 地址,


&a


是对象(数组)首地址,


a +1


是数组下一元素的地


址,即


a[1 ],&a+1


是下一个对象的地址,即


a[5].




7


请问以下代码有什么问题:




int


main()



{






char a;









char *str=&a;









strcpy(str,









printf(str);








return 0;



}




答案:没有为


str


分配内存空间,将会发 生异常,问题出在将一个字符串复制进一个字符变


量指针所指地址。

虽然可以正确输出结果,但因为越界进行内存读写而导致程序崩溃






8


Char



* s=



printf(



s[0]='B';



printf(


有什么错?



答案:



是字符串常量。


s


是指针,


指向这个字符串常量,所以声明

s


的时候就有问题。



cosnt char* s=


然后又因为是常量,所以对是


s[0]


的赋值操作是不合法的。





9


写一个



标准



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



答案:


.#define Min(X, Y) ((X)>(Y)?(Y):(X))


//


结尾没有

































专业知识整理分享














































WORD


格式










可编辑



























10


嵌 入式系统中经常要用到无限循环,你怎么用


C


编写死循环?



答案:


while(1){}

< p>
或者


for(;;)




11


关键字


static

< p>
的作用是什么?



答案:定义静态变量





静态函数




12


关键字


const


有什么含意?



答案:表示常量不可以修改的变量。





13


关键字


volatile


有什么含意?并举出三个不同的例子?


< /p>


答案:提示编译器对象的值可能在编译器未监测到的情况下改变。










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;




答案:有两种解法


,


一种用算术算法


,


一种用

< p>
^(


异或


)



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


默认为


private




18.


#include



#include




void getmemory(char *p)


{



p=(char *) malloc(100);






























专业知识整理分享














































WORD


格式










可编辑


























strcpy(p,



}



int main( )


{



char *str=NULL;



getmemory(str);



printf(



free(str);



return 0;


}



答案:程序崩溃,


getmemory


中的


malloc


不能返回动态内存,



free


()对


str


操作很危险





19



char szstr[10];



strcpy(szstr,



产生什么结果?为什么?



答案:



长度不一样,会造成非法的


OS




20


列举几种进程的同步机制,并比较其优缺点



答案:



原子操作



信号量机制



自旋锁



管程,会合,分布式系统





21.


进程之间通信的途径



答案:共享存储系统消息传递系统管道:以文件系统为基础





22.


进程死锁的原因



答案:资源竞争及进程推进顺序非法





23.


死锁的


4


个必要条件



答案:互斥、请求保持、不可剥夺、环路





24.


死锁的处理



答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁





25.


操作系统中进程调度策略有哪几种?



答案:


FCFS(


先来先服务


)


,优先级,时间片轮转,多级反馈





26.


类的静态成员和非静态成员有 何区别?



答案:类的静态成员每个类只有一个,非静态成员每个对象一个





27.


纯 虚函数如何定义?使用时应注意什么?



答案:


virtual void f()=0;


是接口,子类必须要实现





28.


数组和链表的区别


< p>
答案:数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变

< br>






























专业知识整理分享














































WORD


格式










可编辑




























的七层模型是什么?



tcp/udp


是属于哪一层?


tcp/udp


有何优缺点?



答案:应用层



表示层



会话层



传输层



网络层



链路层



物理层






tcp /udp


属于传输层






TCP


服务提供了数据流传输、


可靠性、


有效 流控制、


全双工操作和多路复用技术等。



TCP


不同,



UDP


并不提供对



IP


协议的可靠机制、流控制以及错误恢复功能等。由于



UDP



较简单,



UDP


头包含很少的字节,比



TCP


负载消耗少。



tcp:


提供稳定的传输服务,有


流 量控制,缺点是包头大,冗余性不好



udp:


不提供稳定的服务,包头小,开销小






30



(void *)ptr




(*(void**))ptr< /p>


的结果是否相同?其中


ptr


为同一个指 针



答案:


.(void *)ptr




(*(void**))ptr< /p>


值是相同的





31




int main()



{


int x=3;


printf(


return 1;



}



问函数既然不会被其它函数调用,为什么要返回


1




答案:


mian


中,


c


标准认为< /p>


0


表示成功,非


0


表示错误。具体的值是某中具体出错信息





32


要对绝对地址


0x100000


赋值,


我们可以用

< br>


(unsigned int*)0x100000 = 1234;


那么要是想


让程序跳转到绝对地址是


0x10 0000


去执行,应该怎么做?



答案:


*((void


(*)(


))0x100000


)


(


);


首先要将


0x100000


强制转换成函数指针


,


< br>:


(void


(*)())0x100000


然后再调用它


:


*((void


(*)())0x100000)();


< br>typedef


可以看得更直观些


:


typedef



void(*)()



voidFuncPtr;



*((voidFuncPtr)0x100000)();




33


,已知一个数组


table


,用一个宏定义,求出数据的元素个数



答案


:



#define NTBL(table)



(sizeof(table)/sizeof(table[0]))




34


。线程与进程的区别和联系


?


线程是否具有相同的堆栈


? dll


是否有独立的堆栈


?




答案:


进程是死的,


只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的


时候操作 系统就帮你创建了一个主线程。每个线程有自己的堆栈。



DL L


中有没有独立的堆


栈,这个问题不好回答,或者说这个问题本 身是否有问题。因为


DLL


中的代码是被某些线


程所执行,


只有线程拥有堆栈,


如果

< br>DLL


中的代码是


EXE


中的线 程所调用,


那么这个时候


是不是说这个


DLL


没有自己独立的堆栈?如果


DLL


中的代码是由


DLL


自己创建的线程所


执行,


那么是不是说


DLL


有独立的 堆栈?以上讲的是堆栈,如果对于堆来说,每个


DLL



自己的堆,所以如果是从


DLL


中动态分配的 内存,最好是从


DLL


中删除,如果你从


DLL


中分配内存,然后在


EXE


中 ,或者另外一个


DLL


中删除,很有可能导致程序崩溃





35































专业知识整理分享














































WORD


格式










可编辑


























unsigned short A = 10;



printf(



char c=128;



printf(



输出多少?并分析过程



答案:第一题,~


A



0xfffffff5,int




为-


11


,但输出的是


uin t


。所以输出


4294967285



二题,


c



0x10,


输出的是


int


,最高位为


1


,是负数,所以它的值就是


0x00


的补码就是


128


< br>所以输出-


128


。这两道题都是在考察二进制向


int



uint


转 换时的最高位处理。





(二)




1. -1,2,7,28,,126


请问

28



126


中间那个数是什么? 为什么?



答案:第一题的答案应该是


4^3-1=63


规律是


n^3-1(



n


为偶数


0



2



4)


n^3+1(



n



奇数

< p>
1



3



5)




2.


用两个栈实现一个队列的功能?要求给出算法和思路!


答案:设


2


个栈为


A,B,


一开始均为空


.


入队


:


将新元素

push


入栈


A;


出队


:


(1)


判断栈


B



否为空;



(2)


如果不为空,


则将栈


A


中所有元素依次


pop


出并


push


到栈


B




(3)


将栈


B


的栈


顶元素


po p


出;


这样实现的队列入队和出队的平摊复杂度都还是


O(1),


比上面的几种方法要


好。





3.


在< /p>


c


语言库函数中将一个字符转换成整型的函数是

< br>atol()


吗,这个函数的原型是什么?



答案:


函数名


: atol





:


把字符串转换成长整型数






: long atol(const char *nptr);


程序



:



#include



#include



int main(void)



{




long l;



char *str =



l = atol(lstr);



printf(



return(0);



}




4


。对于 一个频繁使用的短小函数


,



C


语言中应用什么实现


,


C++


中应用什么实现


?




答案:


c


用 宏定义,


c++



inline




5


。直接 链接两个信令点的一组链路称作什么


?




答案:


PPP


点到点连接




7

< br>。软件测试都有那些种类


?




答案:黑盒:针对系统功能的测试



白合:测试函数功能,各函数接口





8


。确定模块的功能和模块的接口是 在软件设计的那个队段完成的


?






























专业知识整理分享














































WORD


格式










可编辑


























答案:概要设计阶段





9



enum string



{



x1,


x2,


x3=10,


x4,


x5,



}x;



x




答案:取值在


0



1



10



1 1



12


中的一个




10




unsigned char *p1;



unsigned long *p2;



p1=(unsigned char *)0x801000;



p2=(unsigned long *)0x810000;



请问


p1+5=


;








p2+5=


;




答案:


801005



810014


。不要忘记了这个是


16

进制的数字,


p2


要加


20


变为


16


进制就是



14




选择题


:



net


链接到


Internet


用到 以下那个协议


?




A. HDLC;




B. ARP


;



C. UDP;



D. TCP;



E. ID




答案



D


2.


属于网络层协议的是


:




;



;



;



D.X.25



答案



B


s


消息调度机制是


:



A.


指令队列


;B.


指令堆栈


;C.


消息队列


;D.


消息堆栈


;



答案:


C



找错题


:




1.


请问下面程序有什么错误


?



int a[60][250][1000],i,j,k;



for(k=0;k <=1000;k++)



for(j=0;j <250;j++)



for(i=0;i <60;i++)



a[i][j][k]=0;



答案:把循环语句内外换一下





2


。以下是求一个数的平方的程序< /p>


,


请找出错误


:



#define SQUARE(a)


((a)*(a))


int a=5;



int b;






























专业知识整理分享














































WORD


格式










可编辑


























b=SQUARE(a++);



答案:这个没有问题,


s


< p>
a


++)


,就是(



a


++)


×



a


++)


)唯一要注意的就是计算后


a



7


< p>




3: typedef unsigned char BYTE


int examply_fun(BYTE gt_len; BYTE *gt_code)


{


BYTE



*gt_buf;


gt_buf=(BYTE )MALLOC(Max_GT_Length);



......



if(gt_len>Max_GT_Length)



{



return GT_Length_ERROR;


}



.......


}



答案:要释放内存问答题


:




Phone


的原理是什么


?




答案:


IPV6




/IP


通 信建立的过程怎样,端口有什么作用?



答案:三次握手,确定是哪个应用程序使用该协议






(三)




1


、局部变量能否和全局变量重名?



答案:能,局部会屏蔽全局。要用全局变量,需要使用



局部变量可以与全局变量同名,


在函数内引用这个变量时,


会用到同名的局部变量,


而不会用到全局变量。


对于 有些编译器


而言,


在同一个函数内可以定义多个同名的局部变量 ,


比如在两个循环体内都定义一个同名


的局部变量,而那个局部 变量的作用域就在那个循环体内





2


、如何引用一个已经定义过的全局变量?


答案:


extern


可以用引 用头文件的方式,


也可以用


extern


关键字,


如果用引用头文件方式来


引用某个在头文件中声明的 全局变理,


假定你将那个变写错了,


那么在编译期间会报错,< /p>



果你用


extern

< br>方式引用时,


假定你犯了同样的错误,


那么在编译期间不 会报错,


而在连接期


间报错





3


、全局 变量可不可以定义在可被多个


.C


文件包含的头文件中?为什么 ?



答案:


可以,

在不同的


C


文件中以


static


形式来声明同名全局变量。


可以在不同的


C


文件中


声明同名的全局变量,前提是其中只能有一个


C


文件中对此变量赋初值,此时连接不会出

































专业知识整理分享














































WORD


格式










可编辑


























4


、语句


for(



1



)< /p>


有什么问题?它是什么意思?



答案:和


while(1)


相同。





5



do……while



while……do


有什么区别?



答案:前一个循环一遍再判断,后一个判断以后再循环。





6


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




include



main()



{



int a,b,c,d;



a=10;



b=a++;




c=++a;



d=10*a++;



printf(


< br>c



d



%d



%d



%d



b



c



d



;



return 0;



}




答案:


10



12



120


a=10;


b=a++;//a=11 b=10


c=++a;//a=12 c=12


d=10*a++;//a=13 d=120





高级题




1



sta tic


全局变量与普通的全局变量有什么区别?


static< /p>


局部变量和普通局部变量有什么区


别?


s tatic


函数与普通函数有什么区别?


答案:全局变量


(


外部变量


)


的说明之前再冠以


static


就构成了 静态的全局变量。全局变量本


身就是静态存储方式,静态全局变量当然也是静态存储方式 。



这两者在存储方式上并无不


同。这 两者的区别虽在于非静态全局变量的作用域是整个源程序,



当 一个源程序由多个源


文件组成时,


非静态的全局变量在各个源文 件中都是有效的。


而静态全局变量则限制了其作


用域,



即只在定义该变量的源文件内有效,



在同一源程序的其它源文件中不能使用它。



于静态全局变量的作用域局限于一个源文件内,


只能为该源文件内的函数公用,


因此可以避


免在其它源文件中引起错误。从以上分析可以看出,



把局部变量改变为静态变量后是改变


了它的存 储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,


限制了 它的使用范围。



static


函数与 普通函数作用域不同。仅在本文件。只在当前源文件中


使用的函数应该说明为内部函数< /p>


(static)


,内部函数应该在当前源文件中说明和定义。< /p>


对于可


在当前源文件以外使用的函数,


应 该在一个头文件中说明,


要使用这些函数的源文件要包含


这个头 文件



static


全局变量与普通的 全局变量有什么区别:


static


全局变量只初使化一次,< /p>


防止在其他文件单元中被引用


;


sta tic


局部变量和普通局部变量有什么区别:


static


局部变量


只被初始化一次,下一次依据上一次结果值;



static


函数与普通函数有什么区别:


static



数在内存中只有一份,普通函 数在每个被调用中维持一份拷贝





2


、程序的局部变量存在于()中,全局变量存在于()中,动 态申请数据存在于(



)中。



答案:栈;静态区;堆































专业知识整理分享














































WORD


格式










可编辑



























3


、设有以下说明和定义:




typedef union



{


long i;



int k[5];



char c;


} DATE;



struct data



{







int cat;







DATE cow;








double dog;


} too;



DATE max;



则语句



printf(


的执行结果是:


_20_


答案:

< br>DATE


是一个


union,


变量公用空间


.


里面最大的变量类型是


int[5],


占用


20


个字节


.



以它的大小是


20


data


是一个


struct,


每个变量分开占用空间


.


依次为


int4


+


DA


TE20


+


double8 = 32.


所以结果是



20 + 32 = 52.


当然


...


在某些

< p>
16


位编辑器下


, int


可能是


2


字节


,

那么


结果是



int2 + DATE10 + double8 = 20





4


、队列和栈有什么区别?



答案:队列先进先出,栈后进先出




6


、已知一个单向链表的头,请写出删除其某一个结点的算法, 要求,先找到此结点,然后


删除。



答案:



slnodetype *Delete(slnodetype *Head,int key)


{


if(Head->number==key)



{







Head=Pointer->next;







free(Pointer);







break;



}



Back = Pointer;



Pointer=Pointer->next;



if(Pointer->number==key)



{







Back->next=Pointer->next;







free(Pointer);







break;



}






























专业知识整理分享





















-


-


-


-


-


-


-


-



本文更新与2021-03-03 12:41,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/699982.html

嵌入式软件工程师笔试题的相关文章