您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页C++经典面试题

C++经典面试题

来源:百家汽车网
附录B :C++/C试题

本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。

笔试时间90分钟。请考生认真答题,切勿轻视。

一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分) 提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。

请写出 BOOL flag 与“零值”比较的 if 语句: if(flag) if(!flag) 请写出 float x 与“零值”比较的 if 语句: const float TEMP = 0.000001; if(x > -TEMP && x < TEMP ) if(!(x > -TEMP && x < TEMP)) 请写出 char *p 与“零值”比较的 if 语句: if(NULL == p) if(NULL != p) 二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分) char str[] = “Hello” ; char *p = str ; int n = 10; 请计算 sizeof (str ) = 6 sizeof ( p ) = 4 sizeof ( n ) = 4 sizeof (int) = 4 sizeof (unsigned) = 4 sizeof (float) = 4 sizeof (double) = 8 void Func ( char str[100]) //这是一个地址 { 请计算 sizeof( str ) = 4 } void *p = malloc( 100 ); 请计算 sizeof ( p ) = 4

三、简答题(25分)

1、头文件中的 ifndef/define/endif 干什么用? 防止头文件被重复引用 (宏保护作用)

2、#include 和 #include “filename.h” 有什么区别? #include 编译器从系统目录中开始寻找filename.h, #include ”filename.h” 编译器从当前目录开始寻找filename.h 寻找头文件,若没有找到再到系统目录中查询 3、const 有什么用途?(请至少说明两种)

4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明? C++支持函数重载,C不支持函数重载,加入extern “c”可以解决C++ 和 C的名字匹配问题

5、请简述以下两个for循环的优缺点

// 第一个 for (i=0; i四、有关内存的思考题(20分) void GetMemory(char *p)// p==str { p = (char *)malloc(100);//p改变指向 } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, \"hello world\"); printf(str); } 请问运行Test函数会有什么样的结果? 答:str == NULL, 向NULL地址写数据,严重错误!无结果输出 char *GetMemory(void) { char p[] = \"hello world\"; return p;//返回栈内地址 } void Test(void) { char *str = NULL; str = GetMemory(); printf(str); } 请问运行Test函数会有什么样的结果? 答:极有可能是乱码,输出结果不可知。返回了栈内的地址 Void GetMemory2(char **p, int num) { *p = (char *)malloc(num); } void Test(void) { char *str = NULL; GetMemory(&str, 100); strcpy(str, \"hello\"); printf(str); } 请问运行Test函数会有什么样的结果? 答:没有释放内存空间,可以正确输出结果。 Memory leak void Test(void) { char *str = (char *) malloc(100); strcpy(str, “hello”); free(str); if(str != NULL) { strcpy(str, “world”); printf(str); } } 请问运行Test函数会有什么样的结果? 答:虽然可能可以正确输出结果,但是str是野指针,非常危险

五、编写strcpy函数(10分)

已知strcpy函数的原型是

char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函数 strcpy char *strcpy(char *strDest, const char *strSrc) {

if(strSrc == NULL || strDest == NULL) return NULL; char *temp = strDest; while(*strSrc != ‘\\0’ ) {

*strDest = *strSrc; strSrc++; strDest++;

}

*strDest = ‘\\0’; return temp; }

