C++课程设计报告Word格式.docx

上传人:b****2 文档编号:5626598 上传时间:2023-05-05 格式:DOCX 页数:71 大小:70.51KB
下载 相关 举报
C++课程设计报告Word格式.docx_第1页
第1页 / 共71页
C++课程设计报告Word格式.docx_第2页
第2页 / 共71页
C++课程设计报告Word格式.docx_第3页
第3页 / 共71页
C++课程设计报告Word格式.docx_第4页
第4页 / 共71页
C++课程设计报告Word格式.docx_第5页
第5页 / 共71页
C++课程设计报告Word格式.docx_第6页
第6页 / 共71页
C++课程设计报告Word格式.docx_第7页
第7页 / 共71页
C++课程设计报告Word格式.docx_第8页
第8页 / 共71页
C++课程设计报告Word格式.docx_第9页
第9页 / 共71页
C++课程设计报告Word格式.docx_第10页
第10页 / 共71页
C++课程设计报告Word格式.docx_第11页
第11页 / 共71页
C++课程设计报告Word格式.docx_第12页
第12页 / 共71页
C++课程设计报告Word格式.docx_第13页
第13页 / 共71页
C++课程设计报告Word格式.docx_第14页
第14页 / 共71页
C++课程设计报告Word格式.docx_第15页
第15页 / 共71页
C++课程设计报告Word格式.docx_第16页
第16页 / 共71页
C++课程设计报告Word格式.docx_第17页
第17页 / 共71页
C++课程设计报告Word格式.docx_第18页
第18页 / 共71页
C++课程设计报告Word格式.docx_第19页
第19页 / 共71页
C++课程设计报告Word格式.docx_第20页
第20页 / 共71页
亲,该文档总共71页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++课程设计报告Word格式.docx

《C++课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告Word格式.docx(71页珍藏版)》请在冰点文库上搜索。

C++课程设计报告Word格式.docx

):

+getlength():

+getcontents():

void

+setcontents(s:

char*):

+friendvoidstrcompare(str1:

CMyString,str2:

CMyString):

+strjudge():

void

+operator[](n:

int):

char&

+friendCMyStringoperator+(CMyString&

st1,CMyString&

st2):

+voidoperator=(constCMyString&

s):

图1-1-1字符串类的类图

通过类来实现字符串的封装,用成员函数和友元函数、运算符的重载来实现字符串的基本操作。

