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

时间:2024.4.1

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

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

    计算机科学与技术

       专业班级  CS1201       

             U201214819   

             魏茹珺       

       指导教师  马光志       

 2015   1    5  

一、需求分析

1. 题目要求

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

struct STACK{

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

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

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

};

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); //sp指的栈,并返回p

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

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

2. 需求分析

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

二、系统设计

1. 概要设计

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

2. 详细设计

  初始化栈需要为栈内的元素动态分配一个空间,然后将结构体内的当前元素初始化为0;

 实现入栈则需要将入栈元素e放入栈内,将当前元素pos加一;

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

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

三、软件开发

在codeblocks下,用C++编译

四、软件测试

   所得截图如下:

第一行:将1压入s1栈;

第二行:将2压入s1栈;

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

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

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

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

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

五、特点与不足

1. 技术特点

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

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;

    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;

}

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);

    printf("s2:");

    print(&s2);

    pop(pop(&s2,y),z);

    printf("s2:");

    print(&s2);

    destroySTACK(&s2);

    destroySTACK(&s1);

}


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


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

ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY

班级:13级计算机3班 学号:130201031037 姓名:郑永雄 指导教师:谭忠兵  

实验题目:类和对象        实验时间:20##-04-09          成绩:

一、实验内容

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

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

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

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

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

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

程序1首先声明一个日期类date,日期的属性(数据成员)有年year、月month和日day。成员函数是构造函数date、析构函数、日期的显示show()。在主函数中使用构造函数的重载,分别定义无参构造函数(使年月日的值分别为20##、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,并定义构造函数、析构函数、还有成员函数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;
       }

    ~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>
#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;
  }
};

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;
        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;
}

 第四题:

#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;
        }
  
    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:
          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;
    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

程序3

程序4

程序5

五、实验总结:

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

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

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

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

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

更多相关推荐:
面向对象程序设计实验报告

面向对象程序设计之课程设计上海电力学院课题名称院系专业学号姓名时间地点指导教师课程设计报告面向对象程序设计20xx20xx学年第一学期模仿ATM机存取款管理系统设计电子与信息工程学院通信工程20xx年1月12日...

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

面向对象程序设计实验报告姓名学号班级专业学院实验三函数的应用一实验目的掌握函数的定义和调用方法练习重载函数使用练习函数模板的使用练习使用系统函数二实验步骤编写函数floatConvertfloatTempFer...

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

题目11问题描述建立一个二维坐标系的类TwoCoor用xy表示坐标值实现两坐标点的加减运算计算两坐标点间的距离并重载输入输出运算符使之能够直接输入输出坐标点的坐标值2实现代码includeltiostreamg...

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

综合实验报告面向对象程序设计专业名称班级姓名学号信息科学与工程学院二零一三年七月信息科学与工程学院面向对象程序设计综合实验报告目录第一题111题目概述112设计思路113设计说明与调试分析14编码实现15程序运...

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

教案20xx20xx学年第一学期学院系室计算机科学系课程名称面向对象程序设计专业年级班级12计算机嵌入式系统网络和信息安全班主讲教师蒋琳琼梧州学院面向对象程序设计教案课时分配理论课39学时实验课12学时共51学...

《Java程序设计》上机实验报告 实验二 初步的面向对象的程序设计练习

信息科学与工程学院Java程序设计上机实验报告专业班级姓名学号实验时间指导教师成绩注实验记录及个人小结部分不够可另附页或在背面续写第页注实验记录及个人小结部分不够可另附页或在背面续写第页注实验记录及个人小结部分...

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

课程实验报告课程名称面向对象程序设计实验名称面向对象的整型队列编程院系计算机科学与技术专业班级学号姓名指导教师月日面向对象程序设计实验报告一需求分析1题目要求整型队列是一种先进后出的存储结构对其进行的操作通常包...

(面向对象程序设计1301)综合性实验报告 (1)

综合性设计性实验报告姓名姓名专业班级实验课程名称指导教师及职称开课学期学年学期上课时间湖南科技学院教务处编印

《面向对象程序设计Java》实验报告封面及格式要求20xx0315

面向对象程序设计Java实验报告20xx20xx学年第2学期班级学号姓名指导教师序号班级学号姓名序号班级学号姓名序号班级学号姓名

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

北京理工大学珠海学院实验报告ZHUHAICAMPAUSOFBEIJINGINSTITUTEOFTECHNOLOGY班级13级计算机3班学号13020xx31037姓名郑永雄指导教师谭忠兵实验题目类和对象实验时间...

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

安康学院经济与管理系课程单项实验上机实训报告课程名称面向对象程序设计班级专业11级信息管理与信息系统1班学生姓名学号指导教师填写时间年月日课程单项实验上机实训报告填写要求1课程单项实验是指该课程实验由每一个单独...

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

课程实验报告课程名称面向对象程序设计实验名称面向对象的整型队列编程院系计算机科学与技术专业班级学号姓名指导教师月日面向对象程序设计实验报告一需求分析1题目要求整型队列是一种先进后出的存储结构对其进行的操作通常包...

面向对象程序设计实验报告(23篇)