(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值? 可以实现以下语句:strcat(“xif”, strcopy(strDest, strSrc)); 六、编写类String的构造函数、析构函数和赋值函数(25分)

华为的笔试题 找错

Void test1() {

char string[10];// 改为char string[11];

char* str1=”01234567”; //给指针没有分配内存空间 strcpy(string, str1);//地址越界, }

Void test2() {

char string[10], str1[10]; // string不能定义为变量,是保留字 for(int i=0; i<9;i++) {

str1[i] =’a’; }

a[9] = ‘\\0’;

strcpy(string, str1); }

Void test3(char* str1) {

char string[10];

if(strlen(str1)<=10)//strlen()求出的值等于4是个指针大小

{

strcpy(string, str1); } }

已知类String的原型为: class String {

public:

String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数

String & operate =(const String &other); // 赋值函数 private:

char *m_data; // 用于保存字符串 };

请编写String的上述4个函数。

2. 找错

#define MAX_SRM 256

DSN get_SRM_no() {

static int SRM_no; int I;

for(I=0;ISRM_no %= MAX_SRM; if(MY_SRM.state==IDLE) {

break; } }

if(I>=MAX_SRM) return (NULL_SRM); else

return SRM_no; }

3. 写出程序运行结果

int sum(int a) {

auto int c=0;

static int b=3; //该语句只执行一次在编译是就赋值了! c+=1; b+=2;

return(a+b+C); }

void main() {

int I; int a=2;

for(I=0;I<5;I++) {

printf(“%d,”, sum(a)); } }

4.

int func(int a)

{

int b; switch(a) {

case 1: b=30; case 2: b=20; case 3: b=16; default: b=0 } return b; }

则func(1)=?//0 5:

int a[3];

a[0]=0; a[1]=1; a[2]=2; int *p, *q; p=a;

q=&a[2]; //q = 0x0002 则a[q-p]=?

6.定义 int **a[3][4], 则变量占有的内存空间为:__4___

7.编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。

华为面试题

1 32 31 30 29 28 27 26 25 24 23 2 33 52 51 50 49 22 3 34 48 21 4 35 47 20 5 36 46 19 6 37 38 39 40 41 42 43 44 45 18 7 8 9 10 11 12 13 14 15 16 17 由外到里的依次递加。然后打印的。

#ifndef QLCHENG #define QLCHENG

#include #define WIDTH 10 #define HIGHT 10

#define SPACE WIDTH*HIGHT

void main() {

int a[HIGHT][WIDTH] = {0}; int i=0, j=0; int value=1;

int down=HIGHT, up=-1, right=WIDTH, left=0; bool drection = 1;//向下向右

while(valuefor(i=0; ifor(j=0; jprintf(\"%d\\", a[i][j]); printf(\"\\n\"); if(drection) { } else { }

for(; i>up; i--)

a[i][j] = value++; i++; //循环结束后的i=up,越界 j--; //后退一列,转向left for(; j>left; j--)

a[i][j] = value++; j++; //循环结束后的j=left,越界 i++; //前进一行,转向down up++; left++; drection = 1; for(; ia[i][j] = value++;

i--; //循环结束后的i=down,越界 j++; //前进一列,转向right for(; ja[i][j] = value++; j--; //循环结束后的j=right,越界 i--; //后退一行,转向up down--; right--;

drection = 0;//向上向左

}

}

#endif class A { public: };

void A::fun() { }

class B : A { public: };

B::B(int a1,char b1) { }

void B::fun() { } int main() {

B test(257,'y'); B *p; p = &test;

char ch = *((char *)p + 5); printf(\"%c\\n\printf(\"output B\"); return;

a = a1; b = b1;

virtual void fun(); B(int,char); int a; char b; void funtion(){} printf(\"output A\"); return;

virtual void fun();

}

int size_B = sizeof(B); printf(\"%d\\n\return 0;

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

表示层 应用层 会话层

传输层 TCP/UDP传输层 网络层 IP层,网际层 数据链路层 网络接口层 物理层 (物理层) Q2:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCP与UDP呢? Internet Protocol 网络层协议,处理数据从一台主机到另一台主机的路由选择问题,即具有寻径功能; Transmission Control Protocol 传输层协议,向下屏蔽了IP协议不可靠的数据传输特性,向上提供了可靠的点对点传输;

User Data gram protocol 提供无连接的服务,主要考虑到很多应用不需要可靠的连接,而需要的是快速的传输速度。

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

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

答:在class 中类中的成员默认情况下是私有的(private)类型的,而在struct中默认

是共有的(public)。其他都一样。

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

答:析构函数是在类的对象消失时调用,来处理对象的善后工作,自动系统调用。

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

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

Q8:8086是多少位的系统?在数据总线上是怎么实现的?

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

A1:OSI/ISO根据整个计算机网络功能将网络分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层七层。也称\"七层模型\"

TCP/IP\"四层模型\" 网络接口层, IP层(网际层), TCP/UDP层(运输层), 应用层, 如果说五层,那么另外一层应该是\"物理层\实际上TCP/IP协议本身并没有涉及物理层

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

A2: IP协议是网络层的协议,它实现了Internet中自动路由的功能,即寻径的功能;

TCP协议是一个传输层的协议它向下屏蔽了IP协议不可靠传输的特性,向上提供一个可靠的点到点的传输;UDP提供的是一种无连接的服务,主要考虑到很多应用不需要可靠的连接,

但需要快速的传输

Q3:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的? A3:交换机用在局域网中,交换机通过纪录局域网内各节点机器的MAC地质(物理地址)就可以实现传递报文,无需看报文中的IP地质。路由器识别不同网络的方法是通过识别不同网络的网络ID号(IP地址的高端部分)进行的,所以为了保证路由成功,每个网络都必须有一个唯一的网络编号。路由器通过察看报文中IP地址,来决定路径,向那个子网(下一跳)路由,也就是说交换机工作在数据链路层看MAC地址,路由器工作在网际层看IP地址,但是由于现在网络设备的发展,很多设备既有交换机的功能有由路由器的功能(交换试路由器)使得两者界限越来越模糊。

Q4:请问C++的类和C里面的struct有什么区别? A4:C++的类具有数据封装,其包含属性访问级别可以为Private,public 和protect,还具有实现类接口功能和辅助功能的操作函数,而struct属性访问权限只有public,没有数据封装功能,也就没有实现信息隐藏一面向对象的思想的机制,struct本身不含有操作函数,只有属性 Q5:请讲一讲析构函数和虚函数的用法和作用?

A5:析构函数是在类对象死亡时由系统自动调用,其作用是用来释放对象的指针数据成员所指的动态空间,如果在构造函数中你申请了动态空间,那么为了使程序健壮,使程序内存分配正确,避免引起程序错误,你必须在析构函数中释放这部分内存空间

如果基类的函数用 virtual修饰,成为虚函数,则其派生类相应的重载函数仍能继承该虚函数的性质,虚函数进行动态联编,也即具有多态性,也就是派生类可以改变基类同名函数的行为,在面向对象世界中,多态是最强大的机制,虚函数就是这一机制的c++的实现方式

面向对象(包装,多态,继承)

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

全局变量:在程序运行时全局变量的空间是在堆中分配的。在程序的整个运行中都存在的。

局部变量:什么是局部变量――在函数的行参列表或{}中定义的变量。是动态的在栈中分配空间的。

A6:全局变量是整个程序都可访问的变量,谁都可以访问,生存期在整个程序从运行到结束(在程序结束时所占内存释放),而局部变量存在于模块(子程序,函数)中,只有所在模块可以访问,其他模块不可直接访问,模块结束(函数调用完毕),局部变量消失,所占据的内存释放。(操作系统和编译器是怎么知道的?)操作系统和编译器,我记得是通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行的时候被加载. 局部变量则分配在堆栈里面

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

Q8:8086是多少位的系统?在数据总线上是怎么实现的?A8:是16位,数据总线实现忘记了,呵呵

MSRA Interview Written Exam(December 2003,Time:2.5 Hours) 1、写出下列算法的时间复杂度。 (1)冒泡排序; (2)选择排序; (3)插入排序; (4)快速排序;

(5)堆排序; (6)归并排序;

2、写出下列程序在X86上的运行结果。 struct mybitfields {

unsigned short a : 4; unsigned short b : 5; unsigned short c : 7; }test;

void main(void) {

int i; test.a=2; test.b=3; test.c=0;

i=*((short *)&test); printf(\"%d\\n\}

3、写出下列程序的运行结果。 unsigned int i=3; cout<printf(\"%d\\n\

4、写出下列程序所有可能的运行结果。 int a; int b; int c; void F1() {

b=a*2; a=b; }

void F2() {

c=a+1; a=c; }

main() { a=5;

//Start F1,F2 in parallel F1(); F2();

printf(\"a=%d\\n\}

5、略,对字符串进行操作。

6、对 16 Bits colors的处理,要求:

(1)Byte转换为RGB时,保留高5、6bits; (2)RGB转换为Byte时,第2、3位置零。

7、一个链表的操作,注意代码的健壮和安全性。要求: (1)增加一个元素; (2)获得头元素;

(3)弹出头元素(获得值并删除)。

8、一个给定的数值由左边开始升位到右边第N位,如 0010<<1 == 0100 或者

0001 0011<<4 == 0011 0000

请用C或者C++或者其他X86上能运行的程序实现。

附加题(只有在完成以上题目后,才获准回答)

In C++, what does \"explicit\" mean? what does \"protected\" mean?

* What’s the difference between a linked list and an array?

* Implement an algorithm to sort a linked list. Why did you pick the method you did?

* Implement an algorithm to sort an array. Why did you pick the method you d id?

* Implement strstr() (or some other string library function). * Reverse a string. Optimize for speed. Optimize for space.

* Count the number of set bits in a number. Now optimize for speed. Now opti mize for size.

* How would you find a cycle in a linked list?

* Give me an algorithm to shuffle a deck of cards, given that the cards are stored in an array of ints.

* Write a function that takes in a string parameter and checks to see whethe r or not it is an integer, and if it is then return the integer value. * Write a function to print all of the permutations of a string. * Implement malloc.

* Write a function to print the Fibonacci numbers.

* Write a function to copy two strings, A and B. The last few bytes of strin g A overlap the first few bytes of string B.

* How would you print out the data in a binary tree, level by level, startin g at the top?

Intel 面试题:

1.进程和线程的差别。 2.Heap与stack的差别。

3.Windows下的内存是如何管理的? 4.介绍.Net和.Net的安全性。

5.客户端如何访问.Net组件实现Web Service? 6.C/C++编译器中虚表是如何完成的?

7.谈谈COM的线程模型。然后讨论进程内/外组件的差别。 8.谈谈IA32下的分页机制。

9.给两个变量,如何找出一个带环单链表中是什么地方出现环的? 10.在IA32中一共有多少种办法从用户态跳到内核态?

11.如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口 ,怎样实现? Mutex(用互斥对象)

12.如何截取键盘的响应,让所有的‘a’变成‘b’? ON_CHAR 消息中处理 13.Apartment在COM中有什么用?为什么要引入? 14.存储过程是什么?有什么用?有什么优点? 15.Template有什么特点?什么时候用? 16.谈谈Windows DNA结构的特点和优点。

IBM面试题:

笔试内容包括:

1。技术试题:系统windows/linux,网络基础,通信基础,数据库 2。能力试题:根据两故事发表看法 3。英语作文 共有四轮面试:

问题一:两笔记本电脑连起来后拼不通,你觉得可能有哪些问题?

答:1、确保用的双绞线是交叉式的。(硬件)

2、确保两台机子的网卡没问题。

3、确保两台机子都安装了TCP/IP协议。(软件) 4、确保两台机子都配置了IP,且正确。

问题二:我们在南京,和深圳的网络是通的,但和北京的网络不通,你以怎样的顺序检查问题?

答:看深圳和北京的网络通不。

问题三:解释什么叫“透明”?什么叫“网格”? 问题四:交换和路由的区别?VLAN的特点? 问题五:画一个积分电路和一个微分电路。

问题六:知道现在的路由器是第几代了吗?(交换是路由器第六代)

村子中有50个人,每人有一条狗。在这50条狗中有病狗(这种病不会传染)。于是人们就要找出病狗。每个人可以观察其他的49条狗,以判断它们是否生病,只有自己的狗不能看。观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的是病狗就要毙自己的狗,而且每个人只有权利毙自己的狗,没有权利打死其他人的狗。第一天,第二天都没有响。到了第三天传来一阵声,问有几条病狗,如何推算得出?

第一种推论:

A、假设有1条病狗,病狗的主人会看到其他狗都没有病,那么就知道自己的狗有病,所以第一天晚上就会有响。因为没有响,说明病狗数大于1。

B、假设有2条病狗,病狗的主人会看到有1条病狗,因为第一天没有听到响,是病狗数大于1,所以病狗的主人会知道自己的狗是病狗,因而第二天会有响。既然第二天也每有响,说明病狗数大于2。

由此推理,如果第三天响,则有3条病狗。 第二种推论

1 如果为1,第一天那条狗必死,因为狗主人没看到病狗,但病狗存在。 2 若为2,令病狗主人为a,b。 a看到一条病狗,b也看到一条病狗,但a看到b的病狗没死故知狗数不为1,而其他人没病狗,所以自己的狗必为病狗,故开;而b的想法与a一样,故也开。

由此,为2时,第一天看后2条狗必死。

3 若为3条,令狗主人为a,b,c。 a第一天看到2条病狗,若a设自己的不是病狗,由推理2,第二天看时,那2条狗没死,故狗数肯定不是2,而其他人没病狗,所以自己的狗必为病狗,故开;而b和c的想法与a一样,故也开。 由此,为3时,第二天看后3条狗必死。

4 若为4条,令狗主人为a,b,c,d。a第一天看到3条病狗,若a设自己的不是病狗,由推理3,第三天看时,那3条狗没死,故狗数肯定不是3,而其他人没病狗,所以自己的狗必为病狗,故开;而b和c,d的想法与a一样,故也开。 由此,为4时,第三天看后4条狗必死。 5 余下即为递推了,由年n-1推出n。

答案:n为4。第四天看时,狗已死了,但是在第三天死的,故答案是3条

1. 三个float:a,b,c 问值

(a+b)+c==(b+a)+c (a+b)+c==(a+c)+b

2. 把一个链表反向填空

3. 设计一个重采样系统,说明如何anti-alias 4. y1(n)=x(2n), y2(n)=x(n/2),问:

如果y1为周期函数,那么x是否为周期函数 如果x为周期函数,那么y1是否为周期函数 如果y2为周期函数,那么x是否为周期函数 如果x为周期函数,那么y2是否为周期函数

5. 如果模拟信号的带宽为5KHZ,要用8K的采样率,怎么办。

4. 某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统(300M的CPU,50M的SDRAM)中运行,还需要优化吗? 5. x^4+a*x^3+x^2+c*x+d最少需要作几次乘法 6. 什么情况下,sin(x+y)+y ~ .... 7. 下面哪种排序法对12354最快 a quick sort b.buble sort c.merge sort

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

c. stack

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务