某BBS上貼出的中磊C語言筆試題
發布時間: 2009-11-20 17:37 閱讀: 1383 次 推薦: 0 [收藏]
該公司2005年10月底來華中科技大學招聘,下面是他這次的筆試題和我做的答案,當時我沒有去參加考試,題目是白云黃鶴BBS上有人貼出來的。
1、請用標準C語言實現一個雙向循環鏈表的查找與刪除。
typedef struct doublecyclelink{ int key; struct doublecyclelink *prev; struct doublecyclelink *next; }DoubleCycleLinkT; DoubleCycleLinkT *findKey(DoubleCycleLinkT *link,int 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);
}
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、若int占2個字節,char占1個字節,float占4個字節,則定義如下:
struct stu
{
union{
char bj[5];
int bh[2];
}class;
char xm[8];
float cj;
}xc;
答:20,一道邊界對齊的題目,很多地方有講,此處注意下聯合的內存大小取決于其中字節數最多的成員就可。
9、請問traceroute的工作原理
答:主機先發出一個TTL(Time To Live,生存時間)為1的ICMP數據包。這個數據包到達一個路由器后,路由器將TTL減1到0,并將并送回一個「ICMP time exceeded」消息,以說明這個數據包不能繼續向前傳送,因為其TTL已經過期了。traceroute 收到這個消息后,便知道這個路由器存在于這個路徑上,接著traceroute 再送出另一個TTL是2 的數據包,發現第2 個路由器......這個重復的動作一直持續到某個datagram 抵達目的地。
全站熱搜
留言列表