本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。 笔试时间90分钟。请考生认真答题,切勿轻视。一、请填写BOOL,float,指针变量与“零值”比较的if语句。(10分)提示:这里“零值”可以是0,,FALSE或者“空指针”。例如int变量n与“零值”比较的if语句为:if(n==0)if(n!=0)以此类推。请写出BOOLflag与“零值”比较的if语句:if(flag)if(!flag)请写出floatx与“零值”比较的if语句:constfloatTEMP=;if(x>-TEMP&&x<TEMP)if(!(x>-TEMP&&x<TEMP))请写出char*p与“零值”比较的if语句:if(NULL==p)if(NULL!=p)二、以下为WindowsNT下的32位C++程序,请计算sizeof的值(10分) charstr[]=“Hello”; char*p=str;intn=10;请计算sizeof(str)=6sizeof(p)=4sizeof(n)=4sizeof(int)=4sizeof(unsigned)=4sizeof(float)=4sizeof(double)=8voidFunc(charstr[100])//这是一个地址{请计算sizeof(str)=4}void*p=malloc(100);请计算sizeof(p)=4三、简答题(25分)1、头文件中的ifndef/define/endif干什么用?防止头文件被重复引用(宏保护作用)2、#include<>和#include“”有什么区别?#include<>,#include””,若没有找到再到系统目录中查询3、const有什么用途?(请至少说明两种)4、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”声明?C++支持函数重载,C不支持函数重载,加入extern“c”可以解决C++和C的名字匹配问题5、请简述以下两个for循环的优缺点//第一个for(i=0;i<N;i++){if(condition)DoSomething();elseDoOtherthing();}//第二个if(condition){for(i=0;i<N;i++)DoSomething();}else{for(i=0;i<N;i++)DoOtherthing();}优点:程序简洁明了,易读缺点:程序循环效率较低,逻辑判断的次数较多优点:程序执行效率高缺点:程序不简洁四、有关内存的思考题(20分)voidGetMemory(char*p)//p==str{p=(char*)malloc(100);//p改变指向}voidTest(void){char*str=NULL;GetMemory(str); strcpy(str,"helloworld");printf(str);}请问运行Test函数会有什么样的结果?答:str==NULL,向NULL地址写数据,严重错误!无结果输出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函数会有什么样的结果?答:没有释放内存空间,可以正确输出结果。MemoryleakvoidTest(void){char*str=(char*)malloc(100); strcpy(str,“hello”); free(str); if(str!=NULL) { strcpy(str,“world”); printf(str);}}请问运行Test函数会有什么样的结果?答:虽然可能可以正确输出结果,但是str是野指针,非常危险五、编写strcpy函数(10分)已知strcpy函数的原型是 char*strcpy(char
C 经典面试题 来自淘豆网m.daumloan.com转载请标明出处.