简单c/c++笔试题 .

来源:互联网 发布:日系男装店 知乎 编辑:程序博客网 时间:2024/05/01 23:35
一、#include “filename.h”和#include 的区别
 
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件
 
#include 是指编译器将从标准库目录中开始查找此文件
 
 
 
二、头文件的作用
 
加强安全检测
 
通过头文件可能方便地调用库功能,而不必关心其实现方式
 
 
 
三、* , &修饰符的位置
 
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名
 
 
 
四、if语句
 
不要将布尔变量与任何值进行比较,那会很容易出错的。
 
整形变量必须要有类型相同的值进行比较
 
浮点变量最好少比点,就算要比也要有值进行限制
 
指针变量要和NULL进行比较,不要和布尔型和整形比较
 
 
 
五、const和#define的比较
 
const有数据类型,#define没有数据类型
 
个别编译器中const可以进行调试,#define不可以进行调试
 
在类中定义常量有两种方式
 
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值;
 
2、 用枚举代替const常量。
 
 
 
六、C++函数中值的传递方式
 
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference)
 
void fun(char c) //pass by value
 
void fun(char *str) //pass by pointer
 
void fun(char &str) //pass by reference
 
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构
 
函数的类型不能省略,就算没有也要加个void
 
 
 
七、函数体中的指针或引用常量不能被返回
 
Char *func(void)
 
{
 
char str[]=”Hello Word”;
 
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉
 
return str;
 
}
 
函数体内的指针变量并不会随着函数的消亡而自动释放
 
 
 
八、一个内存拷贝函数的实现体
 
void *memcpy(void *pvTo,const void *pvFrom,size_t size)
 
{
 
assert((pvTo!=NULL)&&(pvFrom!=NULL));
 
byte *pbTo=(byte*)pvTo; //防止地址被改变
 
byte *pbFrom=(byte*)pvFrom;
 
while (size-- >0)
 
pbTo++ = pbForm++;
 
return pvTo;
 
}
 
 
九、内存的分配方式
 
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题
 
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。
 
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。
 
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。
十、内存分配的注意事项
 
用new或malloc分配内存时,必须要对此指针赋初值。
 
用delete 或free释放内存后,必须要将指针指向NULL
 
不能修改指向常量的指针数据
 
十一、内容复制与比较
 
//数组……
 
char a[]=”Hello Word!”;
 
char b[10];
 
strcpy(b,a);
 
if (strcmp(a,b)==0)
 
{}
 
//指针……
 
char a[]=”Hello Word!”;
 
char *p;
 
p=new char[strlen(a)+1];
 
strcpy(p,a);
 
if (strcmp(p,a)==0)
 
{}
 
十二、sizeof的问题
 
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节
 
char a[]=”Hello World!”
 
char *p=a;
 
count<
count<
而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4
 
void fun(char a[1000])
 
{
 
count<
}
 
十三、关于指针
 
1、 指针创建时必须被初始化
 
2、 指针在free 或delete后必须置为NULL
 
3、 指针的长度都为4字节
 
4、释放内存时,如果是数组指针,必须要释放掉所有的内存,如
 
char *p=new char[100];
 
strcpy(p,”Hello World”);
 
delete []p; //注意前面的[]号
 
p=NULL;
 
5、数组指针的内容不能超过数组指针的最大容易。
 
如:
 
char *p=new char[5];
 
strcpy(p,”Hello World”); //报错 目标容易不够大
 
delete []p; //注意前面的[]号
 
p=NULL;
 
十四、关于malloc/free 和new /delete
 
l malloc/free 是C/C+的内存分配符,new /delete是C++的内存分配符。
 
l 注意:malloc/free是库函数,new/delete是运算符
 
l malloc/free不能执行构造函数与析构函数,而new/delete可以
 
l new/delete不能在C上运行,所以malloc/free不能被淘汰
 
l 两者都必须要成对使用
 
l C++中可以使用_set_new_hander函数来定义内存分配异常的处理
 
十五、C++的特性
 
C++新增加有重载(overload),内联(inline),Const,Virtual四种机制
 
重载和内联:即可用于全局函数,也可用于类的成员函数;
 
Const和Virtual:只可用于类的成员函数;
 
重载:在同一类中,函数名相同的函数。由不同的参数决定调用那个函数。函数可要不可要Virtual关键字。和全局函数同名的函数不叫重载。如果在类中调用同名的全局函数,必须用全局引用符号::引用。
 
覆盖是指派生类函数覆盖基类函数
 
函数名相同;
 
参数相同;
 
基类函数必须有Virtual关键字;
 
不同的范围(派生类和基类)。
 
