文档库 最新最全的文档下载
当前位置:文档库 › 数据结构 设计性实验 有理数四则运算

数据结构 设计性实验 有理数四则运算

数据结构 设计性实验 有理数四则运算
数据结构 设计性实验 有理数四则运算

<<数据结构>> 抽象数据类型实验报告

题目有理数四则运算

学院____ 计算机学院_____ 专业_ 网络工程

年级班别____ 2007级三班___ 学号 3107007033 学生姓名_____江振辉__ 辅导教师_______李小妹________

2009年 6月25 日

1 、实验概要

实验项目名称: 抽象数据类型的实现

实验项目性质: 设计性实验

所属课程名称: 数据结构

实验计划学时: 6

2、实验目的

对某个具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据结构,并在此基础上实现该抽象数据类型的全部基本操作。通过本设计性实验,检验所学知识和能力,发现学习中存在的问题。进而达到熟练地运用本课程中的基础知识及技术的目的。

实验要求如下:

1.参加实验的学生应首先了解设计的任务,然后根据自己的基础和能力从中选择一题。一般来说,选择题目应以在规定的时间内能完成,并能得到应有的锻炼为原则。若学生对教材以外的相关题目较感兴趣,希望选作实验的题目时,应征得指导教师的认可,并写出明确的抽象数据类型定义及说明。

2. 实验前要作好充分准备,包括:理解实验要求,掌握辅助工具的使用,了解该抽象数据类型的定义及意义,以及其基本操作的算法并设计合理的存储结构。

3. 实验时严肃认真,要严格按照要求独立进行设计,不能随意更改。注意观察并记录各种错误现象,纠正错误,使程序满足预定的要求,实验记录应作为实验报告的一部分。

4. 实验后要及时总结,写出实验报告,并附所打印的问题解答、程序清单,所输入的数据及相应的运行结果。

所用软件环境或工具:Dev-C++

3.抽象数据类型

ADT 抽象数据类型名{

数据对象:<数据对象的定义>

数据关系:<数据关系的定义>

基本操作:<基本操作的定义>

}ADT 抽象数据类型名

例:线性表的表示

二、类C语言语法

5. 课程算法设计

#include

#include

#include

int GONGYUESHU(int m,int n)//*求最大公约数*// {

int x,y,z;

if(m

{z=m;m=n;n=z;}

x=m;y=n;

while(y!=0)

{

z=x%y;

x=y;

y=z;

}

return(x);

}

Exit()//*退出*//

{

printf("\n谢谢使用!制作者:计算机学院07级网络工程3班江振辉学号:3107007033");

getchar();

getchar();

}

int fen_Add(int q,int w,int v,int h)//*分数加法*//

{

int o,i,l,k,j;

o=w*h;

i=q*h+w*v;

l=GONGYUESHU(o,i);

k=o/l;

j=i/l;

printf("分数之和为%d/%d\n",j,k);

}

float Add(float a,float b)///*有理数加法*/

{

float sum;

int q,w,v,h,j,x;

char m;

loop1:printf("******************************* 加法运算************************************\n");

printf(" 1、整数、小数加法 2、分数加法 3、退出 \n");

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

printf("请选择1、2或3:");

scanf("%d",&x);

if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");

switch(x)

{

case 1:

{

printf("请输入第一个数据:");

scanf("%f",&a);

printf("请输入第二个数据:");

scanf("%f",&b);

sum=a+b;

printf("a+b=%f",sum);

getchar();

getchar();

break;

}

case 2:

{

printf("输入第一个数的分子: ");

scanf("%d",&q);

printf("输入第一个数的分母: ");

scanf("%d",&w);

printf("输入第二个数的分子: ");

scanf("%d",&v);

printf("输入第二个数的分母: ");

scanf("%d",&h);

fen_Add(q,w,v,h);

break;

}

case 3:

{

Exit();

break;

}

default :

{

printf("输入有误!\n");

goto loop1;

break;

}

}

if(x!=3)goto loop1;

}

int fen_Sub(int q,int w,int v,int h)///*分数减法*/ {

int o,i,l,k,j;

o=w*h;

i=q*h-w*v;

l=GONGYUESHU(o,i);

k=o/l;

j=i/l;

printf("分数之差为%d/%d\n",j,k);

}

float Sub(float a,float b)//*有理数减法*//

{

float result;

int q,w,v,h,j,x;

char m;

loop1:printf("******************************* 减法运算************************************\n");

printf(" 1、整数、小数减法 2、分数减法 3、退出 \n");

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

printf("请选择1、2或3:");

scanf("%d",&x);

if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");

switch(x)

{

case 1:

{

printf("请输入第一个数据:");

scanf("%f",&a);

printf("请输入第二个数据:");

scanf("%f",&b);

result=a-b;

printf("a-b=%f",result);

getchar();

getchar();

break;

}

case 2:

{

printf("输入第一个数的分子: ");

scanf("%d",&q);

printf("输入第一个数的分母: ");

scanf("%d",&w);

printf("输入第二个数的分子: ");

scanf("%d",&v);

printf("输入第二个数的分母: ");

scanf("%d",&h);

fen_Sub(q,w,v,h);

break;

}

case 3:

{

Exit();

break;

}

default :

{

printf("输入有误!\n");

goto loop1;

break;

}

}

if(x!=3)goto loop1;

}

int fen_Mul(int q,int w,int v,int h)//*分数乘法*//

