收藏 分享(赏)

C、C++笔试题基础概念、算法及编程.doc

上传人:精品资料 文档编号:9967915 上传时间:2019-09-23 格式:DOC 页数:12 大小:60KB
下载 相关 举报
C、C++笔试题基础概念、算法及编程.doc_第1页
第1页 / 共12页
C、C++笔试题基础概念、算法及编程.doc_第2页
第2页 / 共12页
C、C++笔试题基础概念、算法及编程.doc_第3页
第3页 / 共12页
C、C++笔试题基础概念、算法及编程.doc_第4页
第4页 / 共12页
C、C++笔试题基础概念、算法及编程.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

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)封装:将客观事物抽象成类,每个类对自身的数据和方法实行 pro

3、tection(private, 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)floa

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

7、ARRAYi;j=i-1;doarrayj+1=arrayj;j ;while(karrayjarrayj+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; iDoSomething();elsefor (i=0; i 0)*

8、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(“%dn”, sizeof(a);printf(“%dn”, sizeof(b);pri

9、ntf(“%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 的区别仅仅在于:struct 定义的类的缺省成员为公有的,而 class 定义的类的缺省成员为私有的 ;22. 头文件的作用是什么?答:1)通过头文件来调用库功能。2)

10、头文件能加强类型安全检查。23. C+函数中值的传递方式有哪几种 ?答:C+函数的三种传递方式为:值传递、指针传递和引用传递。24. 内存的分配方式的分配方式有几种 ?答:1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3)从堆上分配,亦称动态内存分配。程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员自己负责在何时用 free 或

11、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 sign*sum;26. 编写 strcat 函数(6分)已知 strcat 函数的原型是 char *strcat (char *strDest,

12、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 of dst */return(dst ); /* return dst */(2)strcat 能把 strSrc 的内容连接到 st

13、rDest,为什么还要 char * 类型的返回值?答:方便赋值给其他变量。27. MFC 中 CString 是类型安全类么?答:不是,其它数据类型转换到 CString 可以使用 CString 的成员函数 Format 来转换28.函数模板与类模板有什么区别?答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。29. 写一个“标准”宏 MIN,这个宏输入两个参数并返回较小的一个。答:#define MIN(A,B) (A) 0 )ret = 1 ;return( ret );38. 用预处理指令#define 声明一个常数,用以表明

14、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;上面

15、的代码定义 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 是指向字符串常量的字符指针sizeof(*ss) 结果 1 /*ss 是第一个字符char ss = “0123456789;s

16、izeof(ss) 结果 11 /ss 是数组,计算到 0位置,因此是101sizeof(*ss) 结果 1 /*ss 是第一个字符char ss100 = “0123456789;sizeof(ss) 结果是100 /ss 表示在内存中的大小 1001intss100 = “0123456789;sizeof(ss) 结果 400 /ss 表示再内存中的大小 1004char q=”abc”;char p=”an”;sizeof(q),sizeof(p),strlen(q),strlen(p); 结果是 4 3 3 242.冒泡法:/从小到大排序,比较 n 次,每次拿一个从头比到尾void

17、bubble_sort(int array,int n)inti,j,temp;for(i = 0; i arrayj+1) temp = arrayj; arrayj = arrayj+1; arrayj+1 = temp; printf(“%d “, arrayj);return;选择排序法:main()int a10;inti,j,t,k;for ( i = 0; i a j )k = j; /前进if (k!=i) t = a i ; a i = a k ; a k = t; /* t 发放奖品*/for( i = 9; i = 0; i )printf(“%4d”,a i ); /*显示排序后的结果 */

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报