中興軟件測(cè)試面試題
1. 下面這段代碼的輸出是多少(在32位機(jī)上).
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;i<12;i++)
printf("%d ",__a[0][0][i]_);
在空格處填上合適的語(yǔ)句,順序打印出a中的數(shù)字
(2)
char **p, a[16][8];
問:p=a是否會(huì)導(dǎo)致程序在以后出現(xiàn)問題?為什么?
答:沒有問題,只是使用時(shí)要小心,p是指向指針的指針。
3.用遞歸方式,非遞歸方式寫函數(shù)將一個(gè)字符串反轉(zhuǎn).
函數(shù)原型如下: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;i<length;i++)< p="">
{
dst[i]=str[length-1-i];
}
dst[i]='\0';
printf("%s\n",dst);
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函數(shù)和memcpy函數(shù)有什么區(qū)別?它們各自使用時(shí)應(yīng)該注意什么問題?
答:strcpy函數(shù):拷貝字符串
memcpy函數(shù):拷貝任何數(shù)據(jù)
5.寫一個(gè)函數(shù)將一個(gè)鏈表逆序.
答:簡(jiǎn)單
6.一個(gè)單鏈表,不知道長(zhǎng)度,寫一個(gè)函數(shù)快速找到中間節(jié)點(diǎn)的位置.
答:兩個(gè)指針fast和low,fast每步移2個(gè)位置low每步移1個(gè)位置,當(dāng)fast到達(dá)尾部時(shí)low就是中間結(jié)點(diǎn)。
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->next;
fast=p->next;
}
return low;
}
7.寫一個(gè)函數(shù)找出一個(gè)單向鏈表的倒數(shù)第n個(gè)節(jié)點(diǎn)的指針.(把能想到的最好算法寫出).
答:兩個(gè)指針,第一個(gè)先于第二個(gè)n個(gè)位置。
LinkNode IsLoopList(LinkNode *head,int n)
{
LinkNode *p1,*p2;
p1 =p2= head;
While(n-->=0)
{
P2= p2->next;
}
While(p2->next!=NULL)
{
P2 = p2->next;
P1 = p1->next;
}
Return p1; //當(dāng)p2到達(dá)結(jié)尾時(shí),后于p2 n個(gè)位置的.就是倒數(shù)第n個(gè)節(jié)點(diǎn)。
}
8.補(bǔ)充一題:
給你一個(gè)單向鏈表的頭指針,可能最后不是NULL終止,而是循環(huán)鏈表。題目問你怎么找出這個(gè)鏈表循環(huán)部分的第一個(gè)節(jié)點(diǎn)。比如下面的鏈表:
0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> (3) 循環(huán),就應(yīng)該返回結(jié)點(diǎn)3的位置。
當(dāng)然盡量用少的空間和時(shí)間是題目的要求。
答:
10.判斷鏈表是否循環(huán);
答:bool IsLoopList(LinkNode *head)
{
LinkNode *p1= head,*p2= head;
if(head ->next==NULL) //只包含頭節(jié)點(diǎn),且頭節(jié)點(diǎn)的next為NULL說(shuō)明肯定不是循環(huán)鏈表
return false;
do{
p1=p1->next; //步長(zhǎng)為1
p2=p2->next->next; //步長(zhǎng)為2
}while(p2 && p2->next && p1!=p2);
if(p1==p2)
return true;
else
return false;
}
11.用遞歸算法判斷數(shù)組a[N]是否為一個(gè)遞增數(shù)組。
答:遞歸算法:
#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 < N; i++)
{
scanf("%d", &a[i]); //輸入數(shù)組元素
}
flag = Judgment(a,N); //調(diào)用遞歸函數(shù)
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;i>=0;i--)
{
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 < N; i++)
{
scanf("%d", &a[i]);
}
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; i<num;i++)< p="">
{
if (a[i] >= a[i+1]) //假如發(fā)現(xiàn)哪兩個(gè)不是遞增,立刻跳出;
{
flag = 0;
break;
}
}
return flag;
}
【中興軟件測(cè)試面試題】相關(guān)文章:
中興筆試面試經(jīng)驗(yàn)08-23
中興通訊求職故事03-28
軟件測(cè)試工程面試常見問題介紹04-11
軟件測(cè)試員應(yīng)聘常見的基本面試問題11-24
華為硬件面試題08-22
經(jīng)典面試題回答思路03-17
求職英語(yǔ)面試題集錦08-22
銀行招聘英語(yǔ)面試題04-03
圖像處理的筆試面試題08-19
韋博英語(yǔ)面試題目06-27