创维数字笔试题精华
是当时面创维数字的笔试题,题目比较简单,只涉及到了基本的c语法,没有考到数据结构以及算法,试题在前面说明这套题并不能反映应聘者实际的软件开发及编程能力。
一、请填写bool , float, 指针变量 与“零值”比较的 if 语句。(10分)
请写出 bool flag 与“零值”比较的 if 语句。
if ( flag )
if ( !flag )
请写出 float x 与“零值”比较的 if 语句。
const float epsinon = 0.00001;
if ((x >= - epsinon) & (x <= epsinon)
不可将浮点变量用“”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
请写出 char *p 与“零值”比较的 if 语句。
if (p null)
if (p != null)
二、以下为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
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”来解决名字匹配问题。
四、有关内存的思考题(每小题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( char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完 char *str = null; getmemory( str ); 后的str仍然为null;
二.
char *getmemory(void)
{
char p[] = "hello world";
return p;
}
void test(void)
{
char *str = null;
str = getmemory();
printf(str);
}
请问运行test函数会有什么样的结果?
答:可能是乱码。 char p[] = "hello world";
return p;
的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。
三.
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 )test函数中也未对malloc的内存进行释放。(3)getmemory避免了试题1的问题,传入getmemory的参数为字符串指针的指针,但是在getmemory中执行申请内存及赋值语句
p = (char *) malloc( num );
后未判断内存是否申请成功,应加上: if ( *p null ) {
...//进行申请内存失败处理
}
四.
void test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != null)
{
strcpy(str, “world”);
printf(str);
}
}
请问运行test函数会有什么样的结果?
答:执行 char *str = (char *) malloc(100); 后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上: 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(strnull)
{
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:perate =(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;
}
-
北京的住房公积金提取管理
公积金可以取出来吗?这个得分地区的,不知道你是在哪里。我这有北京的住房公积金提取管理文档。给你截了一段提取流程。第五章提取程序第二十七条住房公积金提取,一般由所在单位代为办理。第二十八条职工符合提取住房公积金条件的`,应提供相应证明材料,所在单位予以...
-
求职面试自我介绍(档案管理专业)
这是一篇档案管理专业毕业生求职面试自我介绍。时间如白驹过隙,四年的学习结束了,在学到了专业知识之后,现在我满怀希望投入到人生的下一个阶段。我是XXXX大学档案学专业的即将毕业的学生,四年的校园生活是我人生的一大转折点。在校园生涯和社会实践生活中我不断...
-
去外企求职面试的成功砝码
去外企求职面试前首先要了解外国文化。外国人的文化习惯和我们中国人有着相当大的差异,如果你将要去一家美国、或德国、或日本的公司面试,而你却对这些差异一无所知的话,这无疑会大大减低你的成功率。以下列举了一去外企求职面试前首先要了解外国文化。外国人的文...
-
面试指南-面试基本方法(三)
五、演讲法面试中要求考生演讲同样是一种较常见的考察方法。这是对面谈法和小组讨论法中考生表现的一个更集中、更直接的测评。这时,没有谈话的对方,没有考官提问,只有听众。考生是讲台上惟一的演员,更可以充分、自主地表现自己的气质、风度、口头表达能力、见解和...