C基础笔试题及答案_第1页
C基础笔试题及答案_第2页
C基础笔试题及答案_第3页
免费预览已结束,剩余5页可下载查看

下载本文档

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

文档简介

1、C+根底笔试题及答案C+根底笔试题及答案篇11编写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+) !=头e文件nt中mpptr ;2.的 ifndef/define/endif 的作用 ?

2、答:防止该头文件被重复引用。3. #i nclude与#i nclude“file的i区别?答:前者编译器从标准库路径开始搜索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,intfloat指针类型的变量a与 零的比拟语句。答:BOOL :if ( !a ) or if(a)int :if

5、( a =0)float :const EXPRESSION EXP = O.OOOOOlif ( a -EXP)pointer : if ( a != NULL) or if(a = NULL)请说出 const 与#defi ne相比,有何优点?答案:1) con st常量有数据类型,而宏常量 没有数据类型。编译器可以对前者进行类型平安检查。而对后者只进行字符替换,没有类型平安检查,并且在字符替换 可能会产生意料不到的错误。2) 有些集成化的调试工具可以对 const 常量进行调试,但是不能 对宏常量进行调试。10.简述数组与指针的区别 ?数组要么在静态存储区被创立 (如全局数组),要么在

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

7、要是告诉编译器 ,后面的引用都按声明的格式。定义其实包含了声明的意思 ,同时要分配内存空间。2. 解释堆和栈的区别。答:堆(heap)一般由程序员分配释放,假设程序员不释放,程序 结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 速度比拟慢,而且容易产生内存碎片 ,不过用起来最方便。栈(stack)由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 由系统自动分配,速度较快。 但程序员是无法控制的。3. const的作用是什么?答:(1)可以定义co nst常量(2)c on st可以修 饰函数的参数、返回值,甚至函数的定义体

8、。被con st修饰的东西都受到强制保护,可以预防意外的变动,能提 高程序的健壮性。4. 以下哪两个是等同的 int b;A constint* a = &b; / 指向常量的指针, 不能通过指针改变b,但指针的地址可以改变。B const* int a = &b;/ 指针的地址不可以改变,但可以通过指针改 变 b 的值 C constint* const a = &b; /指针指向的值,和指针本身的地址 都不能改变D in tco nst* con st a = &b;与c相同5.完成程序,实现对数 组的降序排序 #includevoid sort(int array );int main(

9、)int array=45, 56, 76, 234, 1, 34, 23, 2, 3; /数字任/意给出 sort( array );return 0;void sort(intarray )inti,j,k;for(i=1;iarrayi-1)k=ARRA Yi;j=i-1;doarrayj+1=arrayj ;while(karrayj&j=O);arr ayj+1=k;inti=(j=4,k=8,l=16,m=32); printf(“ %i)d; , 输 出 是 多 少 ? 答 : 相 当 于i=j=4;i=k=8;i=l=16;i=m=32;故最后i=32;7.请简述以下两个for

10、循环的优缺 点 (5 分 )1)for (i=0; i if (condition)DoSomething();elseDoOtherthing();2)if (condition)for (i=0; i DoSomething();elsefor (i=0; i 0)*psTo+ = *psFrom+;returnpvTo;8 .C+里面如何声明 const void f(void)函数为 C 程序中的库函数?答:在该函数前添加extern 声明。由于编译后的名字不同,C+程序不能直接调用C函数。9. 请写出下面代码在32位平台上的运行结果,并说明sizeof的性 质 : #include#

11、includeint main(void)char a30;char *b = (char *)malloc(20 * sizeof(char);printf( n, “s%izdeof(a);printf( n, “%d sizeof(b);printf( n, “%dsizeof(a3);printf( n,“%dsizeof(b+3);printf( n, size%ofd(*(b+4);return 0 ;答:在 32 位系统下 (如 WIN32),指针长度为32位。a是一个有30个元素的字符型数组;b是一个字符串指针;a3是字 符型;b+3是指针;*(b+4)是字符型。因此输出:30

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

13、负责在何时用 free 或 delete 释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。5. 设计函数 intatoi(char *s) 。答: intatoi (char *s)int i = 0,sum = 0,sign; /输入的数前面可能还有 空 格 或 制 表 符 应 加 判 断 while(*s=|*s= t )i+;sign= (*s=-?-1:1;if(*s=-ll *s= +)i+;while(*s!:0 )sum =*s- O +sum*1O;i+;retuign*sum;6.编写 strcat函数(6分) strcat 函数的原型是 char *str

14、cat (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 of dst */return(dst ); /* return dst */(2)strcat 能把 strSrc的内容连接到 strDest, 为什么还要 char * 类型的返回值 ?答:方便赋值给其他变量。7. MFC中CString是类型平安类么?答:不是,其它数据类型转换 到CString可以使用CString的成员函数Format来转换8.函数模板与类 模板有什么区别 ?答:函数模板的实例化是由编译程序在处理函数调

温馨提示

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

评论

0/150

提交评论