C、C++笔试题基础概念、算法及编程_第1页
C、C++笔试题基础概念、算法及编程_第2页
C、C++笔试题基础概念、算法及编程_第3页
C、C++笔试题基础概念、算法及编程_第4页
C、C++笔试题基础概念、算法及编程_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

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 的作用? 答:防止该

2、头文件被重复引用。3. i nclude 与 i nclude “file.h ”的区别?答:前者编译器从标准库路径开始搜索 file.h ,而后者编译器从用户的工作路径开始搜索 file.h 。4. 在 C+ 程序中调用被 C 编译器编译后的函数,为什么要加extern “C ”?答: extern 是 C/C+ 语言中表明函数和全局变量作用范围(可见性)的关键字,其声明的 函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字 extern 声明。5. 面向对象的三个基本特征,并简单叙述之?答: 1)封装:将客观事物抽象成类,每个类

3、对自身的数据和方法实行protection(private,protected,public)2 )继承:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码) 、接口继承(仅使用属性和方法,实现滞后到子类实现) 。 3)多态:允许将子类类型的指针赋值给父类类型的指针。6. 重载( overload) 和重写 (overried ,有的书也叫做“覆盖”)的区别? 答:从定义上来说:重载: 是指允许存在多个同名函数, 而这些函数的参数表不同 (或许参数个数不同,或许参 数类型不同,或许两者都不同) 。重写:是指子类重新定义复类虚函数的方法。 从实现原

4、理上来说:重载: 编译器根据函数不同的参数表, 对同名函数的名称做修饰, 然后这些同名函数就成了 不同的函数。重写: 当子类重新定义了父类的虚函数后, 父类指针根据赋给它的不同的子类指针, 动态的 调用属于子类的该函数, 这样的函数调用在编译期间是无法确定的 (调用的子类的虚函数的 地址无法给出) 。7. 多态的作用?答:主要是两个: 1 )隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用; 2)接口重用,为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的 正确调用。8. 分别写出 BOOL,int,float, 指针类型的变量 a 与“零”的比较语句。答: BOO

5、L :if ( !a ) or if(a)int :if ( a =0)float :const EXPRESSION EXP = 0.000001if ( a -EXP)pointer : if ( a != NULL) or if(a = NULL)9. 请说出 const 与 #define 相比,有何优点?答案: 1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安 全检查。 而对后者只进行字符替换, 没有类型安全检查, 并且在字符替换可能会产生意料不 到的错误。2) 有些集成化的调试工具可以对 const 常量进行调试,但是不能对宏常量进行调试。10.

6、简述数组与指针的区别? 数组要么在静态存储区被创建(如全局数组) ,要么在栈上被创建。指针可以随时指向任意 类型的内存块。(1)修改内容上的差别char a = “ hello ” ;a0 = X;char *p = “ world ”; / 注意 p 指向常量字符串p0 = X; / 编译器不能发现该错误,运行时错误(2)用运算符sizeof可以计算出数组的容量(字节数)。sizeof(p),p为指针得到的是一个指 针变量的字节数,而不是 p 所指的内存容量。 C+/C 语言没有办法知道指针所指的内存容 量,除非在申请内存时记住它。 注意当数组作为函数的参数进行传递时, 该数组自动退化为 同

7、类型的指针。char a = “ hello world ” ;char *p = a;coutendl;= 12= 字节coutendl;= 4= 字节 计算数组和指针的内存容量voidFunc(char a100)coutendl;= 4= 字节而不是 100= 字节11. 变量的声明和定义有什么区别? 答:声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器 , 后面的引用都按 声明的格式。定义其实包含了声明的意思,同时要分配内存空间。12. 解释堆和栈的区别。答:堆( heap )一般由程序员分配释放,若程序员不释放,程序结束时可能由 OS 回 收。注意它与数据结构中的堆是两回

8、事, 分配方式倒是类似于链表。速度比较慢, 而且容易 产生内存碎片 , 不过用起来最方便。栈( stack )由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方 式类似于数据结构中的栈。由系统自动分配,速度较快。但程序员是无法控制的。13. const 的作用是什么 ?答:( 1)可以定义 const 常量(2) const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。14. 下列哪两个是等同的int b;A constint* a = &b; / 指向常量的指针,不能通过指针改变b ,但指针的地址

