收藏 分享(赏)

2专业基础实验1指导书1(实验一).doc

上传人:dreamzhangning 文档编号:2331280 上传时间:2018-09-10 格式:DOC 页数:14 大小:113.50KB
下载 相关 举报
2专业基础实验1指导书1(实验一).doc_第1页
第1页 / 共14页
2专业基础实验1指导书1(实验一).doc_第2页
第2页 / 共14页
2专业基础实验1指导书1(实验一).doc_第3页
第3页 / 共14页
2专业基础实验1指导书1(实验一).doc_第4页
第4页 / 共14页
2专业基础实验1指导书1(实验一).doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、专业基础实验 1 指导书软件 101、1021第 1 部分 上机实验上机实验要求及规范一、实验目的、要求和任务数据结构课程具有比较强的理论性,同时也具有较强的可应用性和实践性。上机实验是一个重要的教学环节。学生应该重视实验环节,对于编写程序上机练习具有一定的积极性。更应该重视实验的总结、实验报告的撰写。对于一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。拿到一个题目,一般不要急于编程。按照面向过程的程序设计思路(关于面向对象的训练将在其它后继课程中进行),正确的方法是:首先理解问题,明确给定的条件和要求解决的问题,然后按照自顶向下,逐步求精,分

2、而治之的策略,逐一地解决子问题。具体实习步骤如下:1.问题分析与系统结构设计上机实验是针对一个具体的实际问题,进行程序设计以便解决问题。首先需要充分地分析和理解问题本身,弄清要求做什么(而不是怎么做),限制条件是什么。按照面向对象技术的原则,考虑所需设计的类是什么?在主函数中如何使用类对象,如何实现问题的解决。具体来讲,搞清实际问题的若干数据元素的逻辑结构(是线性表还是树、图?),确定数据的存储结构(是顺序结构还是链表结构?),设计哪些有关操作的函数。将数据存储结构和算法对应的函数封装成为一个类,一些重要的典型的算法往往以类的成员函数形式出现。要求绘制简明扼要的系统结构图,主要描述主函数系统结

3、构。对于复杂重要的算法,也要绘制该函数的流程图。充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据间的联系等。2.详细设计和编码详细设计是对函数(模块)的进一步求精,用伪高级语言或自然语言写出算法框架,这时不必确定很多结构和变量。编码,即程序设计。就是对详细设计结果的进一步求精,即用某种高级语言(如C+语言)表达出来。尽量多设一些注释语句,清晰易懂。尽量临时增加一些输出语句,便于差错矫正,在程序成功后再删去它们。3.上机准备熟悉高级语言用法,如C+语言。熟悉机器(即操作系统),基本的常用命令。静态检查主要有两条路径,一是用一组测试数据手工执行

4、程序(或分模块进行);二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注释和断言。如果程序中逻辑概念清楚,后者将比前者有效。4.上机调试程序上机调试程序应该分步骤分层次进行。程序由简到繁、规模由小到大、数据量由少到2多,逐步完成。比如,针对一个类它可能有许多函数,建议首先仅仅调试类的构造函数和输入/出函数,这一步比较简单容易。即使如此,实验数据的规模也从少量几个开始(1-3个),程序调通之后,再用大量数据(十个到几十个或者更多)实验。此时,还可以排除一些错误。通过这一阶段,可以排除数据结构设计、构造函数和输入/输出函数设计的错误。然后,再把体现重要算法的函数加

5、入到源程序之中,这包括:类代码中的函数原型声明、函数实现的程序代码以及对它的调用语句等等。此时,实验数据规模也从少量几个开始,以便检查算法设计的正确性,程序基本调通之后,再用大量数据进行实验。本阶段还可进一步排除一些错误。但是,出现错误的范围往往集在新加入的代码段之中。5.测试用例设计准备典型测试数据和测试方案,测试数据要有代表性、敏感性,测试方案包括模块测试和模块集成测试。6.整理实习报告在上机实开始之前要充分准备实验数据,在上机实践过程中要及时记录实验数据,在上机实践完成之后必须及时总结分析。写出实验报告,实验报告的书写格式。实验报告书写:(1)实验目的及要求按任务书给出实验目的及要求,实

