面向对象程序设计实验报告一(3700字)

来源:m.fanwen118.com时间:2021.7.25

面向对象程序设计实验报告一

课 程 实 验 报 告

课程名称:面向对象程序设计

实验名称:面向过程的整型栈编程

院 系 :计算机科学与技术

专业班级 : 学 号 : 姓 名 : 指导教师 :

年 日

面向对象程序设计实验报告

一、需求分析

1. 题目要求

整型栈是一种先进后出的存储结构,对其进行的操作通常栈括判断栈是否为空、向栈顶添加一个整型元素、出栈等。整型栈类型及其操作函数采用非面向对象的纯C语言定义,请将完成上述操作的所有函数采用纯C语言编程, 然后写一个main函数对栈的所有操作函数进行测试。

struct STACK{

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

int max;

int pos;

};

void initSTACK(STACK *const p, int m); //初始化p指向的栈:最多m个元素 void initSTACK(STACK *const p, const STACK&s); //用栈s初始化p指向的栈 int howMany (const STACK *const p); //返回p指向的栈的实际元素个数pos STACK *const push(STACK *const p, int e); //将e入栈,并返回p

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

STACK *const assign(STACK*const p, const STACK&s); //赋s给p指的栈,并返回p void print(const STACK*const p);

//打印p指向的栈 //销毁p指向的栈 void destroySTACK(STACK*const p); //栈能存放的最大元素个数 //栈实际已有元素个数,栈空时pos=0;

2. 需求分析

本实验需要实现栈的功能的操作,如元素的进栈,连续进栈,出栈和连续出栈,所以需要设计两个栈,在完成初始化后直接在程序里给定栈内元素。

二、系统设计

1. 概要设计

首先需要完成实现个功能的函数,然后在主函数里给定一个栈,通过调用各个功能函数来判断功能的实现与否。

2. 详细设计

初始化栈需要为栈内的元素动态分配一个空间,然后将结构体内的当前元素初始化为0; 实现入栈则需要将入栈元素e放入栈内,将当前元素pos加一;

实现出栈操作则需将栈顶的元素赋给一个变量然后将当前元素pos减一;

实现栈的赋给即需要将s1栈内的元素依次赋给s2栈的,当前元素也需一致;

- 1 -

面向对象程序设计实验报告

三、软件开发

在codeblocks下,用C++编译

四、软件测试

所得截图如下:

面向对象程序设计实验报告一

第一行:将1压入s1栈;

第二行:将2压入s1栈;

第三行:将3,4连续压入栈;

第四行:实现上述操作后s1栈内的元素个数;

第五行:将s1栈的一个元素出栈后s1栈的值;

第六行:将s1栈赋给s2栈后,s2栈的值;

第七行:将s2栈连续出栈两个元素后,s2栈的值;

五、特点与不足

1. 技术特点

成功完成实验要求,没有错误。

2. 不足和改进的建议

不足之处在于不能按需求输入,如果需要改变栈值则只能通过修改程序才能实现

六、过程和体会

- 2 -

面向对象程序设计实验报告

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

想的太多了,总是把程序想的很复杂,还想通过写界面实现对应模块功能,后来仔细看了报告书,将界面删除,只留下功能实现的部分。

2. 课程设计的体会

通过这次的实验,我体会到了,不能一味地光写程序而是要看清实验要求,不要将问题复杂化,自己给自己找麻烦。看清题意,完成就好。

七、源码和说明

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

执行文件: shiyan1.exe

源码: shiyan1.cpp

2. 用户使用说明书

程序要在支持C++编程的开发软件中运行

3. 源代码

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

struct STACK{

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

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

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

};

void initSTACK( STACK *const p, int m)//初始化p指向的栈:最多m个元素

{

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

if(!p->elems) return;

p->pos=0;

p->max=m;

}

void initSTACK(STACK *const p, const STACK&s)//用栈s初始化p指向的栈

{

p->elems=(int *)malloc((s.max)*sizeof(int));

int i;

- 3 -

面向对象程序设计实验报告

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

{

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

p->pos=i;

}

}

int howMany (const STACK *const p) //返回p指向的栈的实际元素个数pos {

return p->pos;

}

STACK *const push(STACK *const p, int e) //将e入栈,并返回p