9、可以改变。B const* int a = &b;/ 指针的地址不可以改变,但可以通过指针改变b 的值C constint* const a = &b; / 指针指向的值,和指针本身的地址都不能改变D intconst* const a = &b;/ 与 c 相同15. 完成程序,实现对数组的降序排序#includevoid 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

10、;iarrayi-1)k=ARRAYi;j=i-1;do arrayj+1=arrayj;j -;while(karrayj&j=0);arrayj+1=k; 16. 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 ;17. 请简述以下两个 for 循环的优缺点( 5 分)1) for (i=0; iif (condition)DoSomething();elseDoOtherthing();2) if (condition)for (i=0

11、; iDoSomething();elsefor (i=0; i 0)*psTo+ = *psFrom+;returnpvTo;19. .C+ 里面如何声明 const void f(void) 函数为 C 程序中的库函数?答:在该函数前添加 extern “ C ”声明。由于编译后的名字不同,C+程序不能直接调用 C函数。20. 请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质: #include #include int main(void)char a30;char *b = (char *)malloc(20 * sizeof(char);printf( “ %

12、dn printf( “ %dn printf( “ %dn printf( “ %dn printf( “ %dn return 0 ;, sizeof(a);, sizeof(b);, sizeof(a3);, sizeof(b+3);, sizeof(*(b+4)答:在 32位系统下(如 WIN32 ),指针长度为 32位。 a 是一个有 30个元素的字符型数组; b 是一个字符串指针;a3是字符型;b+3是指针;*(b+4)是字符型。因此输出:30、4、1、 4、121. C+ 中,关键字 struct 和 class 的区别仅仅在于:struct 定义的类的缺省成员为公有的,而 cl

13、ass 定义的类的缺省成员为私有的22. 头文件的作用是什么 ?答: 1)通过头文件来调用库功能。2)头文件能加强类型安全检查。23. C+ 函数中值的传递方式有哪几种答: C+ 函数的三种传递方式为:值传递、指针传递和引用传递。24. 内存的分配方式的分配方式有几种 ?答: 1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整 个运行期间都存在。例如全局变量。2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行 结束时这些存储单元自动被释放。 栈内存分配运算内置于处理器的指令集中, 效率很高, 但 是分配的内存容量有限。3)从堆上分配,亦称

14、动态内存分配。程序在运行的时候用 malloc 或 new 申请任意多少的 内存,程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由我们决定, 使用非常灵活,但问题也最多。25. 设计函数 intatoi(char *s) 。答: intatoi (char *s)int i = 0,sum = 0,sign; / 输入的数前面可能还有空格或制表符应加判断 while(*s= ”|*s= t )i+;sign = (*s= -)?-1:1;if(*s= -| *s= +)i+;while(*s!= 0)sum = *s- 0 +sum*10;i+;return s

15、ign*sum;26. 编写 strcat 函数 (6分 )已知 strcat 函数的原型是 char *strcat (char *strDest, const char *strSrc);其中 strDest 是目的字符串, strSrc 是源字符串。(1 )不调用 C+/C 的字符串库函数,请编写函数strcat答:char * _cdeclstrcat(char * dst, const char * src)char * cp = dst;while( *cp )cp+; /* find end of dst */while( *cp+ = *src+ ) ; /* Copy src

16、 to end of dst */return(dst ); /* return dst */(2) strcat 能把 strSrc 的内容连接到 strDest ,为什么还要 char * 类型的返回值? 答:方便赋值给其他变量。27. MFC 中 CString 是类型安全类么? 答:不是,其它数据类型转换到 CString 可以使用 CString 的成员函数 Format 来转换28. 函数模板与类模板有什么区别? 答:函数模板的实例化是由编译程序在处理函数调用时自动完成的, 而类模板的实例化必须 由程序员在程序中显式地指定。29. 写一个“标准”宏 MIN ,这个宏输入两个参数并返

17、回较小的一个。答: #define MIN(A,B) (A) = (B) ? (A) : (B)宏的副作用(与某些函数的混淆) :least =MIN(*p+, b) 。宏定义 #define MIN(A,B) (A) = (B) ? (A) : (B)对 MIN(*p+, b) 的作用结果是:(*p+) = (b) ? (*p+) : (*p+)30. 嵌入式系统中经常要用到无限循环,你怎么样用 C 编写死循环呢? 答: while(1) 或者 for(;)31. 用变量 a 给出下面的定义a) 一个整型数( An integer )b) 一个指向整型数的指针( A pointer to a

18、n integer )c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to aninteger )d) 一个有 10个整型数的数组( An array of 10 integers )e) 一个有 10 个指针的数组,该指针是指向一个整型数的(An array of 10 pointers tointegers )f) 一个指向有 10 个整型数数组的指针( A pointer to an array of 10 integers )that takes an integer as an argument and returns an i