6、验目的要深刻体会。(2)实验内容按任务书给出的实验内容抄写(3)解决问题的思路1)对实验问题的描述:2)算法的数据结构;3)算法基本操作的说明及分析(可能需要流程图)(4)工作表清单给出算法描述的程序代码(加附页)(5)总结1)给出测试数据及实验结果分析与评价 ;2)实验方法的拓展;3)算法的时间复杂度为;4)实验心得体会附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含有其它测试数据和运行输出(有时需要多组数据) 。二、如何提高上机效率为了提高上机的效率,真正达到实验目的,要求同学做好实验前的准备工作,写好实验预习报告,编写好程序

7、,并用一组测试数据手工执行程序静态检查程序是否有错,通过3阅读、执行程序或给别人讲解自己的程序而深入全面地理解程序逻辑,提高程序的正确性。对 C,C+语言程序不熟悉的同学,上机时最好带上 C,C+语言程序设计的教材,以备查询。调试中遇到问题,应认真分析,确定可疑点,设置调试断点或输出断点处变量的值,以便发现问题,迅速排除问题,加快调试速度。4第 2 部分 C+基本知识各种数据结构以及相应算法的描述总是要选用一种语言工具。在计算机科学发展过程中,早期数据结构教材大都采用 PASCAL 语言为描述工具,后来出现了采用 C 语言为描述工具的教材版本、至今又出现了采用 C+语言为描述工具的多种教材版本

8、。本实验指导书是为已经学习过 C+语言的学生而编写。程序要求在 Devc+开发环境之下调试运行,采用面向对象方法进行设计。典型的数据结构被设计成为类(class) ,典型算法设计成为类的函数成员,然后在主函数中声明创建类对象,根据实际需要调用重要的算法。由于 C+的使用具有一定的难度,为了同学更好的学习数据结构自身的知识内容,减轻描述工具所带来的困难,这里针对数据结构上机实验所必须的 C+基本知识(结构体、类等等)做补充介绍。一、源程序组成这部分内容详细参见本指导书的第 3 部分的程序实例。二、结构体及运用数据结构课程所研究的问题均运用到“结构体”和“类” 。在 C+语言中结构体和函数又是理解

