学习啦>创业指南>职场>笔试题>

C/C++笔试题目

护托分享

  C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。下面就由学习啦小编为大家介绍一下C/C++笔试题目的文章,欢迎阅读。

  C/C++笔试题目篇1

  1.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;

  答:char *strcpy(char *strDest, const char *strSrc)

  {

  if ( strDest == NULL || strSrc == NULL)

  return NULL ;

  if ( strDest == strSrc)

  returnstrDest ;

  char *tempptr = strDest ;

  while( (*strDest++ = *strSrc++) != ‘’);

  returntempptr ;

  }

  2. 头文件中的ifndef/define/endif的作用?

  答:防止该头文件被重复引用。

  3. #i nclude与#i nclude “file.h”的区别?

  答:前者编译器从标准库路径开始搜索file.h,而后者编译器从用户的工作路径开始搜索file.h。

  4. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern“C”?

  答:extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,其声明的函数和变量可以在本模块或其它模块中使用。

  通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。

  5. 面向对象的三个基本特征,并简单叙述之?

  答:1)封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public)

  2)继承:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。

  3)多态:允许将子类类型的指针赋值给父类类型的指针。

  C/C++笔试题目篇2

  1. 重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?

  答:从定义上来说:

  重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

  重写:是指子类重新定义复类虚函数的方法。

  从实现原理上来说:

  重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。

  重写:当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。

  2. 多态的作用?

  答:主要是两个:1)隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;2)接口重用,为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

  3. 分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。

  答:BOOL :if ( !a ) or if(a)

  int :if ( a ==0)

  float :const EXPRESSION EXP = 0.000001

  if ( a < EXP && a >-EXP)

  pointer : if ( a != NULL) or if(a == NULL)

  4. 请说出const与#define 相比,有何优点?

  答案:1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。

  2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。

  5.简述数组与指针的区别?

  数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。

  (1)修改内容上的差别

  char a[] = “hello”;

  a[0] = ‘X’;

  char *p = “world”; // 注意p 指向常量字符串

  p[0] = ‘X’; // 编译器不能发现该错误,运行时错误

  (2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

  char a[] = “hello world”;

  char *p = a;

  cout< cout< 计算数组和指针的内存容量

  voidFunc(char a[100])

  {

  cout< }

  C/C++笔试题目篇3

  1.变量的声明和定义有什么区别?

  答:声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器,后面的引用都按声明的格式。定义其实包含了声明的意思,同时要分配内存空间。

  2. 解释堆和栈的区别。

  答:堆(heap)——一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。速度比较慢,而且容易产生内存碎片,不过用起来最方便。

  栈(stack)——由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。由系统自动分配,速度较快。但程序员是无法控制的。

  3. const的作用是什么?

  答:(1)可以定义const常量

  (2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

  4. 下列哪两个是等同的

  int b;

  A constint* a = &b; //指向常量的指针,不能通过指针改变b,但指针的地址可以改变。

  B const* int a = &b;// 指针的地址不可以改变,但可以通过指针改变b的值

  C constint* const a = &b; //指针指向的值,和指针本身的地址都不能改变

  D intconst* const a = &b;//与c相同

  5. 完成程序,实现对数组的降序排序

  #include

  void sort(int array[] );

  int main()

  {

  int array[]={45,56,76,234,1,34,23,2,3}; //数字任//意给出

  sort( array );

  return 0;

  }

  void sort( int array[] )

  {____________________________________

  inti,j,k;

  for(i=1;i<=7;i++) { if(array[i]>array[i-1])

  {

  k=ARRAY[i];

  j=i-1;

  do

  {

  array[j+1]=array[j];

  j– ;

  }

  while(k>array[j]&&j>=0);

  array[j+1]=k;

  }

  }

  —————————————————–

  }

  6. int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 输出是多少?

  答:相当于 i=j=4;i=k=8;i=l=16;i=m=32; 故最后i=32;

    3157674