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

下载本文档

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

文档简介

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的作用?答:防止该头文件被重复引用。3

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

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

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

5、 = 0.000001if ( a < EXP && 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 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。char a = “hello world”;char *p = a;cout<<<endl

7、;="" 12="" 字节 cout<<<endl;="" 4="" 字节 计算数组和指针的内存容量voidFunc(char a100)cout<<<endl;="" 4="" 字节而不是100="" 字节 11.变量的声明和定义有什么区别?答:声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器,后面的引用都按声明的格式。定义其实包含了声明的意思,同时要分配内存空间。12. 解释堆和栈的区别。答:堆(heap

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

9、&b; /指向常量的指针,不能通过指针改变b,但指针的地址可以改变。B const* int a = &b;/ 指针的地址不可以改变,但可以通过指针改变b的值C constint* const a = &b; /指针指向的值,和指针本身的地址都不能改变D intconst* const a = &b;/与c相同15. 完成程序,实现对数组的降序排序#include void sort(int array );int main()int array=45,56,76,234,1,34,23,2,3; /数字任/意给出sort( array );return 0;v

10、oid sort( int array )_inti,j,k;for(i=1;i<=7;i+) if(arrayi>arrayi-1)k=ARRAYi;j=i-1;doarrayj+1=arrayj;j ;while(k>arrayj&&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; i if (conditi

11、on)DoSomething();elseDoOtherthing();2)if (condition)for (i=0; i DoSomething();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

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

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

14、有限。3)从堆上分配,亦称动态内存分配。程序在运行的时候用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+;retu

15、rn sign*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 to end o

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

17、;= (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 an integer)c) 一个指向指针的的指针,它指向的指针是指向一个整

18、型数(A pointer to a pointer to an integer)d) 一个有10个整型数的数组(An array of 10 integers)e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and re

19、turns an integer)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 integer

20、se) int *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 retu

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

22、数就是1N-1,那么求出aN的和,然后减去1N-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 * pconst char *p上述三个有什么区别?答:char * const p; /常量指针,p的值不可以修改char const * p;/指向常量的指针,指向的常量值不可以改const char *p

23、; /和char const *p36. 有1,2,.一直到n的无序数组,求排序算法,并且要求时间复杂度为O(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; i temp = aai 1;aai 1 = ai;ai = temp;if ( ai = i + 1)i+;for (int j = 0; j cout<<<"," return 0

24、;37. 写一个函数比较两个字符串str1和str2的大小,若相等返回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 ; else if ( ret > 0 )ret = 1 ;return( ret );38. 用预

25、处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)答: #define SECONDS_PER_YEAR (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;上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。40. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?int a = 5, b = 7, c;c = a+b;答:上面的代码被处理成:c = a+ + b;因此, 这段代码持行后a = 6, b = 7, c = 12。41. char* ss = “0123456789;sizeof(ss) 结果 4 /ss是指向字

温馨提示

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

评论

0/150

提交评论