一、请填写 BOOL,float,指针变量 与“零值”比较的 if 语句。 提示:这里“零值”可以是 0,0,0,FALSE 或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为: if(n==0) if(n!=0) 以此类推。 请写出 BOOL flag 与“零值”比较的 if 语句:_______________ 请写出 float x 与“零值”表较的 if 语句: _______________ 请写出 char *p 与“零值”比较的 if 语句: _______________ 二、以下为 Windows NT 下的 32 位 C++ 程序,请计算 sizeof 的值 char str[]="Hello" char *p=str int n=10; 请计算: sizeof(str)=_____ sizeof( p )=_____ sizeof( n )=_____ void func (char str[100]) 请计算 sizeof(str)=_____ void *p=malloc(100) 请计算 sizeof( p )=_____ 三、简答题 1、头文件的 ifndef / define / endif 干什么用? 2、#include 和 #include"filename.h" 有什么区别? 3、const 有什么用途?(请至少说明两种) 4、在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”申明? 四、有关内存的思考题 void GetMemory(char *p) { p=(char *)malloc(100); } void Test(void) { char *str=null; GetMemory(str); strcpy(str,"hello world"); printf(str); } 请问运行 Test 函数会有什么结果? 答:__________________________ void GetMemory(char **p,int num) { *p=(char *)malloc(num); } void Test(void) { char *str=NULL; GetMemory(&str,100);strcpy(str,"hello") printf(str); } 请问运行 Test 函数会有什么样的结果?答:__________________________ void Test(void) { char *str=(char *)malloc(100); strcpy(str,"hello"); free(str); if(str != NULL) { strcpy(str,"world"); printf(str); } } 请问运行 Test 函数会有什么样的结果?答:__________________________ 五、编写 strcpy 函数 已知 strcpy 函数的原形是:char *strcpy(char *strDest,const char *strSrc); 其中 strDest 是目的字符串,strSrc 是源字符串。 (1)不调用 C++/C 的字符串库函数,请编写汉书 strcpy (2)strcpy 能把 strSrc 的内容复制到 strDest ,为什么还要 char * 类型的返回值? 六、编写类 String 的构造函数、析构函数和赋值函数 已知类 String 的原形为: class String { public: string(const char *str=NULL); //普通构造函数 string(const String &other); //拷贝构造函数 ~String(void); //析构函数 String & operate=(const String &other); //赋值函数 pravite: char *m_data; //用于保存字符串 }; 请编写 String 的上述 4 个函数。
答案:
请写出 BOOL flag 与“零值”比较的 if 语句。(3分)标准答案: if ( flag ) if ( !flag )如下写法均属不良风格,不得分。 if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0) 请写出 float x 与“零值”比较的 if 语句。(4分)标准答案示例:const float EPSINON = 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 (!) 二、以下为Windows NT下的32位C 程序,请计算sizeof的值(10分) char str[] = “Hello” ; char *p = str ;int n = 10;请计算sizeof (str ) = 6 (2分) sizeof ( p ) = 4 (2分) sizeof ( n ) = 4 (2分)void Func ( char str[100]){请计算sizeof( str ) = 4 (2分)}void *p = malloc( 100 );请计算sizeof ( p ) = 4 (2分)三、简答题(25分)1、头文件中的 ifndef/define/endif 干什么用?(5分)答:防止该头文件被重复引用。2、#include 和 #include “filename.h” 有什么区别?(5分)答:对于#include ,编译器从标准库路径开始搜索 filename.h 对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h3、const 有什么用途?(请至少说明两种)(5分)答:(1)可以定义 const 常量(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。4、在C 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”? (5分)答:C 语言支持函数重载,C语言不支持函数重载。函数被C 编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C 编译器则会产生像_foo_int_int之类的名字。C 提供了C连接交换指定符号extern“C”来解决名字匹配问题。5、请简述以下两个for循环的优缺点(5分)for (i=0; i