隐藏是指派生类屏蔽了基类的同名函数相同
 
1、 函数名相同,但参数不同,此时不论基类有无Virtual关键字,基类函数将被隐藏。
 
2、 函数名相同,参数也相同,但基类无Virtual关键字(有就是覆盖),基类函数将被隐藏。
 
内联:inline关键字必须与定义体放在一起,而不是单单放在声明中。
 
Const:const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
 
1、 参数做输入用的指针型参数,加上const可防止被意外改动。
 
2、 按值引用的用户类型做输入参数时,最好将按值传递的改为引用传递,并加上const关键字,目的是为了提高效率。数据类型为内部类型的就没必要做这件事情;如:
 
将void Func(A a) 改为void Func(const A &a)。
 
而void func(int a)就没必要改成void func(const int &a);
 
3、 给返回值为指针类型的函数加上const,会使函数返回值不能被修改,赋给的变量也只能是const型变量。如:函数const char*GetString(void); char *str=GetString()将会出错。而const char *str=GetString()将是正确的。
 
4、 Const成员函数是指此函数体内只能调用Const成员变量,提高程序的键壮性。如声明函数 int GetCount(void) const;此函数体内就只能调用Const成员变量。
 
Virtual:虚函数:派生类可以覆盖掉的函数,纯虚函数:只是个空函数,没有函数实现体;
 
十六、extern“C”有什么作用?
 
Extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数,加上extren “c”后,C++就能直接调用C函数了。
 
Extern “C”主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用。使用时在前面加上extern “c” 关键字即可。
 
十七、构造函数与析构函数
 
派生类的构造函数应在初始化表里调用基类的构造函数;
 
派生类和基类的析构函数应加Virtual关键字。
 
不要小看构造函数和析构函数,其实编起来还是不容易。
 
#include
 
class Base
 
{
 
public:
 
virtual ~Base() { cout<< "~Base" << endl ; }
 
};
 
class Derived : public Base
 
{
 
public:
 
virtual ~Derived() { cout<< "~Derived" << endl ; }
 
};
 
void main(void)
 
{
 
Base * pB = new Derived; // upcast
 
delete pB;
 
}
 
输出结果为:
 
~Derived
 
~Base
 
如果析构函数不为虚,那么输出结果为
 
~Base
 
十八、#IFNDEF/#DEFINE/#ENDIF有什么作用
 
仿止该头文件被重复引用
 
 
转http://bbs.csai.cn/bbs/view.asp?Id={8DB2582C-97E1-428A-AD9C-358BCD02C506
 
 十九. 下列哪两个是等同的

int b;

A const int* a = &b;

B const* int a = &b;

C const int* const a = &b;

D int const* const a = &b; 



二十  内联函数在编译时是否做参数类型检查


二十一.三个float:a,b,c
问值
(a+b)+c==(b+a)+c
(a+b)+c==(a+c)+b
22把一个链表反向填空

23设计一个重采样系统,说明如何anti-alias 

24 某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统(
300M的CPU,50M的SDRAM)中运行,还需要优化吗?

25. 下面哪种排序法对12354最快
a quick sort
b.buble sort
c.merge sort

26. 哪种结构,平均来讲,获取一个值最快
a. binary tree
b. hash table
c. stack 


27 请问C++的类和C里面的struct有什么区别? 

28 请讲一讲析构函数和虚函数的用法和作用? 

29 全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的? 


30 一些寄存器的题目,主要是寻址和内存管理等一些知识。 

31 8086是多少尉的系统?在数据总线上是怎么实现的? 

32 多态。overload 和 override的区别。


<<Sony笔试题>>
33.完成下列程序

*

*.*.

*..*..*..

*...*...*...*...

*....*....*....*....*....

*.....*.....*.....*.....*.....*.....

*......*......*......*......*......*......*......

*.......*.......*.......*.......*.......*.......*.......*.......

#include <stdio.h>

#define N 8

int main()

