软件技术基础--上机实验三
- 格式:docx
- 大小:130.97 KB
- 文档页数:20
《软件技术基础》实验指导书电子商务教研室2009年9月实验三队列的应用◆实验目的与基本要求1、掌握队列的顺序存储和链式存储结构。
2、掌握队列的特点。
3、掌握队列的基本运算。
◆实验条件1、硬件:一台微机2、软件:操作系统和C语言系统◆实验方法确定存储结构后,上机调试实现队列的基本运算。
◆实验内容1、写出队列的出队和入队算法。
2、设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚,依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已停放n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆次序。
编制一个程序模拟该停车场的管理。
◆性质:必做◆类型:验证◆2h队列是从日常排队现象抽象出来的一种数学模型。
当然数据结构中的队列远没有生活中的排队灵活。
数据结构中的队列规定:数据只能从队尾进,从队首出来。
已经进入队列的数据次序不能再做改变。
这就叫做“先进先出”(FIFO)或者说“后进后出”(LILO)。
允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素,即尾指针总是指向最后被插入的元素;允许删除的一端称为队首,通常也用一个队首指针(front)指向队首元素的前一个位置(当然也可以直接指向队首元素,只是许多数据结构的书上都习惯这么定义)。
与队列类似,我们可以用一维数组来模拟队列这种数据结构,也可以用链表来模拟。
根据以上描述,队列可以可以有以下基本操作:1、创建初始化:按约定置队列为空状态。
实验报告的总结怎么写实验报告是实验过程的总结与提升,也是实验的一个重要环节,但其重要性往往被忽略,特别是实验数据的总结,今天店铺给大家整理了实验报告的总结怎么写,谢谢大家对小编的支持。
实验报告的总结怎么写篇一本学期我们生科专业开设了3门实验课,在实验课中,我学到了很多在平时的学习中学习不到的东西,尤其是物理光学实验。
它教会我更多的应该是一种态度,对待科学,对待学习。
为期七周的的大学物理实验就要画上一个圆满的句号了,回顾这七周的学习,感觉十分的充实,通过亲自动手,使我进一步了解了物理实验的基本过程和基本方法,为我今后的学习和工作奠定了良好的实验基础。
我很感谢能够有机会学习物理实验,因为每一位老师都教会了我很多。
每次上实验课,老师都给我们认真的讲解实验原理,轮到我们自己动手的时候,老师还常常给予我们帮助,不厌其烦地为我们讲解,直到我们做出来。
有的同学在实验过程中出现了问题,就耽误了时间,老师也总是陪着我们直到最后一名同学做完实验。
在大学物理实验课即将结束之时,我对在这一年来的学习进行了总结,总结这一年来的收获与不足。
取之长、补之短,在今后的学习和工作中有所受用。
下面我就对我这一年所学到的东西做一个概述:1、实验课的基本程序1.1、课前预习:对于每一次将要进行的实验,我们都要做好预习,通过阅读实验教材,上网搜索资料,自己翻阅其他辅导书,弄清本次实验的目的、原理和所要使用的仪器,明确测量方法,了解实验要求及实验中特别要注意的问题等。
这一步至关重要,它是实验成败的关键。
我觉得我对于这一点还是做的不错的,因此每一次实验都能够很顺利地完成。
而且我发现我准备地越充分,实验就会越顺利。
因为前期的准备可以使我在实验的时候避免手忙脚乱,充分的预习也使我充满了信心。
因为我做了充分的预习,在实验中就不会遇到突发状况就不知该如何是好。
就这样一步一个脚印,就不必“从头再来”,节省了时间。
1.2、实验操作我们做实验是在每周周二的下午,先由实验辅导老师对实验进行讲解,老师的讲解很重要,一定要认真地听。
《软件技术基础2》实验报告3学院机械学院专业能源与动力工程年级2015姓名666任课教师葛卫民实验指导葛卫民2016年10月日实验三一、实验目的通过本试验,使学生理解数组、指针的概念及基本用法;掌握数组与指针程序的设计方法;掌握求最大最小、排序、字符串处理等基本算法的思想和使用方法。
二、实验内容1.通过程序实例,理解数组及指针的概念及基本语法。
2.编写教材第三章习题3中1、2、3、5、6、7要求的程序,并完成上机调试的实验任务。
其中第3题的第7小题需要分别用数组、指针结合动态内存分配两种方法来实现。
三、实验准备1.复习第三章的内容,重点是3.1、3.2、3.5节的内容及相关例题;2.编写教材第三章习题3中1、2、3、5、6、7要求的程序。
四、实验任务任务一:第1小题1.内容:向数组a中输入十个整数,求其中最大值,最小值和十个数的算术平均值。
2.源程序:#include <iostream.h>void main( ){int a[10],amax,amin,sum(0);double ave;cout<<"输入10个数:";for (int i=0; i<10; i++) cin>> a[i];for(i=0;i<10;i++) sum+=a[i];ave=sum/10.0;amax=amin=a[0];i=1;while(i<10){ if(a[i]>amax) amax=a[i];if(a[i]<amin) amin= a[i];i++;}cout<<"算术平均值="<<ave<<endl;cout<<"最大值="<<amax<<endl;cout<<"最小值="<<amin<<endl;}3.运行结果:4.实验中遇到的主要问题及解决方法无任务二:第2小题1.内容:输入十个学生一门课的成绩,分别统计大于平均值的人数和小于60分的人数。
说明每个实验题目含有一个main函数和一些函数, 与实验题目相关的基本运算的函数定义和main函数定义的代码在附录以及对应的文件夹中给出, 供上机实验参考使用。
对于每个题目, 只需要根据题目要求设计算法, 补充函数定义, 然后对程序进行编译、调试。
实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验内容设有一个线性表E={e1, e2, …, en-1, en}, 设计一个算法, 将线性表逆置, 即使元素排列次序颠倒过来, 成为逆线性表E’={ en , en-1 , …, e2 , e1 }, 要求逆线性表占用原线性表空间, 并且用顺序表和单链表两种方法表示, 分别用两个程序来完成。
(文件夹: 顺序表逆置、单链表逆置)已知由不具有头结点的单链表表示的线性表中, 含有三类字符的数据元素(字母、数字和其他字符), 试编写算法构造三个以循环链表表示的线性表, 使每个表中只含有同一类的字符, 且利用原表中的结点空间, 头结点可另辟空间。
(文件夹: 分解单链表)实验二栈和队列一、实验目的1.熟悉栈和队列的顺序和链式存储结构2.掌握栈和队列的基本运算3.能够利用栈和队列的基本运算完成栈和队列应用的运算二、实验内容1.设单链表中存放有n个字符, 试编写算法, 判断该字符串是否有中心对称的关系, 例如xyzzyx是中心对称的字符串。
(提示: 将单链表中的一半字符先依次进栈, 然后依次出栈与单链表中的另一半字符进行比较。
)(文件夹: 判字符串中心对称)假设以数组sequ[m]存放循环队列的元素, 同时设变量rear和quelen 分别指示循环队列中队空的条件:sq->quelen==0;队满的条件:sq->quelen==m。
(文件夹:循环队列)实验三串一、实验目的1.熟悉串的顺序存储结构2.掌握串的基本运算及应用二、实验内容1. 串采用顺序存储结构, 编写朴素模式匹配算法, 查找在串中是否存在给定的子串。
《计算机软件技术基础》实验报告专业_____________年级_____________学号_____________学生姓名_____________指导老师_____________南华大学计算机学院编I 实验要求1.每次实验中有若干习题,每个学生至少应该完成其中的两道习题。
2.上机之前应作好充分的准备工作,预先编好程序,经过人工检查无误后,才能上机,以提高上机效率。
3.独立上机输入和调试自己所编的程序,切忌抄袭、拷贝他人程序。
4.上机结束后,应整理出实验报告。
书写实验报告时,重点放在调试过程和小节部分,总结出本次实验中的得与失,以达到巩固课堂学习、提高动手能力的目的。
实验一线性表【实验目的】1.熟悉VC环境,学习如何使用C语言实现线性表的两种存储结构。
2.通过编程、上机调试,进一步理解线性表的基本概念,熟练运用C语言实现线性表基本操作。
3.熟练掌握线性表的综合应用问题。
【实验内容】必做:1.一个线性表有n个元素(n<MAXSIZE, MAXSIZE指线性表的最大长度),且递增有序。
(1)现有一元素x要插入到线性表的适当位置上,并保持线性表原有的顺序不变。
采用链式存储表示方法实现,设计程序实现(2)从单链表中删除指定的元素x,若x在单链表中不存在,给出提示信息。
要求:①指定的值x由键盘输入;②程序能处理空链表的情况。
选做:3.设有头结点的单链表,编程对表中的作一值只保留一个结点,删除其余值相同的结点。
要求:①该算法用函数(非主函数)实现;②在主函数中调用创建链表的函数创建一个单链表,并调用该函数,验证算法的正确性。
4.已知非空单链表第一个结点由head指出,请写一算法,交换p所指结点与其下一个结点在链表中的位置。
要求:①该算法用函数Reverse(head,p)实现,其中head为表头指针,p指向要交换的结点;②在主函数中调用创建链表的函数创建一个单链表,并调用该函数,验证算法的正确性。
《计算机软件技术基础》实验指导书编写:XXX适用专业:电器工程与自动化通讯工程电子信息工程安徽建筑工业学院电子与信息工程学院2007年9月实验一:线性链表的建立、查找、插入、删除实验实验学时:2实验类型:验证实验要求:必修一、实验目的通过本实验的学习,要求学生能够通过单链表的存储结构,掌握单链表的基本操作,包括单链表的建立、查找、插入、删除、输出等操作。
通过本实验可以巩固学生所学的线性表知识,提高编程能力,为后继课程的学习奠定基础。
二、实验内容1、为线性表{10,30,20,50,40,70,60,90,80,100}创建一个带头结点的单链表;2、在该链表上查找值为50,65的结点,并返回查找结果(找到:返回在县新链表中的位置);3、在该链表上值为50的结点后,插入一个值为120的结点;4、删除该链表上值为70的结点。
写出各操作的实现函数,并上机验证。
三、实验原理、方法和手段使用带头结点的单链表的表示线性表,通过实验,熟悉链表的创建、查找、插入、删除、输出等是链表的基本操作。
具体如下:(1)首先定义单链表的节点结构;(2)在单链表创建过程中,首先初始化一个带头结点的空链表,对线性表中的各元素依次通过键盘输入、建立该元素结点、插入到单链表中,实现单链表的创建过程;结点的插入有头插入和尾插入两种方法,采用不同方法时应注意元素的输入顺序。
(3)查找过程可以从头结点开始,将待查找的数据依次与每个结点的数据域比较,匹配及查找成功,弱链表访问完未找到匹配的元素,则查找不成功。
为能够返回查找成功的结点位置,在链表的搜索过程中,应设置一个计数器,记录搜索结点的序号;(4)插入结点时,首先要通过查找算法,找到带插入结点的前驱结点,然后为带插入元素建立结点,通过指针的修改,将结点插入。
(5)删除结点时,首先要通过查找算法,找到待删除结点的前驱,然后通过指针的修改,将待删除结点从链表中卸下,释放该结点。
(6)以上操作的正确性,均可以通过链表的输出结果来验证。
一、实习时间20Xx年X月18日到X月10日二、实习地点中****-*三、>通过理论联系实际,巩固所学的知识,提高处理实际问题的能力,为顺利毕业进行做好充分的准备,并为自己能顺利与社会环境接轨做准备。
四、实习内容能对电脑交易和具体的电脑安装步骤进行了解,并查阅资料巩固自我缺漏的电脑经验。
能将具体的计算机知识应用到实际中,在电脑交易的同时,将自己的所学所想所感付诸实践。
能够熟练掌握一定的计算机技巧,比如安装系统,安装插线,识别型号,处理图形和flash等。
能够与别人进行一定程度的计算机交流,并且提供各种买卖信息以及电脑性能好坏的识别。
能够推销贩卖计算机,并且积累丰厚的社会交流经验和提升自我的语言表达能力。
五、实习体会职高生活让我对计算机理论知识有了一定的了解。
但实践出真知,唯有把理论与实践相结合,才能更好地为社会服务。
经过实践和实习,我对未来充满了美好的憧憬,在未来的日子,我将努力做到以下几点:一、继续学习,不断提升理论涵养。
在信息时代,学习是不断地汲取新信息,获得事业进步的动力。
作为一名青年学子更应该把学习作为保持工作积极性的重要途径。
走上工作岗位后,我会积极响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升能力,以广博的社会知识拓展视野。
二、努力实践,自觉进行角色转化。
只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。
同样,一个人的价值也是通过实践活动来实现的,也只有通过实践才能锻炼人的品质,彰显人的意志。
必须在实际的工作和生活中潜心体会,并自觉的进行这种角色的转换。
三、提高工作积极性和主动性实习,是开端也是结束。
展现在自己面前的是一片任自己驰骋的沃土,也分明感受到了沉甸甸的责任。
在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,做好>,努力创造业绩,继续创造更多的价值。
最后感谢单位领导和部门领导以及同事对我的支持和帮助,我会继续努力的。
《软件技术基础》上机实验报告2018至2019学年,第1学期学生姓名:***班级:***学号:***授课教师:***指导教师:***报告完成时间:2018年12月9日实验一:链式二叉排序树的创建和遍历一.实验目的和要求1.加深理解数据结构的目的和概念,以及逻辑结构和物理结构的关系;2.练习数据结构操作算法的编程实现;3.练习链表的程序设计,掌握二叉链表的设计技术;4.练习递归函数的设计方法;5.巩固二叉排序树的概念;6.熟悉软件功能的分析设计方法。
二.功能分析与设计利用C或C++,设计程序,定义二叉链表,存储二叉排序树,声明并定义相应的函数,实现链式二叉排序树的下列操作:1. 输入数据个数DataCount(要求在10和20之间)和数据最大值MaxData(在50和100之间)。
算法实现:该任务需要限制输入的DataCount在10和20之间,MaxData在50和100之间,只有当两者均满足要求时,程序才会向下执行。
若不满足时,会提示“输入不正确,请重新输入!”,并继续输入DataCount和MaxData,直至满足要求。
这里用while(1)死循环,不得到正确输入不退出。
部分代码如下:while(1){printf("请输入DataCount:");scanf("%d",&DataCount);printf("请输入Maxdata:");scanf("%d",&Maxdata);if(DataCount>=10&&DataCount<=20&&Maxdata>=50&&Maxdata<=100) break;printf("输入不正确,请重新输入! \n");fflush(stdin); //清空输入}2. 在0和MaxData之间,随机产生DataCount个不重复的整数,按产生先后顺序形成一个数据序列,并输出该序列。
姓名:吴振国学号:2011019190006上机实验三题目一:一、程序流程说明(1)创建一个链栈,(2)编写输出,进栈出站函数,(3)编写主函数二、程序代码#include<stdio.h>#include<malloc.h>#define LEN sizeof(node_type)typedef struct node{int data;struct node *next;}node_type;typedef struct {node_type *top;int length;}lstack_type;lstack_type *create_list(void){lstack_type *p;p=(lstack_type *)malloc(sizeof(lstack_type));p->top=NULL;p->length=0;return(p);}void print(node_type *head){node_type *p;printf("Now ,those records are:\n");p=head;if(head!=NULL){do{printf("%4d",p->data);p=p->next;}while(p!=NULL);}}int push(lstack_type *lp, int x){ node_type *p;p=(node_type *)malloc(LEN);if(p!=NULL){ p->data = x;p->next = lp->top;lp-> top = p;lp->length++;return(1);}else return(0);}int pop(lstack_type *lp){node_type *p;int x;if(lp->top==NULL){printf("stack is underflow");return(0);}else{x = lp->top->data;p = lp->top;lp->top = lp->top->next;lp->length--;free(p);return(true);}}void main(){lstack_type *p1;int a=0,b=0,m=0;p1=create_list();printf("\n input the numbers:\n");scanf("%d",&m);while(m!=0){ push(p1,m);scanf("%d",&m);}print(p1->top);pop(p1);pop(p1);print(p1->top);}三:典型测试数据(输入):2 4 6 9 43应输出(上机前自己分析的结果):43 9 6 4 2出栈后6 4 2四:上机时遇到的问题:①不能输出解决办法:更改函数返回类型②编译出错解决办法:输入数据时“&”不要忘五:实际运行结果六、小结&体会链栈的使用很方便,比顺序栈更好操作。
题目二:一、程序流程说明(1)创建一个循环队列(2)编写出队列函数,入队列函数,和负数删除函数(3)编写主函数二、程序代码#include<stdio.h>#define N 20typedef struct{ int data[N];int front, rear;}queue_type;void create_list(queue_type *lp){int i, elem;lp->front=0;lp->rear=0;printf("\n please input datas of the list\n"); lp->data[0]=NULL ;for(i=1; i< N; i++){scanf(" %d", &elem);if(elem== -1) break;lp->data[i]=elem;lp->rear++;}}void printlist(queue_type *lp){int i,j=0;printf("\nThese records are:\n");if(lp->rear<=0){printf("No data!\n");return;}elsefor(i=lp->front+1; i<=lp->rear; i++) {printf(" %4d ", lp->data[i]);}}void enqueue(queue_type *q, int x) {q->rear=(q->rear+1)%N;q->data[q->rear]=x;}int dequeue(queue_type *q){int i;i=q->front;q->front=(q->front+1)%N;/* printlist(q);*/return (q->data[i+1]);}void aa(queue_type *lp){int i,l=lp->rear,j;printf("long=%4d",lp->rear);for(i=lp->data[lp->front+1];i<=l+1;i++){j=dequeue(lp);if(j>0)enqueue(lp,j);}}main(){queue_type p;create_list(&p);printlist(&p);aa(&p);printf("after deletete list is:\n");printlist(&p);}三、测试数据*输入:2 3 -4 6 -5 8 -9 7 -10 20 (-1)应输出:2 3 6 8 7 20四:上机时遇到的问题:①负数不能完全删除解决办法:更改循环,使每一个数都能与0比较,是负数则删除(调用出队列函数)五、实际运行结果:六、小结&体会循环队列的使用能是空间更加合理的被利用。
题目三:一、程序流程说明(1)编写两个pop函数,两个pus函数(2)编写主函数二、程序代码#include<stdio.h>#define M 10#define true 1#define false 0typedef struct{int data[M];int top1,top2;}stack_type;int push1(stack_type *s){int x;printf("请输入数据(以’0‘结束):\n");scanf("%d",&x);while(x!=0&&s->top1<=s->top2){s->data[s->top1] = x;s->top1 = s->top1+1;scanf("%d",&x);}if(s->top1==s->top2)printf("栈已满!\n");return;}int push2(stack_type *s){int x;printf("请输入数据(以’0‘结束):\n");scanf("%d",&x);while(x!=0&&s->top1<=s->top2){s->data[s->top2] = x;s->top2= s->top2-1;scanf("%d",&x);}printf("栈已满!\n");return;}int pop1(stack_type *s){int out;if(s->top1 < 0) return(false);else{out = s->data[s->top1-1];s->top1 = s->top1-1;return(out);}}int pop2(stack_type *s){int out;if(s->top2 >=M) return(false);else{out = s->data[s->top2+1];return(out);}}void main(){int i,j,k;stack_type as,*lp;lp=&as;lp->top1=0;lp->top2=M-1;while(1){printf("请选择你要操作的栈:输入“1”或“2”\n");printf("返回“0”\n");scanf("%d",&i);if(i==1){printf("请选择你要进行的操作:入栈“1”;出栈“2”\n");scanf("%d",&k);switch(k){case 1:push1(lp);break;case 2:j=pop1(lp);printf("出栈元素为:%d\n",j);break;default:printf("输入错误!\n");}}else if(i==2){printf("请选择你要进行的操作:入栈“1”;出栈“2”\n"); scanf("%d",&k);switch(k){case 1:push2(lp);break;case 2:j=pop2(lp);printf("出栈元素为:%d\n",j);break;default:printf("输入错误!\n");}}else break;}}三、测试数据*输入:1 2 3 4 5//1 2 3 4输出:5(堆栈1出栈)//4(堆栈2出栈)四:上机时遇到的问题:①函数调用后无正确输出,解决办法:正确使用switch语句,检验逻辑。