嵌入式软件工程师C语言笔试题
嵌入式软件开发面试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、将一个字符串逆序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语言基础、算法、思维能力三部份。
总分100分,描述思路和最后结果都很重要。
一、C语言基础1. 语句实现x是否为2的若干次幂的判断。
(5分)2. 宏定义写出swap(x,y)。
(5分)3. 用变量a给出下面的定义。
(16分,各两分)a) 一个整型数(An integer)b) 一个指向整型数的指针(A pointer to an integer)c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)d) 一个有10个整型数的数组(An array of 10 integers)e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function 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 and return an integer )4. 定义int **a[3][4],占有的内存空间为多少。
(4分)5. 写一段程序判断大小端(endian)的问题。
(10分)6. 写一段程序判断大小端(endian)的问题。
(10分)二、算法7. 给出一个函数来输出一个字符串的所有排列。
凹凸 嵌入式软件工程师 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的若干次幂的判断。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
( );
( );Байду номын сангаас
( );
4)
*;
*;
( *);
( *);
请问;
;
5)[];
(,"");
产生什么结果?为什么?
6)用语句,让程序跳转到绝对地址去执行
7)已知一个数组,用一个宏定义,求出数组的元素个数
8)简要说明,为什么标准头文件都有类似以下的结构。
"" {
*...*
}
* *
9)
给定结构
{
;
;
;
软件笔试题()
姓名:学校:
专业:电话:
(如无特殊说明,以下所有测试内容都是基于位嵌入式系统)
1)程序的局部变量存在于中,全局变量存在于中,动态申请数据存在于中。
2)如何用来做零值比较
: ()
:
:
* :
3)
( [])
{
(“”( ) );
}
输出结果是:
有下列定义:
[]“”;
*;
;
*( );
请写出如下表达式的值:
;
};
问()
10)在空白处填写完整强制类型转换
(*)[];
()();
11)简述:有何区别?通信建立的过程怎样?端口有什么作用?
12)找出下列嵌入式系统中断处理函数中的错误:
( )
{
* * ;
(" ", );
;
}
13)请写一个宏,若处理器是的,则返回;若是的,则返回
14)数组[],存放了至个自然数,其中某个自然数重复一次。写一个函数,找出被重复的数字。要求:(时间复杂度为(),可用一种或一种以上方法)
函数原型:
( [] )
15)
基于如下数据结构,实现环形缓冲区的读写函数
()
{
;
;
;
;
[];
},*;
;
实现其读写函数:
() * *
(*) * *
选做部分()
1)类的静态成员和非静态成员有何区别?
2)定义并实现类,要求有构造函数、析构函数和赋值函数,