{

  int i;

  int j;

  int k;

  ---------------------------------------------------------

  |                                     |

  |                                     |

  |                                     |

  ---------------------------------------------------------

  return 0;



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

#include <stdio.h>



void sort(              );



int main()

{

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

  sort(                 );

  return 0;

}



void sort(                  )

{

 ____________________________________

 |                                   |

 |                                   |

 |-----------------------------------------------------|

}

35费波那其数列,1,1,2,3,5……编写程序求第十项。可以用递归,也可以用其他方
法,但要说明你选择的理由。

#include <stdio.h>

int Pheponatch(int);



int main()

{

  printf("The 10th is %d",Pheponatch(10));

  return 0;

}



int Pheponatch(int N)

{

--------------------------------

|                     |

|                     |

--------------------------------

}

36下列程序运行时会崩溃,请找出错误并改正,并且说明原因。

#include <stdio.h>

#include <malloc.h>



typedef struct{

  TNode* left;

  TNode* right;

  int value;

} TNode;



TNode* root=NULL;



void append(int N);



int main()

{

  append(63);

  append(45);

  append(32);

  append(77);

  append(96);

  append(21);

  append(17); // Again, 数字任意给出

}



void append(int N)

{

TNode* NewNode=(TNode *)malloc(sizeof(TNode));

NewNode->value=N;



if(root==NULL)

{

  root=NewNode;

  return;

}

else

{

  TNode* temp;

  temp=root;

  while((N>=temp.value && temp.left!=NULL) || (N<temp. value && temp. right!=
NULL

))

  {

     while(N>=temp.value && temp.left!=NULL)

                temp=temp.left;

     while(N<temp.value && temp.right!=NULL)

                temp=temp.right;

  }

  if(N>=temp.value)

         temp.left=NewNode;

  else

         temp.right=NewNode;

  return;        

}




37 A class B network on the internet has a subnet mask of 255.255.240.0, what
is the maximum number of hosts per subnet       .

a. 240                  b. 255                  c. 4094                d. 6553


38 What is the difference: between o(log n) and o(log n^2), where both logari
thems have base 2       .

a. o(log n^2) is bigger                  b. o(log n) is bigger

c. no difference


39. For a class what would happen if we call a class’s constructor from with
the same class’s constructor       .

a. compilation error             b. linking error

c. stack overflow                          d. none of the above

40. “new” in c++ is a:       .

a. library function like malloc in c

b. key word                                    c. operator

d. none of the above

41. Which of the following information is not contained in an inode       .

a. file owner                                   b. file size

c. file name                                     d. disk address

42. What’s the number of comparisons in the worst case to merge two sorted li
sts containing n elements each       .

a. 2n           b.2n-1                 c.2n+1                d.2n-2

43. Time complexity of n algorithm T(n), where n is the input size ,is T(n)=T(
n-1)+1/n if n>1 otherwise 1 the order of this algorithm is       .

a. log (n)   b. n                     c. n^2                  d. n^n

44. The number of 1’s in the binary representation of 3*4096+ 15*256+5*16+3 a
re       .

a. 8                      b. 9                      c. 10           d. 12


45.设计函数 int atoi(char *s)。

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

47.解释局部变量、全局变量和静态变量的含义。

48.解释堆和栈的区别。

49.论述含参数的宏与函数的优缺点。 


50 以下三条输出语句分别输出什么?[C易]
char str1[]       = "abc";
char str2[]       = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5  = "abc";
const char* str6  = "abc";
cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?
cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?
cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?

51. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?[C++中等]
答:
a. class B : public A { ……} // B公有继承自A,可以是间接继承的
b. class B { operator A( ); } // B实现了隐式转化为A的转化
c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认
值的参数)构造函数
d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉
强算一个

52. 以下代码中的两个sizeof用法有问题吗?[C易]
void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
{
   for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )
       if( 'a'<=str && str<='z' )
           str -= ('a'-'A' );
}
char str[] = "aBcDe";
cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;

53. 以下代码有什么问题?[C难]
void char2Hex( char c ) // 将字符以16进制表示
{
   char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);
   char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);
   cout << ch << cl << ' ';
}
char str[] = "I love 中国";
for( size_t i=0; i<strlen(str); ++i )
   char2Hex( str );
cout << endl; 

54 以下代码有什么问题?[C++易]
struct Test
{
   Test( int ) {}
   Test() {}
   void fun() {}
};
void main( void )
{
   Test a(1);
   a.fun();
   Test b();
   b.fun();
}

55. 以下代码有什么问题?[C++易]
cout << (true?1:"1") << endl;

    以下代码能够编译通过吗,为什么?[C++易]
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[ size2 ];

56. 以下代码中的输出语句输出0吗,为什么?[C++易]
struct CLS
{
   int m_i;
   CLS( int i ) : m_i(i) {}
   CLS()
   {
       CLS(0);
   }
};
CLS obj;
cout << obj.m_i << endl;

57. C++中的空类,默认产生哪些类成员函数?[C++易]
答:
class Empty
{
public:
   Empty();                          // 缺省构造函数
   Empty( const Empty& );            // 拷贝构造函数
   ~Empty();                         // 析构函数
   Empty& operator=( const Empty& ); // 赋值运算符
   Empty* operator&();               // 取址运算符
   const Empty* operator&() const;   // 取址运算符 const
};

