面试题解析

时间:2022-07-13 18:07:48 面试 我要投稿

面试题解析

原文地址:面试题解答作者:飞雪

面试题解析

1. 下面这段代码的输出是多少(在32位机上).

char *p;

char *q[20];

char *m[20][20];

int (*n)[10];

struct MyStruct

{

char dda;

double dda1;

int type ;

};

MyStruct k;

printf("%d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(k));

答案: 4 80 1600 4 24

2.

(1)

char a[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}} };

for(int i=0;i<12;i++)

printf("%d ",_______);

在空格处填上合适的语句,顺序打印出a中的数字

(2)

char **p, a[16][8];

问:p=a是否会导致程序在以后出现问题?为什么?

3.用递归方式,非递归方式写函数将一个字符串反转.

函数原型如下:char *reverse(char *str);

答案如下:

//非递归方法

char *reverse(char *str)

{

int nLen = strlen( str ) ;

for ( int i=0; i

{

char temp ;

temp = str[i] ;

str[i] = str[nLen-i-1] ;

str[nLen-i-1] = temp ;

}

return str ;

}

//递归方法1

char *reverse2(char *str)

{

//这种方法就直观,但是当字符串很长的时候就很低效

if( *(str+1)==\ )

{

return NULL ;

}

for( char* o=str+strlen(str)-1, char t=*o; o!=str; o-- )

{

*o=*(o-1);

}

*str=t;

reverse2(str+1);

return str ;

}

//递归方法2

char *reverse3(char* str)

{

//这是这种方法的关键,使用static为的是能用str_reverse的思路,但是不好

static char* x=0;

if( x==0 )

{

x=str;

}

char* q = x+strlen(str)-1;

if( str==q )

{

return NULL;

}

(*q)^=(*str)^=(*q)^=(*str);

if( q == str+1 )

{

return NULL;

}

reverse(++str);

return str ;

}

4.strcpy函数和memcpy函数有什么区别?它们各自使用时应该注意什么问题?

答:strcpy函数属于字符拷贝函数,当它遇到\时,拷贝结束.

memcpy函数属于内存拷贝函数,它会拷贝指定长度的字符到目的变量。

5.写一个函数将一个链表逆序.

struct link

{

int data ;

link *next ;

};

//非递归方法

link *ReverseLink( link *head )

{

link *pre = head ;

link *cur = head->next ;

link *next = NULL ;

if( cur )

{

next = cur->next ;

cur->next = pre ;

pre = cur ;

cur = next ;

}

pre->next = NULL ;

head = pre ;

}

//递归方法

link *ReverseLink( link *p, link *& head )

{

if( p==NULL || p->next==NULL )

{

head = p ;

return p ;

}

else

{

link *temp = NULL ;

temp = ReverseLink( p->next, head ) ;

temp->next = p ;

return p ;

}

}

一个单链表,不知道长度,写一个函数快速找到中间节点的位置.

struct link

{

int data ;

link *next ;

};

link *FindMid( link *head )

{

link *p1 = head ;

link *p2 = head->next ;

do

{

p1 = p1->next ;

p2 = p2->next ;

}while( p2 && p2->next ) ;

return p1 ;

}

写一个函数找出一个单向链表的倒数第n个节点的指针.(把能想到的最好算法写出).

6.用递归算法判断数组a[N]是否为一个递增数组。

7.

有一个文件(名为a.txt)如下,每行有4项,第一项是他们的名次,写一个c程序,将五个人的名字打印出来.并按名次排序后将5行数据仍然保存到a.txt中.使文件按名次排列每行.

2,07010188,0711,李镇豪,

1,07010154,0421,陈亦良,

3,07010194,0312,凌瑞松,

4,07010209,0351,罗安祥,

5,07010237,0961,黄世传,

8.写一个函数,判断一个unsigned char 字符有几位是1.

int FindNum( char *str )

{

int num = 0 ;

while( *str != )

{

if( *str == 1 )

{

num ++ ;

str ++ ;

}

else

{

str ++ ;

}

}

return num ;

}

写一个函数判断计算机的字节存储顺序是升序(little-endian)还是降序(big-endian).

9.微软的笔试题.

Implement a string class in C++ with basic functionality like comparison, concatenation, input and output. please also provide some test cases and using scenarios (sample code of using this class).

please do not use MFC, STL and other libraries in your implementation.

10.有个数组a[100]存放了100个数,这100个数取自1-99,且只有两个相同的数,剩下的98个数不同,写一个搜索算法找出相同的那个数的值.(注意空间效率时间效率尽可能要低).

【面试题解析】相关文章:

100个最权威的招聘面试题及回答解析07-11

c面试题08-04

华为面试题07-11

「MySQL」经典面试题07-11

采购面试题07-11

面试题集锦07-11

Java面试题07-12

SQL面试题07-12

面试题与技巧07-12

我来解析解析著名摄影师的作品!07-09