软通动力C语言笔试题和面试题答案(二)

|来源:新高考网

  三 问答题

  电影《达芬奇密码》中讲到了一个非常有意思的数字序列—菲波拉契序列。请用任意计算机语言实现一段小程序,该程序在屏幕上输出1到1000之间的非波拉契序列。

  非波拉契序列:1,1,2,3,5,8,13,21,34,……

  要求:用程序描述 核心算法。语言不限。

  1. C++中如何阻止一个类被实例化?

  2. 一般在什么时候构造函数被声明成private呢?

  3. 什么时候编译器会生成默认的copy constructor呢?

  4. 如果你已经写了一个构造函数,编译器还会生成copy constructor吗?

  5. struct和class有什么区别?

  答:默认的访问级别不同,struct是public,class是private

  6. 没有别的不同了吗?

  7. 为什么说如果一个类作为基类,则它的析构函数要声明成virtual的?

  8. inline的函数和#define有什么区别?

  9. inline是什么意思?

  10. 那你说说什么时候会真的被inline,什么时候不会呢?

  11. 如果把一个类的成员函数写在类的声明中是什么意思?

  12. public继承和private继承有什么架构上的区别?

  13. 在多继承的时候,如果一个类继承同时继承自class A和class B,而class A和

  B中都有一个函数叫foo(),如何明确的在子类中指出override哪个父类的foo()?

  14. 虚拟继承的语法是什么?

  15. 部分模版特例化

  1.什么是平衡二叉树?编写一个删除平衡二叉树的程序?

  2.写一个程序,求有向有权图两点之间的最小权?

  3.根据你的理解,写出Cstring类的构造函数和析构函数?

  4.使用C语言实现对ini文件的访问,使程序可以对int,double,字符串类进行读写。

  5.n×n个方格(n为任意整数),定义若两个格有公共边则称两个格相邻。现将 个格中的N个格子图黑,使每个格子都与黑格子相邻。试编程,使N最小。

  1**

  #define pi 3.14

  #define Area(R) pi*R*R

  main()

  {

  int r1=5,r2=2;

  double s=0;

  s=Area(r1-r2);

  printf(“The area is %f”,s);

  }

  求结果

  2**

  函数 int compare(int a,int b),定义为该函数的函数指针P:为_______________

  3**

  #include

  void sub(char*s,int num)

  {

  int i ,j=num;

  char t;

  while(j–>1)

  {

  for(i=0;i{

  if(s[i]{

  t=s[i];

  s[i]=s[i+1];

  s[i+1]=t;

  }

  }

  }

  }

  main()

  {

  char*s=”CEAeded”;

  sub(s,6);

  printf(“%s\n”,s)

  }

  求结果

  4**

  交换两个变量的值,不使用第三个变量,即a=3,b=5交换

  后b=3,a=5

  unsigned char a=3,b=5;

  5**

  #define N 100

  void GetMemory1(char*p)

  {

  p=(char*)malloc(sizeof(char)*N);

  strcpy(p,”Have a good day!”);

  }

  char*GetMemory2(void)

  {

  char p[]=”Have a good day!”;

  return p;

  }

  void main(void)

  {

  char*str1=NULL,*str2=NULL;

  GetMemory1(str1);

  GetMemory2(str2);

  printf(“\nstr1:%s”,str1);

  printf(“\nstr2:%s”,str2);

  6**

  构造N个结点的单链表返回链表头指针,要求链表中各结点顺序

  与结点数据输入顺序相反,例如输入1,2,3,4,5,形成的链表为

  head->5 4 3 2 1 ,补充程序

  #define N 10

  typedef struct Node

  {

  int data;

  struct Node*next;

  }NODE;

  int Get_Data(int i);定义省略

  Node*Create_u()

  {

  int i;

  NODE*p,*Head=NULL;

  for(i=0;i{

  VP=New NODE;

  P->Data=Get_Data(i);

  ________________;

  ________________;

  }

  return Head;

  }

  7**

  N个结点链表,每个结点中存放一个字符,判断链表存放的字符是否

  中心对称,即a b c c b a或a b c b a,补充程序

  typedef struct Node

  {

  int data;

  struct Node*next;

  }NODE;

  bool Is_symmeic(NODE*head,*int n)

  {

  char D[N];

  int i,d;

  __________;

  for(i=0;i{

  D[i]=head->data;

  head=head->next;

  }

  if(__________)

  {

  head=head->next;

  }

  while(head)

  {

  _______________;

  if(D[i]!=head->data)

  {

  return false;

  }

  head=head->next;

  }

  return true;

  }

  8**

  str中只含有大写和小写字母函数change_move(char*str)将字符串中大写改成*并

  移到前面小写后返回*的个数

  如AabBdcYY改为*abd,返回5

  int chang_move(char*str)

  {

  int len,i,curstr=-1;

  len=strlen(str);

  for(i=len-1;i>=0;i–)

  {

  if(str[i]>=’A'&&str[i]<=’Z')

  {

  str[i]=’*';

  if(cursor==-1)

  {

  cursor=i;

  }

  else if(cursor>i)

  {

  _____________;

  str[i]=’*';

  _____________;

  }

  }

  return____________;

  }

  9**

  求两个字符串的第一个公共子串,并返回该子串

  如:”a b c d e f g e h i” “a a c d e f * * g e h i”

  第一个为”c d e f”;不许用strcmp()

  char*Maxf(char*str1,char*str2)

  {

  }

中国点击率最高的一篇文章 !