华中科技大学计算机学院C++实验报告 实验一.docx

上传人:b****3 文档编号:5441758 上传时间:2023-05-08 格式:DOCX 页数:13 大小:62.18KB
下载 相关 举报
华中科技大学计算机学院C++实验报告 实验一.docx_第1页
第1页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第2页
第2页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第3页
第3页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第4页
第4页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第5页
第5页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第6页
第6页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第7页
第7页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第8页
第8页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第9页
第9页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第10页
第10页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第11页
第11页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第12页
第12页 / 共13页
华中科技大学计算机学院C++实验报告 实验一.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

华中科技大学计算机学院C++实验报告 实验一.docx

《华中科技大学计算机学院C++实验报告 实验一.docx》由会员分享,可在线阅读,更多相关《华中科技大学计算机学院C++实验报告 实验一.docx(13页珍藏版)》请在冰点文库上搜索。

华中科技大学计算机学院C++实验报告 实验一.docx

华中科技大学计算机学院C++实验报告实验一

 

课程实验报告

 

课程名称:

面向对象程序设计

实验名称:

面向对象的整型栈编程

 

院系:

计算机科学与技术

专业班级:

CS1209班

学号:

姓名:

********

 

2014年1月22日

 

一、需求分析

1.题目要求

整型栈是一种先进后出的存储结构,对其进行的操作通常包括判断栈是否为空、向栈顶添加一个整型元素、出栈等。

整型栈类型及其操作函数采用非面向对象的纯C语言定义,请将完成上述操作的所有函数采用纯C语言编程,然后写一个main函数对栈的所有操作函数进行测试。

structSTACK{

int*elems;//申请内存用于存放栈的元素

intmax;//栈能存放的最大元素个数

intpos;//栈实际已有元素个数,栈空时pos=0;

};

voidinitSTACK(STACK*constp,intm);//初始化p指向的栈:

最多m个元素

voidinitSTACK(STACK*constp,constSTACK&s);//用栈s初始化p指向的栈

intsize(constSTACK*constp);//返回p指向的栈的最大元素个数max

inthowMany(constSTACK*constp);//返回p指向的栈的实际元素个数pos

intgetelem(constSTACK*constp,intx);//取下标x处的栈元素

STACK*constpush(STACK*constp,inte);//将e入栈,并返回p

STACK*constpop(STACK*constp,int&e);//出栈到e,并返回p

STACK*constassign(STACK*constp,constSTACK&s);//赋s给p指的栈,并返回p

voidprint(constSTACK*constp);//打印p指向的栈

voiddestroySTACK(STACK*constp);//销毁p指向的栈

2.需求分析

本次实验要求用C语言的方法实现对栈的基本操作,所要求的操作包括初始化栈,用另一个栈初始化栈,并进行出栈入栈操作,还有输出栈中的元素,用另一个占合并已存在的栈,摧毁栈等操作。

二、系统设计

概要设计

用结构实现栈,此结构包括指向栈的指针,最大容量,和当前的元素个数等三个元素。

要求是栈的元素是栈元素类型是整形。

主要包括栈的输入输出和赋值算法,由于这些算法比较简单,所以在这里不用多解释。

在完成本任务时,用STACKS的实现采用了,用定义并且初始化好的数组复制给S的第一元素,并且第二第三元素用赋值语句实现。

具体实现如下:

inta[5]={1,2,3,4,5};

STACKs={a,5,5};

实现将e入栈,并返回p用能的时候,采用了先判断栈的最大容量够不够的问题,如果不够重新分配空间,并且让e入栈,并且返回新的p的指针。

三、软件开发

所有代码我用CodeBlocks进行编写和调试。

四、软件测试

1)总界面如图1所示:

图1

2)初始化p指向的栈:

最多m个元素,如图2所示:

图2

3)用栈s初始化p指向的栈然后用功能7显示内容如图3所示:

 

图3

4)将e入栈,并返回p,如图5所示。

先用操作2,用是初始化pset,然后用功能4,输入一个元素,并且用功能7,显示内容。

运行结果如图4所示:

图4

5)出栈到e,并返回p,结果如图5所示:

图5

6)赋s给p指的栈,并返回p,如图8所示。

先让pset的内容和s的内容不一样,然后用功能6,让s覆盖pset的内容,最后用功能7来显示内容。

结果如图6所示:

图6

7)销毁p指向的栈,如图7所示:

图7

五、过程和体会

1.遇到的主要问题和解决方法

在申请栈的时候,不知道怎么分配空间,也忘了分配空间,后来经过跟同学们的交流终于顺利的完成了任务。

2.课程设计的体会

