华为C++笔试题及答案_第1页
华为C++笔试题及答案_第2页
华为C++笔试题及答案_第3页
华为C++笔试题及答案_第4页
华为C++笔试题及答案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.static 有什么用途?(请至少说明两种)1) 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2) 在模块内(但在函数体外) ,一个被声明为静态的变量可以被模块内所用函数访问, 但不能被模块外其它函数访问。它是一个 本地的全局变量。3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是, 这个函数被 限制在声明它的模块的本地范围内使用2. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。3. 描述 实时系统的基本特性 在特定时间内

2、完成特定的任务,实时性与可靠性。4. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈。1。5. 什么是平衡二叉树? 左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于6. 堆栈溢出 一般是由什么原因导致的? 没有回收垃圾资源。7. 什么函数不能声明为虚函数? constructor 函数不能声明为虚函数。8. 冒泡排序算法的时间复杂度是什么? 时间复杂度是0(n人2)。9.写出 float x 与“零值”比较的 if 语句。if(x>0.000001&&x<-0.000001)10.Internet 采用哪

3、种网络协议?该协议的主要层次结构?Tcp/Ip 协议 主要层次结构为:应用层 /传输层 /网络层 / 数据链路层 /物理层。11.Internet 物理地址和 IP 地址转换采用什么协议? ARP (Address Resolution Protocol) (地址解析協議)12.IP 地址的编码分为哪俩部分?IP 地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能 区分哪些是网络位哪些是主机位。13.用户输入 M,N 值,从 1 至 N 开始顺序循环数数,每数到 M 输出该数值,直至全部输出。 写出 C 程序。循环链表,用取余操作做14.不能做 switch() 的参数类

4、型是:switch 的参数不能为实型。= "abc"= "abc"= "abc"1. 以下三条输出语句分别输出什么? C 易 char str1 char str2 const char str3( str1=str2 ) << endl; / 输出什么? 0( str3=str4 ) << endl; / 输出什么? 0( str5=str6 ) << endl; / 输出什么?在 UpperCase 中 sizeof(str) =1 ;4. 以下代码有什么问题? void char2Hex( c

5、har c ) / C 难 将字符以 16 进制表示const char str4 = "abc" const char* str5= "abc"const char* str6= "abc"cout << boolalpha << cout << boolalpha << cout << boolalpha <<2. 非C+内建型别 A和B,在哪几种情况下 B能隐式转化为 A ? C+中等 答:a. class B : public A / B公有继承自 A,可

6、以是间接继承的b. class B operator A( ); / B实现了隐式转化为 A的转化c. class A A( const B& ); / A实现了 non-explicit的参数为 B(可以有其他带默认值的参数) 构造函数d. A& operator= ( const A& ); / 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算 一个3. 以下代码中的两个 sizeof 用法有问题吗? C 易void UpperCase( char str ) / 将 str 中的小写字母转换成大写字母 for( size_t i=0; i<sizeof(s

7、tr)/sizeof(str0); +I ) if( 'a'<=stri && stri<='z' ) stri -= ('a'-'A' ); char str = "aBcDe"cout << "str 字符长度为 : " << sizeof(str)/sizeof(str0) << endl; UpperCase( str );cout << str << endl; 答:str作为参数传递后,cha

8、r 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

9、 ) char2Hex( stri );cout << endl;5. 以下代码有什么问题?C+ 易struct TestTest( int ) Test() void fun() ;void main( void ) Test a(1); a.fun();Test b();b.fun();答: Test b;6. 以下代码有什么问题?cout VV (true?1:"1") << endl;(应该是同种类型,1是隐式的将字符类型转换成int型,“1”是字符串不能自动转换 )C+ 易7. 以下代码能够编译通过吗,为什么? unsigned int c

10、onst size1 = 2;char str1 size1 ;unsigned int temp = 0;cin >> temp;unsigned int const size2 = temp;char str2 size2 ;C+ 易 答:不能用变量 给 const 常量赋值8. 以下代码中的输出语句输出 struct CLSint m_i;CLS( int I ) : m_i(i) CLS()CLS(0);0 吗,为什么? C+ 易 答:在 CLS ()中 CLS(0) 创建了另一个对象,所以并 没有对 obj 对象进行赋值,而是其他对象赋值。;CLS obj;cout &l