19、nteger )h) 一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer ) 答案是:a) int a; / An integerb) int *a; / A pointer to an integerc) int *a; / A pointer to a pointer to an integerd) int a10; / An array of 10 integerse) in

20、t *a10; / An array of 10 pointers to integersf) int (*a)10; / A pointer to an array of 10 integersg) int (*a)(int); / A pointer to a function a that takes an integer argument and returns an integerh) int (*a10)(int); / An array of 10 pointers to functions that take an integer argument and return an

21、integer32. 1)关键字 static 的作用是什么?答: (1)用于全局变量; ( 2)用于局部变量; (3)用 于函数。2)关键字 const 有什么含意?答:表示常量不可以修改的变量。33. 如何判断一段程序是由 C 编译程序还是由 C+ 编译程序编译的? 答案: #ifdef _cpluspluscoutc+;#elsecoutc;#endif34. 数组aN,存放了 1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数 字. 时间复杂度必须为o(N )函数原型: intdo_dup(int a,int N)答案:如果数就是1 N-1,那么求出aN的和,然后减去1 N

22、-1就行了。(确定数字1-N)S = N * (N-1) / 2;int i;int s = 0;for(i=0;i s += ai;int res = s S;35. 程序由多个模块组成, 所有模块都使用一组标准的包含文件和相同的编译选项。 在这种 情况下,可以将所有包含文件预编译为一个预编译头。char * const p; charconst * p const char *p 上述三个有什么区别?答: char * const p; / 常量指针, p 的值不可以修改char const * p ; /指向常量的指针,指向的常量值不可以改const char *p ; /和 char

23、const *p36. 有1,2,一直到n的无序数组,求排序算法,并且要求时间复杂度为0(n),空间复杂度O(1 ),使用交换 ,而且一次只能交换两个数。#includeint main()int a = 10,6,9,5,2,8,4,7,1,3;intlen = sizeof(a) / sizeof(int);int temp;for(int i = 0; itemp = aai 1;aai - 1 = ai;ai = temp; if ( ai = i + 1) i+;for (int j = 0; jcout,;return 0;37. 写一个函数比较两个字符串str1和str2的大小,

24、若相等返回0 ,若str1大于str2返回1 ,若 str1 小于 str2 返回 1intstrcmp ( const char * src,const char * dst)int ret = 0 ;while( ! (ret = *(unsigned char *)src- *(unsigned char *)dst) & *dst)字符之差为整型+src;+dst;if ( ret 0 )ret = 1 ; return( ret );38. 用预处理指令 #define 声明一个常数,用以表明 1年中有多少秒(忽略闰年问题) 答: #define SECONDS_PER_YEAR (

25、60 * 60 * 24 * 365)UL39. Typedef 在 C 语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理 器做类似的事。例如,思考一下下面的例子:#definedPSstruct s * typedefstruct s * tPS;以上两种情况的意图都是要定义 dPS 和 tPS 作为一个指向结构 s 指针。哪种方法更好呢? (如果有的话)为什么?答: typedef 更好。思考下面的例子:dPS p1,p2;tPS p3,p4;第一个扩展为: struct s * p1, p2;上面的代码定义 pl为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第 二个例子正确地定义了 p3 和 p4 两个指针。40. C 语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?int a = 5, b = 7, c;c = a+b; 答:上面的代码被处理成: c = a+ + b; 因此, 这段代码持行后 a = 6, b = 7, c = 12。41. c

温馨提示

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

评论

0/150

提交评论