数据结构C++笔试题.docx
- 文档编号:9023601
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:20
- 大小:20.75KB
数据结构C++笔试题.docx
《数据结构C++笔试题.docx》由会员分享,可在线阅读,更多相关《数据结构C++笔试题.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构C++笔试题
一:
已知类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)
}
}
请问该程序用的是进程方式还是线程方式,并说明进程与线程的区别:
请问该程序输出什么结果?
无参考答案L
四、constantpointerpointsforString
pointerpointsforconstantstring
五、下面等价的是:
Ainti=0
if(i)
{
printf("hello,world");
}
B inti=1;
intj=2;
if(i==1||j==2)
{
printf("hello,world");
}
C Booleanb1=true;
Booleanb2=true;
if(b1==b2)
{
printf("hello,world");
}
D inti=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
输入为两个string inttoPlus('12345','32434677')
输出为一个长型的
十二、intdelete(node*head)
{
free(head);
head=head->link;
return(0);
}
指出程序的错误,并且写出正确的程序
十三、写一个程序可以算出字节在计算机中的存储是由大到小还是有小到大。
十四、一段程序,写出输出结果
大概是
classA
{
staticvoidvirtualprint(){cout<<"A:
:
print()"<;
}
classB
{
staticvoidvirtualprint(){cout<<"B:
:
print()"<;
}
classC
{
staticvoid print(){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();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 C+ 笔试