58 以下两条输出语句分别输出什么?[C++难]
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?


59. 以下反向遍历array数组的方法有什么错误?[STL易]
vector array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 3 );
for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历array数组
{
   cout << array << endl;
}

60. 以下代码有什么问题?[STL易]
typedef vector IntArray;
IntArray array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 3 );
// 删除array数组中所有的2
for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
{
   if( 2 == *itor ) array.erase( itor );
}

61. 写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
答:
void* mymemcpy( void *dest, const void *src, size_t count )
{
   char* pdest = static_cast<char*>( dest );
   const char* psrc = static_cast<const char*>( src );
   if( pdest>psrc && pdest<psrc+cout ) 能考虑到这种情况就行了
   {
       for( size_t i=count-1; i!=-1; --i )
               pdest = psrc;
   }
   else
   {
       for( size_t i=0; i<count; ++i )
           pdest = psrc;
   }
   return dest;
}
int main( void )
{
   char str[] = "0123456789";
   mymemcpy( str+1, str+0, 9 );
   cout << str << endl;

   system( "Pause" );
   return 0;



62 线程与进程的区别

63:请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?

64:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCP与UDP呢?


65:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?

66:请问C++的类和C里面的struct有什么区别?

67:请讲一讲析构函数和虚函数的用法和作用?

68:全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?


69:一些寄存器的题目,主要是寻址和内存管理等一些知识。
70:8086是多少位的系统?在数据总线上是怎么实现的?

<<IBM>>
71.怎样用最快的方法判断链表是否有环?

72.c++中引用和指针有什么不同?指针加上什么限制等于引用?

73.做的项目,遇到的困难,怎样解决?

74.在房里有三盏灯,房外有三个开关,在房外看不见房内的情况,你只能进门一次,你用什么
方法来区分那个开关控制那一盏灯.

75.有两根不均匀分布的香,每根香烧完的时间是一个小时,你能用什么方法来确定一段15分
钟的时间.

76.一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自
己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只
有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄.请问三个女儿的年
龄分别是多少?为什么?

77.操作符重载
class CMyObject:pulic CObject
{
Public:
CMyObject();
CMyObject &operator=(const CMyObject &my);
private:
CString strName;
int nId:
};
请重载赋值操作符


78.链表
Struct structList
{
int value;
structList *pHead;
}
Struct LinkedList *pMyList;
请编写删除链表的头、尾和第n个节点的程序


79.用Socket API制作一个聊天程序,通讯协议使用tcp/ip。要求有简单界面即可,支持多
人聊天。



80.如果有过工作经验,请说明在先前公司的工作以及离职原因(如无,请说明毕业后的个
人展望)


*************************************************************************** 
81 对于C++中类(class) 与结构(struct)的描述正确的为:
 A,类中的成员默认是private的,当是可以声明为public,private 和protected,结构中定
义的成员默认的都是public;
 B,结构中不允许定义成员函数,当是类中可以定义成员函数;
 C,结构实例使用malloc() 动态创建,类对象使用new 操作符动态分配内存;
 D,结构和类对象都必须使用new 创建;
 E,结构中不可以定义虚函数,当是类中可以定义虚函数.
 F,结构不可以存在继承关系,当是类可以存在继承关系.
答:A,D,F
***************************************************************************


***************************************************************************
82,两个互相独立的类:ClassA 和 ClassB,都各自定义了非景泰的公有成员函数 PublicFu
nc() 和非静态的私有成员函数 PrivateFunc();
  现在要在ClassA 中增加定义一个成员函数ClassA::AdditionalPunction(ClassA a,Cl
assB b);则可以在AdditionalPunction(ClassA x,ClassB y)的实现部分(函数功能体内部
)
   出现的合法的表达是最全的是:
   A,x.PrivateFunc();x.PublicFunc();y.PrivateFunc();y.PublicFunc();
   B,x.PrivateFunc();x.PublicFunc();y.PublicFunc();
   C,x.PrivateFunc();y.PrivateFunc();y.PublicFunc();
   D,x.PublicFunc();y.PublicFunc();
答:B
***************************************************************************

***************************************************************************
83C++程序下列说法正确的有:
 A,对调用的虚函数和模板类都进行迟后编译.
 B,基类与子类中函数如果要构成虚函数,除了要求在基类中用virtual 声名,而且必须名
字相同且参数类型相同返回类型相同
 C,重载的类成员函数都必须要:或者返回类型不同,或者参数数目不同,或者参数序列的类
型不同.
 D,静态成员函数和内联函数不能是虚函数,友员函数和构造函数也不能是虚函数,但是析
构函数可以是虚函数.
答:A
 
原创粉丝点击