嵌入式软件工程师笔试题-华为面试宝典_第1页
嵌入式软件工程师笔试题-华为面试宝典_第2页
嵌入式软件工程师笔试题-华为面试宝典_第3页
嵌入式软件工程师笔试题-华为面试宝典_第4页
嵌入式软件工程师笔试题-华为面试宝典_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、将一个字符串逆序

2、将一个链表逆序

3、计算一个字节里〔byte〕里面有多少bit被置1

4、搜索给定的字节(byte)

5、在一个字符串中找到可能的最长的子字符串

6、字符串转换为整数

7、整数转换为字符串/*

*题目:将一个字符串逆序

*完成时间:深圳极讯网吧

*版权归刘志强所有

*描述:写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!

*/

#include<iostream>

usingnamespacestd;

//#defineNULL((void*)0)

char*mystrrev(char*constdest,constchar*constsrc)

{

if(dest==NULL&&src==NULL)

returnNULL;char*addr=dest;

intval_len=strlen(src);

dest[val_len]='\0';

inti;

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

{

*(dest+i)=*(src+val_len-i-1);

}

returnaddr;

}

main()

{

char*str="asdfa";

char*str1=NULL;

str1=(char*)malloc(20);

if(str1==NULL)

cout<<"mallocfailed";

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>

typedefstructList{

intdata;

structList*next;

}List;

List*list_create(void)

{

structList*head,*tail,*p;

inte;

head=(List*)malloc(sizeof(List));

tail=head;

printf("\nListCreate,inputnumbers(endof0):");

scanf("%d",&e);

while(e){

p=(List*)malloc(sizeof(List));

p->data=e;

tail->next=p;

tail=p;

scanf("%d",&e);}

tail->next=NULL;

returnhead;

}

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;

returnhead;

}

voidmain(void)

{

structList*head,*p;

intd;

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<iostream>#defineN10//定义BYTE类型别名#ifndefBYTEtypedefunsignedcharBYTE;#endifintcomb(BYTEb[],intn){intcount=0;intbi,bj;BYTEcc=1,tt;//历遍到第bi个BYTE数据for(bi=0;bi<n;bi++){//计算该BYTE的8个bit中有多少个1tt=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;}}returncount;}//测试intmain(){BYTEb[10]={3,3,3,11,1,1,1,1,1,1};cout<<comb(b,N)<<endl;return0;}1。编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。

char*search(char*cpSource,charch)

{

char*cpTemp=NULL,*cpDest=NULL;

intiTemp,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;

}

returncpDest;

}#include<stdio.h>

#include<string.h>////自定义函数MyAtoI//实现整数字符串转换为证书输出//程序不检查字符串的正确性,请用户在调用前检查//intMyAtoI(charstr[])

{

inti;

intweight=1;//权重

intrtn=0;//用作返回for(i=strlen(str)-1;i>=0;i--)

{

rtn+=(str[i]-'0')*weight;//

weight*=10;//增重

}returnrtn;

}voidmain()

{

charstr[32];printf("Inputastring:");

gets(str);printf("%d\n",MyAtoI(str));

}#include<stdio.h>

#include<string.h>

voidreverse(chars[])

{

//字符串反转

intc,i=0,j;

for(j=strlen(s)-1;i<j;j--)

{

c=s[i];

s[i]=s[j];

s[j]=c;

i++;

}

}

voidIntegerToString(chars[],intn)

{

inti=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]='\0';//字符串结束

reverse(s);

}

voidmain()

{

intm;

charc[100];

printf("请输入整数m:");

scanf("%d",&m);

IntegerToString(c,m);

printf("integer=%dstring=%s\n",m,c);

}嵌入式软件工程师应知道的0x10个根本问题(经典收藏版)C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不是在嵌入式系统上。如果上述任何问题的答案是"是"的话,那么我知道我得认真考虑我是否应该去做这份工作。从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最根本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何答复他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的时机呢?我发现这些信息与他们的测试成绩一样有用。有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮助。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。预处理器〔Preprocessor〕1.用预处理指令#define声明一个常数,用以说明1年中有多少秒〔忽略闰年问题〕#defineSECONDS_PER_YEAR(60*60*24*365)UL我在这想看到几件事情:1)#define语法的根本知识〔例如:不能以分号结束,括号的使用,等等〕2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。3)意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。4)如果你在你的表达式中用到UL〔表示无符号长整型〕,那么你有了一个好的起点。记住,第一印象很重要。2.写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。#defineMIN(A,B)〔〔A〕<=(B)?(A):(B))这个测试是为下面的目的而设的:1)标识#define在宏中应用的根本知识。这是很重要的。因为在嵌入(inline)操作符变为标准C的一局部之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能到达要求的性能,嵌入代码经常是必须的方法。2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。3)懂得在宏中小心地把参数用括号括起来4)我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least=MIN(*p++,b);3.预处理器标识#error的目的是什么?如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。死循环〔Infiniteloops〕4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。我首选的方案是:while(1){}一些程序员更喜欢如下方案:for(;;){}这个实现方式让我为难,因为这个语法没有确切表到达底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个时机去探究他们这样做的根本原理。如果他们的根本答案是:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。第三个方案是用gotoLoop:...gotoLoop;应试者如给出上面的方案,这说明或者他是一个汇编语言程序员〔这也许是好事〕或者他是一个想进入新领域的BASIC/FORTRAN程序员。数据声明〔Datadeclarations〕5.用变量a给出下面的定义a)一个整型数〔Aninteger〕b)一个指向整型数的指针〔Apointertoaninteger〕c)一个指向指针的的指针,它指向的指针是指向一个整型数〔Apointertoapointertoanintege〕rd)一个有10个整型数的数组〔Anarrayof10integers〕e)一个有10个指针的数组,该指针是指向一个整型数的。〔Anarrayof10pointerstointegers〕f)一个指向有10个整型数数组的指针〔Apointertoanarrayof10integers〕

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论