C++笔试题(五)

匿名网友 匿名网友 发布于: 2015-08-30 00:00:00
阅读 271 收藏 0 点赞 0 评论 0

中磊研发中心是中怡数宽科技(苏州)有限公司投资的研发机构,该公司主要着重于各种网络服务器的研究开发。
公司网址:http://www.dwnet.com.cn/
  该公司2005年10月底来华中科技大学招聘,下面是他这次的笔试题和我做的答案,当时我没有去参加考试,题目是白云黄鹤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++; } ...... } 答:是个死循环,无限次啊,无限次。 ---------------------------------------------- 哈哈,插播广告啦:版权所有:朱科 欢迎光临我的网站:www.goodsoft.cn,各位转贴别删,劳动成果啊 ---------------------------------------------- 5、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 答: #define MIN (365*24*60*60) 6、请问运行main函数会有什么样的结果? main() { int x=10,y=3; printf("%dn",y=x/y); } 答:结果为3,考察强制类型转换 7、有以下程序 #define P 3 int F(int x) { return(P*x*x); } main() { printf("%dn",F(3+5)); } 程序运行结果为:? 答:程序运行后的输出结果是192,此题为故意混淆概念,直接用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; 则sizeof(xc)的值为? 答:20,一道边界对齐的题目,很多地方有讲,此处注意下联合的内存大小取决于其中字节数最多的成员就可。 9、请问traceroute的工作原理 答: 主机先发出一个TTL(Time To Live,生存时间)为1的ICMP数据包。这个数据包到达一个路由器后,路由器将TTL减1到0,并将并送回一个「ICMP time exceeded」消息,以说明这个数据包不能继续向前传送,因为其TTL已经过期了。traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的数据包,发现第2 个路由器......这个重复的动作一直持续到某个datagram 抵达目的地。

评论列表
文章目录