您的位置:知识库 » 求职面试

某BBS上贴出的中磊C语言笔试题

发布时间: 2009-11-20 17:37  阅读: 1486 次  推荐: 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
标签:面试题集

求职面试热门文章

    求职面试最新文章

      最新新闻

        热门新闻