微软笔试题和面试题答案解析与答案(二)
7、给出函数strcmp()的测试方案
int strcmp(const char * str1, const char *str2)
【题目解析】
主要考查考虑问题的全面型,我觉得有一个电冰箱测试的例子不错
我写了几个(仅供参考):
str1 str2
NULL NULL
"a" NULL
NULL "a"
"a" "abc"
"abc" "acd"
".xj" "sefn"
8、测试一个 DVD Player,如果你仅有有限的时间,你会如何做?
【题目解析】
只是说说我的思路,不是标准答案。首先测试基本功能,然后是常用功能,然后是高级功能。
9、在过去的这些年,你遇到了哪一个最大的困难,你是如何解决它的?你是单独做的还是和别人一起做的决定?为什么做这个决定?现在结果如何?
10、逻辑题:
有一5节车厢的过山车,每节能座两人,现有Luair,Jack,Gwen,Tom,Mark,Paul,6人去乘车,有以下条件
1,Luair和别人同乘
2,Mark 不合别人同乘,而且Mark的前一节车厢是空的
3,Tom 不和Gwen 与 Paul 中的任何一人同乘
4,Gwen乘3,或者4节
....下面是一些断言性的语句,让你判断对错
【题目解析】
Mark和那节空车厢可以当作一个整体,剩下的就是按照规则做排列组合就可以了,可能的种类不是太多。如果用笔画个草图的话就比较容易了。
11、链表反转: (这道题不是微软的,不过考的比较多,就不另外开贴了)
数据结构如下:
typedef struct _Node
{
int data;
struct _Node *next;
} Node;
完成函数 Node *Reverse(Node *head),head为不带头节点的链表的首部。
Node *Reverse(Node *head)
{
Node *tmp = NULL; // 缓冲变量
Node *newHead = NULL; // 反转后的新头节点
if ( head==NULL ) return head; // 空链表的情况
if ( head->next==NULL ) return head; // 链表只有一个节点的情况
while ( head ) // 判断有没有移动到最后
{
tmp=head->next; // 临时记录下一个节点
head->next = newHead; // 把原来链表中的节点放到新的链表的首部
newHead = head;
head = tmp;
} // end of while
return newHead;
} // end of Reverse