编了一套C++笔试题,在这测一下难度

peimoxu 2008-09-06 09:40:46


以下试题假设环境为Win32、VC6.0开发工具,且代码已包含正确的头文件及命名空间。
时间40分钟

1 下面程序的运行结果是什么。

#define SQR(X) X*X
int main()
{
int a = 2;
int b = 1;
cout << a*SQR(a+b)/SQR(a+b) << endl;
return 0;
}

2 下面程序的运行结果是什么。

int main(void)
{
int a = 0;
if(!(a = 5) || a || (a *= 3))
a *= 2;
cout << ++a << endl;
cout << a++ << endl;
return 0;
}

3 下面程序的运行结果是什么。

int Fun(int a)
{
static int b = 1;
return a * b++;
}
int main(void)
{
cout << Fun(2) * Fun(3);
return 0;
}

4 下面程序运行结果是什么。

struct STest
{
int a;
char c;
};
void Test(char str1[100])
{
char str2[] = "Hello";
char *pStr2 = str2;
STest stest;
cout << sizeof(str1) <<" ";
cout << sizeof(str2) << endl;
cout << sizeof(pStr2) << endl;
cout << strlen(str2) << endl;
cout << strlen(pStr2) << endl;
cout << sizeof(stest) << endl;
}
int main()
{
char p[100];
Test(p);
}

5 下面三条语句有什么区别。

(1)const char * p
(2)char const * p
(3)char * const p

6 下面三个函数的运行结果分别是什么。

void Test1()
{
char *str1="0123456789";
strcpy(str1, "hello");
cout << str1 << endl;
}
void Test2()
{
char string[10];
char *str1="0123456789";
strcpy(string, str1);
cout << str1 << endl;
}
void Test3()
{
char string[5], str1[5];
for(i=0; i<5;i++)
str1[i] ='a';
strcpy(string, str1);
cout << str1 << endl;
}

7 下面程序的运行结果是什么。

struct A{int a;};
void CreateA(A* a)
{
a = new A;
}
int main()
{
A* pA = NULL;
CreateA(pA);
cout << pA->a << endl;
delete pA;
}

8 下面程序的运行结果是什么。

class A
{
public:
virtual void print(void)
{
cout << "A::print()" << endl;
}
};
class B : public A
{
public:
virtual void print(void)
{
cout << "B::print()" << endl;
};
};
class C : public B
{
public:
void print(void)
{
cout << "C::print()" << endl;
}
};
void print(A a)
{
a.print();
}
int main(void)
{
A a, *pa,*pb,*pc;
B b;
C c;

pa=&a;
pb=&b;
pc=&c;

a.print();
b.print();
c.print();

pa->print();
pb->print();
pc->print();

print(a);
print(b);
print(c);

return 0;
}

9 下面代码有什么问题。

int main()
{
vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
array.push_back(2);
//删除array数组中所有的2
vector<int>::iterator iter=array.begin();
for(; itor!=array.end(); ++iter)
{
if(2 == *iter)
array.erase(iter);
}
return 0;
}

10 下面语句中的 “_T()” 的作用是什么。

CString str = _(“Hello”);

11 编写类String的构造函数、析构函数和赋值函数。

已知类String的原型为:
class String
{
public:
// 普通构造函数
String(const char *str = NULL);
// 拷贝构造函数
String(const String &other);
// 析构函数
~String(void);
// 赋值函数
String & operate =(const String &other); private:
// 用于保存字符串
char *m_data;
};

12 简述下面API的做用,写出创建窗口流程,并说明窗口函数是在何时指定的。
RegisterClass
CreateWindow
GetMessage
TranslateMessage
DispatchMessage


...全文
1837 133 打赏 收藏 转发到动态 举报
写回复
用AI写文章
133 条回复
切换为时间正序
请发表友善的回复…
发表回复
hades574fra 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 59 楼 yekoufeng 的回复:]
第二题怎么就与最短路径有关系呢?

第1题的结果是9,但7楼的做法是错的: SQR(a+b)的计算是2*2+1
那a*SQR(a+b)/SQR(a+b)的计算顺序是2*2*2+1/2*2+1=9

应该是这样:2*2+1*2+1/2+1*2+1
这样等于9
[/Quote]
一直没看明白7楼的,知道看到你的,让我想了好久,怎么可能是7楼那样 。无语了
  • 打赏
  • 举报
回复
mark

