第一篇:嵌入式软件工程师笔试题(含答案)
嵌入式软件工程师笔试题(含答案).txt26选择自信,就是选择豁达坦然,就是选择在名利面前岿然不动,就是选择在势力面前昂首挺胸,撑开自信的帆破流向前,展示搏击的风采。选择题
1:设float a=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()
{
int x='f';
printf(“%cn”,'a'+(x-'a'+1));
}
A.g
B.h
C.i
D.j
参考答案:A
4:C语言中,下列运算符优先级最高的是
A.!
B.%
C.>>
D.= =
参考答案:A
5:数组定义为“ int a [ 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(int argc,char* argv[]))
9:若有宏定义:#define MOD(x,y)x%y
则执行以下语句后的输出结果是
int a=13,b=94;
printf(″%dn″,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:设
#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 def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是
A.def
B.d
C.e
D.0
参考答案:C
14:下列转义字符中错误的是
A.′ 00′
B.′14′
C.′x111′
D.′2′
参考答案:C error C2022: '273' : too big for character
15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为
A.算术运算、赋值运算、关系运算
B.算术运算、关系运算、赋值运算
C.关系运算、赋值运算、算术运算
D.关系运算、算术运算、赋值运算
参考答案:B
16:设#define N 3
#define Y(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
{ short a;
char b;
float c;
}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,打印出下面的图形:
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时建立的?
参考答案:
虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键.24:#include
void main()
{ int c;
while((c=getchar())!= ′ n ′)
switch(c-′ 2 ′)
{ case 0:
case 1:putchar(c+4);break;
case 2:putchar(c+4);break;
case 3:putchar(c+3);break;
default:putchar(c+2);break;
}
printf(″ n ″);
}
运行时输入: 2473,输出结果:
参考答案:6897 VC++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
int Quadratic(double a,double b,double c,double& x1,double& x2);返回值:解的个数
28:如何判别一个数是unsigned。
参考答案;
#define issignal(x)((x>=0 && ~x>=0)? 1:0)//为1是无符号 为0有符号 29:执行下述程序的输出结果是ABCDEFCDEFEF。
#include
char b[]=“ABCDEF”;
main()
{
char *bp;
for(bp=b;*bp;bp+=2)
printf(“%s”,bp);
printf(“n”);
}
30:已知一个数组table,用一个宏定义,求出数据的元素个数。
参考答案:#define NTBL
#define NTBL(sizeof(table)/sizeof(table[0]))
第二篇:嵌入式软件工程师笔试题[小编推荐]
1、将一个字符串逆序
2、将一个链表逆序
3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)
5、在一个字符串中找到可能的最长的子字符串
6、字符串转换为整数
7、整数转换为字符串
/*
* 题目:将一个字符串逆序
* 完成时间:2006.9.30深圳极讯网吧
* 版权归刘志强所有
* 描述:写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!
*/
#include
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] = ' ';
int i;
for(i=0;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< free(str1); str1=NULL;//杜绝野指针 } p=head; q=p->next; while(q!=NULL) { temp=q->next; q->next=p; p=q; q=temp; } 这样增加个辅助的指针就行乐。 ok 通过编译的代码: #include #include #include 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。 解:此题按步骤解:先定位到某一个BYTE数据;再计算其中有多少个1。叠加得解。 #incluede #define N 10 //定义BYTE类型别名 #ifndef BYTE typedef unsigned char BYTE; #endif int comb(BYTE b[],int n) { int count=0; int bi,bj; BYTE cc=1,tt; //历遍到第bi个BYTE数据 for(bi=0;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; } } return count; } //测试 int main() { BYTE b[10]={3,3,3,11,1,1,1,1,1,1}; cout< return 0; } 1。编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。 char * search(char *cpSource, char ch) { char *cpTemp=NULL, *cpDest=NULL; int iTemp, 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; } return cpDest; } #include #include // // 自定义函数MyAtoI // 实现整数字符串转换为证书输出 // 程序不检查字符串的正确性,请用户在调用前检查 // int MyAtoI(char str[]) { int i; int weight = 1;// 权重 int rtn = 0;// 用作返回 for(i = strlen(str)'0')* weight;// weight *= 10;// 增重 } return rtn; } void main() { char str[32]; printf(“Input a string :”); gets(str); printf(“%dn”, MyAtoI(str)); } #include #include void reverse(char s[]) {//字符串反转 int c, i=0, j; for(j=strlen(s)-1;i {c=s[i]; s[i]=s[j]; s[j]=c; i++; } } void IntegerToString(char s[],int n) {int i=0,sign; if((sign=n)<0)//如果是负数,先转成正数n=-n; do //从个位开始变成字符,直到最高位,最后应该反转{s[i++]=n%10+'0'; }while((n=n/10)>0); //如果是负数,补上负号 if(sign<0) s[i++]='-'; s[i]=' ';//字符串结束 reverse(s); } void main() {int m; char c[100]; printf(“请输入整数m: ”); scanf(“%d”,&m); IntegerToString(c,m); printf(“integer = %d string = %sn”, m, c);} MTK深圳公司嵌入式软件工程师笔试题 //MTK深圳嵌入式软件工程师笔试题(B卷) //1***************************************** #define pi 3.14 #define Area(R)pi*R*R main() { int r1=5,r2=2; double s=0; s=Area(r1-r2); printf(“The area is %f”,s); } //求结果 //2********************************************* //函数 int compare(int a,int b),定义为该函数的函数指针P:为_______________ //3********************************************* #include void sub(char*s,int num) { int i ,j=num; char t; while(j-->1) { for(i=0;i { if(s[i] { t=s[i]; s[i]=s[i+1]; s[i+1]=t; } } } } main() { char*s=“CEAeded”; sub(s,6); printf(“%sn”,s) } //求结果 //4********************************************** //交换两个变量的值,不使用第三个变量,即a=3,b=5交换 //后b=3,a=5 unsigned char a=3,b=5; //5************************************************** #define N 100 void GetMemory1(char*p) { p=(char*)malloc(sizeof(char)*N); strcpy(p,“Have a good day!”); } char*GetMemory2(void) { char p[]=“Have a good day!”; return p; void main(void) { char*str1=NULL,*str2=NULL; GetMemory1(str1); GetMemory2(str2); printf(“nstr1:%s”,str1); printf(“nstr2:%s”,str2); //6****************************************************** //构造N个结点的单链表返回链表头指针,要求链表中各结点顺序 //与结点数据输入顺序相反,例如输入1,2,3,4,5,形成的链表为 //head->5 4 3 2 1 ,补充程序 #define N 10 typedef struct Node { int data; struct Node*next; }NODE; int Get_Data(int i);//定义省略 Node*Create_u() { int i; NODE*p,*Head=NULL; for(i=0;i { VP=New NODE; P->Data=Get_Data(i); ________________; ________________; return Head; } //7********************************************** //N个结点链表,每个结点中存放一个字符,判断链表存放的字符是否 //中心对称,即a b c c b a或a b c b a,补充程序 typedef struct Node { int data; struct Node*next; }NODE; bool Is_symmeic(NODE*head,*int n) { char D[N]; int i,d; __________; for(i=0;i { D[i]=head->data; head=head->next; } if(__________) { head=head->next; } while(head) { _______________; if(D[i]!=head->data) { return false; } head=head->next; } return true; } //8************************************* //str中只含有大写和小写字母函数change_move(char*str)将字符串中大写改成*并 //移到前面小写后返回*的个数 //如AabBdcYY改为*****abd,返回5 int chang_move(char*str) { int len,i,curstr=-1; len=strlen(str); for(i=len-1;i>=0;i--) { if(str[i]>='A'&&str[i]<='Z') { str[i]='*'; if(cursor==-1) { cursor=i; } else if(cursor>i) { _____________; str[i]='*'; _____________; } } return____________; } //9*********************************************** //求两个字符串的第一个公共子串,并返回该子串 //如:“a b c d e f g e h i” “a a c d e f * * g e h i” //第一个为“c d e f”;不许用strcmp() char*Maxf(char*str1,char*str2) { } 嵌入式软件工程师 目录 简介 2 待遇 3 职业要求 4 发展前景 5 职业发展 简介 2 待遇 3 职业要求 4 发展前景 职业发展 简介 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。 嵌入式软件工程师就是编写嵌入式系统的工程师。2 待遇 IBM、微软、华为、Yahoo、联想、搜狐、亚信、花旗...2010'应届毕业生就业安置计划火热启动:先实训后上岗,转正年薪50000元。3 职业要求 应具备哪些能力 最直接的方法,就是去根据各公司,招聘网站的嵌入式软件工程师的应聘要求来分析 我帮你总结下: 1.最重要的是C语言编程,以及C++,这个与你读程,应用,开发项目,做系统移植息息相关; 2.操作系统: LINUX,WINCE等,至少学习过一种,(目前主流的还是Linux)并且还需要对些基础知识有蛮多的了解; 3.对ARM,FPGA,DSP等这些硬件比较了解。(目前主流的是ARM,像三星,华为,小米等大型的生产厂商最底层的硬件用的都是ARM) 这是最常规的条件 当然,最主流的一般就是LIUNX.同时具备一些基本素质,像英语能力,有相关的项目经验,也很重要 推荐: 你可以去按照招聘要求分析,也可以按照培训机构的培训目的,方向,内容来分析得知,像海同科技就是蛮不错的.算得上是业内的领军企业.4 发展前景 嵌入式领域较新,发展非常快,很多软硬件技术出现的时间都不太长(如ARM处理器、嵌入式操作系统、LINUX操作系统),大多数人没有条件接触或进入嵌入式行业,更谈不上能有机会接受专业人士的指导。因此,踏进这个行业的难度比较大,嵌入式人才稀缺,身价自然也水涨船高。 权威部门统计,我国嵌入式人才缺口每年50万人左右。根据前程无忧网发布的调查报告,嵌入式软件开发是未来几年最热门和最受欢迎的职业之一,具有10年工作经验的高级嵌入式工程师年薪在30万元左右。即使是初级的嵌入式软件开发人员,平均月薪也达到了3000—5000元,中高级的嵌入式工程师月薪平均超过10000元。做软件实际上有高下之分,开发语言从机器语言、汇编到C、C++,再到红透半边天的Java、C#等,该学哪种呢?为什么有些开发者工资低,而有些开发者千金难求?为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要10k的薪水? 还是门槛,比如月薪15k的Linux嵌入式开发职位,门槛就有 Linux系统、Shell编程、Linux开发环境、C语言、ARM硬件平台、数据结构、Linux内核、驱动程序等,粗略数数就有8道关口,他需要非常熟悉整个的计算机体系,能做出实际的产品,而Java的开发者却仅仅是会使用名叫Java的语言工具,始终高高飘在众多层次之上,开发项目非常快,甚至可以不知道OSI模型,很可能自始至终都是软件蓝领。 嵌入式开发本身也有高下之分,至少包含嵌入式应用程序工程师和底层的驱动内核工程师两种。前者同样是使用现成工具进行简单劳动,比如使用J2ME开发小游戏或者进行一些界面开发,而后者是根据芯片具体情况把操作系统(如Linux)移植到上面,同时编写必要的驱动程序,改写相应的内核代码。很显然后者是一个公司真正的技术核心。而技术核心的工资很可能是其他开发者的数倍。 嵌入式开发突出强制和项目,学习不仅仅是学习几项技术,而是构建你的知识体系。比如学习嵌入式开发,就要从基础Linux,C语言,数据结构开始,到ARM,汇编,Linux内核、驱动等,更重要的是更多的项目练习,设计至少5个项目,多达10000行强制核心代码的编写可以让你真正获得知识。为进入外企或者出国做准备。 未来的几年内,随着信息化,智能化,网络化的发展,嵌入式系统技术也将获得广阔的发展空间。美国著名未来学家尼葛洛庞帝99年1月访华时预言,4~5年后嵌入式智能(电脑)工具将是PC和因特网之后最伟大的发明。我国著名嵌入式系统专家沈绪榜院士98年11月在武汉全国第11次微机学术交流会上发表的《计算机的发展与技术》一文中,对未来10年以嵌入式芯片为基础的计算机工业进行了科学的阐述和展望。1999年世界电子产品产值已超过12000亿美元,2000年达到13000亿美元,预计2005年,销售额将达18000亿美元。一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,日用范围也将日益广阔。对于企业专用解决方案,如物流管理、条码扫描、移动信息采集等,这种小型手持嵌入式系统将发挥巨大的作用。自动控制领域,不仅可以用于ATM机,自动售货机,工业控制等专用设备,和移动通讯设备结合、GPS、娱乐相结合,嵌入式系统同样可以发挥巨大的作用。5 职业发展 从个人整体发展来说,如果想创业,做自已的产品,嵌入式软件开发可以开发出专利产品。 另一个发展路径是:积累丰富开发经验的嵌入式软件开发工程师可以向嵌入式系统开发工程师发展,从而晋升为产品研发经理或IT项目经理。对测试理论和方法有一定了解的嵌入式软件开发工程师还可以转作嵌入式系统测试工程师,最终也可发展为IT项目经理 软件测试工程师笔试题一及答案 一、基础理论 1、软件测试的结束标准是什么? 2、一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。 3、什么是缺陷报告? 4、缺陷报告的作用 5、缺陷报告的要点 6、软件测试缺陷报告的“5C”原则 7、缺陷的二八定理 8、软件测试的流程 9、测试计划的目的是什么?测试计划的内容都包括什么?其中哪些是最重要的? 10、请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。 11、Alpha 测试与beta 测试的区别 答案: 一、基础理论 1、测试计划中所有规定的测试内容和回归测试都已经运行完成或根据上级主管对测试结果的意见,就可以结束本次测试 2、计划阶段、设计阶段、白盒单元、白盒集成、黑盒单元、黑盒集成、系统测试、回归测试、验收测试 一套完整的测试应该由五个阶段组成: 1)测试计划首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准。以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。 2)测试设计将测试计划阶段制订的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响测试结果的有效性)。 3)测试开发建立可重复使用的自动测试过程。 4)测试执行执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理,测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学负责的态度,一步一个脚印地进行测试。 5)测试评估结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。 3、缺陷报告是描述软件缺陷现象和重现步骤地集合。软件缺陷报告Software Bug Report(SBR)或软件问题报告Software Problem Report(SPR) 4、缺陷报告是软件测试人员的工作成果之一,体现软件测试的价值 缺陷报告可以把软件存在的缺陷准确的描述出来,便于开发人员修正 缺陷报告可以反映项目/产品当前的质量状态,便于项目整体进度和质量控制 软件测试缺陷报告是软件测试的输出成果之一,可以衡量测试人员的工作能力 5、标题(Title) 简洁、准确、完整、反映缺陷本质、方便查询 前缀 + 标题正文,标题正文采用结果和动作,或者现象和位置的方式表达 步骤(Steps) 可复现、完整、简洁、准确 按数字编号 实际结果(Actual results) 准确、详细描述软件的现象和特征 期望结果(Expected results) 准确、丰富、有理有据 平台(Platforms) 准确 截图(Screenshots) 准确反映缺陷特征 注释(Notes) 关于缺陷的辅助说明 6、内容准确(Correct): 每个组成部分的描述准确,不会引起误解 步骤简洁(Concise): 只包含必不可少的信息,不包括任何多余的内容 内容清晰(Clear): 每个组成部分的描述清晰,易于理解 结构完整(Complete): 包含复现该缺陷的完整步骤和其他本质信息 风格一致(Consistent): 按照一致的格式书写全部缺陷报告 7、在分析、设计、实现阶段的复审和测试工作能够发现和避免80%的缺陷,而系统测试又能找出其余缺陷中的80%,最后的4%的缺陷可能只有在用户大范围、长时间使用后才会暴露出来。 8、制订测试计划、设计测试用例、实施测试、提交缺陷报告、测试总结。 9、测试计划的目的:编写软件测试计划的目的是指导测试组成员进行工作和让测试组以外的项目成员了解测试工作的。 测试计划的内容:测试目的和测试项目简介、测试参考文档和测试提交文档、术语和定义、测试策略、确定测试内容、资源、测试进度、测试员的职责与任务分配、项目通过或失败的标准、暂 停和重新启动测试的标准、风险和问题等。 最重要的:测试策略、确定测试内容、资源、测试进度、测试员的职责与任务分配、项目通过或失败的标准 10、黑盒测试:把测试对象当成一个黑盒子,测试人员完全不考虑逻辑结构和内部特性,只依据程式的需求说明书来检查程式的功能是否满足它的功能说明。 白盒测试:把测试对象当成一个透明的盒子,允许测试人员利用程序内部逻辑结构及相关信息,设计或选择测试用例,对程式所有逻辑路径进行测试。 单元测试:白盒测试的一种,对软件设计中的单元模块进行测试。 集成测试:在单元测试的基础上,对单元模块之间的连接和组装w进行测试。 系统测试:在所有都考虑的情况下,对系统进行测试。 验收测试:第三方进行的确认软件满足需求的测试。第三篇:MTK深圳公司嵌入式软件工程师笔试题+
第四篇:嵌入式软件工程师
第五篇:软件测试工程师笔试题