完整版经典C语言测试题众多知名企业用作招聘笔试题.docx
- 文档编号:19206269
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:12
- 大小:20.48KB
完整版经典C语言测试题众多知名企业用作招聘笔试题.docx
《完整版经典C语言测试题众多知名企业用作招聘笔试题.docx》由会员分享,可在线阅读,更多相关《完整版经典C语言测试题众多知名企业用作招聘笔试题.docx(12页珍藏版)》请在冰豆网上搜索。
完整版经典C语言测试题众多知名企业用作招聘笔试题
一个很牛的人出的被众多知名IT企业用作面试题的看似很简单C语言测试题
C++/C试题
本试题仅用于考查C++/C程序员的基本编程技能。
内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。
考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。
笔试时间90分钟。
请考生认真答题,切勿轻视。
一、请填写BOOL,float,指针变量与“零值”比较的if语句。
(10分)
提示:
这里“零值”可以是0,0.0,FALSE或者“空指针”。
例如int变量n与“零值”比较的if语句为:
if(n==0)
if(n!
=0)
以此类推。
请写出BOOLflag与“零值”比较的if语句:
请写出floatx与“零值”比较的if语句:
请写出char*p与“零值”比较的if语句:
二、以下为WindowsNT下的32位C++程序,请计算sizeof的值(10分)
charstr[]=“Hello”;
char*p=str;
intn=10;
请计算
sizeof(str)=
sizeof(p)=
sizeof(n)=
voidFunc(charstr[100])
{
请计算
sizeof(str)=
}
void*p=malloc(100);
请计算
sizeof(p)=
三、简答题(25分)
1、头文件中的ifndef/define/endif干什么用?
2、#include
3、const有什么用途?
(请至少说明两种)
4、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”声明?
5、请简述以下两个for循环的优缺点
//第一个
for(i=0;i { if(condition) DoSomething(); else DoOtherthing(); } //第二个 if(condition) { for(i=0;i DoSomething(); } else { for(i=0;i DoOtherthing(); } 优点: 缺点: 优点: 缺点: 四、有关内存的思考题(20分) voidGetMemory(char*p) { p=(char*)malloc(100); } voidTest(void) { char*str=NULL; GetMemory(str); strcpy(str,"helloworld"); printf(str); } 请问运行Test函数会有什么样的结果? 答: char*GetMemory(void) { charp[]="helloworld"; returnp; } voidTest(void) { char*str=NULL; str=GetMemory(); printf(str); } 请问运行Test函数会有什么样的结果? 答: VoidGetMemory2(char**p,intnum) { *p=(char*)malloc(num); } voidTest(void) { char*str=NULL; GetMemory(&str,100); strcpy(str,"hello"); printf(str); } 请问运行Test函数会有什么样的结果? 答: voidTest(void) { char*str=(char*)malloc(100); strcpy(str,“hello”); free(str); if(str! =NULL) { strcpy(str,“world”); printf(str); } } 请问运行Test函数会有什么样的结果? 答: 五、编写strcpy函数(10分) 已知strcpy函数的原型是 char*strcpy(char*strDest,constchar*strSrc); 其中strDest是目的字符串,strSrc是源字符串。 (1)不调用C++/C的字符串库函数,请编写函数strcpy 2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值? 六、编写类String的构造函数、析构函数和赋值函数(25分) 已知类String的原型为: classString { public: String(constchar*str=NULL);//普通构造函数 String(constString&other);//拷贝构造函数 ~String(void);//析构函数 String&operate=(constString&other);//赋值函数 private: char*m_data;//用于保存字符串 }; 请编写String的上述4个函数。 附录C: C++/C试题的答案与评分标准 一、请填写BOOL,float,指针变量与“零值”比较的if语句。 (10分) 请写出BOOLflag与“零值”比较的if语句。 (3分) 标准答案: if(flag) if(! flag) 如下写法均属不良风格,不得分。 if(flag==TRUE) if(flag==1) if(flag==FALSE) if(flag==0) 请写出floatx与“零值”比较的if语句。 (4分) 标准答案示例: constfloatEPSINON=0.00001; if((x>=-EPSINON)&&(x<=EPSINON) 不可将浮点变量用“==”或“! =”与数字比较,应该设法转化成“>=”或“<=”此类形式。 如下是错误的写法,不得分。 if(x==0.0) if(x! =0.0) 请写出char*p与“零值”比较的if语句。 (3分) 标准答案: if(p==NULL) if(p! =NULL) 如下写法均属不良风格,不得分。 if(p==0) if(p! =0) if(p) if(! ) 二、以下为WindowsNT下的32位C++程序,请计算sizeof的值(10分) charstr[]=“Hello”; char*p=str; intn=10; 请计算 sizeof(str)=6(2分) sizeof(p)=4(2分) sizeof(n)=4(2分) voidFunc(charstr[100]) { 请计算 sizeof(str)=4(2分) } void*p=malloc(100); 请计算 sizeof(p)=4(2分) 三、简答题(25分) 1、头文件中的ifndef/define/endif干什么用? (5分) 答: 防止该头文件被重复引用。 2、#include (5分) 答: 对于#include 对于#include“filename.h”,编译器从用户的工作路径开始搜索filename.h 3、const有什么用途? (请至少说明两种)(5分) 答: (1)可以定义const常量 (2)const可以修饰函数的参数、返回值,甚至函数的定义体。 被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。 4、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”? (5分) 答: C++语言支持函数重载,C语言不支持函数重载。 函数被C++编译后在库中的名字与C语言的不同。 假设某个函数的原型为: voidfoo(intx,inty); 该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。 C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。 5、请简述以下两个for循环的优缺点(5分) for(i=0;i { if(condition) DoSomething(); else DoOtherthing(); } if(condition) { for(i=0;i DoSomething(); } else { for(i=0;i DoOtherthing(); } 优点: 程序简洁 缺点: 多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。 优点: 循环的效率高 缺点: 程序不简洁 四、有关内存的思考题(每小题5分,共20分) voidGetMemory(char*p) { p=(char*)malloc(100); } voidTest(void) { char*str=NULL; GetMemory(str); strcpy(str,"helloworld"); printf(str); } 请问运行Test函数会有什么样的结果? 答: 程序崩溃。 因为GetMemory并不能传递动态内存, Test函数中的str一直都是NULL。 strcpy(str,"helloworld");将使程序崩溃。 char*GetMemory(void) { charp[]="helloworld"; returnp; } voidTest(void) { char*str=NULL; str=GetMemory(); printf(str); } 请问运行Test函数会有什么样的结果? 答: 可能是乱码。 因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原现的内容已经被清除,新内容不可知。 voidGetMemory2(char**p,intnum) { *p=(char*)malloc(num); } voidTest(void) { char*str=NULL; GetMemory(&str,100); strcpy(str,"hello"); printf(str); } 请问运行Test函数会有什么样的结果? 答: (1)能够输出hello (2)内存泄漏 voidTest(void) { char*str=(char*)malloc(100); strcpy(str,“hello”); free(str); if(str! =NULL) { strcpy(str,“world”); printf(str); } } 请问运行Test函数会有什么样的结果? 答: 篡改动态内存区的内容,后果难以预料,非常危险。 因为free(str);之后,str成为野指针, if(str! =NULL)语句不起作用。 五、编写strcpy函数(10分) 已知strcpy函数的原型是 char*strcpy(char*strDest,constchar*strSrc); 其中strDest是目的字符串,strSrc是源字符串。 (1)不调用C++/C的字符串库函数,请编写函数strcpy char*strcpy(char*strDest,constchar*strSrc); { assert((strDest! =NULL)&&(strSrc! =NULL));//2分 char*address=strDest;//2分 while((*strDest++=*strSrc++)! =‘\0’)//2分 NULL; returnaddress;//2分 } (2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值? 答: 为了实现链式表达式。 //2分 例如intlength=strlen(strcpy(strDest,“helloworld”)); 六、编写类String的构造函数、析构函数和赋值函数(25分) 已知类String的原型为: classString { public: String(constchar*str=NULL);//普通构造函数 String(constString&other);//拷贝构造函数 ~String(void);//析构函数 String&operate=(constString&other);//赋值函数 private: char*m_data;//用于保存字符串 }; 请编写String的上述4个函数。 标准答案: //String的析构函数 String: : ~String(void)//3分 { delete[]m_data; //由于m_data是内部数据类型,也可以写成deletem_data; } //String的普通构造函数 String: : String(constchar*str)//6分 { if(str==NULL) { m_data=newchar[1];//若能加NULL判断则更好 *m_data=‘\0’; } else { intlength=strlen(str); m_data=newchar[length+1];//若能加NULL判断则更好 strcpy(m_data,str); } } //拷贝构造函数 String: : String(constString&other)//3分 { intlength=strlen(other.m_data); m_data=newchar[length+1];//若能加NULL判断则更好 strcpy(m_data,other.m_data); } //赋值函数 String&String: : operate=(constString&other)//13分 { // (1)检查自赋值//4分 if(this==&other) return*this; // (2)释放原有的内存资源//3分 delete[]m_data; //(3)分配新的内存资源,并复制内容//3分 intlength=strlen(other.m_data); m_data=newchar[length+1];//若能加NULL判断则更好 strcpy(m_data,other.m_data); //(4)返回本对象的引用//3分 return*this; } 首先请做附录B的C++/C试题(不要看答案),考查自己的编程质量究竟如何。 然后参照答案严格打分。 (1)如果你只得了几十分,请不要声张,也不要太难过。 编程质量差往往是由于不良习惯造成的,与人的智力、能力没有多大关系,还是有药可救的。 成绩越差,可以进步的空间就越大,中国不就是在落后中赶超发达资本主义国家吗? 只要你能下决心改掉不良的编程习惯,第二次考试就能及格了。 (2)如果你考及格了,表明你的技术基础不错,希望你能虚心学习、不断进步。 如果你还没有找到合适的工作单位,不妨到上海贝尔试一试。 (3)如果你考出85分以上的好成绩,你有义务和资格为你所在的团队作“C++/C编程”培训。 希望你能和我们多多交流、相互促进。 半年前我曾经发现一颗好苗子,就把他挖到我们小组来。 (4)如果你在没有任何提示的情况下考了满分,希望你能收我做你的徒弟。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 经典 语言 测试 众多 知名企业 用作 招聘 笔试