2021-08-18

姓名:朱军伟               学号:19170100001           学院:电子工程学院            班级:1902015

原文转自:https://download.csdn.net/download/sun_jfly/4326176?utm_medium=distribute.pc_relevant_t0.none-task-download-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-download-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

【嵌牛导读】任何行业的终极目标都是为了谋求发展,嵌入式作为一个前沿行业,我们有必要熟悉一下常见的面试题,我将此作为一个系列发布。

【嵌牛鼻子】嵌入式行业面试题

【嵌牛提问】如何轻松应对嵌入式行业面试?

【嵌牛正文】

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;

}

void delete(Node* p)

{

if(Head = Node)

while(p)

}

有一个 16 位的整数,每 4 位为一个数,写函数求他们的和。

解释:

整数 1101010110110111

和 1101+0101+1011+0111

感觉应该不难,当时对题理解的不是很清楚,所以写了一个函数,也不知道对不对。

疑问:

既然是 16 位的整数,1101010110110111 是 2 进制的,那么函数参数怎么定义呢,请大

虾指教。

答案:用十进制做参数,计算时按二进制考虑。

/* n 就是 16 位的数,函数返回它的四个部分之和 */

char SumOfQuaters(unsigned short n)

{

char c = 0;

int i = 4;

do

{

c += n & 15;

n = n >> 4;} while (--i);

return c;

}

有 1,2,....一直到 n 的无序数组,求排序算法,并且要求时间复杂度为 O(n),空间复杂度 O(1),使用

交换,而且一次只能交换两个数.(华为)

#include

int main()

{

int a[] = {10,6,9,5,2,8,4,7,1,3};

int len = sizeof(a) / sizeof(int);

int temp;

for(int i = 0; i < len; )

{

temp = a[a[i] - 1];

a[a[i] - 1] = a[i];

a[i] = temp;

if ( a[i] == i + 1)

i++;

}

for (int j = 0; j < len; j++)

cout<

return 0;

}

(慧通)

1 写出程序把一个链表中的接点顺序倒排

typedef struct linknode

{

int data;

struct linknode *next;

}node;

//将一个链表逆置

node *reverse(node *head)

{

node *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;

}

2 写出程序删除链表中的所有接点

void del_all(node *head)

{

node *p;

while(head!=NULL)

{

p=head->next;

free(head);

head=p;

}

cout<<"释放空间成功!"<

}

3 两个字符串,s,t;把 t 字符串插入到 s 字符串中,s 字符串有足够的空间存放 t 字符串

void insert(char *s, char *t, int i)

{

char *q = t;

char *p =s;

if(q == NULL)return;

while(*p!='\0')

{

p++;

}

while(*q!=0)

{

*p=*q;

p++;

q++;

}

*p = '\0';

}

分析下面的代码:char *a = "hello";

char *b = "hello";

if(a= =b)

printf("YES");

else

printf("NO");

这个简单的面试题目,我选输出 no(对比的应该是指针地址吧),可在 VC 是 YES 在 C 是 NO

lz 的呢,是一个常量字符串。位于静态存储区,它在程序生命期内恒定不变。如果编译器优

化的话,会有可能 a 和 b 同时指向同一个 hello 的。则地址相同。如果编译器没有优化,那

么就是两个不同的地址,则不同谢谢!

写一个函数,功能:完成内存之间的拷贝

memcpy source code:

270 void* memcpy( void *dst, const void *src, unsigned int len )

271 {

272 register char *d;

273 register char *s;

27

275 if (len == 0)

276 return dst;

277

278 if (is_overlap(dst, src, len, len))

279 complain3("memcpy", dst, src, len);

280

281 if ( dst > src ) {

282 d = (char *)dst + len - 1;

283 s = (char *)src + len - 1;

284 while ( len >= 4 ) {

285 *d-- = *s--;

286 *d-- = *s--;

287 *d-- = *s--;

288 *d-- = *s--;

289 len -= 4;

290 }

291 while ( len-- ) {

292 *d-- = *s--;

293 }

294 } else if ( dst < src ) {

295 d = (char *)dst;

296 s = (char *)src;

297 while ( len >= 4 ) {

298 *d++ = *s++;

299 *d++ = *s++;

300 *d++ = *s++;301 *d++ = *s++;

302 len -= 4;

303 }

304 while ( len-- ) {

305 *d++ = *s++;

306 }

307 }

308 return dst;

309 }

你可能感兴趣的:(2021-08-18)