9、和掌握“类”的语法基础。定义结构体的一般格式:struct 结构体类型名 类型名 1 变量名 1; /数据子域类型名 2 变量名 2;类型名 n 变量名 n;其中 struct 是保留字。结构体类型名由用户自己命名。在使用时必须声明一个具体的结构体类型的变量,声明创建一个结构体变量的方法是:结构体类型名 结构体变量名;一个结构体中可以包含多个数据子域。数据子域的类型名一般指基本数据类型(int #include . /编译预处理class A ;/ 类成员函数定义;.int main().编译预处理等类的相关程序编码主函数程序代码5char 等) ,也可是已经定义的另一结构体名。数据子域变量名

10、可以是简单变量,也可以是数组。它们也可以称为结构体的数据成员,它们的访问控制具有公有属性。1. 通过“结构体变量名.数据子域” 可以访问数据子域。/ 设计 Student 结构体,在主程序中运用。#include #include #include struct Student /定义结构体 Student long num; / 学号int x; / 成绩char name10; / 姓名int main( ) Student s1; /声明创建一个结构体变量 s1/为 s1 的数据子域提供数据s1.num=1001 ; s1. x=83; strcpy( s1.name, “ 李 明”);

11、 /输出结构体变量 s1 的内容coutai.num; /输出数组元素 ai的学号域cout ai.name; /输出数组元素 ai的姓名域coutai.x; /输出数组元素 ai的成绩域 以上是关于结构体的基本概念和简单运用。三、 类的基本概念及运用类的是面向对象程序的基本单位。类是由数据成员和相关的函数成员组成。从面向对象的角度考虑“学生”这个类,它不仅包括“学生”的一般属性:学号、姓名、成绩等等,还应包括对于这些属性的操作:输入/输出、听课、实验、等等。 或者使用键盘输入cin s1.num;cin s1.x;cin s1.name;6类定义的一般格式:class 类名 若干数据成员;若

12、干函数成员;类的数据成员和函数成员均存在访问控制权限问题。访问控制分为三种:公有(public ) 、私有 (private)和受护(protected)。数据成员的定义和结构体中的数据域定义是相似的。不同的是它们必须明确访问控制。而公有数据成员,可以认为与结构体的数据域的访问权限相同。成员函数的定义又和一般函数的定义基本相同。不同的是类中成员函数也必须明确访问控制权限。如果在类之中定义成员函数带函数体,并未有什么特殊之处。如果在类之中仅有成员函数的原型声明,当在类定义之外定义函数体时,需要加上类限定标识“类名:” 。下面是“学生”类的定义:class Students /定义类结构体 Stu

13、dents private: /私有成员long num; / 学号int x; / 成绩char name10; / 姓名public: /公有成员Students();Students() ;void SetDat( long n, int x0, char *na0 ) num=n; x=x0; strcpy( name,na0);void PrintOut( ); /输出函数的原型声明.;void Students:PrintOut( ) / 输出函数前加 Students: coutmyxname;s. SetDat( m, y, xname ) ; /修改对象 s 数据 s. Pr

14、intOut(); /输出改变后 s 的内容_getch(); return 0;运行结果:姓名:O学号:0成绩:0 输入学号,成绩,姓名:1001 90 WangMing姓名:WangMing学号:1001成绩:90这个例题中数据成员全部定义为私有(private ) ,以便保证数据安全性。而函数成员全部定义为公有(public)成员函数,可以作为类对外部的的接口。 通过s. SetDat( m, y, xname ) ; 直接访公有函数成员 SetDat( ), 将实参(主函数的局部变量 m, y, xname) 的数据赋给私有数据成员 num,x,name 。 通过 s.PrintOut

15、( );直接访公有函数成员 PrintOut( ),间接访问输出私有成员 num,x,name。四、 结构体在类中的使用1结构体数组做类的数据成员const int MAXSIZE=100; / 数组的容量struct ElemType / 数据元素的类型 int numb;char name20;long tel;class Sqlist private:ElemType elemMAXSIZE; /结构体 ElemType 类型的数组 elem 做数据成员int length;public:Sqlist( void);Sqlist() ;/其他函数;2.结构体指针变量做类的数据成员stru

16、ct NodeType / 结点的结构定义 int data; / 数据域 8NodeType *next; / 指针域 ;class Link /类声明 private:NodeType *Head; /指向结构构体NodeType的指针变量Head做数据成员 public:Link ( ) Head=new NodeType; / 为头结点申请空间Head-next=Head; / 头结点Head 形成空环; Link () ;void creat();void outs();Head9实验一:关于抽象数据类型ADT的实验一、实验目的及要求1.熟悉 C+环境(DEVC+),理解抽象数据类型

17、 ADT 的基本概念;2.学会运用 C 设计实现复数的 ADT、集合的 ADT;3.练习运算符重载的使用。二、实验内容 01. 定义复数的数据结构,在复数加法的基础上增加减法、乘法、除法操作。2. 定义集合的数据结构,实现集合的并、交、差运算基本操作。要求:演示程序有很好的界面及交互性。如:实验 1 的参考界面:三、实验准备1. 计算机设备;2. 程序调试环境的准备,如 Devc+环境;3.实验内容的算法分析与代码设计与分析准备。四、实验背景知识1数据结构的相关知识(1) 数据结构数据结构指的是有某种关系(某一种关系)的数据元素的集合。包括以下三个方面的内容: 数据的逻辑结构数据元素之间的逻辑

18、关系(D ,S) 。10 数据的存储结构数据元素及其关系在计算机存储器内的表示。 运算(操作特征)对数据进行操作的特点和规范。 (P)(2) 数据的逻辑结构 数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。 有四大类:集合、线性结构、树型结构、图型结构。线性结构的逻辑特征是:若结构是非空集,则符合以下四个特征: 有且仅有一个表头结点; 有且仅有一个表尾结点; 除了表头结点,其余结点均有且仅有一个直接前驱; 除了表尾结点,其余结点均有且仅有一个直接后继。(3) 数据的存储结构 数据的存储结构是逻辑结构用计算机语言的实现,即建立计算机的机内表示,在存储空间中建立各结点之

19、间的关联来表示数据元素之间的逻辑关系。 数据的存储结构主要有顺序存储结构和链式存储结构两大类。 顺序存储结构中的元素都依次存储在一个连续的区域中,元素的物理地址就体现了元素的逻辑关系。 链式存储结构中的结点不仅包含一个数据元素,还包含一个指针,指向该元素逻辑上的直接后继结点。(4) 数据结构的运算1)创建运算(create):创建一个数据结构;2)清除运算(clear ):删除数据结构中的全部元素;3)插入运算(insert):在数据结构的指定位置上插入一个新元素;4)删除运算(remove):将数据结构中的某个元素删除;5)搜索运算(search ):在数据结构中搜索满足一定条件的元素;6)

