中兴软件测试面试题1_面试笔试_大学生就业-查字典大学网

中兴软件测试面试题1_面试笔试

2015-10-30 10:50:12am

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

(1)

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

for(int i=0;ii++)

printf(%d ,__a[0][0][i]_);

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

(2)

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

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

答:没有问题,只是使用时要小心,p是指向指针的指针。

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

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

答:非递归方式:

char *reverse(char *str)

{

if(str!=NULL)

{

int length = strlen(str);

char *dst=NULL;

dst=(char*)malloc((length+1)*sizeof(char));

int i=0;

for(i=0;ii++) p=

{

dst[i]=str[length-1-i];

}

dst[i]=;

printf(%sn

return dst;

}

}

递归方式:

int len = 0;

void reverse(char *str)

{

int oldlen = len;

int swap_len = len / 2;

char *tmp = new char[swap_len + 1];

memcpy(tmp, str, swap_len);

memcpy(str, str + len - swap_len, swap_len);

memcpy(str + len - swap_len, tmp, swap_len);

[] tmp;

if(swap_len == 1)

return;

len = swap_len;

reverse(str);

len = swap_len;

reverse(str + oldlen - swap_len);

}

int main()

{

char test[] = abcdefghijkl

//shift(test, strlen(test), 7);

len = strlen(test);

reverse(test);

return 0;

}

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

答:strcpy函数:拷贝字符串

memcpy函数:拷贝任何数据

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

答:简单

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

答:两个指针fast和low,fast每步移2个位置low每步移1个位置,当fast到达尾部时low就是中间结点。

typedef struct linknode

{

int a;

struct linknode *next;

}linknode;

linknode *findmiddle(linknode *head)

{

linknode *fast,*low,*p;

if(head==NULL)

{

return NULL;

}

fast=low=head;

while(!(p=fast-next)!p-next)

{

low=low-

fast=p-

}

return low;

}

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

答:两个指针,第一个先于第二个n个位置。

LinkNode IsLoopList(LinkNode *head,int n)

{

LinkNode *p1,*p2;

p1 =p2= head;

While(n--=0)

{

P2= p2-

}

While(p2-next!=NULL)

{

P2 = p2-

P1 = p1-

}

Return p1; //当p2到达结尾时,后于p2 n个位置的就是倒数第n个节点。

}

8.补充一题:

给你一个单向链表的头指针,可能最后不是NULL终止,而是循环链表。题目问你怎么找出这个链表循环部分的第一个节点。比如下面的链表:

0 - 2 - 4 - 6 - 8 - (3) 循环,就应该返回结点3的位置。

当然尽量用少的空间和时间是题目的要求。

答:

10.判断链表是否循环;

答:bool IsLoopList(LinkNode *head)

{

LinkNode *p1= head,*p2= head;

if(head -next==NULL) //只包含头节点,且头节点的next为NULL说明肯定不是循环链表

return false;

do{

p1=p1- //步长为1

p2=p2-next- //步长为2

}while(p2 p2-next p1!=p2);

if(p1==p2)

return true;

else

return false;

}

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

答:递归算法:

#include

#include

#define N 5

int Judgment(int a[],int num);

int main()

{

int a[N], i, flag = 1;

printf(Enter array data:

for (i = 0; i i++)

{

scanf(%d, //输入数组元素

}

flag = Judgment(a,N); //调用递归函数

if (flag == 1)

{

printf(increment array.n

}

else if (flag == 0)

{

printf(no increment array.n

}

return 0;

}

int Judgment(int a[],int num)

{

for (int i=num-1;ii--)

{

if(a[i]a[i-1]) p=

return 0;

Judgment(a,i);

}

return 1;

}

非递归算法:

#include

#include

#define N 5

int Judgment(int a[], int num);

int main()

{

int a[N], i, flag = 1;

printf(Enter array data:

for (i = 0; i i++)

{

scanf(%d,

}

flag = Judgment(a, N);

if (flag == 1)

{

printf(increment array.n

}

else if (flag == 0)

{

printf(no increment array.n

}

return 0;

}

int Judgment(int a[], int num)

{

static i = 0, flag = 1;

for(i=0; ii++) p=

{

if (a[i] = a[i+1]) //假如发现哪两个不是递增,立刻跳出;

{

flag = 0;

break;

}

}

return flag;

}

查看全部

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

院校推荐

猜你喜欢