华为面试题.doc_第1页
华为面试题.doc_第2页
华为面试题.doc_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1. 用一个双向链表写一个快速排序算法/ 2. 2.自己写一个assert宏的定义#ifdef _DEBUG #define assert(expr) do if(expr) printf(Assertion %s failed in %s, line %dn, _FILE_, _LINE_); exit(0); while(0); #else #define assert(expr) #endif_FILE_, _LINE_都是C里自带的宏,分别表示当前的文件名和所有行,而调用printf函数的时候也应该把assert(expr)中的expr也打印出来( wanguodu好像忘了).而dowhile(0)(呵呵,确实只循环一次)是为了防止在进行宏替换的时候出错./for(;1;) 这个程序有什么问题,会出现什么结果?有1,2,.一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数./4. 以下代码有什么问题?C+易 struct Test Test( int ) Test() void fun() ; void main( void ) Test a(1); a.fun(); Test b(); / 应该是 Test b;类是结构体的扩展,在类中封装了对数据成员的操作,缺省的成员为私有的,而结构体为公有的,这就是它们的区别,对构造函数的调用,如果没有参数,是不需要加上括号的,如果加了括号,就不是定义一个对象了,而是声明了一个函数,返回该类型,所以上面的Test b(),实际上是调用一个函数名为b,返回类型为Test的函数,而不是创建了一个对象b,去掉括号后,就是调用的没有形参的构造函数。 b.fun(); / b不是Test的实例对象 / 5. 以下代码有什么问题?C+易 cout (true?1:1) endl; / 类型不同, 必须保证1和1 这两部分返回的类型一致 / 3. 以下两条输出语句分别输出什么?C+难 float a = 1.0f; cout (int)a endl; / 1 cout (int&)a endl; / a内存里的是多少就是多少 cout boolalpha ( (int)a = (int&)a ) endl; / 输出什么?boolalpha表示什么, / boolalpha输出bool字母, false float b = 0.0f; / 用什么头包含? cout (int)b endl; / 0 cout (int&)b endl; / 0 cout boolalpha ( (int)b = (int&)b ) endl; / 输出什么? faslefloat f = 1.0f; (int&)f and int (&f) 对于后者,就是取地址后强制转换为int,应该没有问题; 但是前者,将1.0f强制转换成int&,int引用类型。我们知道,float在内存中采用的是ieee745方式: 0-00 00 00 00 ,1-00 00 80 3F ,2-00 00 00 40 . 也就是说,对于f=0.0f,则转换后还是0,但是对于f=1.0f,转换后的结果为0x3f800000 关键是看清楚这是一个强制转换,同时要了解float类型的存贮格式与int不同/六、编写类String的构造函数、析构函数和赋值函数(25分) 已知类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个函数。/ String的析构函数 String:String(void) / 3分 delete m_data; / 由于m_data是内部数据类型,也可以写成 delete m_data; / String的普通构造函数 String:String(const char *str) / 6分 if(str=NULL) m_data = new char1; / 若能加 NULL 判断则更好 *m_data = 0; else int length = strlen(str); m_data = new charlength+1; / 若能加 NULL 判断则更好 strcpy(m_data, str); / 拷贝构造函数 String:String(const String &other) / 3分 int length = strlen(other.m_data); m_data = new charlength+1; / 若能加 NULL 判断则更好 strcpy(m_data, other.m_data); / 赋值函数 String & String:operate =(const String &other) / 13分 / (1) 检查自赋值 / 4分 if(this = &other) return *this; / (2) 释放原有的内存资源 / 3分 delete m_data; / (3)分配新的内存资源,并复制内容 / 3分 int length = strlen(other.m_data); m_data = new charlength+1; / 若能加 NULL 判断则更好 strcpy(m_data, other.m_data); / (4)返回本对象的引用 / 3分 return *this; / typedef struct int a:2; int b:2; int c:1; test; test t; t.a = 1; printf(%d,t.a); t.b = 3; printf(%d,t.b); t.c = 1; printf(%d,t.c);printf(%d,t.a); = 1 t.a为01,输出就是1 printf(%d,t.b); = -1 t.b为11,输出就是1 printf(%d,t.c); = -1 t.c为1,输出也是-1 3个都是有符号数int嘛。这是位扩展问题,可以查看谭浩强的c程序设计关于位段的部分/int main() printf(This is line 1n); return 0; printf(This is line 2n); 不添加新函数,不修改main函数,不引入新文件,让程序输出: This is line 2#define printf(A) if(strcmp(A,This is line 1n)=0) printf(This is line 2n) /有以下程序 main() union unsigned int n; unsigned char c; u1; ul.c=A; printf(%cn,u1.n); 执行后输出结果是 A) 产生语法错 B) 随机值 C) A D) 65 (45) 以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是 A) main() B) main int *p; int *p; fun(&p); fun(p); int fun(int *p) int fun(int *p) int s; p=&s; int s;*p=&s; C) #include D) #include main() main() int *p; int *p; fun(p); fun(&p) ; int fun(int *p) int fun(int *p) *p=(int *)malloc(2); p=(int *)malloc(sizeo(int); 答案C (49) 以下叙述中不正确的是 A)语言中的文本文件以ASC码形式存储数据 B)语言中对二进制文件的访问速度比文本文件快 C)语言中,随机读写方式不适用于文本文件 D)语言中,顺序读写方式不适用于二进制文件 选D,顺序读写方式可以读二进制文件啊/有一个数组a1000存放0-1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。 以7个数为例: 0,1,2,3,4,5,6,7 0-1-2(删除)-3-4-5(删除)-6-7-0(删除),如此循环直到最后一个数被删除。#include using namespace std; #define null 0 struct node int data; node* next; ; int main() node* head=new node; head-data=0; head-next=null; node* p=head; for(int i=1;idata=i; tmp-next=null; head-next=tmp; head=head-next; head-next=p; while(p!=p-next) p-next-next=p-next-next-next; p=p-next-next; coutdata; return 0; -人家要求就是用数组,我程序的答案也是603 #include const int size=1000; void main() int arrsize; int currentSize=size; /指示当前数组中还剩余有效元素的个数; int count=0; /计数用; for(int k=0;ksize;k+) arrk=k; for(int i=0;(i=0 & count2) count+; else if( count=2) arri=-1;/删除此时的元素; currentSize-;/有效元素减一; count=0;/并将计数值归零; for(int j=0;jsize;j+) if(arrj!=-1) coutthe result is :jendl; break; /有一个数组AnSize,其元素含有多个0,求一函数将所有的非零元素移到前面(不分大小,按原位置前移).并返回非零函数的个数i. #include stdafx.h #include #include #define MAX_NUM 20 /1解法 /int move(int array,int nsize) /int num=0; /for(int i=0;insize;i+) /if(arrayi!=0) /arraynum=arrayi; /if(num!=i) / arrayi=0; / num+; / / / return num; / /2解法 /int move(int array,int nsize) / int temp20; / for(int i=0;insize;i+) / tempi=arrayi; / arrayi=0; / / int num=0; / for(int j=0;jnsize;j+) / if(tempj!=0) / arraynum=tempj; / num+; / / /return num; / /3解法 /int move(int array,int nsize) / int num=0; / for(int i=0;insize;i+) / if(arrayi=0) / for(int j=i+1;jnsize;j+) / if(arrayj!=0) / int temp=arrayi; / arrayi=arrayj; / arrayj=temp; / num+; / break; / / / / / return num; / /4解法 int move(int array,int nsize) int num=0,temp=0; for(int i=0;insize;i+) if(arrayi!=0) num+; for(int j=0;jnsize;j+) if(arrayj!=0) arraytemp=arrayj; temp+; for(temp;tempnsize;temp+) arraytemp=0; return num; int main(int argc, char* argv) int aMAX_NUM=0,10,0,0,451,321,0,0,7,8,9,0,21,2,0,5,0,44,22,0,; for(int i=0; iMAX_NUM; i+) coutsetw(4)ai; coutendl; int nZero = move(a,MAX_NUM); cout nZeroendl; for(i=0; iMAX_NUM; i+) coutsetw(4)ai; coutendl; return 0; /char Result,arg1=8; Result = arg1 4; Result的值是? -128-#define DIV(a,b) a/b int arg1 = 7,arg2 = 5; float value; value = (float)(DIV(arg1*arg2,arg1-arg2)/2); value值? 3- union FLAG struct char Model1; char Model2; long usVal; myFlag; myFlag占用内存大小为几位? 4- char a6 = abcde; *(a+5)=? 0- unsigned char a5; unsigned char *p,*q; a0 = 1; a1 = 2; a2 = 3; a3 = 4; a4 = 5; p = a; q = &a3; aq-p=? 4-与表达式value = arg12 +1结果等同的是? c a:value = ( arg12)+1 b:value = arg1*4 +1 c:value = arg1(2 +1) d:value = arg1*3- switch(c)中c的类型不能是? d a:char b:long c:unsigned d:double-enum string x1, x2, x3 = 10, x4, x5 ; enum string x = x5; x = ? 12-下面函数要实现打印hello world的功能,哪里有错误? void * GetMemory(void) char str = hello world; return str; 返回栈内存 void Test(void) char *str = NULL; str = (char*)GetMemory(); printf(str); -下面哪里有错误? #define BUFSIZE 256 char BufBUFSIZE void main() int len = 300; unsigned char *pInput; pInput = (unsigned char*)malloc(len); sprintf(pInput,%s,hello eorld); memcpy(Buf,pInput,len); 它溢出 上边的定义少了个; memcpy参数错误 -for(i=1;i+4;)后,i=? 5-请在三位数的正整数中寻找符合下条件的: 完全平方数,又有2个数字相同 如144,676 void main() int a; int b; int x,y,z; a=sqrt(1000); for(int i=10;ia;i+) b=i*i; z=b; x=z%10; z=z/10; y=z%10; z=z/10; if(x=y|x=z|y=z) coutbname,name); temp1-num = num; temp1-age = age; temp1-next = NULL: if(NULL = head) temp1-prev = ?; head = ?; else temp2 = head; while(temp2-next!=NULL) temp2 = temp2-next; temp1-prev = ?; temp2 -next = ?; return 0; temp1-prev=NULL; head=temp1; temp1-prev=temp2; temp2-next=temp1;/char 型,bool型,float型的变量和零值比较的c+语句分别是什么 比如 int i ; if(i=0)或if(i!=0)/实数数列: 一个实数数列共有N项,已知: Ai=(Ai-1-Ai+1)/2+d 其中,1iN N60 (其中的Ai,Ai-1,Ai+1中,i是下标。 ) 使用键盘输入N d A1 AN m,求出Am,并输出。/1. Are the following definitions valid? Why or why not? const std:string hello = Hello; const std:string message = hello + , world + !; 2. Are the following definitions valid? Why or why not? const std:string exclam = !; const std:string message = Hello + , world + exclam; 2是错误的 编译器报错:invalid operands of types const char6 and const char8 to b inary operator+ 1.中hello+,world后(hello + , world)就变成是string类型了,所以(hello+ , world) + !.;就是string类型 用 string:operator +(const string&) 对(hello + , world) 与! 进行字符串连结操作 2.中 Hello + , world 中间的+是标准运算符,所以处理不了两个char *的相加操作因为+操作符的重载版本是: string:operator+(char*) 所以,string类对象在前,char*在后是可以的,反过来就不行了!/将一个单链表反序,只有一个链表头节点head,还有两个指向节点元素类型的指针p和q,不许申请新的节点及指针变量什么的.用c或c+实现算法./有17枚硬币 分3次 第一次分其中的1

温馨提示

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

评论

0/150

提交评论