c/c++笔试题目(林锐)

来源:互联网 发布:xnview mac 中文版 编辑:程序博客网 时间:2024/06/09 22:25

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 ) 
以此类推。

 
请写出 BOOL flag 与“零值”比较的 if 语句:

 
请写出 float x 与“零值”比较的 if 语句:

 
请写出 char *p 与“零值”比较的 if 语句:

 
 
二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分) 
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 ) =

 
三、简答题(25分) 
1、头文件中的 ifndef/define/endif 干什么用?

 
2、#include <filename.h> 和 #include “filename.h” 有什么区别?

 
3、const 有什么用途?(请至少说明两种)

 
4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?

 
5、请简述以下两个for循环的优缺点

// 第一个 
for (i=0; i<N; i++) 

if (condition) 
DoSomething(); 
else 
DoOtherthing(); 
}

// 第二个 
if (condition) 

for (i=0; i<N; i++) 
DoSomething(); 

else 

for (i=0; i<N; i++) 
DoOtherthing(); 
}

优点: 
缺点: 
优点: 
缺点:

 
四、有关内存的思考题(20分) 
void GetMemory(char *p) 

p = (char *)malloc(100); 

void Test(void) 

char *str = NULL; 
GetMemory(str); 
strcpy(str, "hello world"); 
printf(str); 
}

请问运行Test函数会有什么样的结果? 
答:

char *GetMemory(void) 

char p[] = "hello world"; 
return p; 
}

void Test(void) 

char *str = NULL; 
str = GetMemory(); 
printf(str); 
}

请问运行Test函数会有什么样的结果? 
答:

 
Void GetMemory2(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函数(10分) 
已知strcpy函数的原型是char *strcpy(char *strDest, const char *strSrc); 
其中strDest是目的字符串,strSrc是源字符串。 
(1)不调用C++/C的字符串库函数,请编写函数 strcpy

 
(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?

 
 
六、编写类String的构造函数、析构函数和赋值函数(25分) 
已知类String的原型为:
class String 

public: 
String(const char *str = NULL); // 普通构造函数 
String(const String &other); // 拷贝构造函数 
~ String(void); // 析构函数 
String & operate =(const String &other); // 赋值函数 
private: 
char *m_data; // 用于保存字符串 
};
请编写String的上述4个函数。

顽主 评论于 2006-10-17 22:27
# re: c++面试题  回复     
附录C :C++/C试题的答案与评分标准
 
一、请填写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 <filename.h> 和 #include “filename.h” 有什么区别?(5分)
答:对于#include <filename.h> ,编译器从标准库路径开始搜索 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”来解决名字匹配问题。
 
5、请简述以下两个for循环的优缺点(5分)
for (i=0; i<N; i++) 
{
if (condition)
DoSomething();
else
DoOtherthing();

if (condition) 
{
for (i=0; i<N; i++)
DoSomething();
}
else
{
for (i=0; i<N; i++)
DoOtherthing();
}
优点:程序简洁 
缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。 
优点:循环的效率高 
缺点:程序不简洁

 
四、有关内存的思考题(每小题5分,共20分)
void GetMemory(char *p) 
{
p = (char *)malloc(100);
}
 
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
请问运行Test函数会有什么样的结果?
答:程序崩溃。因为GetMemory并不能
传递动态内存, Test函数中的 str一
直都是 NULL。
strcpy(str, "hello world");
将使程序崩溃。 
char *GetMemory(void) 
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?
答:可能是乱码。 因为GetMemory返回的
是指向“栈内存”的指针,该指针的地址
不是 NULL,但其原现的内容已经被清
除,新内容不可知。
void GetMemory2(char **p, int num) 
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test函数会有什么样的结果?
答: (1)能够输出hello (2)内存泄漏 
void Test(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, 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++) != ‘’ ) // 2分 NULL ;
return address ; // 2分
}
 
(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?
答:为了实现链式表达式。 // 2分
例如 int length = strlen( strcpy( strDest, “hello world”) );
 
 
六、编写类String的构造函数、析构函数和赋值函数(25分)
已知类String的原型为:
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String & operate =(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
请编写String的上述4个函数。
 
标准答案:
// String的析构函数
String::~String(void) // 3分
{
delete [] m_data; // 由于m_data是内部数据类型,也可以写成 delete m_data;
}
 
//String的普通构造函数
String::String(const char *str) // 6分
{
if(str==NULL)
{
m_data = new char[1]; // 若能加 NULL 判断则更好 *m_data = ‘’;
}
else
{
int length = strlen(str);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, str);
}
}
 
// 拷贝构造函数
String::String(const String &other) // 3分
{
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, other.m_data);
}
 
// 赋值函数
String & String::operate =(const String &other) // 13分
{
// (1) 检查自赋值 // 4分
if(this == &other) return *this;
// (2) 释放原有的内存资源 // 3分
delete [] m_data;
// (3)分配新的内存资源,并复制内容 // 3分
int length = strlen(other.m_data);
m_data = new char[length+1];
// 若能加 NULL 判断则更好
strcpy(m_data, other.m_data);
// (4)返回本对象的引用 //3分
return *this;
}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝登录原始密码忘记了怎么办 微信原始密码忘记了怎么办 优酷会员重复交费怎么办 微信解绑手机号密码忘了怎么办 闪银呼呼逾期5天怎么办 忘记淘宝账号和密码怎么办 蘑菇街账号忘了怎么办 台式电脑密码忘记了怎么办 单位社保登陆密码忘记了怎么办 12306的登录密码忘了怎么办 网银支付密码忘了怎么办 邮政网银密码忘了怎么办 12306新注册待核验怎么办 建行网银盾密码忘了怎么办 建行网银登陆密码忘了怎么办 建行网银密码忘了怎么办 建行手机网银密码忘了怎么办 移动宽带账号密码忘了怎么办 移动宽带忘记账号密码怎么办 宽带账号密码忘了怎么办 不知道宽带账号密码怎么办 宽带的账号密码忘记了怎么办 wifi登录名忘记了怎么办 苹果手机微信图纸打不开怎么办 手机qq邮箱文件打不开怎么办 12360忘记用户名和密码怎么办 刚开店铺没生意怎么办 淘宝账户不符合注销条件怎么办 网易邮箱登录密码忘记了怎么办 q号密码忘记了怎么办 志愿者注册忘记密码和用户名怎么办 w10电脑语言栏不见了怎么办 w10美式键盘没了怎么办 xp电脑开机密码忘记了怎么办 电脑开机密码到期忘记改怎么办 电脑账户数据库密码忘了怎么办 微信不能拍摄了怎么办 华硕笔记本用户名密码忘了怎么办 学信网登录密码用户名搞忘怎么办 电脑密码输入错误会被锁怎么办 电脑被锁机软件设了密码怎么办