11、t;< obj.m_i << endl;不能,因为 m_i 没有初始化,会付一个很大的数,9. C+中的空类,默认产生哪些类成员函数?C+易答:class Emptypublic:Empty();/ 缺省构造函数Empty( const Empty& );/ 拷贝构造函数Empty();/ 析构函数/ 取址运算符/ 取址运算符 constEmpty& operator=( const Empty& ); / 赋值运算符 Empty* operator&();const Empty* operator&() const;10. 以下两条输

12、出语句分别输出什么?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 &l

13、t;< ( (int)b = (int&)b ) << endl; / 输出什么?11. 以下反向遍历 array 数组的方法有什么错误? STL 易 vector array;(vector 没有给定具体类型也没有说明是模板类型 ) size_type 是无符号整数,当 j=0 时,做减 1 操作不会得到 -1,而是得到最大的无符号整数,因此永远不会退出循环答: vector <int > array(100); array.push_back( 1 );array.push_back( 2 );array.push_back( 3 );for( vec

14、tor:size_type i=array.size()-1; i>=0; -i) / 反向遍历 array 数组 cout << arrayi << endl;12. 以下代码有什么问题? STL 易 typedef vector IntArray;IntArray array; array.push_back( 1 ); array.push_back( 2 );array.push_back( 2 );array.push_back( 3 );/ 删除 array 数组中所有的 2for( IntArray:iterator itor=array.begin

15、(); itor!=array.end(); +itor ) if( 2 = *itor ) array.erase( itor );其实这里面隐藏着一个很严重的错误:当veci.erase(iter) 之后, iter 就变成了一个野指针,对一个野指针进行 iter+ 是肯定会出错的。13. 写一个函数,完成内存之间的拷贝。 考虑问题是否全面 答:void* mymemcpy( void *dest, const void *src, size_t count ) char* pdest = static_cast<char*>( dest );const char* psrc

16、= static_cast<const char*>( src );if( pdest>psrc && pdest<psrc+cout ) 能考虑到这种情况就行 了 判断拷贝是否有重叠区 正确的 拷贝for( size_t i=count-1; i!=-1; -I ) pdesti = psrci; elsefor( size_t i=0; i<count; +I ) pdesti = psrci; return dest;int main( void )char str = "0123456789" mymemcpy( str

17、+1, str+0, 9 ); cout << str << endl;system( "Pause" ); return 0;本试题仅用于考查 C+/C 程序员的基本编程技能。内容限于 C+/C 常用语法,不涉及数据 结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对 C+/C 的理解程度, 但不能反映考生的智力和软件开发能力。笔试时间 90 分钟。请考生认真答题,切勿轻视。一、请填写 BOOL , float, 指针变量 与“零值”比较的 if 语句。(10 分) 提示:这里“零值”可以是 0, 0.0 , FALSE 或者“空指针”

18、 。例如 int 变量 n 与“零值”比 较的 if 语句为:if ( n = 0 ) if ( n != 0 ) 以此类推。请写出 BOOL flag 与“零值”比较的 if 语句:请写出 float x 与“零值”比较的 if 语句: 浮点数是不可以直接比较大小的,因为是非精 确存储, 只能设置一个精度, 然后在允许误差内的就认为是相等的; 对浮点型数比较的时候 用= 是不对的请写出 char *p 与“零值”比较的 if 语句:二、以下为 Windows NT下的32位C+程序,请计算 sizeof的值(10分) char str =“ Hello ”;char *p = str ; 4

19、int n = 10; 4请计算sizeof (str ) =sizeof ( p ) =sizeof ( n ) =void Func ( char str100)请计算sizeof( str ) = 4void *p = malloc( 100 ); 请计算sizeof ( p ) =4三、简答题( 25 分)1、头文件中的 ifndef/define/endif 干什么用? 有两个 C 文件,这两个 C 文件都 include 了同 一个头文件。而编译时,这两个 C 文件要一同编译成一个可运行文件,于是问题来了,大 量的声明冲突。使用这个就不会造成重复定义。#ifndef 中)。2. 在