{

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

{

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

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

}

return p;

}

STACK *const pop(STACK *const p, int &e) //出栈到e,并返回p

{

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

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

return p;

}

STACK *const assign(STACK *const p, const STACK&s) //赋s给p指的栈,并返回p {

p->elems=(int *)malloc(s.max*sizeof(int));

int k;

for(k=0;k<s.max;k++)

{

p->elems[k]=s.elems[k];

}

p->pos=s.pos;

return p;

- 4 -

面向对象程序设计实验报告

}

void print(const STACK*const p) //打印p指向的栈 {

int k;

for(k=0;k<p->pos;k++)

{

printf("%d",p->elems[k]);

}

printf("\n");

}

void destroySTACK(STACK*const p) //销毁p指向的栈 {

p->pos=0;

}

int main()

{

STACK s1,s2;

int m=10;

int x,y,z,e;

initSTACK(&s1,m);

e=1;

push(&s1,e) ;

printf("入栈到那个元素:%d\n",e);

e=2;

push(&s1,e);

printf("入栈到那个元素:%d\n",e);

push(push(&s1,3),4);

printf("s1:");

print(&s1);

printf("栈现在的容量:%d\n",howMany(&s1)); pop(&s1,x);

printf("s1:");

print(&s1);

assign(&s2,s1);

- 5 -

面向对象程序设计实验报告

printf("s2:");

print(&s2);

pop(pop(&s2,y),z); printf("s2:");

print(&s2);

destroySTACK(&s2); destroySTACK(&s1); }

- 6 -


第二篇:面向对象程序设计实验报告-实验一 4800字

北京理工大学珠海学院实验报告

ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY

班级:13级计算机3班 学号:130201031037 姓名:郑永雄 指导教师:谭忠兵 实验题目:类和对象 实验时间:2014-04-09 成绩:

面向对象程序设计实验报告实验一

一、实验内容

程序1.声明一个日期类,日期的属性有年、月和日。方法有构造函数、析构函数、日期的显示。要求使用构造函数的重载,分别定义无参构造函数(使年月日的值分别为2013、1、1)和有参构造函数,并编写程序测试日期类。

程序2.创建一个Employee类,该类中有字符数组,表示姓名、街道地址、邮政编码。其功能有修改姓名、显示输出数据。要求函数放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。

程序3.建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱的体积,并存储在一个double变量中。在类cylinder中包含一个成员函数vol,用来显示每个cylinder对象的体积。

程序4.定义一个复数类,要求定义构造函数和析构函数,并能够为用户提供复数的加法和减法运算。编写程序测试复数类。

程序5.定义一个矩形类。矩形的属性是左上角的顶点、长和宽,方法有构造函数、析构函数、显示、移动等。编写程序测试矩形类。

二、问题分析(类的数据成员、成员函数等的确定,对象的创建等)

程序1:首先声明一个日期类date,日期的属性(数据成员)有年year、月month和日day。成员函数是构造函数date、析构函数、日期的显示show()。在主函数中使用构造函数的重载,分别定义无参构造函数(使年月日的值分别为2013、1、1)和有参构造函数,并调用输出成员函数显示结果。

程序:2:首先创建一个Employee类,该类中有数据成员字符数组,表示姓名name、街道地址stree、邮政编码num。成员函数有修改姓名setname、显示输出数据show。在主函数中用构造函数初始化每个成员,调用显示信息函数把对象中的完整信息打印出来。

程序3:首先定义类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径r和高度h。用类cylinder计算圆柱的体积,并存储在一个double变量v中。在类cylinder中包含一个成员函数vol,用来显示每个cylinder对象的体积。

程序:4:首先定义一个复数类complex,并定义构造函数和析构函数,设置成员函数set()为用户提供复数的加法和减法运算。并用输出函数print输出结果。

程序:5:定义一个矩形类。矩形的数据成员是左上角的顶点(x,y)、长long和宽wide,并 1

定义构造函数、析构函数、还有成员函数print显示、move移动等。

三、程序实现(完整程序)

第一题:

#include<iostream>

using namespace std;

class Date