本次实验是对之前学习过的C语言中栈的基本操作的巩固,利用C语言知识,再加上C++新学的知识,对整型栈进行一系列的操作。

主要来说本次实验相对简单,对栈操作有了更进一步的了解。

六、源码和说明

1.文件清单及其功能说明

main.c是源代码fers.exe是可执行文件

2.用户使用说明书

个人利用CodeBlocks进行编译的,只要能编译C/C++的编译器都可以进行调试。

3.源代码

#include

#include

#include

intsit;

voidmenu(void)

{

printf("\t******************************************************************\n");

printf("\t1.初始化p指向的栈:

最多m个元素");

printf("\t\t2.用栈s初始化p指向的栈\n");

printf("\t3.返回p指向的栈的实际元素个数pos");

printf("\t4.将e入栈,并返回p\n");

printf("\t5.出栈到e,并返回p");

printf("\t\t\t6.赋s给p指的栈,并返回p\n");

printf("\t7.打印p指向的栈");

printf("\t\t\t8.销毁p指向的栈\n");

printf("\t\t\t\t0.退出程序\n");

printf("\t****************************************************************\n");

}

typedefstructSTACK{

int*elems;//申请内存用于存放集合的元素

intmax;//集合能存放的最大元素个数

intpos;//集合实际已有元素个数,集合空时pos=0;

}STACK;

voidinitSTACK(STACK*constp,intm)

{

p->max=m;

sit=m;

p->elems=(int*)malloc(m*sizeof(int));

p->pos=0;

}

voidinitSTACK(STACK*pset,constSTACK&s)

{

initSTACK(pset,s.max);

inti;

if(s.elems==NULL)

printf("s栈为空,请初始化s!

\n");

else

for(i=0;i<(s.pos);i++)

{

pset->elems[i]=s.elems[i];

pset->pos++;

}

}

inthowMany(constSTACK*constp)

{

return(p->pos);

}

STACK*constpush(STACK*constp,inte)

{

intm;

if(p->pos==p->max)

{printf("栈已经为满\n");

printf("是否扩展栈?

1为是,0为否\n");

scanf("%d",&m);

if(m==1)

{

p->elems=(int*)realloc(p,(p->pos+1)*sizeof(int));

p->elems[p->pos+1]=e;

p->pos=p->pos+1;

return(p);

}

else

printf("插入失败\n");

}

else

{p->elems[p->pos]=e;

p->pos=p->pos+1;

return(p);

}

}

STACK*constpop(STACK*constp,int&e)

{

intn;

if(p->pos==0)

{

printf("栈为空!

");

}

else

e=p->elems[p->pos-1];

p->pos--;

return(p);

}

STACK*constassign(STACK*constp,constSTACK&s)

{

p->elems=s.elems;

p->max=s.max;

p->pos=s.pos;

returnp;

}

voidprint(STACK*p)

{

inti;

if(p->pos==0)

{

printf("栈为空!

\n");

printf("最大容量为:

\t%d",p->max);

}

else

{

printf("最大容量为:

\t%d",p->max);

printf("\n当前的数:

\n%d\n",p->pos);

printf("里面的元素为:

\n");

for(i=p->pos-1;i>=0;i--)

{

printf("%d\t",p->elems[i]);

}

}

}

voiddestroySTACK(STACK*constp)

{

free(p->elems);

p->max=0;

p->pos=0;

if(p->max==0)

printf("摧毁栈成功!

");

else

printf("摧毁栈未成功\npos=%d!

",p->pos);

}

intmain()

{

inta[5]={1,2,3,4,5};

STACK*pset=newSTACK;

STACKs={a,5,5};

intop;

inte,m=0;

inti;

charb;

intt;

inte1;

do

{system("cls");

menu();

printf("请输入序号:

");

scanf("%d",&op);

switch(op)

{

case1:

printf("");

printf("请输入栈的最大容量m:

");

scanf("%d",&m);

initSTACK(pset,m);

getchar();getchar();

break;

case2:

initSTACK(pset,s);

getchar();getchar();

break;

case3:

t=howMany(pset);

printf("总共为%d个元素\n",t);

getchar();getchar();

break;

case4:

if(sit==0)

printf("请初始化!

\n");

else

{printf("请输入想压栈的元素e:

");

scanf("%d",&e);

pset=push(pset,e);

}

getchar();getchar();

break;

case5:

pset=pop(pset,e1);

printf("栈顶元素为:

\t%d",e1);

getchar();getchar();

break;

case6:

assign(pset,s);

getchar();getchar();

break;

case7:

print(pset);

getchar();getchar();

break;

case8:

destroySTACK(pset);

getchar();getchar();

break;

}

}while(op);

printf("\t\t\t******谢谢使用******\n\n");

return0;

}

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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