2.1.2详细设计(要求详细写出每个模块的功能实现,关键技术,关键代码解释等。

操作模式:

功能实现:

用一个主函数,把许多功能融入集中

关键代码:

voidmain()

{

charstr[2][100];

for(inti=0;

i<

2;

i++)

{

cout<

<

"

第"

i+1<

个字符串:

;

cin>

>

str[i];

}

CMyStringstr1(str[0]),str2(str[1]);

cout<

第一个字符串的长度:

str1.getlength()<

endl;

第二个字符串的长度:

str2.getlength()<

两个字符串的比较:

strcompare(str1,str2);

判断字符串是否为空,并置空:

第一个字符串"

str1.strjudge();

第二个字符串"

str2.strjudge();

str1.setcontents("

liyushan"

);

str2.setcontents("

studieshard."

CMyStringstr3("

chengjingui"

//字符串的赋值(调用带一个参数的构造函数)

第三个对象的内容:

str3.getcontents();

输入一个小于等于"

str3.getlength()<

的正整数:

intj;

cin>

j;

输出第"

j<

个字符是:

str3[j-1]<

str3=str1+str2;

第三个字符串的长度为:

第三个字符串的内容是:

str3..getaddress();

}

字符串类:

功能:

实现字符串的封装,安全

classCMyString//类的定义

char*string;

//字符串的内容

intlength;

//字符串的长度

public:

CMyString()//不带参数的构造函数

length=0;

string=NULL;

CMyString(char*s)//带一个参数的构造函数

length=strlen(s);

string=newchar[length+1];

strcpy(string,s);

CMyString(CMyString&

s)//拷贝构造函数:

来实现对象之间的拷贝

length=s.length;

string=s.string;

…………

};

字符串的比较:

实现字符串的比较

代码:

voidstrcompare(CMyStrings1,CMyStrings2)

//字符串的比较的实现(友元函数)

ints;

s=strcmp(s1.string,s2.string);

if(s>

0)cout<

s1.string<

大于"

s2.string<

elseif(s<

小于"

elsecout<

等于"

注意:

1.运用到类的成员函数的类外定义

2.运用到string.h头文件中的strcmp()

字符串的长度:

voidgetcontents()//求字符串的内容

string<

判断字符串是否为空:

friendvoidstrcompare(CMyStringstr1,CMyStringstr2);

//友元函数实现两个字符串对象的比较的声明

voidstrcompare(CMyStrings1,CMyStrings2)//字符串的比较的实现(友元函数)

1.运用友元函数并类外定义:

先声明再定义(不要加限定符)

2.要加关键字:

friend函数参数为对象

3.运用函数:

strcmp()

置空且赋值:

功能的实现:

是先用delete来置空,再分配内存进行赋值

voidsetcontents(char*s)//先置空,再重置字符串的内容

被置空"

deletestring;

重置后:

1.参数为指针

2.指针要先分配内存再运用

3.运用newdelede来分配动态内存

4.要注意内存长度的选择(内存的空间)

求字符串中的一个字符:

功能:

要用运算符的重载[]

关键代码:

operator[](intn)//求字符串中的字符用运算符重载[]

staticcharch=0;

if(n>

length-1)

{

cout<

整数下标越界"

returnch;

}

else

return*(string+n);

下标[]运算符的重载:

返回类型是char&

完成串的赋值与合并:

实现:

重载+

CMyStringoperator+(CMyString&

st2)

//运算符+重载的实现(友元函数):

实现两个字符串的连接

CMyStringt;

t.length=st1.length+st2.length;

//连接时:

先计算长度,

t.string=newchar[t.length+1];

//再重新分配内存

strcpy(t.string,st1.string);

//先拷贝再连接

strcat(t.string,st2.string);

returnt;

//返回类型是对象t

先分配再拷贝链接

voidoperator=(constCMyString&

s)//运算符=的重载

string=newchar[strlen(s.string+1)];

strcpy(string,s.string);

参数为类的引用

得到表示字符串的指针地址:

voidgetaddress()//得到字符串的指针地址

字符串的指针地址:

&

}

2.1.3调试及问题解决

问题1:

出现乱码,内存为空

解决:

析构与置空同时运用,使内存出现2次删除,出现错误

运用默认构造函数

问题2:

拷贝构造函数的深浅拷贝问题

定义拷贝构造函数

问题3:

运算符的重载问题

要对=进行重载解决问题

2.2利用C++中的类实现线性链表的常见操作

2.2.1总体设计

Node

intData;

Node*next;

图2-2-1链表结构体

list

-Node*head;

-intlength;

+list();

+list(list&

l);

+voidcreate();

+~list(){deletehead;

+voidMakeEmpty();

+intLength();

+voidInsert(intx,inti);

//将x插入到第i个结点(不含头结点)的之后

+intDelete(intx);

//删除链表中值为x的结点,成功返回1,否则返回0

+intReMove(inti);

//删除链表中第i个结点,成功返回1,否则返回0

+intFind(intx);

//在链表中查找数值为x的结点,成功返回1,否则返回0

+voidDisplay();

//显示整个链表各结点的数值

图2-2-2链表类

2.2.2详细设计

登录模式:

用主函数:

开始出现功能代码1、创建一个链表2、在第i个结点处插入值为x的结点3、求链表的长度4、删除值为x的结点5、删除第i个结点6.搜索结点7.显示所有的结点8、置空结点9.退出函数分别在其中调用各自的函数

inta;

listb;

*******需要先创建一个链表再操作*****"

while

(1)

选择你所需要的服务"

1.创建一个链表"

2.在第i个结点后插入值为x的结点"

3.求链表长度"

4.删除值为x结点"

5.删除第i个结点"

6.搜索结点"

7.显示所有结点"

8.置空结点"

9.退出程序"

请输入功能代码:

a;

if(a==1)

b.create();

b.Display();

elseif(a==2)

{intx,i;

分别输入要插入的数、位置i"

x>

i;

b.Insert(x,i);

b.Display();

elseif(a==3)

为链表长度:

b.Length()<

elseif(a==4)

请键入你所要删除的数字"

intc;

cin>

c;

b.Delete(c);

elseif(a==5)

请键入你所要删除的位置"

inti;

b.ReMove(i);

elseif(a==6)

请键入要查询的数"

inte;

e;

b.Find(e);

elseif(a==7)

elseif(a==8)

b.MakeEmpty();

elseif(a==9)

BYEBYE!

谢谢使用!

exit

(1);

你输入有误."

continue;

//结束本次循环,进行下一次的循环(continue只能用于循环语句中的)

循环结束了。

循环的运用

Breakcontinuereturnexit()的不同和运用

创建一个链表:

运用类的成员函数

voidlist:

:

create()

Node*p,*tail;

intdata,i;

输入链表的数据和长度"

data>

if(i==0)

head=NULL;

创建一个空的链表。

重新创造个链表"

create();

//递归调用

else

while(length<

i)

length++;

if(length==1)

{

head=newNode;

tail=head;

head->

Data=data;

}

else

p=newNode;

p->

tail->

next=p;

tail=p;

输入下一个结点的值"

data;

}

tail->

next=NULL;

length--;

先确定插入的链表数

当是0时:

我运用了递归让其建立一个不为空的链表

当不为0时,我先建立一个头文件,再在尾部加入新的结点,从而建立一个链表

在第i个结点处插入值为x的结点:

功能的实现:

需要找到第i个节点再插入x,不过要注意i的值

●length:

提示错误,用循环重写

●i<

=length:

插入头文件后或插入中间结尾

Insert(intx,inti)//将x插入到第i个结点(不含头结点)的之后

Node*p,*q,*s,*t=head;

s=newNode;

//创建新结点:

s

s->

Data=x;

s->

//新结点的数据是:

x

if(i>

length)

输入有误,请重新输入:

输入插入的数据和结点数:

else

for(intj=1;

t=t->

next)//查找第i个结点

j++;

p=t;

//p指向第i个结点,q指向第i+1个结点

q=p->

next;

if(p==NULL)

head=s;

s->

if(p->

next!

=NULL)

{

s->

next=q;

p->

next=s;

}

else

break;

 

求链表的长度:

通过遍历链表来得到链表的长度

intlist:

Length()//求链表的长度(结点数)

Node*p=head;

if(p==NULL)

该链表是空的。

returnlength;

for(length=1;

p->

=NULL;

p=p->

next)

//长度

}

函数类型为int

删除值为x的结点

从头往后找值为x的结点,找到后将其删除

Delete(intx)//删除链表中值为x的结点,成功返回1,否则返回0

Node*p=head,*q;

//p用于指向结点x,q指向结点x的前一个结点(删除值为x的结点p)

if(p==NULL)//若是空表

这是个空的链表,删除失败!

return0;

if(p->

Data==x)//若是第一个结点

head=p->

deletep;

删除第一个结点,值为"

x<

return1;

while(p->

Data!

=x&

=NULL)//查找值为x的结点p;

q=p;

p=p->

if(p->

Data==x)//如果有值为x的结点,返回1

q->

next=p->

deletep;

删除了值为"

的结点,删除成功。

return1;

没有该结点,删除失败!

return0;

//没有,返回0

删除第i个结点

找到结点将其删除

ReMove(inti)//删除链表中第i个结点,成功返回1,否则返回0

Node*p,*q,*t=head;

for(intj=1;

j++;

p=t;

q=p->

if(i==1)

删除第"

个结点,删除成功!

elseif(i>

1&

=length)

q->

else

链表中无该结点,删除失败!

搜索结点:

有循环的方法找到结点

Find(intx)//在链表中查找数值为x的结点,成功返回1,否则返回0

length=1;

while(p!

=NULL&

=x)

length++;

p=p->

Data==x)

找到第"

length<

个结点是:

没有找到数据是:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2