嵌入式软件试题集锦.docx
- 文档编号:30707093
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:34
- 大小:29.49KB
嵌入式软件试题集锦.docx
《嵌入式软件试题集锦.docx》由会员分享,可在线阅读,更多相关《嵌入式软件试题集锦.docx(34页珍藏版)》请在冰豆网上搜索。
嵌入式软件试题集锦
选择题
1:
设floata=2,b=4,c=3;,以下C语言表达式与代数式(a+b)+c计算结果不一致的是
A.(a+b)*c/2
B.(1/2)*(a+b)*c
C.(a+b)*c*1/2
D.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+″
参考答案:
D
3:
下述程序执行后的输出结果是
#include
main()
{
intx='f';
printf("%c\n",'a'+(x-'a'+1));
}
A.g
B.h
C.i
D.j
参考答案:
A
4:
C语言中,下列运算符优先级最高的是
A.!
B.%
C.>>
D.==
参考答案:
A
5:
数组定义为“inta[4];”,表达式()是错误的。
A.*a
B.a[0]
C.a
D.a++
参考答案:
D
6:
执行语句“k=7>>1;”后,变量k的当前值是
A.15
B.31
C.3
D.1
参考答案:
C
7:
定义函数时,缺省函数的类型声明,则函数类型取缺省类型
A.void
B.char
C.float
D.int
参考答案:
D
8:
若main()函数带参数,参数个数最多是
A.0
B.1
C.2
D.3
参考答案:
C只知道有定义形式main(intargc,char*argv[]))
9:
若有宏定义:
#defineMOD(x,y)x%y
则执行以下语句后的输出结果是
inta=13,b=94;
printf(″%d\n″,MOD(b,a+4));
A.5
B.7
C.9
D.11
参考答案:
B
10:
下列各个错误中,哪一个不属于编译错误
A.改变x原值3为5,写作“x==5;”
B.花括号不配对
C.复合语句中的最后一条语句后未加分号
D.变量有引用、无定义
参考答案:
A
11:
下列程序段运行后,x的值是()
a=1;b=2;x=0;
if(!
(--a))x--;
if(!
b)x=7;else++x;
A.0
B.3
C.6
D.7
参考答案:
A
12:
设
#defineN3
#defineY(n)((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:
BY(5+1)传递过去的应该是6,而不是简单的把5+1给替换掉
13:
若定义了charch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是
A.def
B.d
C.e
D.0
参考答案:
C
14:
下列转义字符中错误的是
A.′\000′
B.′\14′
C.′\x111′
D.′\2′
参考答案:
CerrorC2022:
'273':
toobigforcharacter
15:
算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为
A.算术运算、赋值运算、关系运算
B.算术运算、关系运算、赋值运算
C.关系运算、赋值运算、算术运算
D.关系运算、算术运算、赋值运算
参考答案:
B
16:
设#defineN3
#defineY(n)((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:
B
17:
表达式strcmp(“3.14”,“3.278”)的值是一个
A.非零整数
B.浮点数
C.0
D.字符
参考答案:
A
18:
设struct
{shorta;
charb;
floatc;
}cs;
则sizeof(cs)的值是
A.4
B.5
C.6
D.7
参考答案:
D字节对齐的话应该是8
19:
若变量已正确定义,表达式(j=3,j++)的值是
A.3
B.4
C.5
D.0
参考答案:
A
20:
C语言中运算对象必须是整型的运算符是
A.%
B./
C.!
D.**
参考答案:
A
简答题
21:
打印一个N*N的方阵,N为每边字符的个数(3〈N〈20),要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0,1,2,3,...
例子:
当N=5,打印出下面的图形:
XXXXX
XYYYX
XY0YX
XYYYX
XXXXX
22:
谈谈COM的线程模型。
然后讨论进程内/外组件的差别。
23:
多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?
参考答案:
虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.
而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键.
24:
#include
voidmain()
{intc;
while((c=getchar())!
=′\n′)
switch(c-′2′)
{case0:
case1:
putchar(c+4);break;
case2:
putchar(c+4);break;
case3:
putchar(c+3);break;
default:
putchar(c+2);break;
}
printf(″\n″);
}
运行时输入:
2473,输出结果:
参考答案:
6897VC++6.0测试过
25:
用两个栈实现一个队列的功能?
参考答案:
设2个栈为A,B,一开始均为空.入队:
将新元素push入栈A;出队:
(1)判断栈B是否为空;
(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;
(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O
(1),
26:
写一语句实现x是否为2的若干次幂的判断。
参考答案:
!
(X)&(X-1)
27:
解二次方程:
a*x*x+b*x+c
intQuadratic(doublea,doubleb,doublec,double&x1,double&x2);
返回值:
解的个数
28:
如何判别一个数是unsigned。
参考答案;
#defineissignal(x)((x>=0&&~x>=0)?
1:
0)//为1是无符号为0有符号
29:
执行下述程序的输出结果是 ABCDEFCDEFEF 。
#include
charb[]="ABCDEF";
main()
{
char*bp;
for(bp=b;*bp;bp+=2)
printf("%s",bp);
printf("\n");
}
30:
已知一个数组table,用一个宏定义,求出数据的元素个数。
参考答案:
#defineNTBL
#defineNTBL(sizeof(table)/sizeof(table[0]))
1、将一个字符串逆序
2、将一个链表逆序
3、计算一个字节里(byte)里面有多少bit被置1
4、搜索给定的字节(byte)
5、在一个字符串中找到可能的最长的子字符串
6、字符串转换为整数
7、整数转换为字符串
1、c51单片机的串口异步通信和同步通信的区别,说说他们的优缺点。
2、C51单片机的数据总线和地址总线是如何复用的,说明原理。
3、C51单片机的绝对寻址范围是多少k?
4、说明下面的寻址方式
(1)MOVA,#30H
(2)MOVA,@R0
(3)ADDA,R4 (4)MOV A+@DPTR
5、写出下面分别是什么指针?
(1)int*a[10];
(2)int (*a)[10];
(3)int (*P)(int) ; (4)int(*a[10])(int);
6、
voidswap(inta,intb)
{
inttemp;
temp=a;
a=b;
b=temp;
}
main(void)
{
intx="3",y=4;
swap(x,y);
}
问 上面程序执行完后 x= ?
,y=?
7、typedefstruct test{
inti;
shorts;
charc;
union{
inta;
shortb;
}
}example ;
inty ;
y=sizeof(example);
请问在TC环境下,y=?
8、编程实现数组的逆置,例如,“hello,world!
” 逆置后为“!
dlrow,olleh”。
9、你认为嵌入式操作系统包括哪些部分?
说说实时操作系统有哪些特点。
10、冯诺依曼结构的计算机由哪几部分组成?
11、说说程序,进程,线程的区别。
12、说说你怎样理解
程序 = 数据 + 结构 + 算法
13、根据函数原型编程实现 一个数组,按从大到小的冒泡排序。
voidtibbule(inta[],intn);//a[]为数组,n为数组长度
14、OSI有哪几层?
tcp/ip包括哪几层?
15、编程实现一个双链表的节点插入和删除。
5。
写一个数据类型:
一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个
整型数。
6。
嵌入式系统总是要用户对变量或寄存器进行位操作。
给定一个整型变量a,写两段代码,第一个设置a
的bit3,第二个清除a的bit3。
在以上两个操作中,要保持其它位不变。
7。
嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。
在某工程中,要求设置一绝对地址
为0x67a9的整型变量的值为0xaa66。
编译器是一个纯粹的ANSI编译器。
写代码去完成这一任务。
8。
字符串倒序。
9。
floata,b,c 问下列两个的值:
(a+b)+c==(b+a)+c
(a+b)+c==(a+c)+b
10。
关键字static的作用是什么?
关键字const有什么含意?
11。
关键字volatile有什么含意?
并给出三个不同的例子。
1)一个参数既可以是const还可以是volatile吗?
解释为什么。
2)一个指针可以是volatile吗?
解释为什么。
3)下面的函数有什么错误:
intsquare(volatileint*ptr)
{
return*ptr**ptr;
}
12。
嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。
在某工程中,要求设置一绝对地址
为0x67a9的整型变量的值为0xaa66。
编译器是一个纯粹的ANSI编译器。
写代码去完成这一任务。
13。
动态内存分配
下面的代码片段的输出是什么,为什么?
char*ptr;
if((ptr=(char*)malloc(0))==NULL)
puts("Gotanullpointer");
else
puts("Gotavalidpointer");
14。
Typedef在C语言中频繁用以声明一个已经存在的数据类型的同义字。
也可以用预处理器做类似的事。
例如,思考一下下面的例子:
#definedPSstructs*
typedefstructs*tPS;
以上两种情况的意图都是要定义dPS和tPS作为一个指向结构s指针。
哪种方法更好呢?
(如果有的话)
为什么?
15。
中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。
具
代表事实是,产生了一个新的关键字__interrupt。
下面的代码就使用了__interrupt关键字去定义了一个中断
服务子程序(ISR),请评论一下这段代码的。
__interruptdoublecompute_area(doubleradius)
{
doublearea=PI*radius*radius;
printf("\nArea=%f",area);
returnarea;
}
16。
下面的代码输出是什么,为什么?
voidfoo(void)
{
unsignedinta=6;
intb=-20;
(a+b>6)?
puts(">6"):
puts("<=6");
}
17。
评价下面的代码片断:
unsignedintzero=0;
unsignedintcompzero=0xFFFF;
/*1'scomplementofzero*/
18。
C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?
inta=5,b=7,c;
c=a+++b;
19。
编写一个可重入的函数。
20。
编写ISR需要注意哪些地方?
21。
如何设计一个内存拷贝函数,考虑效率及强健性原则。
22。
怎样理解"地址对齐","内存分配","处理器字节序"的意义,应用上有什么需要注意的地方吗?
举例。
如何测试一个处理器的字节序?
23。
至少举两个例子从硬件和微码执行的角度说明CPU响应中断的过程。
24。
如何实现任务调度?
25。
如何避免优先级反转?
26。
任务锁和终端锁之间的区别,应用上应该怎么去选择?
27。
进程间通讯与同步的手段有哪些?
举例说明。
4 嵌入式系统相关问题
a) 对于整形变量A=0x12345678,请画出在little endian及big endian的方式下在内存中是如何存储的。
b) 在ARM系统中,函数调用的时候,参数是通过哪种方式传递的?
c) 中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别?
定:
1)下面的测试题中,认为所有必须的头文件都已经正确的包含了
2)数据类型
char一个字节1byte
int两个字节2byte(16位系统,认为整型是2个字节)
longint四个字节4byte
float四个字节4byet
double八个字节8byte
longdouble十个字节10byte
pointer两个字节2byte(注意,16位系统,地址总线只有16位)
第1题:
考查对volatile关键字的认识
#include
staticjmp_bufbuf;
main()
{
volatileintb;
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()
{
structnode
{
inta;
intb;
intc;
};
structnodes={3,5,6};
structnode*pt=&s;
printf("%d",*(int*)pt);
}
这段程序的输出是:
(a)3
(b)5
(c)6
(d)7
第3题:
考查递归调用
intfoo(intx,intn)
{
intval;
val=1;
if(n>0)
{
if(n%2==1)val=val*x;
val=val*foo(x*x,n/2);
}
returnval;
}
这段代码对x和n完成什么样的功能(操作)?
(a)x^n(x的n次幂)
(b)x*n(x与n的乘积)
(c)n^x(n的x次幂)
(d)以上均不是
第4题:
考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人
main()
{
inta[5]={1,2,3,4,5};
int*ptr=(int*)(&a+1);
printf("%d%d",*(a+1),*(ptr-1));
}
这段程序的输出是:
(a)22
(b)21
(c)25
(d)以上均不是
第5题:
考查多维数组与指针
voidfoo(int[][3]);
main()
{
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
foo(a);
printf("%d",a[2][1]);
}
voidfoo(intb[][3])
{
++b;
b[1][1]=9;
}
这段程序的输出是:
(a)8
(b)9
(c)7
(d)以上均不对
第6题:
考查逗号表达式
main()
{
inta,b,c,d;
a=3;
b=5;
c=a,b;
d=(a,b);
printf("c=%d",c);
printf("d=%d",d);
}
这段程序的输出是:
(a)c=3d=3
(b)c=5d=3
(c)c=3d=5
(d)c=5d=5
第7题:
考查指针数组
main()
{
inta[][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)2356
(b)2345
(c)4500
(d)以上均不对
第8题:
考查函数指针
int*f1(void)
{
intx=10;
return(&x);
}
int*f2(void)
{
int*ptr;
*ptr=10;
returnptr;
}
int*f3(void)
{
int*ptr;
ptr=(int*)malloc(sizeof(int));
returnptr;
}
上面这3个函数哪一个最可能引起指针方面的问题
(a)只有f3
(b)只有f1andf3
(c)只有f1andf2
(d)f1,f2,f3
第9题:
考查自加操作(++)
main()
{
inti=3;
intj;
j=sizeof(++i+++i);
printf("i=%dj=%d",i,j);
}
这段程序的输出是:
(a)i=4j=2
(b)i=3j=2
(c)i=3j=4
(d)i=3j=6
第10题:
考查形式参数,实际参数,指针和数组
voidf1(int*,int);
voidf2(int*,int);
void(*p[2])(int*,int);
main()
{
inta;
intb;
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);
}
voidf1(int*p,intq)
{
inttmp;
tmp=*p;
*p=q;
q=tmp;
}
voidf2(int*p,intq)
{
inttmp;
tmp=*p;
*p=q;
q=tmp;
}
这段程序的输出是:
(a)5555
(b)3535
(c)5353
(d)3333
第11题:
考查自减操作(--)
voide(int);
main()
{
inta;
a=3;
e(a);
}
voide(intn)
{
if(n>0)
{
e(--n);
printf("%d",n);
e(--n);
}
}
这段程序的输出是:
(a)0120
(b)0121
(c)1201
(d)0211
第12题:
考查typedef类型定义,函数指针
typedefint(*test)(float*,float*)
testtmp;
tmp的类型是
(a)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)
Pointertofunctionofhavingtwoargumentsthatispointertofloat
(b)整型
(c)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型
Pointertofunctionhavingtwoargumentthatispointertofloatandreturnint
(d)以上都不是
第13题:
数组与指针的区别与联系
main()
{
charp;
charbuf[10]={1,2,3,4,5,6,9,8};
p=(buf+1)[5];
printf("%d",p);
}
这段程序的输出是:
(a)5
(b)6
(c)9
(d)以上都不对
第14题:
考查指针数组的指针
voidf(char**);
main()
{
char*argv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 软件 试题 集锦
![提示](https://static.bdocx.com/images/bang_tan.gif)