假设本试题均为Windows NT下的32位C++ 程序。本试题仅用于考查C++/C程序员的基本编程技能,不涉及数据结构、算法,以及深奥的语法。考试成绩能反映出考生的编程质量,以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。笔试时间为90分钟。请考生认真答题,切勿轻视。
一、请计算sizeof表达式和strlen表达式的值。(10分)
解答:
1 13 4 4 4 5 4 不确定 0 4
二、请填写bool、float、指针变量与“零值”比较的if语句。(10分)
提示:这里“零值”可以是0、0.0、FALSE或者“空指针”。 例如,int变量n与“零值”比较的if语句为“if ( n == 0 ); if ( n != 0 );”。依次类推。 请写出bool flag与“零值”比较的if语句: 请写出float x与“零值”比较的if语句: 请写出char *p与“零值”比较的if语句:
解答:
if(flag) if(!flag) const float epc = 1e-6; if(abs(flag - 0)<=epc) if( p == NULL) if(p1!=NULL)
三、简答题。(20分)
1.(1)头文件中的ifndef/define/endif的作用是什么? (2)#include <filename.h>和#include “filename.h” 有什么区别? 2.const有什么用途?(请至少说明两种) 3.在C++程序中调用被C编译器编译后的函数,为什么要加extern "C"声明? 4.请简述以下两个for循环的优缺点。
1.1 : 防止头文件被重复引入 1.2 :<filename.h>优先在系统目录先寻找,'filename.h’优先在当前目录下寻找在文件 2 :const可以定义常量;const定义常函数; 3 :因为C++和C对函数的命名修饰方法不同,加上 extern “C”是为了便于和C++的命名修饰相匹配 4.1 :代码简洁,但是运行效率不高; 4.2 :运行效率高,但代码显得臃肿;
四、有关内存的思考题。(20分)
五、类型转换。(5分)
double d = 100.25;
int x = d;
int *PInt = (int*)&d
请问以下两个输出语句的结果是否相同?为什么?
cout <<x<<endl;
cout<<*pInt<<endl;
六、编写strcpy函数。(10分)
已知strcpy函数的原型是:char* strcpy(char* strDest,const char* strSrc); 其中,strDest是目的字符串,strSrc是源字符串。 (1)不调用C++/C的字符串库函数,请编写函数strcpy: (2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?
七、编写类String的普通与拷贝构造函数、析构函数以及赋值函数。(25分)
已知类String的原型为: 请编写String的上述4个基本函数。
|