C软件工程师笔试题 .docx
《C软件工程师笔试题 .docx》由会员分享,可在线阅读,更多相关《C软件工程师笔试题 .docx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结一、请填写 BOOL , float,指针变量 与“零值”比较的if 语句。( 10 分)提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。例如int 变量 n 与“零值”比较的if 语句为: if n = 0 if n .= 0 以此类推。请写出BOOL flag 与“零值”比较的if 语句:标准答案: if flag if .flag 如下写法均属不良风格,不得分。if flag = TRUE if flag = 1 if flag = FALSE if flag = 0请写出 float x 与“零值”比较的if 语句:标准答案示例:const flo
2、at EPSINON = 0.00001。 if x = - EPSINON & x =”或 “=”此类形式。如下是错误的写法,不得分。 if x= 0.0 if x .= 0.0请写出 char *p 与“零值”比较的if 语句:标准答案:if p = NULLif p .= NULL如下写法均属不良风格,不得分。if p = 0 if p .= 0 if p if .二、以下为 Windows NT 下的 32 位 C+ 程序,请运算 sizeof 的值( 10 分) char str =“ H。elcloha”r *p = str 。 int n = 10 。sizeof str = 6
3、sizeof p = 4sizeof n = 4 void Func char str100 请运算 sizeof str = 4 void *p = malloc 100 。请运算 sizeof p = 4三、简答题( 25 分)1、头文件中的 ifndef/define/endif干什么用?防止该头文件被重复引用2、#include 和 #include “ filename.h ” 有什么区分?答: 对 于 include, 编 译 器从 标 准 库 路径开 始 搜 索filename.h对于 i nclude“ filename.h ,”编译器从用户的工作路径开头搜寻filename.
4、h3、const 有什么用途?(请至少说明两种)答:(1)可以定义const常量(2) const可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制爱惜,可以预防意外的变动,能提高程序的健壮性。4、在 C+ 程序中调用被 C 编译器编译后的函数,为什么要加extern “ C”声明?答: C+ 语言支持函数重载, C 语言不支持函数重载。函数被C+ 编译后在库中的名字与C 语言的不同。假设某个函数的原型为:voidfoointx,inty。该 函 数 被 C编 译 器 编 译 后 在 库 中 的 名 字 为 _foo , 而C+ 编 译 器 就 会 产 生 像 _
5、foo_int_int之 类 的 名 字 。C+ 供应了 C 连接交换指定符号extern “ C来”解决名字匹配问题。5、请简述以下两个for 循环的优缺点for i=0 。 iN 。 i+ if condition DoSomething 。else DoOtherthing 。/ 其次个if condition for i=0 。 iN 。 i+ DoSomething 。 else for i=0 。 iN 。 i+DoOtherthing 。 优点:程序简洁缺点:多执行了N-1 次规律判定,并且打断了循环 “流水线 ”作业,使得编译器不能对循环进行优化处理,降低了效率。优点:循环的效
6、率高缺点:程序不简洁四、有关内存的摸索题(20 分)void GetMemorychar *p可编辑资料 - - - 欢迎下载精品名师归纳总结 p = char *malloc100。void Testvoid char *str = NULL。GetMemorystr 。strcpystr, hello world。printfstr 。 请问运行 Test 函数会有什么样的结果?答: 程序崩溃, getmemory 中的 malloc 不能返回动态内存,free()对 str 操作很危险博主: getmemory 中 p 是形参,是一个指针变量,getmemorystr 调用后,传入的是指
7、针变量储存的对象的址,p=char * malloc100实际上是把申请的动态内存空间的首的址付给p 指向的的址(即str 指向的的址 null ),这个是错误的。应当修改成指向指针的指针 void getmemorychar *p,这样 malloc 返回的的址付给 *p (即 str 变量本身)。char *GetMemoryvoid char p = hello world。return p。 void Testvoid char *str = NULL。str = GetMemory 。printfstr 。 请问运行 Test 函数会有什么样的结果?答:可能是乱码。由于 GetMem
8、ory 返回的是指向 “栈内存 ”的指针,该指针的的址不是NULL ,但其原现的内容已经被清除,新内容不行知。RetMenory 执行完毕, p 资源被回收,指向未知的址。返回的址,str的内容应是不行推测的 ,打印的应该是 str的的址Void GetMemory2char *p, int num p = char *mallocnum。 void Testvoid char *str = NULL。GetMemory&str, 100 。strcpystr, hello 。printfstr 。 请问运行 Test 函数会有什么样的结果?答:(1)能够输出hello(2)内存泄漏void
9、Testvoid char *str = char * malloc100。strcpystr,“ 。hello”freestr。ifstr .= NULL strcpystr,“ 。world ”printfstr 。 请问运行 Test 函数会有什么样的结果?答 : 篡 改 动 态 内 存 区 的 内 容 , 后 果 难 以 预 料 , 非 常 危 险 。因 为 freestr。 之 后 , str成 为 野 指 针 , ifstr .= NULL 语句不起作用。五、已知 strcpy 函数的原型是 char *strcpychar *strDest, const char *strSrc
10、。其中 strDest 是目的字符串, strSrc 是源字符串。( 1)不调用 C+/C 的字符串库函数,请编写函数strcpy答:char*my_strcpychar*strdest,constchar*strsrcassertstrdest.=NULL&strsrc.=NULLchar*address=strdest。while*strdest+=*strsrc+.=NULLreturnaddress。可编辑资料 - - - 欢迎下载精品名师归纳总结( 2) strcpy 能把 strSrc 的内容复制到strDest,为什么仍要 char * 类型的返回值?答:为了实现链式表达式。/
11、2 分例如 int length = strlen strcpy strDest,“hello。world” 六、编写类 String 的构造函数、析构函数和赋值函数(25 分) 已知类 String 的原型为:class String public:Stringconst char *str = NULL。 / 一般构造函数Stringconst String &other 。 / 拷贝构造函数 Stringvoid 。 / 析构函数String & operate =const String &other。 / 赋值函数private:char *m_data 。 / 用于储存字符串 。请
12、编写 String 的上述 4 个函数。/一般构造函数String:Stringconstchar*strifstr=NULLm_data=newchar1 。/得 分 点 : 对 空 字 符 串 自 动 申 请 存 放 结 束 标 志 0 的 空/加分点:对m_data加NULL判断*m_data=0。elseintlength=strlenstr。m_data=newcharlength+1。/如能加NULL判断就更好strcpym_data,str。/ String 的析构函数String:Stringvoiddeletem_data。/或deletem_data。/拷贝构造函数Stri
13、ng:StringconstString&other/得分点:输入参数为const型int length = strlenother.m_data 。m_data=newcharlength+1。/加 分 点 : 对m_data加NULL判 断strcpym_data,other.m_data。/赋值函数String&String:operate=constString&other/得 分 点 : 输 入 参 数 为const型ifthis = &other/得分点:检查自赋值return *this 。可编辑资料 - - - 欢迎下载精品名师归纳总结delete m_data 。/得分点:释
14、放原有的内存资源int length = strlen other.m_data 。m_data = new charlength+1 。/加分点:对 m_data 加 NULL判定strcpy m_data, other.m_data 。return*this。/得 分 点: 返回 本 对象 的引 用编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004 年 12 月 31 日 23 时 59 分 59 秒,就输出2005 年 1 月 1 日 0 时 0 分 0 秒。void ResetTheTimeint *year,int *month,int *date,int
15、 *hour,int*minute,int*secondint dayOfMonth12=31,28,31,30,31,30,31,31,30,31,30,31。if *year 0| *month 12 |*date 31 | *hour 23 |*minute 59| *second 60 return。if *year%400 = 0 | *year%100 .= 0 & *year%4 = 0 dayOfMonth1 = 29。if*second = 60*second = 0*minute += 1if*minute = 60*minute = 0*hour += 1if*hour
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C软件工程师笔试题 软件工程师 笔试
限制150内