20、 #ifndef 中定义变量出现的问题(一般不定义在#ifndef AAA#define AAA int i;#e ndif里面有一个变量定义 在vc中链接时就出现了 i重复定义的错误,而在c中成功编译。结论:(1) .当你第一个使用这个头的.cpp文件生成.obj的时候,int i在里面定义了当另外一个使用这个的.cpp再次单独生成.obj的时候,int i又被定义然后两个 obj被另外一个.cpp也include 这个头的,连接在一起,就会出现重复定义.(2) .把源程序文件扩展名改成.c后,VC按照C语言的语法对源程序进行编译,而不是 C+。 在C语言中,若是遇到多个int i,则自动认

21、为其中一个是定义,其他的是声明。(3) .C语言和C+语言连接结果不同,可能(猜测)时在进行编译的时候,C+语言将全局变量默认为强符号,所以连接出错。C语言则依照是否初始化进行强弱的判断的。(参考).h中只声明 extern int i;在.cpp中定义注意问题:(1) .变量一般不要定义在.h文件中。2、 #include 和 #include “filename.h ” 有什么区别?3、const有什么用途?(请至少说明两种)类型修饰符:定义常量,类型检查,保护被修饰符不被修改,const定义的常量在程序运行过程中只有一份 拷贝,而#define定义的常量在内存中有若干个拷贝, #defi

22、ne给出的是立即数,#define定义的常量在内存 中有若干个拷贝。C编译器编译后的函数,为什么要加extern “ C”声明?函数名对应着汇编标号。因为C编译函数名与得到的汇编代号基本一样,但是C+中函数名与得到的汇编代号有比较大的差别。女口:由于函数重载,为了区分,编译器会把函数名和参数类型合在一起作为汇编代号,4、在C+程序中调用被函数经过编译系统的翻译成汇编,女口: fun()=>_fun, main=>_main函数名一样,但汇编代号绝对不能一样。这样就解决了重载问题。具体如何把函数名和参数类型合在一起,要看编译器的帮助说明了。这样一来,如果C+调用C,如fun(),则调

23、用名就不是C的翻译结果_fun,而是带有参数信息的一个名字,因此就不能 调用到fun (),为了解决这个问题,加上 extern "C"表示该函数的调用规则是C的规则,则调用时就不使用C+规则的带有参数信息的名字,而是_fun,从而达到调用C函数的目的。5、请简述以下两个 /第一个for (i=0; i+;)if (con diti on)II优点:缺点for循环的优缺点DoSomethi ng();else DoOtherthi ng();第二个for (i=0;i+;)DoSomethi ng(); else for (i=0;i+;)if(con diti on)Do

24、Otherthi ng(); 优点: 缺点: 四、有关内存的思考题( 20 分) void GetMemory(char *p) p = (char *)malloc(100);/ 没有 free 的操作肯定会造成内存泄漏 void Test(void)char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str);请问运行 Test 函数会有什么样的结果? 答:char *GetMemory(void)char p = "hello world"/ 存储在 stack

25、中,但是 stack 中的变量在完成 function 之后会自动释 放,所以也会返回一个野指针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); strc py(str, "hello");prin t