{

int o,i,l,k,j;

o=w*h;

i=q*v;

l=GONGYUESHU(o,i);

k=o/l;

j=i/l;

printf("分数之积为%d/%d\n",j,k);

}

float Mul(float a,float b)//*有理数乘法*//

{

float result;

int q,w,v,h,j,x;

char m;

loop1:printf("******************************* 乘法运算************************************\n");

printf(" 1、整数/小数乘法 2、分数乘法 3、退出 \n");

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

printf("请选择1、2或3:");

scanf("%d",&x);

if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");

switch(x)

case 1:

{

printf("请输入第一个数据:");

scanf("%f",&a);

printf("请输入第二个数据:");

scanf("%f",&b);

result=a*b;

printf("a*b=%f",result);

getchar();

getchar();

break;

}

case 2:

{

printf("输入第一个数的分子: ");

scanf("%d",&q);

printf("输入第一个数的分母: ");

scanf("%d",&w);

printf("输入第二个数的分子: ");

scanf("%d",&v);

printf("输入第二个数的分母: ");

scanf("%d",&h);

fen_Mul(q,w,v,h);

break;

}

case 3:

{

Exit();

break;

}

default :

{

printf("输入有误!\n");

goto loop1;

break;

}

}

if(x!=3)goto loop1;

}

int fen_Div(int q,int w,int v,int h)//*分数除法*// {

int o,i,l,k,j;

i=q*h;

l=GONGYUESHU(o,i);

k=o/l;

j=i/l;

printf("分数之积为%d/%d\n",j,k);

}

float Div(float a,float b)///*有理数除法*/

{

float result;

int q,w,v,h,j,x;

char m;

loop1:printf("******************************* 除法运算************************************\n");

printf(" 1、整数/小数除法 2、分数除法 3、退出 \n");

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

printf("请选择1、2或3:");

scanf("%d",&x);

if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");

switch(x)

{

case 1:

{

printf("请输入第一个数据:");

scanf("%f",&a);

printf("请输入第二个数据:");

scanf("%f",&b);

result=a/b;

printf("a/b=%f",result);

getchar();

getchar();

break;

}

case 2:

{

printf("输入第一个数的分子: ");

scanf("%d",&q);

printf("输入第一个数的分母: ");

scanf("%d",&w);

printf("输入第二个数的分子: ");

scanf("%d",&v);

printf("输入第二个数的分母: ");

scanf("%d",&h);

fen_Div(q,w,v,h);

break;

}

case 3:

{

Exit();

break;

}

default :

{

printf("输入有误!\n");

goto loop1;

break;

}

}

if(x!=3)goto loop1;

}

float feng(float z)//*求分子分母运算*//

{

int f,k,j,x;

float elem=1000000;

loop1:printf("***************************** 求分子分母运算*****************************\n");

printf(" 1、输入数据 2、退出\n");

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

printf("请选择1或2:");

scanf("%d",&x);

if(x!=1&&x!=2)printf("非法输入,请重新输入!");

if(x==1)

{

printf("请输入一个有理数:");

scanf("%f",&z);

z=z*elem;

f=GONGYUESHU(z,elem);

j=elem/f;

k=(int)z/f;

printf("分子是%d,分母是%d\n",k,j);

goto loop1;

}

if(x==2)Exit();

}

main()//*主程序*//

{

int x;

float a,b,z;

printf("\n**************************** 有理数四则运算******************************\n");

printf(" 1、加法运算 2、减法运算\n");

printf(" 3、乘法运算 4、除法运算\n");

printf(" 5、求分子分母运算 6、退出\n");

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

loop3:printf("请选择运算类型:");

scanf("%d",&x);

printf("\n");

switch(x)

{

case 1:

{

Add(a,b);

break;

}

case 2:

{

Sub(a,b);

break;

}

case 3:

{

Mul(a,b);

break;

}

case 4:

{

Div(a,b);

break;

}

case 5:

{

feng(z);

break;

}

case 6:

{

Exit();

break;

}

default :

{

printf("输入有误!请重新选择:\n"); goto loop3;

break;

}

}

}

5.测试及调试

主函数调用图解:

6.执行过程:

测试两个有理数相除的运算,实现10除以5

主菜单显示:

做除法运算,选择4,ENTER。

由于现在实现整数的除法,所以选择1,ENTER。然后分别输入数据分子10,ENTER,和分母5,ENTER

测试成功通过。

7.实验总结

通过这次课程设计我意识到数据类型的多样性与灵活性。通过如此简单的组合使用边可以实现丰富而实用的功能。但同时,不同的数据类型之间的差异也十分的大,是用时必须小心谨慎,注意区分。有的功能只需要简单的赋值然后和选择语句结合使用便能实现,有的却要使用多种语句才能实现。通过本设计,使我对多种数据类型的使用有了一个更深

刻的认识。

实验指导-数据结构B教案资料

实验指导-数据结构B