20、更新运算(replace):修改数据结构中某个元素的值;7)访问运算(retrieve):访问数据结构中某个元素;8)遍历运算(traverse):按照某种次序,系统地访问数据结构的各元素,使得每个元素恰好被访问一次。(5) 数据结构的规范和实现数据结构的规范(ADT):是指它的逻辑结构和运算的规范;数据结构的实现:是指它的存储表示和运算的实现。2复数复数的代数形式:形如 a + bi (a,bR)的数叫复数,实数 a、b 分别叫做实部和虚部。试设计一个复数类,该类有实部和虚部两个成员数据,成员数据采用私有访问权限,同时该类有两个共有成员函数。设 z1=a+bi,z2=c+di 是任意两个复数

21、,复数的四则运算规定为: z1+z2(ac)(bd)i,z1-z2(ac)(bd)i,z1*z2(acbd)(bcad)i , z1/z2(ac+bd) / (c 2+d2)(bcad) / (c2+d2) i.3集合是一些可确定的可相互区别的事物(同种类型的数据元素)汇集在一起所组成的整体。11集合的元素具有以下三个性质:(1)确定性元素与集合的关系是属于或不属于,二者必居其一(2)互异性集合中元素彼此不同,没有重复的元素。(3)无序性集合中的元素与排列顺序无关。并、交、差是集合常用的运算。五、设计与实现1复数的有关操作(1)复数的 ADTADT complex 数据对象:De1,e2e1,

22、e2 RealSet 数据关系:R1 | e1 是复数的实数部分,e2 是复数的虚数部分 运算:InitComplex (v1, v2 )操作结果:构造一复数,其实部和虚部分别被赋以参数 v1 和 v2 的值。DestroyComplex() 操作结果:复数被销毁。 GetReal(public:Complex();Complex(T r,T i);T Getreal()const;T Getimag()const;Complex Add(Complex 12/其他运算Complex operator+(Complex /其他运算重载 void Output(ostreamvoid Input

23、(istream;(3)复数类模板中成员函数的实现(complex.cpp)(4)主程序模块定义在没有学习可视化图形界面之前,建议在主函数中简单设计一个“菜单”(do-while 循环内嵌套一个 switch 结构 )。随着学习的深入,应该学会熟练使用“菜单”技术,这样会明显提高编程和运行效率。一个主函数一般样式如下:(参考代码)do /显示菜单内容coutm;switch(m)case 1:cinc1; break;case 2:cinc2; break;case 3:coutc1c2; break;case 4:c3=c1+c2; break;case 5:c3=c1-c2; break;

24、case 6:c3=c1*c2;break;case 7:c3=c1/c2;break;case 8:return;break;while(1)主程序结构(实现见文件:complexmain.cpp ):菜单显示;选择操作;(5)测试数据及测试结果(只列举了加法运算)1)0,;0;应输出02)3.1,0;4.22,8.9;应输出7.32+8.9 i3)-1.33,2.34;0.1,-6.5;应输出-1.23 4.16 i4)0,9.7;-2.1,-9.7;应输出-2.1135)7.7,-8;-7.7,0;应输出-8i2集合的有关操作(1)集合的 ADTADT set /完成此部分内容 ADT Set(2)集合类模板的定义(XXXX.h ,如 set.h)class Set/完成此部分内容 ;(3)集合类模板中成员函数的实现 set.cpp)/完成此部分内容 (4)主程序模块定义 /完成此部分内容(5) 程序运行下为参考界面(5)测试数据及测试结果(见上运行结果截图)思考题:数据结构包含哪几个方面?每个方面与计算机有无关系?数据结构的 ADT 指的是什么?

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报