26、f(str);请问运行Test函数会有什么样的结果?答:void Test(void)char *str = (char *) malloc(100); strcpy(str,“ hello ” );free(str);if(str != NULL)“world ” );strcpy(str, prin tf(str);请问运行Test函数会有什么样的结果?world五、编写strcpy函数(10分) 已知 其中(1)(2)答:strcpy 函数的原型是:char *strcpy(char *strDest, const char *strSrc) strDest是目的字符串,strSrc是源

27、字符串。不调用C+/C的字符串库函数,请编写函数strcpystrcpy能把strSrc的内容复制到strDest,为什么还要 char *类型的返回值?为了实现 链式表达式。char * strc py( char *strDest, const char *strSrc )assert( (strDest != NULL) &&(strSrc != NULL); char *address = strDest;while( (*strDest+ = * strSrc+) !=0');return address;从函数中返回函数体内分配的内存是十分危险的做法,他把释

28、放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。六、编写类String的构造函数、析构函数和赋值函数(25分)已知类String的原型为:class Stringpublic:String(const char *str = NULL); / 普通构造函数String(const String &other); / 拷贝构造函数 String(void); / 析构函数String & operate =(const String &other); / 赋值函数private:char *m_data; / 用于保存字符串 ;请编写

29、String 的上述 4 个函数。附录 C :C+/C 试题的答案与评分标准一、请填写 BOOL , float, 指针变量 与“零值”比较的 if 语句。(10 分) 请写出 BOOL flag 与“零值”比较的 if 语句。(3 分) 标准答案:if ( flag ) if ( !flag )const float EPSINON = 0.00001;if (x >= - EPSINON) && (x <= EPSINON) if (p = NULL)if (p != NULL)Hello ”二、以下为 Windows NT 下的 32 位 C+ 程序,请计算

30、sizeof 的值( 10 分) char str = char *p = str ;(2 分)2 分)2 分)int n = 10; 请计算 sizeof (str ) = 6 sizeof ( p ) = 4 sizeof ( n ) = 4 void Func ( char str100) 请计算 sizeof( str ) = 4 (2 分) void *p = malloc( 100 ); 请计算sizeof ( p ) = 4 ( 2 分)三、简答题( 25 分)1、头文件中的 ifndef/define/endif 干什么用?( 5 分) 答: 防止该头文件被重复引用。2、 #i

31、nclude 和 #include “ filename.h ” 有什么区别?( 5 分)华为的 CC+ 面试题Q1:请你分别划划OSI :物理层,TCP:物理层,应用层传输层网络层链路层FTPTCPOSI 的七层网络结构图,和 TCP/IP 的五层结构图? 数据链路层,网络层,传输层,会话层,表示层,应用层; 网络接口层,互联网层,传输层,应用层;SMTP HTTPUDPIP ICMP ARP 以太网 令牌环 FDDI . .: Q2: 请你详细的解释一下 IP 协议的定义,在哪个层上面,主要有什么作用? : TCP 与 UDP 呢?IP协议是网络层,: 总得来说前面两道题目还是比较简单的!

32、: Q3: 请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实: 现的?: Q4: 请问 C+ 的类和 C 里面的 struct 有什么区别?: Q5: 请讲一讲析构函数和虚函数的用法和作用?: Q6: 全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器: 是怎么知道的?: Q7: 一些寄存器的题目,我忘记了具体实什么题目,主要好像是寻址和内: 存管理等一些知识,不记得了。: Q8:8086 是多少尉的系统?在数据总线上是怎么实现的?还有一些硬件方: 面的知识我既不清楚了。: 一般建议参加华为的研发面试的同学先要准备一下相关的知识,软件的主要: 是看看 C 和数据结构方面的

33、,硬件模电,数电和微机原理 两道 c 面试题1、一个学生的信息是:姓名,学号,性别,年龄等信息,用一个链表,把这些学生信息连 在一起, 给出一个 age, 在些链表中删除学生年龄等于 age 的学生信息。程序代码 I nclude "stdio.h" I nclude "conio.h" struct stu char name20; char sex; int no; int age; struct stu * next;*linklist;struct stu *creatlist(int n) int I;/h 为头结点, p 为前一结点, s 为

34、当前结点 struct stu *h,*p,*s;h = (struct stu *)malloc(sizeof(struct stu); h->next = NULL;p=h;for(i=0;i<n;i+)s = (struct stu *)malloc(sizeof(struct stu);p->next = s;printf("Please input the information of the student: name sex no age n"); scanf("%s %c %d %d",s->name,&s

35、->sex,&s->no,&s->age); s->next = NULL;p = s;printf("Create successful!"); return(h);void deletelist(struct stu *s,int a)struct stu *p;while(s->age!=a)p = s;s = s->next;if(s=NULL)printf("The record is not exist.");elsep->next = s->next;printf("Delete successful!");void display(struct stu *s) s = s->next;while(s!=NULL)printf("%s %c %d %dn",s->

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论