一、请填写BOOL,float,指针变量与“零值”比较的if语句。(10分)
请写出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.h
3、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”来解决名字匹配问题。
四、编写strcpy函数(10分)
已知strcpy函数的原型是char*strcpy(char*strDest,const char*strSrc);其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C的字符串库函数,请编写函数strcpy
char*strcpy(char*strDest,const char*strSrc);
{
assert((strDest!=NULL)&&(strSrc!=NULL));//2分
char*address=strDest;//2分
while((*strDest++=*strSrc++)!=‘