楼主,是不是全做出来就给money啊,哈哈,跳巢咯
ouyangdongfang 2008-09-09
  • 打赏
  • 举报
回复
唉。。
一般一考完试,东西就都还给老师啦。。
看来,基础很重要啊,原来公司招人也是考这些。。
应该重新翻翻书,再复习一下啦~~
parallel2005 2008-09-08
  • 打赏
  • 举报
回复
回了
red_berries 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 Jinhao 的回复:]
很基础,面试题就应该这样。考察基础 和 做题人的认真态度
[/Quote]
天乐_那由他 2008-09-08
  • 打赏
  • 举报
回复
楼主有认真的态度,不错
zltianhen 2008-09-08
  • 打赏
  • 举报
回复
不错还好
xbt746 2008-09-08
  • 打赏
  • 举报
回复
讨厌宏
Soulic 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 111 楼 ForestDB 的回复:]
7 下面程序的运行结果是什么。

struct A{int a;};
void CreateA(A* a)
{
a = new A;
}
int main()
{
A* pA = NULL;
CreateA(pA);
cout << pA->a << endl;
delete pA;
}
// segmentation fault
// void CreateA(A **a) { *a = new A; } CreateA(&pA);
// void CreateA(A* &a) { a = new A; } CreateA(pA);

[/Quote]
为什么是这样啊,能解释一下吗?谢谢
windriverer 2008-09-08
  • 打赏
  • 举报
回复
什么烂公司啊


iGarlic 2008-09-08
  • 打赏
  • 举报
回复
基础知识很重要,看来笔试前得再翻翻谭浩强的那本C语言
ForestDB 2008-09-08
  • 打赏
  • 举报
回复


以下试题假设环境为Win32、VC6.0开发工具,且代码已包含正确的头文件及命名空间。
时间40分钟

1 下面程序的运行结果是什么。

#define SQR(X) X*X
int main()
{
int a = 2;
int b = 1;
cout << a*SQR(a+b)/SQR(a+b) << endl;
return 0;
}
// 9

2 下面程序的运行结果是什么。

int main(void)
{
int a = 0;
if(!(a = 5) || a || (a *= 3))
a *= 2;
cout << ++a << endl;
cout << a++ << endl;
return 0;
}
// 11
// 11

3 下面程序的运行结果是什么。

int Fun(int a)
{
static int b = 1;
return a * b++;
}
int main(void)
{
cout << Fun(2) * Fun(3);
return 0;
}
// 12

4 下面程序运行结果是什么。

struct STest
{
int a;
char c;
};
void Test(char str1[100])
{
char str2[] = "Hello";
char *pStr2 = str2;
STest stest;
cout << sizeof(str1) <<" ";
cout << sizeof(str2) << endl;
cout << sizeof(pStr2) << endl;
cout << strlen(str2) << endl;
cout << strlen(pStr2) << endl;
cout << sizeof(stest) << endl;
}
int main()
{
char p[100];
Test(p);
}
// 4
// 6
// 4
// 5
// 5
// 8

5 下面三条语句有什么区别。

(1)const char * p // p所指向区域不可修改
(2)char const * p // 同上
(3)char * const p // p不能改变它的指向

6 下面三个函数的运行结果分别是什么。

void Test1()
{
char *str1="0123456789";
strcpy(str1, "hello");
cout << str1 << endl;
}
// segmentation fault
void Test2()
{
char string[10];
char *str1="0123456789";
strcpy(string, str1);
cout << str1 << endl;
}
// 0123456789
// maybe the desired result, but overflowed
void Test3()
{
char string[5], str1[5];
for(i=0; i<5;i++)
str1[i] ='a';
strcpy(string, str1);
cout << str1 << endl;
}
// maybe aaaaa five 'a', but overflowed

7 下面程序的运行结果是什么。

struct A{int a;};
void CreateA(A* a)
{
a = new A;
}
int main()
{
A* pA = NULL;
CreateA(pA);
cout << pA->a << endl;
delete pA;
}
// segmentation fault
// void CreateA(A **a) { *a = new A; } CreateA(&pA);
// void CreateA(A* &a) { a = new A; } CreateA(pA);

8 下面程序的运行结果是什么。