附录综合实验 1、实验目的 本课程的目标之一是使得学生学会如何从问题出发,分析数据,构造求解问题的数据结构和算法,培养学生进行较复杂程序设计的能力。本课程实践性较强,为实现课程目标,要求学生完成一定数量的上机实验。从而一方面使得学生加深对课内所学的各种数据的逻辑结构、存储表示和运算的方法等基本内容的理解,学习如何运用所学的数据结构和算法知识解决应用问题的方法;另一方面,在程序设计方法、C语言编程环境以及程序的调试和测试等方面得到必要的训练。 2、实验基本要求: 1)学习使用自顶向下的分析方法,分析问题空间中存在哪些模块,明确这些模块之间的关系。 2)使用结构化的系统设计方法,将系统中存在的各个模块合理组织成层次结构,并明确定义各个结构体。确定模块的主要数据结构和接口。 3)熟练使用C语言环境来实现或重用模块,从而实现系统的层次结构。模块的实现包括结构体的定义和函数的实现。 4)学会利用数据结构所学知识设计结构清晰的算法和程序,并会分析所设计的算法的时间和空间复杂度。 5)所有的算法和实现均使用C语言进行描述,实验结束写出实验报告。

3、实验项目与内容: 1、线性表的基本运算及多项式的算术运算 内容:实现顺序表和单链表的基本运算,多项式的加法和乘法算术运算。 要求:能够正确演示线性表的查找、插入、删除运算。实现多项式的加法和乘法运算操作。 2、二叉树的基本操作及哈夫曼编码译码系统的实现 内容:创建一棵二叉树,实现先序、中序和后序遍历一棵二叉树,计算二叉树结点个数等操作。哈夫曼编码/译码系统。 要求:能成功演示二叉树的有关运算,实现哈夫曼编码/译码的功能,运算完毕后能成功释放二叉树所有结点占用的系统内存。 3、图的基本运算及智能交通中的最佳路径选择问题 内容:在邻接矩阵和邻接表两种不同存储结构上实现图的基本运算的算法,实现图的深度和宽度优先遍历算法,解决智能交通中的路径选择问题。设有n 个地点,编号为0~n-1,m条路径的起点、终点和代价由用户输入提供,寻找最佳路径方案(例如花费时间最少、路径长度最短、交通费用最小等,任选其一即可)。 要求:设计主函数,测试上述运算。 4、各种内排序算法的实现及性能比较 内容:验证教材的各种内排序算法。分析各种排序算法的时间复杂度。 要求:使用随机数产生器产生较大规模数据集合,运行上述各种排序算法,使用系统时钟测量各算法所需的实际时间,并进行比较。

数据结构课程实验指导书

数据结构实验指导书 一、实验目的 《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。本课程较为系统地论述了软件设计中常用的数据结构以及相应的存储结构与实现算法,并做了相应的性能分析和比较,课程内容丰富,理论系统。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: 1)理论艰深,方法灵活,给学习带来困难; 2)内容丰富,涉及的知识较多,学习有一定的难度; 3)侧重于知识的实际应用,要求学生有较好的思维以及较强的分析和解决问题的能力,因而加大了学习的难度; 根据《数据结构》课程本身的特性,通过实验实践内容的训练,突出构造性思维训练的特征,目的是提高学生分析问题,组织数据及设计大型软件的能力。 课程上机实验的目的,不仅仅是验证教材和讲课的内容,检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面: (1)加深对课堂讲授内容的理解 实验是对学生的一种全面综合训练。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实验题中的问题比平时的习题复杂得多,也更接近实际。实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变" 活" ,起到深化理解和灵活掌握教学内容的目的。 不少学生在解答习题尤其是算法设计时,觉得无从下手。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出

现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 (2) 培养学生软件设计的综合能力 平时的练习较偏重于如何编写功能单一的" 小" 算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。 通过实验使学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构、算法和程序设计技术的能力,而且可以在需求分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养计算机软件工作所需要的动手能力。 (3) 熟悉程序开发环境,学习上机调试程序一个程序从编辑,编译,连接到运行,都要在一定的外部操作环境下才能进行。所谓" 环境" 就是所用的计算机系统硬件,软件条件,只有学会使用这些环境,才能进行 程序开发工作。通过上机实验,熟练地掌握程序的开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。 完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆语法错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,尽快掌握程序调试方法是非常重要的。分析问题,选择算法,编好程序,只能说完成一半工作,另一半工作就是调试程序,运行程序并得到正确结果。 二、实验要求 常用的软件开发方法,是将软件开发过程划分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的实验题目的远不如从实际问题中的复杂程度度高,但为了培养一个软件工作者所应具备的科学工作的方法和作风,也应遵循以下五个步骤来完成实验题目: 1) 问题分析和任务定义 在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么?限制条件是什么。本步骤强调的是做什么?而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的

(完整word版)数据结构课程设计实验报告

