数据结构.docx
《数据结构.docx》由会员分享,可在线阅读,更多相关《数据结构.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构
C/C++及数据结构笔试题集锦(校园招聘)之一
嗯,这是我从学校bbs精华区整理的c/c++及数据结构的笔试以及部分面试题集锦,觉得只要搞懂了这些题目,大部分的笔试都不惧了。
希望能给需要的人带来帮助。
顺便攒rp^_^
不过大部分题目没有答案,欢迎补充哦~~~~
一:
已知类String的原型为:
classString
{
public:
String(constchar*str=NULL);//普通构造函数
String(constString©);//拷贝构造函数
~String(void);//析构函数
String&operator=(constString©);//赋值构造函数
private:
char*m_data;//用于保存字符串
};
请编写String的上述4个函数。
答案:
版本1
//String的析构函数
String:
:
~String(void)//3分
{
delete[]m_data;
//由于m_data是内部数据类型,也可以写成deletem_data;
}
String:
:
String(constchar*str)
{
if(str==NULL)
{
m_data=newchar[1];//若能加NULL判断则更好
*m_data=‘{post.content}’;
}
else
{
intlength=strlen(str);
m_data=newchar[length+1];//若能加NULL判断则更好
strcpy(m_data,str);
}
}
//拷贝构造函数
String:
:
String(constString&other)
{
intlength=strlen(other.m_data);
m_data=newchar[length+1];//若能加NULL判断则更好
strcpy(m_data,other.m_data);
}
//赋值函数
String&String:
operate=(constString&other)
{
//
(1)检查自赋值
if(this==&other)
return*this;
//
(2)释放原有的内存资源
delete[]m_data;
//(3)分配新的内存资源,并复制内容
intlength=strlen(other.m_data);
m_data=newchar[length+1];//若能加NULL判断则更好
strcpy(m_data,other.m_data);
//(4)返回本对象的引用
return*this;
}
版本2
String:
:
String(constchar*str)
{
if(str){
memset(m_data,0,strlen(m_data));
strcpy(m_data,str);
}
else*m_data=0;
}
String:
:
String(constString©)
{
strcpy(m_data,copy.m_data);
}
String&String:
operator=(constString©)
{
if(this==©)retrun*this;
strcpy(m_data,copy.m_data);
return*this;
}
版本3
String:
:
String(constchar*str)
{
if(m_data)
delete[]m_data;
if(str){
m_data=newchar[strlen(str)];
memset(m_data,0,strlen(m_data));
strcpy(m_data,str);
}
else*m_data=0;
}
String:
:
String(constString©)
{
if(m_data)
delete[]m_data;
m_data=newchar[strlen(copy.m_data+1)]
strcpy(m_data,copy.m_data);
}
String&String:
operator=(constString©)
{
if(this==©)retrun*this;
if(m_data)
delete[]m_data;
m_data=newchar[strlen(copy.m_data+1)]
strcpy(m_data,copy.m_data);
return*this;
}
~String:
:
String(void)
{
if(m_data)
delete[]m_data;
}
二:
改错题,只能在原来的基础上增加代码,不能删除代码
#include
#include
voidfoo(intage,char*b)
{
b=(char*)malloc(64);
sprintf(b,"YourAgeis%d",age);
}
intmain()
{
char*f;
foo(23,f);
printf("%s\n",f);
}
答案
版本1
#include
#include
voidfoo(intage,char**b)
{
*b=(char*)malloc(64);
sprintf(*b,"YourAgeis%d",age);
}
intmain()
{
char**f;
foo(23,f);
printf("%s\n",**f);
return0;
}
版本2
#include
#include
voidfoo(intage,char*&b)
{
b=(char*)malloc(64);
sprintf(b,"YourAgeis%d",age);
}
intmain()
{
char*f;
foo(23,f);
printf("%s\n",f);
free(f);//不要忘了free;
}
三:
有程序片断如下
intmain()
{
intI=20;
pid_tpid=5;
if((pid=fork())>0)
{
I=50;
printf("%d\n",I);
(1)
}
elseif(pid==0)
{
printf("%d\n",I);
(2)
}
}
请问该程序用的是进程方式还是线程方式,并说明进程与线程的区别:
请问该程序输出什么结果?
无参考答案
四、constantpointerpointsforString
pointerpointsforconstantstring
五、下面等价的是:
Ainti=0
if(i)
{
printf("hello,world");
}
Binti=1;
intj=2;
if(i==1||j==2)
{
printf("hello,world");
}
CBooleanb1=true;
Booleanb2=true;
if(b1==b2)
{
printf("hello,world");
}
Dinti=1;
intj=2;
if(i==1&|j==2)
{
printf("hello,world");
}
六、排序二叉树插入一个节点或双向链表的实现
四~六为IBM面试题。
七、指针++的含义和用法
八、stack和heap的分配,rt-os的特点、同步的方式
九、怎样避免内存泄漏的问题
十、编程实现十进制数转化为十六进制输出,不准用任何已经定义的库函数,比方说String
,Math。
inttoHex(int)
十一、编程实现大于100的两个数值相乘的结果输出,同样不准使用任何已定义函数,Math,st
ring,convert等。
比方说12345*32534677
输入为两个stringinttoPlus('12345','32434677')
输出为一个长型的
十二、intdelete(node*head)
{
free(head);
head=head->link;
return(0);
}
指出程序的错误,并且写出正确的程序
十三、写一个程序可以算出字节在计算机中的存储是由大到小还是有小到大。
十四、一段程序,写出输出结果
大概是
classA
{
staticvoidvirtualprint(){cout<<"A:
:
print()"<;
}
classB
{
staticvoidvirtualprint(){cout<<"B:
:
print()"<;
}
classC
{
staticvoidprint(){cout<<"C:
:
print()"<;
}
print(Aa)
{
a.print();
}
main()
{
Aa,*aa,*ab,*ac;
Bb;
Cc;
aa=&a;
ab=&b;
ac=&c;
a.print();
b.print();
c.print();
aa.print();
ab.print();
ac.print();
print(a);
print(b);
print(c);
}
十五、给两个变量,如何找出一个带环单链表中是什么地方出现环的。
(答案参考expertCprogramming)。
十~十五为MS笔试题。
十六、写一个带参数宏get_struct_addr_from_member_addr(p,stru,m),
能够根据任意结构实体的某一个成员的地址,算出该结构实体的地址,其中参数p是指向该
成员的指针,stru是该结构体,m是该成员。
(SUN试题)
十七、给一个函数
intmain(){
inti,n=20;
for(i=0;i
printf("-");
return0;
}
要求替换、增加或者减少一个字符,使该程序可以打出20个“-”号,并要求写出三种解法
。
(sun试题)
参考:
1。
i--换成n--
2。
i<=""/>换成-i
十八、解释typedefchar(*FUNC)(int,char*)的含义
十九、问#include和#include"abc.h"的区别,#defineMAX_NUM10和constint
MAX_NUM=10区别
二十、问用什么方法可以避免一些潜在错误,比如if(myva