class A
{
public:
virtual void print(void)
{
cout << "A::print()" << endl;
}
};
class B : public A
{
public:
virtual void print(void)
{
cout << "B::print()" << endl;
};
};
class C : public B
{
public:
void print(void)
{
cout << "C::print()" << endl;
}
};
void print(A a)
{
a.print();
}
int main(void)
{
A a, *pa,*pb,*pc;
B b;
C c;

pa=&a;
pb=&b;
pc=&c;

a.print();
b.print();
c.print();

pa->print();
pb->print();
pc->print();

print(a);
print(b);
print(c);

return 0;
}
// A::print()
// B::print()
// C::print()
// A::print()
// B::print()
// C::print()
// A::print()
// A::print()
// A::print()

9 下面代码有什么问题。

int main()
{
vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
array.push_back(2);
//删除array数组中所有的2
vector<int>::iterator iter=array.begin();
for(; itor!=array.end(); ++iter)
{
if(2 == *iter)
array.erase(iter);
}
return 0;
}
// segmentation fault, dut to dynamic change the array during iterating

10 下面语句中的 “_T()” 的作用是什么。

CString str = _(“Hello”);
// unicode and ascii char compatible

11 编写类String的构造函数、析构函数和赋值函数。

已知类String的原型为:
class String
{
public:
// 普通构造函数
String(const char *str = NULL);
// 拷贝构造函数
String(const String &other);
// 析构函数
~String(void);
// 赋值函数
String & operate =(const String &other); private:
// 用于保存字符串
char *m_data;
};
// too long --!!

12 简述下面API的做用,写出创建窗口流程,并说明窗口函数是在何时指定的。
RegisterClass // 注册窗口类,窗口函数在这里指定
CreateWindow // 创建窗口
GetMessage // 从进程的消息队列得到一个消息
TranslateMessage // 转换虚拟按键到字符
DispatchMessage // 发配消息至窗口进程

xiao7cn 2008-09-08
  • 打赏
  • 举报
回复
楼上的,说反了吧?
peimoxu 2008-09-08
  • 打赏
  • 举报
回复
说的一点也没错,能不能给点建议?

[Quote=引用 103 楼 chatbot 的回复:]
这种题目用来应试不错,用来招人。。。。。。。。lz我认为你没什么招人的经验吧?

[/Quote]
野男孩 2008-09-08
  • 打赏
  • 举报
回复
题还不错,不难,很多基本点都查到了。宏展开,短路判断,静态变量生命周期,结构对齐,char指针和char数组的大小,const修饰,常量内存的初始化和不可写特性,继承和多态,循环中使用stl迭代器的变化,Unicode宏,sdk开发基础,基础测试还挺全面的。
peimoxu 2008-09-08
  • 打赏
  • 举报
回复
void Test2()
{
char string[10];
char *str1="0123456789";
strcpy(string, str1);
cout << str1 << endl;
}
在Release下不能正常运行,Debug下可以的
zhuwanglove 2008-09-08
  • 打赏
  • 举报
回复
值得看一遍.
kelvin_2013 2008-09-08
  • 打赏
  • 举报
回复
mark
skyygl 2008-09-08
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

class String
{
public:
// 普通构造函数
String(const char *str = NULL);
// 拷贝构造函数
String(const String &other);
// 析构函数
~String(void);
// 赋值函数
String & operator =(const String &other);
private:
// 用于保存字符串
char *m_data;

friend void print(String& pt);
};

String::String(const char *str/* = NULL*/)
{
if(str!=NULL)
{
m_data = new char[strlen(str)+1];
if(!m_data)
{
cout<<"allocate failed!"<<endl;
exit(0);
}
strcpy(m_data,str);
}
else
m_data = NULL;
}

String::String(const String &other)
{
m_data = new char[strlen(other.m_data)+1];
if(!m_data)
{
cout<<"allocate failed!"<<endl;
exit(0);
}

strcpy(m_data,other.m_data);
}

String::~String()
{
delete []m_data;
}

String& String::operator = (const String &other)
{
m_data = new char[strlen(other.m_data)+1];
if(!m_data)
{
cout<<"allocate failed!"<<endl;
exit(0);
}

strcpy(m_data,other.m_data);

return *this;
}

void print(String& pt)
{
if(pt.m_data!=NULL)
cout<<pt.m_data<<endl;
}

void main()
{
String obj("tetsfjweojfslvsdpa");
String obj1;
obj1 = obj;
print(obj1);
}
czk037 2008-09-08
  • 打赏
  • 举报
回复
除了9题 标准C++外
其它的都会做。。。
哈哈 哈哈
看来我比刚毕业那会强多了
加载更多回复(113)

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