设计题目:一 单位员工通讯录管理系统 一、题目要求 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。二、概要设计 本程序通过建立通讯录链表,对员工信息进行记录,并建立一个系统的联系。 三、主要代码及分析 这里面关于链表的主要的操作有插入,查询,删除。则这里只列出这几项的主代码。 1、通过建立通讯录结构体,对信息进行存储,建立链表,建立信息之间 的联系。 typedef struct { }DataType;结构体来存储通讯录中的基本信息 typedef struct node { DataType data; /*结点的数据域*/ struct node *next; /*结点的指针域*/ }ListNode,*LinkList; 2、信息插入操作,将信息查到链表的后面。 void ListInsert(LinkList list){ //信息插入 ListNode *w; w=list->next; while(w->next!=NULL) { w=w->next; } ListNode *u=new ListNode; u->next=NULL; cout<<"员工编号:";cin>>u->data.num; cout<<"员工姓名:";cin>>u->https://www.wendangku.net/doc/9c10217367.html,; cout<<"手机号码:";cin>>u->data.call; cout<<"员工邮箱:";cin>>u->data.email; cout<<"办公室电话号码:";cin>>u->data.phone; w->next=u;w=w->next; }

数据结构实验一题目一线性表实验报告

数据结构实验报告 实验名称:实验1——线性表 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 1、实验目的:熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 学习指针、模板类、异常处理的使用 掌握线性表的操作的实现方法 学习使用线性表解决实际问题的能力 2、实验内容: 题目1: 线性表的基本功能: 1、构造:使用头插法、尾插法两种方法 2、插入:要求建立的链表按照关键字从小到大有序 3、删除 4、查找 5、获取链表长度 6、销毁 7、其他:可自行定义 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 带头结点的单链表

2.2 关键算法分析 1.头插法 a、伪代码实现:在堆中建立新结点 将x写入到新结点的数据域 修改新结点的指针域 修改头结点的指针域,将新结点加入链表中b、代码实现: Linklist::Linklist(int a[],int n)//头插法 {front=new Node; front->next=NULL; for(int i=n-1;i>=0;i--) {Node*s=new Node; s->data=a[i]; s->next=front->next; front->next=s; } } 2、尾插法

a、伪代码实现:a.在堆中建立新结点 b.将a[i]写入到新结点的数据域 c.将新结点加入到链表中 d.修改修改尾指针 b、代码实现: Linklist::Linklist(int a[],int n,int m)//尾插法 {front=new Node; Node*r=front; for(int i=0;idata=a[i]; r->next=s; r=s; } r->next=NULL; } 时间复杂度:O(n) 3、按位查找 a、伪代码实现: 初始化工作指针p和计数器j,p指向第一个结点,j=1 循环以下操作,直到p为空或者j等于1 b1:p指向下一个结点 b2:j加1 若p为空,说明第i个元素不存在,抛出异常 否则,说明p指向的元素就是所查找的元素,返回元素地址 b、代码实现 Node* Linklist::Get(int i)//得到指向第i个数的指针 {Node*p=front->next; int j=1; while(p&&j!=i)//p非空且j不等于i,指针后移 {p=p->next; j++;

数据结构课程设计实验报告

《空间数据结构基础》 课程实习报告(测绘10级) 姓名 班级 学号 环境与测绘学院

1C++面向对象程序设计基础 【实验简介】学会用算法语言C++描述抽象数据类型,使用模板建立数据结构。理解数据结构的组成分为两部分,第一部分是数据集(数据元素),第二部分是在此数据集上的操作。从面向对象的观点看,这两部分代表了对象的属性和方法。掌握用C++描述数据结构的基本方法,即通过建立类来描述抽象数据类型。类的数据成员提供对象属性,成员函数提供操作方法,方法是公共接口,用户通过调用方法实现对属性的访问。 【实验内容】 1.定义三维空间的坐标点TPoint 2.描述三维空间的球TBall,实现其主要操作(如计算体积和表面积,输出空间坐标 等)。 【主要代码】 头文件: TPoint.h: #ifndef TPOINT_H #define TPOINT_H #include using namespace std; class TPoint { public: TPoint(double xx,double yy,double zz):x(xx),y(yy),z(zz){} TPoint(TPoint &TP):x(TP.x),y(TP.y),z(TP.z){} double getX()const{return x;}//取x坐标值 double getY()const{return y;}//取y坐标值 double getZ()const{return z;}//取z坐标值 void DisplayTP() const {cout<<"("<

设计性实验报告格式

大学物理设计性实验报告 实验项目名称:万用表设计与组装实验仪 姓名:李双阳学号:131409138 专业:数学与应用数学班级:1314091 指导教师:_王朝勇王新练 上课时间:2010 年12 月 6 日

一、实验设计方案 实验名称:万能表的设计与组装试验仪 实验时间:2010年12月6日 小组合作: 是 小组成员:孙超群 1. 实验目的:掌握数字万用表的工作原理、组成和特性。 2. 掌握数字万用表的校准和使用。 3. 掌握多量程数字万用表分压、分流电路计算和连接;学会设计制作、使用多量程数字万用表 2、实验地点及仪器、设备和材料: 万用表设计与组装实验仪、标准数字万用表。 3、实验思路(实验原理、数据处理方法及实验步骤等): 1. 直流电压测量电路 在数字电压表头前面加一级分压电路(分压电阻),可以扩展直流电压测量的量程。 数字万用表的直流电压档分压电路如图一所示,它能在不降低输入阻抗的情况下,达到准确的分压效果。 例如:其中200 V 档的分压比为: 001.010*********==+++++M K R R R R R R R 其余各档的分压比分别为: 档位 200mV 2V 20V 200V 2000V 分压比 1 0.1 0.01 0.001 0.0001 图一 实用分压器电路 实际设计时是根据各档的分压比和总电阻来确定各分压电阻的,如先确定 M R R R R R R 1054321=++++=总 再计算200V 档的电阻:K R R R 10001.021==+总,依次可计算出3R 、4R 、5R 等各档的分压电阻值。换量程时,多刀量程转换开关可以根据档位调整小数点的位置,使用者可方便地直读出测量结果。 尽管上述最高量程档的理论量程是2000V ,但通常的数字万用表出于耐压和安全考虑,规定最高电压量限为1000V 或750V 。

数据结构课程设计实验指导书

《数据结构课程设计》实验指导书 1.1 实验报告撰写的基本要求 1.1.1 问题描述 这一部分需要简单介绍题目内容,即该实验到底要做什么。 1.1.2 算法说明 这一部分需要详细描述解决问题需要用到算法和重要的数据结构,即该实验到底应该怎么做。 基本要求:处理问题中所用到的关键算法都要描述清楚,而不是仅描述主函数。算法和数据结构可用伪码和图示描述,不要只写源代码和注释。 1.1.3 测试结果 这一部分内容需要紧扣实习的题目类型和要求,涉及提供相应的测试方法和结果。 对于需要利用某算法解决某问题的题目,应设计并填写一张测试用例表。每个测试用例一般包括下列内容: (1)测试输入:设计一组输入数据; (2)测试目的:设计该输入的目的在于测试程序在哪方面可能存在漏洞; (3)正确输出:对应该输入,若程序正确,应该输出的内容; (4)实际输出:该数据输入后,实际测试得到的输出内容; (5)错误原因:如果实际输出与正确输出不符,需分析产生错误的可能原因; (6)当前状态:分为“通过”(实际输出与正确相符)、“已改正”(实际输出与正确输出不符,但现在已修改正确)、“待修改”(实际输出与正确输出不符,且尚未改正)三种状态; (7)测试结果分析:需要详细解释测试策略,对得到的数据进行分析,总结出算法的时空复杂度,得出自己对算法性能等方面分析的结论。 附录:源代码 源代码列在附录中,要求程序风格清晰易理解,有充分的注释,有意义的注释行少于代码的30%将不能得分。

1.2 实习作业的提交要求 每个实习项目结束后,学生按照实验报告格式和内容要求提交实验报告(打印稿)1份,与此同时提交压缩后的电子资料1份,电子资料要求按照如下方式打包: 文档夹:包括电子版的实验报告 学号姓名.rar 源代码文件 代码夹:源代码文件对应的可执行文件 readme.txt文件,告知如何编译源代码,生 成可执行文件

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

设计性实验报告

计算机与信息工程学院设计性实验报告 一、 实验目的 1.掌握线性时不变系统的两种描述形式—传递函数描述法、零极点增益描述法。 2.掌握两种描述形式之间的转换。 3.掌握连续和离散系统频率响应的求解 二、 实验仪器或设备 装MATLAB 软件的计算机一台。 三、 实验内容 1. 生成20个点的单位脉冲信号、单位阶跃信号,并记录下函数命令和波形。 2. 生成占空比为30%的矩形波。 3. 将连续系统 4)(s )21)(s (s 3) 1)(s -(s 0.5H(s)++++=转化为传递函数模型的描述形式。 4. 将离散系统 4-3-2-1--2 -10.5z 0.9z -1.3z 1.6z -12z 5z 3H(z)++++=转化为传递函数和零极点增益模型的的描述形式。

四、实验步骤(包括主要步骤、代码分析等) 1. 生成20个点的单位脉冲信号、单位阶跃信号,并记录下函数命令和波 形。 程序: clear,clc,close %清除变量空间变量,清除命令窗口命令,关闭图形窗口 t=-10:9; %取20个点 ft1=(t==0); %单位脉冲信号函数 ft2=(t>=0); %单位阶跃信号函数 subplot(1,2,1),stem(t,ft1,'m-o') %图像窗口1行2列的第1个子图绘制单位脉冲信号图形 title('20个点的单位脉冲信号'); %设置标题为“20个点的单位脉冲信号” subplot(1,2,2),stem(t,ft2) %图像窗口1行2列的第2个子图绘制单位阶跃信号图形 title('20个点的单位阶跃信号'); %设置标题为“20个点的单位阶跃信号” 2. 生成占空比为30%的矩形波。 程序: clear,clc,close %清除变量空间变量,清除命令窗口命令 x=0:0.001:0.6; %设置变量x的值范围 y=square(2*pi*10*x,30); %用square函数得到占空比为30%的矩形波 plot(x,y,'m'); %绘制矩形波的图像

数据结构实验报告-答案

数据结构(C语言版) 实验报告

专业班级学号姓名 实验1 实验题目:单链表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测 试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序: (1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码: #include"" #include"" #include"" #include"" typedef struct node . . 示意图:

head head head 心得体会: 本次实验使我们对链表的实质了解更加明确了,对链表的一些基本操作也更加熟练了。另外实验指导书上给出的代码是有一些问题的,这使我们认识到实验过程中不能想当然的直接编译执行,应当在阅读并完全理解代码的基础上再执行,这才是实验的意义所在。

实验2 实验题目:二叉树操作设计和实现 实验目的: 掌握二叉树的定义、性质及存储方式,各种遍历算法。 实验要求: 采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历 的操作,求所有叶子及结点总数的操作。 实验主要步骤: 1、分析、理解程序。 2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针), 如ABD###CE##F##,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求 所有叶子及结点总数。 实验代码 #include"" #include"" #include"" #define Max 20 ertex=a; irstedge=NULL; irstedge; G->adjlist[i].firstedge=s; irstedge; R[i] 留在原位

数据结构与算法设计实验

《数据结构与算法设计》 实验报告 ——实验二 学院:自动化学院 班级: 学号: : 一、实验目的

按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。 二、实验容 简单计算器。 请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。要求: ①从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志。 ②输入表达式中的数值均为大于等于零的整数。中间的计算过程如果出现小数也只取 整。 例如,输入:4+2*5= 输出:14 输入:(4+2)*(2-10)= 输出:-48 三、程序设计 概要设计 1、宏定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 2、基本函数: (1)void InitStack_char(SqStack *S) //char型栈初始化 (2)void InitStack_int(sqStack *S) //int型栈初始化 (3)void Push_char(SqStack *S,char ch) //char型元素进栈 (4)void Push_int(sqStack *S,int num) //int型元素进栈 (5)char GetTop_char(SqStack *S) //取char型栈顶元素 (6)int GetTop_int(sqStack *S) //取int型栈顶元素 (7)Status In(char c) //判断是否为运算符,若是运算符则返回,否则返回 (8)char Precede(char a,char b) //判断两运算符的先后次序 (9)Status Pop_char(SqStack *S,char &x) //char型栈出栈 (10)Status Pop_int(sqStack *S,int &x) //int型栈出栈 (11)int Operate(int a,char theta,int b) //计算a和b运算结果 3、流程图

数据结构 第8章 实验报告 导师、学生

数据结构 实验报告第五章 实验名称:本科生导师制问题 实验类型:综合性实验 班级: 学号: 姓名: 实验日期:2014年6月7日 1.问题描述 在高校的教学改革中,有很多学校实行了本科生导师制。一个班级的学生被分给几个老师,每个老师带n个学生,如果该老师还带研究生,那么研究生也可直接带本科生。本科生导师制问题中的数据元素具有如下形式: ●导师带研究生 (老师,((研究生1,(本科生1,…,本科生m1)),(研究生2,(本科 生1,…,本科生m2))…)) ●导师不带研究生 (老师,(本科生1,…,本科生m)) 导师的自然情况只包括姓名、职称;研究生的自然情况只包括姓名、班级;本科生的自然情况只包括姓名、班级。 要求完成以下功能: ●建立:建立导师广义表。 ●插入:将某位本科生或研究生插入到广义表的相应位置。 ●删除:将某本科生或研究生从广义表中删除。 ●查询:查询导师、本科生(研究生)的情况。 ●统计:某导师带了多少个研究生和本科生。 ●输出:将某导师所带学生情况输出。 ●退出:程序结束。 2.数据结构设计 本实验使用的数据结构是广义表,广义表采用头尾链表存储结构来实现。 定义教师、学生结点结构体如下: typedef struct GLNode { char name[100]; /*教师或学生的姓名*/ char prof[100]; /*教师结点表示职称,学生结点表示班级*/ int type; /*结点类型:0-教师,1-研究生,2-本科生*/

struct {struct GLNode *hp, *tp;} ptr; /*hp指向同级的下一结点,tp指向下级的首结点*/ }GList; 3.算法设计 这个程序主要包括:建表、插入结点、删除结点、查找结点、统计导师结点下所有结点信息、输出某个节点或某个节点下所有信息。 (1)建表 Glist* createGlist()//创建一个教师表,返回指针赋给主函数的G头指针;{ Glist *s=NULL,*g=NULL; int k=1;//用于控制是否继续输入 while(k) { g=createnode(); //建立一个结点 if(g==NULL){ cout<<"创建失败!"; return 0; } else //用尾插法插入 { g->ptr.tp=NULL; g->ptr.hp=s; s=g; } cout<<"是否继续? 否:0 是:1"<>k; } return s; } (2)插入结点 int InsertGlist(Glist *s)//向表中插入学生 { char nam[10]; Glist *suit,*g; cout<<"请输入被插入的老师或研究生名字:"; cin>>nam; suit=Findnode(s,nam); if(suit!=NULL) { g=createnode(); //生成结点并插入

苯妥英钠设计性实验报告

设计性实验报告 实验名称:苯妥英钠的制备与分析 姓名:闫洁 班级: 学号:39 日期:2015.11.2

设计性实验报告 一、实验目的 1.学习安息香缩合反应的原理和应用维生素B1及氰化钠为催化剂进行反应的实验方法。 2.学习有害气体的排出方法。 3.学习二苯羟乙酸重排反应机理。 4.掌握用硝酸氧化的实验方法。 二、实验方案一 1、实验原理 1.安息香缩合反应(安息香的制备) 2.氧化反应(二苯乙二酮的制备) 3.二苯羟乙酸重排及缩合反应(苯妥英的制备) 4.成盐反应(苯妥英钠的制备) 2、实验仪器与药品 仪器:烧杯(500 ml 250 ml )量筒、锥形瓶、三颈瓶、抽滤瓶、球形冷凝管、干燥管、水浴锅、布氏漏斗、温度计、玻璃棒、抽滤器、 药品:苯甲醛、盐酸硫胺、氢氧化钠、无水乙醇、硝酸、浓盐酸 CHO VitB 1or NaCN O H HNO 3 O O O O H O O 1.H 2NCO NH 2/NaO H 2.HCl N H O O H 5C 6H 5C 6N H N H N O O Na H 5C 6H 5C 6 N H O OH H 5C 6 H 5C 6N O H 2NaOH

4、实验装置图 5、实验步骤 (一)安息香的制备(盐酸硫胺催化) 1.原料规格及用量配比 名称规格用量摩尔数摩尔比 苯甲醛CP d 1.050 bp179.9℃20 ml0.2 盐酸硫胺原料药 3.5 g 氢氧化钠CP10 ml 2. 操作 在100 ml三口瓶中加入3.5 g盐酸硫胺(Vit.B1)和8 ml水,溶解后加入95%乙醇30 ml。搅拌下滴加2 mol/L NaOH溶液10 m1。再取新蒸苯甲醛20 ml,加入上述反应瓶中。水浴加热至70℃左右反应1.5 h。冷却,抽滤,用少量冷水洗涤。干燥后得粗品。测定熔点,计算收率。mp 136—l37℃ 注:也可采用室温放置的方法制备安息香,即将上述原料依次加入到100 ml三角瓶中,室温放置有结晶析出,抽滤,用冷水洗涤。于燥后得粗品。测定熔点,计算收率。 (二)二苯乙二酮(联苯甲酰)的制备 1.主要原料规格及用量比 名称规格用量摩尔数摩尔比 安息香自制8.5 g0.04 1 硝酸(65%-68%) CP d 1.40 bp122℃25 ml0.379.25 2.操作 取8.5 g粗制的安息香和25 ml硝酸(65%-68%)置于100 ml圆底烧瓶中,安装冷凝器和气体连续吸收装置,低压加热并搅拌,逐渐升高温度,直至二氧化氮逸去(约1.5—2 h)。反应完毕,在搅拌下趁热将反应液倒入盛有150 ml冷水的烧杯中,充分搅拌,直至油状物呈黄色固体全部析出。抽滤,结晶用水充分洗涤至中性,干燥,得粗品。用四氯化碳重结晶(1:2),也可用乙醇重结晶(1:25),mp.94—96℃。 (三)苯妥英的制备

数据结构课程设计实验报告

数据结构课程设计实验报告

设计题目:一 单位员工通讯录管理系统 一、题目要求 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。 二、概要设计 本程序通过建立通讯录链表,对员工信息进行记录,并建立一个系统的联系。 三、主要代码及分析 这里面关于链表的主要的操作有插入,查询,删除。则这里只列出这几项的主代码。 1、通过建立通讯录结构体,对信息进行存储,建立链表,建立信息之间 的联系。 typedef struct { }DataType;结构体来存储通讯录中的基本信息 typedef struct node { DataType data; /*结点的数据域*/ struct node *next; /*结点的指针域*/ }ListNode,*LinkList; 2、信息插入操作,将信息查到链表的后面。 void ListInsert(LinkList list){ //信息插入 ListNode *w; w=list->next; while(w->next!=NULL) { w=w->next; } ListNode *u=new ListNode; u->next=NULL; cout<<"员工编号:";cin>>u->data.num; cout<<"员工姓名:";cin>>u->https://www.wendangku.net/doc/9c10217367.html,; cout<<"手机号码:";cin>>u->data.call; cout<<"员工邮箱:";cin>>u->data.email; cout<<"办公室电话号码:";cin>>u->data.phone; w->next=u;w=w->next; }

大学物理设计性实验设计性实验报告

大学物理实验设计性实 验 --电位差计测金属丝电 阻率 姓名:马野 班级:土木0944 学号: 0905411418 指导教师:曹艳玲 实验地点:大学物理实验教学中心

【实验目的】 1. 了解电位差计的结构,正确使用电位差计; 2掌握电位差的工作原理—补偿原理。 3能用电位差计校准电表和电阻率的测定。 4学习简单电路的设计方法,培养独立工作的能力。 【实验原理】 利用电位差计,通过补偿原理,来测定未知电阻和已知电阻两端的 电压,利用分压原理,算出未知电阻的阻值,利用螺旋测微器和刻度尺测出电阻丝的长度和横截面积的直径,通过电阻率公式即可计算出电阻率。 补偿原理 在图1的电路中,设E 0是电动势可调的标准电源,Ex 是待测电池的电动势(或待测电压Ux ),它们的正负极相对并接,在回路串联上一只检流计G ,用来检测回路中有无电流通过。设E 0的内阻为r 0;Ex 的内阻为 rx 。根据欧姆定律,回路的总电流为: 电位差原理 如果我们调节E 0使E 0和Ex 相等,由(1)式可知,此时I =0,回路无电流通过,即检流计指针不发生偏转。此时称电路的电位达到补偿。在电位补 R R r r E E I g x x +++-= 00 图1 补偿原理 x

偿的情况下,若已知E 0的大小,就可确定Ex 的大小。这种测定电动势或电压的方法就叫做补偿法。 显然,用补偿法测定Ex ,必须要求E 0可调,而且E 0的最大值E 0max >Ex ,此外E 0还要在整个测量过程中保持稳定,又能准确读数。在电位差计中,E 0是用一个稳定性好的电池(E )加上精密电阻接成的分压器来代替的,如图2所示。 图2中,由电源E 、限流电阻R 1以及均匀电阻丝RAD 构成的回路叫做工作回路。由它提供稳定的工作电流I 0,并在电阻RAD 上产生均匀的电压降。改变B 、C 之间的距离,可以从中引出大小连续变化的电压来,起到了与E 0相似的作用。为了能够准确读出该电压的读数,使用一个标准电池进行校准。换接开关K 倒向“1”端,接入标准电池E S ,由E S 、限流电阻R 2、检流计G 和RBC 构成的回路称为校准回路。把B 、C 固定在适当的位置(如图中的位置),设RBC =R S ,调节R 1(即调节I 0),总可以使校准回路的电流为零,即R S 上的电压降与E S 之间的电位差为零,达到补偿。 图2 电位差计原理图 x

数据结构实验报告--图实验

图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e)

{ int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: "; cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } } template void MGraph::DFSTraverse(int v) { cout << vertex[v]; visited[v] = 1; for(int j = 0; j < vertexNum; j++) if(arc[v][j] == 1 && visited[j] == 0) DFSTraverse(j); } template void MGraph::BFSTraverse(int v) { int Q[MaxSize]; int front = -1, rear = -1; cout << vertex[v]; visited[v] = 1; Q[++rear] = v; while(front != rear) { v = Q[++front]; for(int j = 0;j < vertexNum; j++) if(arc[v][j] == 1 && visited[j] == 0){ cout << vertex[j]; visited[j] = 1;

胰岛素设计性实验报告doc

胰岛素设计性实验报告 篇一:实验设计-修订版 胰岛素所致的低血糖休克及药物 和激素对血糖的影响 第一临床医学院XX级医学检验一班 设计人:郭英刘雨霏刘妮彭超 XX年3月12日 【题目】胰岛素所致低血糖休克及药物和激素对血糖的影响 【背景】 胰岛素是重要的内分泌激素之一,主要生理作用是全面地调节糖类代谢,同时也相应地调节脂肪和蛋白代谢。正常动物由于神经系统的调节和激素的相互作用,血液中胰岛素浓度是相对稳定的。若给正常动物注射胰岛素,可造成人胰岛素性低血糖症状。血糖浓度持续降低而出现交感神经兴奋性增高和脑功能障碍症群而导致的综合症就是低血糖休克。在实验条件下如果给动物注射过量的胰岛素,使动物体内胰岛素量骤然升高,可造成动物实验性低血糖,会使神经组织的正常代谢和功能发生障碍,以至产生痉挛昏迷,外部表现为惊厥,称之为胰岛素休克。小鼠的低血糖休克实验属于经典实验.传统的胰岛素休克实验目的是观察人工胰岛素性低血糖休克以及注射葡萄糖后的消失过程,以加深对胰岛素

生理作用的理解.但实验中一般不测定小鼠血糖的变化,只是观察胰岛素造成低血糖休克时的行为变化。 现阶段对胰岛素降低血糖的原理研究较多,其他药物和激素如甲状腺素、生长激素、糖皮质激素对血糖的研究也以较多,但都是单量试验,并未将多种激素和药物联合起来观察对血糖影响的研究。本次试验将通过制作胰岛素低血糖休克模型来同时观察多种药物和激素对血糖的影响。 体内降低血糖的激素只有胰岛素一种,但升高血糖的激素却不止胰高血糖素一种。糖皮质激素是一种胰岛素拮抗激素,可以增强肝脏中的糖原异生,促进肝糖原分解,抑制外周组织对葡萄糖的摄取和利用,从而导致血糖升高。而甲状腺素有促进生长发育的作用,也能够促进糖的吸收和糖异生,也可升高血糖。生长激素的主要生理功能是促进神经组织以外的所有其他组织生长;促进机体合成代谢和蛋白质合成;促进脂肪分解;对胰岛素有拮抗作用;抑制葡萄糖利用而使血糖升高等作用。但其剂量不同,对血糖的影响亦不同,本次试验就胰岛素等临床常见的与血糖有关的药物和激素对血糖的影响做相应的探讨。 【目的】 学习检测血糖的方法,观察胰岛素及药物和激素对血糖的影响,同时验证不同剂量的生长激素对血糖的影响不同,从而加深理解药物和激素影响血糖水平的机制。

数据结构实验

实验1 单链表 专业班级信息131班学号201312030131 朱潇翔报告日期2015.11.10 实验类型:●验证性实验○综合性实验○设计性实验 实验目的或任务: 通过指导学生上机实践,对常用数据结构的基本概念及其不同的实现方法的 理论得到进一步的掌握,并对在不同存储结构上实现不同的运算方式和技巧有所 体会。 实验教学基本要求: 1.了解实验目的及实验原理; 2.编写程序,并附上程序代码和结果图; 3.总结在编程过程中遇到的问题、解决办法和收获。 实验教学的容或要求: 1.编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序) 2.编写函数,实现遍历单链表 3.编写函数,实现把单向链表中元素逆置 4.编写函数,建立一个非递减有序单链表 5.编写函数,利用以上算法,建立两个非递减有序单链表,然后合并成一个非递减链表。 6.编写函数,在非递减有序单链表中插入一个元素使链表仍然有序 7.编写函数,实现在非递减有序链表中删除值为x的结点 8.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法 实验开出要求: 必做 实验所需仪器设备: 1.计算机 2.相关软件(如C,C++,PASCAL,VC,DELPHI等等) 实验所用材料: 计算机耗材

实验容: 1.编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序) /*头插法,得到结果与输入元素顺序相反*/ #include #include typedef struct { char data; struct Node * next; }Node, *LinkList; LinkList CreateFromHead(); int main() { LinkList L, p; L = CreateFromHead(); p = L->next; /*输出单链表*/ do { printf("->%c", p->data); p = p->next; } while (p != NULL); printf("\n"); system("pause"); return 0; } /*头插法*/ LinkList CreateFromHead() { char c; int flag = 1; Node *s; Node *L; L = (LinkList)malloc(sizeof(Node)); L->next = NULL; while (flag) { c = getchar(); if (c != '\n') { s = (Node *)malloc(sizeof(Node)); s->data = c;

相关文档
相关文档 最新文档