神州数码软件测试工程师笔试C语言题目详解

  测试空间 旗下大头针出品
最近天天就是一个忙,忙着工作,忙着锻炼身体,忙着学习PHP。
 前段时间,看到有些学员到神州数码面试软件测试工程师,其中有几道C题目把学员难倒了。呵呵,因为本人是教C语言的。所以给这位学员做了下解答。
1.
void fun(void)
{
 int count=0;
 int m=9999;
 while(m)
 {
  count++;
  m=m&(m-1);
}
 printf(count);
}
这道题目考察的是10进制到2进制的转换以及按位与运算。9999转换成2进制为:
10011100001111
 
打印的count应该是8。
这个count的值与9999化成2进制时1的个数有关,9999中2进制有8个1。所以count的值是8.
这个题目考察的知识点在DC课堂上都重点讲过,所以不会应该是自己的责任。
 
2.在双向链表存储结构中,删除p所指的结点时须修改指针
A:(p->llink)->rlink=p->rlink;
  (p->rlink)->llink=p->llink;
B:p->llink=(p->llink)->llink;
  (p->llink)->rlink=p
C:
  (p->rlink)->llink=p
  p->rlink=(p->rlink)->rlink
D:
  p->rlink=(p->llink)->llink;
  p->llink=(p->rlink)->rlink;
 
这个题目应该选A
在我们的DC课堂上对与单向链表以及其上的操作都讲了,双向链表没有讲。但如果单向链表会,双向也可以推理出来,何况这是个选择题目。
如果这个没做对,情有可原。但是如果下次再做错,自己就要好好想想了。
 
3.定义一个结构体:
完成由Node类型结点构成的一个单向链表的正向排序(由小到大)

#include
#include
struct Node
{
 struct Node *next;
 int value;
};
struct Node* InsertSort(void)
{
 struct Node *Head=NULL,*New,*Cur,*Pre;
 int i;
 for(i=0;i<5;i++)
 { 
 if((New=(struct Node*)malloc(sizeof(struct Node)))==NULL)
 {
  printf("申请空间失败/n");
  return NULL;
 }
 printf("请输入节点的value/n");
 scanf("%d",&New->value);
     New->next=NULL;
 if(Head==NULL)
 {
 Head=New;
      continue;
 }
 

if(New->value<=Head->value)
 {//head之前插入节点

  New->next=Head;
  Head=New;
  continue;
 }
 Cur=Head;
 while(New->value>Cur->value && Cur->next!=NULL)
 {
  Pre=Cur;
  Cur=Cur->next;
 }
if(Cur->value>=New->value)
{
 Pre->next=New;
 New->next=Cur;
}
else
//if(Cur!=New)
Cur->next=New;  

}//for
return Head;
}
void print(struct Node* Head)

 struct Node* Cur;
 Cur=Head;
 while(Cur!=NULL)
 {
  printf("Cur->value=%d/n",Cur->value);
  Cur=Cur->next;
 }
}
void main(void)
{
 struct Node* head;
 head=InsertSort();
 print(head);
}

程序已经调试通过,大家可以试试。
这个题目也应该会,这个在课堂上要求过。插入一个有序单链表。
这个题目只是笔试题,如果写出来的程序不能完全执行,这个可以原谅的。
如果大体的程序框架都写不出来,这个可要自己仔细想想了。
其实这个题目我在204班做了试验,效果也不好。但通过1堂课的练习,不断的调试,每个人还是都写出了可执行的程序。所以学习程序最重要的是多动手啊。 

你可能感兴趣的:(Program,C,面霸成败录)