




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、专业基础实验1指导书软件101、102 第1部分 上机实验上机实验要求及规范一、实验目的、要求和任务数据结构课程具有比较强的理论性,同时也具有较强的可应用性和实践性。上机实验是一个重要的教学环节。学生应该重视实验环节,对于编写程序上机练习具有一定的积极性。更应该重视实验的总结、实验报告的撰写。对于一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。拿到一个题目,一般不要急于编程。按照面向过程的程序设计思路(关于面向对象的训练将在其它后继课程中进行),正确的方法是:首先理解问题,明确给定的条件和要求解决的问题,然后按照自顶向下,逐步求精,分而治之的策
2、略,逐一地解决子问题。具体实习步骤如下:1.问题分析与系统结构设计上机实验是针对一个具体的实际问题,进行程序设计以便解决问题。首先需要充分地分析和理解问题本身,弄清要求做什么(而不是怎么做),限制条件是什么。按照面向对象技术的原则,考虑所需设计的类是什么?在主函数中如何使用类对象,如何实现问题的解决。具体来讲,搞清实际问题的若干数据元素的逻辑结构(是线性表还是树、图?),确定数据的存储结构(是顺序结构还是链表结构?),设计哪些有关操作的函数。将数据存储结构和算法对应的函数封装成为一个类,一些重要的典型的算法往往以类的成员函数形式出现。要求绘制简明扼要的系统结构图,主要描述主函数系统结构。对于复
3、杂重要的算法,也要绘制该函数的流程图。充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据间的联系等。2.详细设计和编码详细设计是对函数(模块)的进一步求精,用伪高级语言或自然语言写出算法框架,这时不必确定很多结构和变量。编码,即程序设计。就是对详细设计结果的进一步求精,即用某种高级语言(如C+语言)表达出来。尽量多设一些注释语句,清晰易懂。尽量临时增加一些输出语句,便于差错矫正,在程序成功后再删去它们。3.上机准备熟悉高级语言用法,如C+语言。熟悉机器(即操作系统),基本的常用命令。静态检查主要有两条路径,一是用一组测试数据手工执行程序(或分
4、模块进行);二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注释和断言。如果程序中逻辑概念清楚,后者将比前者有效。4.上机调试程序上机调试程序应该分步骤分层次进行。程序由简到繁、规模由小到大、数据量由少到多,逐步完成。比如,针对一个类它可能有许多函数,建议首先仅仅调试类的构造函数和输入/出函数,这一步比较简单容易。即使如此,实验数据的规模也从少量几个开始(1-3个),程序调通之后,再用大量数据(十个到几十个或者更多)实验。此时,还可以排除一些错误。通过这一阶段,可以排除数据结构设计、构造函数和输入/输出函数设计的错误。然后,再把体现重要算法的函数加入到源程序之
5、中,这包括:类代码中的函数原型声明、函数实现的程序代码以及对它的调用语句等等。此时,实验数据规模也从少量几个开始,以便检查算法设计的正确性,程序基本调通之后,再用大量数据进行实验。本阶段还可进一步排除一些错误。但是,出现错误的范围往往集在新加入的代码段之中。5.测试用例设计准备典型测试数据和测试方案,测试数据要有代表性、敏感性,测试方案包括模块测试和模块集成测试。6.整理实习报告在上机实开始之前要充分准备实验数据,在上机实践过程中要及时记录实验数据,在上机实践完成之后必须及时总结分析。写出实验报告,实验报告的书写格式。实验报告书写:(1)实验目的及要求按任务书给出实验目的及要求,实验目的要深刻
6、体会。(2)实验内容按任务书给出的实验内容抄写(3)解决问题的思路1)对实验问题的描述:2)算法的数据结构;3)算法基本操作的说明及分析(可能需要流程图)(4)工作表清单给出算法描述的程序代码(加附页)(5)总结1)给出测试数据及实验结果分析与评价 ;2)实验方法的拓展;3)算法的时间复杂度为;4)实验心得体会附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含有其它测试数据和运行输出(有时需要多组数据)。二、如何提高上机效率为了提高上机的效率,真正达到实验目的,要求同学做好实验前的准备工作,写好实验预习报告,编写好程序,并用一组测试
7、数据手工执行程序静态检查程序是否有错,通过阅读、执行程序或给别人讲解自己的程序而深入全面地理解程序逻辑,提高程序的正确性。对C,C+语言程序不熟悉的同学,上机时最好带上C,C+语言程序设计的教材,以备查询。调试中遇到问题,应认真分析,确定可疑点,设置调试断点或输出断点处变量的值,以便发现问题,迅速排除问题,加快调试速度。第2部分 C+基本知识各种数据结构以及相应算法的描述总是要选用一种语言工具。在计算机科学发展过程中,早期数据结构教材大都采用PASCAL语言为描述工具,后来出现了采用C语言为描述工具的教材版本、至今又出现了采用C+语言为描述工具的多种教材版本。本实验指导书是为已经学习过C+语言
8、的学生而编写。程序要求在Devc+开发环境之下调试运行,采用面向对象方法进行设计。典型的数据结构被设计成为类(class),典型算法设计成为类的函数成员,然后在主函数中声明创建类对象,根据实际需要调用重要的算法。由于C+的使用具有一定的难度,为了同学更好的学习数据结构自身的知识内容,减轻描述工具所带来的困难,这里针对数据结构上机实验所必须的C+基本知识(结构体、类等等)做补充介绍。#include . /编译预处理class A .;/ 类成员函数定义;.int main().编译预处理等类的相关程序编码主函数程序代码一、 源程序组成 这部分内容详细参见本指导书的第3部分的程序实例。二、结构体
9、及运用数据结构课程所研究的问题均运用到“结构体”和“类”。在C+语言中结构体和函数又是理解和掌握“类”的语法基础。定义结构体的一般格式:struct 结构体类型名 类型名1 变量名1; /数据子域类型名2 变量名2;类型名n 变量名n;其中struct是保留字。结构体类型名由用户自己命名。在使用时必须声明一个具体的结构体类型的变量,声明创建一个结构体变量的方法是: 结构体类型名 结构体变量名;一个结构体中可以包含多个数据子域。数据子域的类型名一般指基本数据类型(int char 等),也可是已经定义的另一结构体名。数据子域变量名可以是简单变量,也可以是数组。它们也可以称为结构体的数据成员,它们
10、的访问控制具有公有属性。1. 通过“结构体变量名.数据子域” 可以访问数据子域。 / 设计Student结构体,在主程序中运用。#include <iostream.h>#include <conio.h>#include <string.h>struct Student /定义结构体Student long num; / 学号 int x; / 成绩 char name10; / 姓名int main( ) Student s1; /声明创建一个结构体变量s1或者使用键盘输入 cin >> s1.num;cin >> s1.x;ci
11、n >> ;/为s1的数据子域提供数据s1.num=1001 ; s1. x=83; strcpy( , “ 李 明”); /输出结构体变量s1 的内容cout<< “ 姓名: ”<< <<endl;cout<< “ 学号: ”<< s1.num<<endl:cout<< “ 成绩:”<< s1.x <<ednl; _getch(); return 0; 2. 设计一维数组,每个数组元素是Student结构体类型,通过以下语句段可以
12、说明结构体数组的一般用法:通过“结构体数组名下标.数据子域”访问数据域。 Student a5; /声明创建一个结构体数组a for(int i=0, i<5, i+) cout<<“学号:”; cin>>ai.num; /输出数组元素ai的学号域cout<<“姓名:”; cin>> ; /输出数组元素ai的姓名域cout<<“成绩:”; cin>>ai.x; /输出数组元素ai的成绩域 以上是关于结构体的基本概念和简单运用。三、 类的基本概念及运用类的是面向对象程序的基本单位。类是由数据成员和相关的函
13、数成员组成。从面向对象的角度考虑“学生”这个类,它不仅包括“学生”的一般属性:学号、姓名、成绩等等,还应包括对于这些属性的操作:输入/输出、听课、实验、等等。 类定义的一般格式:class 类名 若干数据成员; 若干函数成员; ;类的数据成员和函数成员均存在访问控制权限问题。访问控制分为三种:公有(public)、私有(private)和受护(protected)。数据成员的定义和结构体中的数据域定义是相似的。不同的是它们必须明确访问控制。而公有数据成员,可以认为与结构体的数据域的访问权限相同。成员函数的定义又和一般函数的定义基本相同。不同的是类中成员函数也必须明确访问控制权限。如果在类之中定
14、义成员函数带函数体,并未有什么特殊之处。如果在类之中仅有成员函数的原型声明,当在类定义之外定义函数体时,需要加上类限定标识“类名:”。下面是“学生”类的定义:class Students /定义类结构体Students 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( ); /输
15、出函数的原型声明 .;void Students:PrintOut( ) / 输出函数前加Students: cout<< “ 姓名: ”<< name <<endl;cout<< “ 学号: ”<< num<<endl:cout<< “ 成绩:”<< x <<ednl; 在主程序中运用类 S main( ) Students s; /声明创建一个类对象s,调用构造函数s.PrintOut( ); /输出s的内容long m; int y; char xname10
16、; cout<< “ 输入学号,成绩,姓名:” ;cin>>m>>y>>xname;s. SetDat( m, y, xname ) ; /修改对象s数据 s. PrintOut(); /输出改变后s的内容_getch(); return 0;运行结果: 姓名:O学号:0成绩:0 输入学号,成绩,姓名:1001 90 WangMing姓名:WangMing学号:1001成绩:90这个例题中数据成员全部定义为私有(private),以便保证数据安全性。而函数成员全部定义为公有(public)成员函数,可以作为类对外部的的接口。 通过s. SetDa
17、t( m, y, xname ) ; 直接访公有函数成员SetDat( ), 将实参(主函数的局部变量m, y, xname) 的数据赋给私有数据成员 num,x,name。 通过 s.PrintOut( );直接访公有函数成员PrintOut( ),间接访问输出私有成员num,x,name。四、 结构体在类中的使用 1结构体数组做类的数据成员const int MAXSIZE=100; / 数组的容量struct ElemType / 数据元素的类型 int numb; char name20; long tel; ;class Sqlist private: ElemType elemMA
18、XSIZE; /结构体ElemType类型的数组elem 做数据成员 int length; public: Sqlist( void); Sqlist() ;/其他函数;2.结构体指针变量做类的数据成员struct NodeType / 结点的结构定义 int data; / 数据域 NodeType *next; / 指针域 ;class Link /类声明 private: NodeType *Head; /指向结构构体NodeType的指针变量Head做数据成员 public: Link ( ) Head=new NodeType; / 为头结点申请空间 Head->next=H
19、ead; / 头结点Head 形成空环 ;Head Link () ; void creat(); void outs();实验一:关于抽象数据类型ADT的实验一、实验目的及要求1.熟悉C+环境(DEVC+),理解抽象数据类型ADT的基本概念;2.学会运用C设计实现复数的ADT、集合的ADT;3.练习运算符重载的使用。二、实验内容01. 定义复数的数据结构,在复数加法的基础上增加减法、乘法、除法操作。2. 定义集合的数据结构,实现集合的并、交、差运算基本操作。要求:演示程序有很好的界面及交互性。如:实验1的参考界面:三、实验准备1. 计算机设备;2. 程序调试环境的准备,如Devc+环境;3.
20、实验内容的算法分析与代码设计与分析准备。四、实验背景知识1数据结构的相关知识(1)数据结构数据结构指的是有某种关系(某一种关系)的数据元素的集合。包括以下三个方面的内容:ü 数据的逻辑结构数据元素之间的逻辑关系(D,S)。ü 数据的存储结构数据元素及其关系在计算机存储器内的表示。ü 运算(操作特征)对数据进行操作的特点和规范。(P)(2)数据的逻辑结构ü 数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。ü 有四大类:集合、线性结构、树型结构、图型结构。线性结构的逻辑特征是:若结构是非空集,则符合以下四个特征:l 有且
21、仅有一个表头结点;l 有且仅有一个表尾结点;l 除了表头结点,其余结点均有且仅有一个直接前驱;l 除了表尾结点,其余结点均有且仅有一个直接后继。(3)数据的存储结构ü 数据的存储结构是逻辑结构用计算机语言的实现,即建立计算机的机内表示,在存储空间中建立各结点之间的关联来表示数据元素之间的逻辑关系。ü 数据的存储结构主要有顺序存储结构和链式存储结构两大类。l 顺序存储结构中的元素都依次存储在一个连续的区域中,元素的物理地址就体现了元素的逻辑关系。l 链式存储结构中的结点不仅包含一个数据元素,还包含一个指针,指向该元素逻辑上的直接后继结点。(4)数据结构的运算1)创建运算(cr
22、eate):创建一个数据结构;2)清除运算(clear):删除数据结构中的全部元素;3)插入运算(insert):在数据结构的指定位置上插入一个新元素;4)删除运算(remove):将数据结构中的某个元素删除;5)搜索运算(search):在数据结构中搜索满足一定条件的元素;6)更新运算(replace):修改数据结构中某个元素的值;7)访问运算(retrieve):访问数据结构中某个元素;8)遍历运算(traverse):按照某种次序,系统地访问数据结构的各元素,使得每个元素恰好被访问一次。(5)数据结构的规范和实现数据结构的规范(ADT):是指它的逻辑结构和运算的规范;数据结构的实现:是指
23、它的存储表示和运算的实现。2复数复数的代数形式:形如a + bi (a,bR)的数叫复数,实数a、b 分别叫做实部和虚部。试设计一个复数类,该类有实部和虚部两个成员数据,成员数据采用私有访问权限,同时该类有两个共有成员函数。设z1=a+bi,z2=c+di是任意两个复数,复数的四则运算规定为: z1+z2(ac)(bd)i,z1-z2(ac)(bd)i,z1*z2(acbd)(bcad)i, z1/z2(ac+bd) / (c2+d2)(bcad) / (c2+d2) i.3集合 是一些可确定的可相互区别的事物(同种类型的数据元素)汇集在一起所组成的整体。集合的元素具有以下三个性质:(1)确定
24、性元素与集合的关系是属于或不属于,二者必居其一(2)互异性集合中元素彼此不同,没有重复的元素。(3)无序性集合中的元素与排列顺序无关。 并、交、差是集合常用的运算。五、设计与实现1复数的有关操作(1)复数的ADT ADT complex 数据对象:De1,e2e1,e2RealSet 数据关系:R1<e1,e2> | e1是复数的实数部分,e2 是复数的虚数部分 运算: InitComplex (v1, v2 ) 操作结果:构造一复数,其实部和虚部分别被赋以参数v1和v2的值。 DestroyComplex() 操作结果:复数被销毁。 GetReal(&realPart )
25、 初始条件:复数已存在。 操作结果:用realPart返回复数的实部值。 GetImag(&ImagPart ) 初始条件:复数已存在。 操作结果:用ImagPart返回复数的虚部值。 Add(z1,z2) 初始条件:z1, z2是复数。 操作结果:返回两个复数z1、z2的和值。 ADT Complex (2)复数类模板的定义(XXXX.h,如complex.h)template <class T>class Complexprivate: T real,imag; public: Complex(); Complex(T r,T i); T Getreal()const;
26、 T Getimag()const; Complex<T> Add(Complex &c); /其他运算 Complex<T> operator+(Complex &c); /其他运算重载 void Output(ostream& out); void Input(istream& in);(3)复数类模板中成员函数的实现(complex.cpp)(4)主程序模块定义 在没有学习可视化图形界面之前,建议在主函数中简单设计一个“菜单”(do-while循环内嵌套一个 switch结构)。随着学习的深入,应该学会熟练使用“菜单”技术,这样会明显提高编程和运行效率。一个主函数一般样式如下:(参考代码) do /显示菜单内容 cout<<"=欢迎使用复数运算系统=n&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级地理上册 第四章 中国的经济发展 第一节 交通运输 第2课时 我国铁路干线的分布教学设计 (新版)新人教版
- 3学会自我保护 (公开课一等奖创新教学设计)统编版道德与法治七年级下册
- 2创新永无止境 公开课一等奖创新教学设计(表格式)-1
- UTF-8‘’Brand KPIs for ready-made-food Aunt Bessie's in the United Kingdom-外文版培训课件(2025.2)
- 微量泵使用与护理
- 案例分析1人感染高致病性禽流感疫情52
- 收藏品质押借款合同
- 仓库租赁买卖合同样本
- 软件开发合同技术创新目标
- 《探求知识的互联互通》课件
- NBT47013涡流检测通用工艺规程
- 2024年陆上石油天然气开采安全管理考试题库附答案
- 北师大版 数学 二年级下册 单元测试卷
- 工会会计账务处理智能系统
- 差异表达基因分析5趋势性上调和下调基因分析6基因集功
- 程序文件流程培训
- 车工工艺与技能训练(第3版)PPT完整全套教学课件
- 厂房租赁合同参考
- 讲培训转化为商业结果版
- 【幼儿园家园合作的现状及对策研究7400字(论文)】
- 五一劳动节假期安全教育培训课件
评论
0/150
提交评论