某BBS上貼出的中磊C語言筆試題

發布時間: 2009-11-20 17:37  閱讀: 1383 次  推薦: 0   [收藏]  

  該公司200510月底來華中科技大學招聘,下面是他這次的筆試題和我做的答案,當時我沒有去參加考試,題目是白云黃鶴BBS上有人貼出來的。

1、請用標準C語言實現一個雙向循環鏈表的查找與刪除。

typedef struct doublecyclelink{
int key;
struct doublecyclelink *prev;
struct doublecyclelink *next;
}DoubleCycleLinkT;
DoubleCycleLinkT *findKey(DoubleCycleLinkT *link,int key);
遍歷整個雙向循環鏈表,將第一個與key值相同的結點移出鏈表,并返回。
若沒有找到則返回NULL

答:
函數為
DoubleCycleLinkT *findKey(DoubleCycleLinkT *link,int key)
{
DoubleCycleLinkT *p;
p=link->next;
while (p->next!=link) // 鏈表結尾
{
if (p->key==key) // 查找到key值相同,刪除該節點,并返回
{
p->prev->next=p->next;
p->next->prev=p->prev;
free(p);
return link;
}
else
p=p->next; // 否則查找下一節點
}
if (p->next == link) return NULL; //沒找到,返回NULL

}

2、請用程序打印下列圖型
*
* *
* * *
* * * *
* * * * *
void printTriangle(const unsigned char line);

輸入行數,打印三角形。
答:
函數為
void printTriangle(const unsigned char line)
{
for(int i=1;i<=line;i++)
{
for(int j=0;j<(line*2-1);j++) // 5行每行需打印9個字符
{
if (i%2==1) // 奇數行
{
if (j%2==(line-1)%2 && j>=(line-1-i/2*2) && j<=(line-1+i/2*2))
printf("*");// 列從0計數
else
printf(" ");
}
else
if (j%2==(line)%2 && j>=(line-2-(i/2-1)*2) && j<=(line+(i/2-1)*2))
printf("*");
else
printf(" ");

}
printf("\n");
}
}

3、請用標準C語言實現下列標準庫函數,設計中不得使用其他庫函數。
char *strstr(char *str1,char *str2);
在字符串str1中,尋找字串str2,若找到返回找到的位置,否則返回NULL
答:
函數為
char * strstr ( const char * str1, const char * str2 )
{
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}

4、請問這段代碼循環多少次?
main()
{
char i=0;
while(i<10)
{
if(i<1)continue;
if(i==5)break;
i++;
}
...。。。
}

答:是個死循環,無限次啊,無限次。

5、用預處理指令#define聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)
答: #define MIN (365*24*60*60)

6
、請問運行main函數會有什么樣的結果?
main()
{
int x=10,y=3;
printf("%d\n",y=x/y);
}
答:結果為3,考察強制類型轉換

7、有以下程序
#define P 3
void F(int x)
{
return(P*x*x);
}
main()
{
printf("%d\n",F(3+5));
}
程序運行結果為:?
答:程序運行后的輸出結果是129,此題為故意混淆概念,直接用F(8)計算得答案,而非計算3*3+5*3+5;

8
、若int2個字節,char1個字節,float4個字節,則定義如下:
struct stu
{
union{
char bj[5];
int bh[2];
}class;
char xm[8];
float cj;
}xc;
sizeof(xc)的值為?
答:20,一道邊界對齊的題目,很多地方有講,此處注意下聯合的內存大小取決于其中字節數最多的成員就可。

9、請問traceroute的工作原理
答:主機先發出一個TTLTime To Live,生存時間)為1ICMP數據包。這個數據包到達一個路由器后,路由器將TTL10,并將并送回一個「ICMP time exceeded」消息,以說明這個數據包不能繼續向前傳送,因為其TTL已經過期了。traceroute 收到這個消息后,便知道這個路由器存在于這個路徑上,接著traceroute 再送出另一個TTL2 的數據包,發現第2 個路由器......這個重復的動作一直持續到某個datagram 抵達目的地。

 

 

0
0
 
標簽:面試題集
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()