{

private:

int year,month,day;

public:

Date()

{

year=2013;

month=1;

day=1;

}

Date(int y,int m,int d)

{

year=y;

month=m;

day=d;

}

2

~Date()

{

cout<<"析构函数"<<endl;

}

void show()

{

cout<<"显示日期"<<year<<"."<<month<<"."<<day<<endl;

}

};

int main()

{

Date a;

a.show();

Date b(2014,4,10);

b.show();

getchar();

getchar();

return 0;

}

第二题

#include<iostream>

3

#include<cmath>

using namespace std;

class Employee{

private:

char *name,*stree;

int post;

public:

Employee(char *x,char *y,int z)

{

strcpy(name,x);

strcpy(stree,y);

post=z;

}

void setname(char *a)

{

strcpy(name,a);

}

void Print_employee()

{

cout<<name[10]<<" "<<stree[50]<<" "<<post<<endl; }

};

4

int main()

{

Employee m("ben","zhbit",519000); char *b;

cin>>b;

m.setname(b);

m.Print_employee();

return 0;

}

第三题:

#include<iostream>

#include<cmath>

using namespace std;

class cylinder

{

private:

double radius,high; public:

cylinder(double h,double r) {

radius=r;

5

high=h;

}

double jisuan()

{

double v,pi=3.14159262; v=pi*radius*radius*high; return v;

}

void vol(double m) {

cout<<"体积="<<m<<endl; }

};

int main()

{

cylinder m(2,2);

double n;

n=m.jisuan();

m.vol(n);

getchar();

getchar();

return 0;

}

6

第四题:

#include<iostream>

#include<cmath>

using namespace std;

class Complex

{

private:

double real,imag; public:

Complex(double r,double i) {

real=r;

imag=i;

}

~Complex()

{

cout<<"析构函数"<<endl; }

void jisuan(double x,double y) {

real=real+x;

imag=imag+y;

}

7

void show()

{

cout<<"复数:"<<real<<"+"<<imag<<"i"<<endl; }

};

int main()

{

Complex m(5,7);

m.jisuan(2,2);

m.show();

getchar();

getchar();

return 0;

}

第五题:

#include<iostream>

#include<cmath>

using namespace std;

class Rectangle

{

private:

8

double x,y,lond,wide;

public:

Rectangle(double a,double b,double c,double d) {

x=a;

y=b;

lond=c;

wide=d;

}

~Rectangle()

{

cout<<"析构函数"<<endl;

}

void jisuan(double a,double b)

{

x=a+x;

y=b+y;

}

void show()

{

cout<<"左上角坐标"<<"("<<x<<","<<y<<")"<<endl; cout<<"右上角坐标"<<"("<<x+lond<<","<<y<<")"<<endl; 9

cout<<"左下角坐标"<<"("<<x<<","<<y+wide<<")"<<endl;

cout<<"右下角坐标"<<"("<<x+lond<<","<<y+wide<<")"<<endl; }

};

int main()

{

Rectangle n(0,4,5,3);

cout<<"显示矩形:"<<endl;

n.show();

cout<<"移动矩形"<<endl;

n.jisuan(2,2);

n.show();

getchar();

getchar();

return 0;

}

四、调试与运行

程序1:

面向对象程序设计实验报告实验一

程序2:

10

程序3:

面向对象程序设计实验报告实验一

程序4:

面向对象程序设计实验报告实验一

程序5:

面向对象程序设计实验报告实验一

五、实验总结:

1、学到了构造函数的构建,还有析构函数,成员函数等。通过对象调用成员函数实现某些功能。还有学会了运用string函数,简化了程序。

2、遇到了什么问题,如何解决的。

在运用new分配空间时,发现自己对字符串的知识忘记了很多。后来发现后面学习的string类很好用,可以简化程序。总的来说第一次试验都比较简单,做的比较顺利。

面向对象程序设计实验报告实验一

11

3、实验中需要特别注意什么,有哪些细节和技巧。

做实验前要熟悉试验运用的知识,写程序前最好先构思好再写。构造函数要注意没有返回类型的,可以有形参,而析构函数是没有参数的。

12

更多类似范文
┣ 华中科技大学计算机学院C++实验报告 实验二 5200字
┣ 华中科技大学计算机学院C++实验报告 实验四 4500字
┣ 面向对象课程设计任务书 11900字
┣ 更多面向对象程序设计实验报告
┗ 搜索类似范文