清华同方软件测试工程师笔试题解答分享

时间:2021-03-16 13:49:01 综合指导 我要投稿

清华同方软件测试工程师笔试题解答分享

清华同方软件测试工程师笔试题解答分享

  最近一位学员去同方面试,让写个函数,这个函数实现如下功能:

  求100个元素的数组中2进制1的总数。

  其实考的是位运算符,

  题目分解为求每个元素1的个数,然后再循环即可。

  而如何求每个元素中1的个数呢?

  上次学员去神州数码面试的时候,出了一道求一个元素2进制1的`个数的题目。详见:神州数码软件测试工程师笔试C语言题目详解 其实如果神州的那个题目会的话,同方的这个题目就太简单了。

  我们每次笔试的时候,答题的思路

  首先应该是想以前做没有做过一样的题目,如果有,直接照搬。

  再次想想有没有做过类似的题目,如果有修改后照搬。

  最后是如果不是上面两种情况,那做题目就比较伤脑筋了。只能靠我们平时学习多积累,多总结,通过现象,找到作同类题目的本质。只要本质我们找到了,即使是最后一种情况,我们也就不怕了。//假设是地址传递。int a[]:接受主调函数传递过来的实参(实参为数组名)

  int calubinary(int a[])

  {

  int i;

  int n=0;//2进制1的总数

  for(i=0;i<100;i++)

  {

  //while循环计算1个元素中2进制1的个数

  while(a!=0)

  {

  //通过这个公式,每次a中的2进制1就会少1个,如果a里面是5,也就是101,那么经过 //这个公式一次,a就变成100。下一次就变成了000,自己算算就知道了。

  a=a&(a-1);

  n++; //2进制1的总数

  }

  }

  return n;

  }

  附神州数码软件测试工程师笔试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);

  }

  程序已经调试通过,大家可以试试。

  这个题目也应该会,这个在课堂上要求过。插入一个有序单链表。

  这个题目只是笔试题,如果写出来的程序不能完全执行,这个可以原谅的。

  如果大体的程序框架都写不出来,这个可要自己仔细想想了。

【清华同方软件测试工程师笔试题解答分享】相关文章:

综合素质测试:编导笔试填空题04-05

华为笔试网络题08-22

清华MBA招生推行先面试后笔试方式08-24

面试毕马威的笔试经验分享04-13

java面试笔试题分享08-22

招聘面试的笔试试卷及解答08-23

刘继分享笔试面试备战秘籍08-25

国考笔试面试备考经验分享07-11

2017面试英语笔试测试题08-07

长沙银行笔试真题04-09