软件技术基础--上机实验三
- 格式: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个不重复的整数,按产生先后顺序形成一个数据序列,并输出该序列。
运筹学上机实验指导书目录绪论运筹学上机实验软件简介第一章运筹学上机实验指导§1.1 中小型线性规划模型的计算机求解§1.2 大型线性规划模型的编程计算机求解§1.3线性规划的灵敏度分析§1.4运输问题数学模型的计算机求解§1.5目标规划数学模型的计算机求解§1.6整数规划数学模型的计算机求解§1.7 指派问题的计算机求解§1.8最短路问题的计算机求解§1.9最大流问题的计算机求解第二章LINGO软件基础及应用§2.1 原始集(primitive set)和派生集(derived set)与集的定义§2.2 LINGO中的函数与目标函数和约束条件的表示§2.3 LINGO中的数据§2.4 LINDO简介第三章运筹学上机实验及要求实验一.中小型线性规划模型的求解与Lingo软件的初步使用实验二.中小型运输问题数学模型的Lingo软件求解。
实验三.大型线性规划模型的编程求解。
实验四.运输问题数学模型的Lingo编程求解。
实验五.分支定界法上机实验实验六.整数规划、0-1规划和指派问题的计算机求解实验七:最短路问题的计算机求解实验八:最大流问题的计算机求解绪论运筹学是研究资源最优规划和使用的数量化的管理科学,它是广泛利用现有的科学技术和计算机技术,特别是应用数学方法和数学模型,研究和解决生产、经营和经济管理活动中的各种优化决策问题。
运筹学通常是从实际问题出发,根据决策问题的特征,建立适当的数学模型,研究和分析模型的性质和特点,设计解决模型的方法或算法来解决实际问题,是一门应用性很强的科学技术。
运筹学的思想、内容和研究方法广泛应用于工程管理、工商企业管理、物流和供应链管理、交通运输规划与管理等各行各业,也是现代管理科学和经济学等许多学科研究的重要基础。
在解决生产、经营和管理活动中的实际决策问题时,一般都是建立变量多、约束多的大型复杂的运筹学模型,通常都只能通过计算机软件才能求解,因此,学习运筹学的计算机求解和进行上机实验,就是运筹学教学的重要组成部分。
三一文库()/工作报告/实验报告上机实验内容及实验报告要求
上机实验内容及实验报告要求
一、《软件技术基础》上机实验内容
1.顺序表的建立、插入、删除。
2.带头结点的单链表的建立(用尾插法)、插入、删除。
二、提交到个人10M硬盘空间的内容及截止时间
1.分别建立二个文件夹,取名为顺序表和单链表。
2.在这二个文件夹中,分别存放上述二个实验的相关文件。
每个文件夹中应有三个文件(.C文件、.OBJ文件和.EXE文件)。
3.截止时间:12月28日(18周周日)晚上关机时为止,届时服务器将关闭。
三、实验报告要求及上交时间(用A4纸打印)
1.格式:
《计算机软件技术基础》上机实验报告
用户名se××××学号姓名学院
①实验名称:
②实验目的:
③算法描述(可用文字描述,也可用流程图):
④源代码:(.C的文件)
⑤用户屏幕(即程序运行时出现在机器上的画面):
2.对C文件的要求:
程序应具有以下特点:A可读性:有注释。
B交互性:有输入提示。
C结构化程序设计风格:分层缩进、隔行书写。
3.上交时间:12月26日下午1点-6点,工程设计中心三楼教学组。
请注意:过时不候哟!
四、实验报告内容
0.顺序表的插入。
1.顺序表的删除。
2.带头结点的单链表的插入。
3.带头结点的单链表的删除。
机器人技术基础实验及上机引言机器人技术是近年来快速发展的一个领域,它不仅涉及到软件编程、电子电路等知识,还需要了解机械结构、传感器、控制算法等方面的内容。
为了帮助学生更好地掌握机器人技术的基础知识,本文介绍了机器人技术基础实验及上机的相关内容。
实验目的1.熟悉机器人技术的基础知识;2.学习机器人的硬件结构和工作原理;3.掌握机器人的编程方法和控制算法;4.培养学生的创新意识和动手能力。
实验内容实验一:机器人的组装和调试本实验旨在让学生了解机器人的组装过程和调试方法。
学生将根据提供的零件,按照说明书进行组装,并通过调试程序,测试机器人的工作状态。
实验步骤1.组装机器人的各个模块,包括机械臂、传感器、电池组等;2.连接各个模块的电路,并安装相应的驱动程序;3.制作控制程序,测试机器人的基本动作,如前进、后退、转弯等;4.通过调试程序,校准机器人的传感器,确保其正常工作。
实验二:机器人的编程方法本实验旨在让学生了解机器人的编程方法,并通过编程,实现机器人的自主导航功能。
实验步骤1.学习编程语言,如Python或C++;2.利用编程语言,编写机器人的控制程序,实现基本动作的控制;3.学习机器人的传感器数据处理方法,设计相应的算法;4.编写导航程序,实现机器人的自主导航功能。
实验三:机器人的应用实践本实验旨在让学生将机器人技术应用于实际场景,如智能家居控制、物流配送等。
实验步骤1.选取一个实际场景,例如智能家居控制;2.设计机器人的控制方案,包括传感器选择、控制算法等;3.利用所学知识,实现机器人对智能家居设备的控制;4.调试程序,确保机器人的控制能力符合要求。
上机实验要求为了加强学生对机器人技术的实践能力和创新意识,上机实验要求学生在指定时间内完成一定的任务。
•任务一:机器人的基本动作控制。
要求学生利用已提供的机器人平台和编程环境,实现机器人的基本动作控制,包括前进、后退、转弯等。
•任务二:机器人的自主导航功能。
BIM课程上机实验报告20 21 --20 22 学年 2 学期实验项目名称:Revit基本操作及结构模型的创建课程名称:专业班级:学生姓名:学生学号:河南理工大学2022年实验项目一:Revit基本操作及结构模型的创建一、实验内容:1、熟悉Revit,新建项目,选择样板文件,运用Revit创建标高和轴网的基本操作;2、载入族,属性设置,创建构件。
3、通过载入构件、设置属性,创建柱、梁、板,并能够对其进行属性和材质编辑;4、能够利用粘贴楼层的方法复制标准楼层的模型。
二、实验目的1、熟悉Revit的界面和基本建模思路;2、能够创建标高和轴网、并生成相应的平面;3、掌握载入族的方法,能够通过载入族创建构件;4、能够创建常规模型的柱、梁、板和基础等的结构模型。
三、实验学时:4学时四、实验过程及成果截图(介绍实验过程,选取平面、立面、三维和细部典型截图并说明)1、标高和轴网(建模过程及截图)(1)标高的绘制步骤第一步:选择选择“项目浏览器”的立面,以“南”里面为标准进行标高绘制。
第二步:此样板中会提前给出部分标高,我们有两种方法去绘制标高。
第一种是选择“基准”中的标高按钮一层层进行绘制。
(通过第一种方法绘制的标高会自动生成“结构平面”和“楼层平面”)第二种是通过阵列的方式直接按照统一间距生成标高,此方法需要注意,通过“阵列”生成的标高需要进行解组。
通过第二种方式绘制出来标高需要再手动生成一下“结构平面”以及“楼层平面”。
(2)轴网的绘制步骤第一步:选择“结构”中的轴网功能进行绘制。
绘制方式同标高,可以通过阵列和一个个画两种方式进行绘制。
第二步:对绘制好的轴网进行标注。
选择“注释”中的“对齐”指令。
对相邻轴线和总长进行标注。
最终绘制完成。
2、载入族和属性设置(建模过程及截图)第一步:载入族。
在“插入”选项中选择“载入族”指令。
然后可以根据不同需求载入不同的族来绘制bim图形。
第二步:更改族属性。
我们载入族之后需要在属性页面对载入的族进行属性设置。
计算机软件技术基础实验专业:学生姓名:[哈哈哈]学号:[哈哈哈]实验时间:[2016年8月22日]实验一:线性表的排序与查找#include<stdio.h>int aryLinearList[15];int x=0;void printout();void sort();void deleteit(int n);void insert(int n);void main(){int i,t,a;printf("请输入10个数:\n");for(i=0;i<10;i++){scanf("%d",&aryLinearList[i]);x=x+1;}printf("您的输入为:\n");printout();printf("排序后为:\n");sort();printf("请输入插入的数:\n");scanf("%d",&a);insert(a);printf("请输入要删除的数:\n");scanf("%d",&a);deleteit(a);}void sort()//冒泡法排序{int i,j,t;for(j=0;j<x-1;j++)for(i=0;i<x-1-j;i++)if(aryLinearList[i]>aryLinearList[i+1]){t=aryLinearList[i];aryLinearList[i]=aryLinearList[i+1];aryLinearList[i+1]=t;}printout();}void insert(int n)//插入并排序{aryLinearList[x]=n;x=x+1;sort();}void deleteit(int n)//删除{int i,j;for(i=0;i<x;i++)if(aryLinearList[i]==n){for(j=i;j<x;j++)aryLinearList[j]=aryLinearList[j+1];x=x-1;printout();}}void printout()//显示{int i;for(i=0;i<x;i++)printf("%d",aryLinearList[i]);printf("\n");}实验二:栈与队列的应用#include<stdio.h>#include<String.h>#include<stdlib.h>#include<math.h>#define MAX_LEN10//字符串长度#define MAX_SIZE30//栈或队最大元素个数struct QUEUE//定义队列{int nMaxSize;int nCount;int nFront;//队头int nRear;//队尾char szQueue[MAX_SIZE][MAX_LEN];};struct STACK//定义栈{int nMaxSize;int nTop;//栈顶char szStack[MAX_SIZE][MAX_LEN];};void InitQueue(QUEUE*q,int nMaxSize)//初始化队列{q->nMaxSize=nMaxSize;q->nCount=0;q->nFront=0;q->nRear=0;q->szQueue[MAX_SIZE][MAX_LEN]=0;}void InQueue(QUEUE*q,char*pItem)//入队{if(q->nCount==q->nMaxSize){printf("The Queue is full!\n");return;}strcpy(q->szQueue[q->nRear],pItem);if(q->nRear++==MAX_SIZE)q->nRear=0;q->nCount++;}void OutQueue(QUEUE*q,char*pItem)//出队{if(q->nCount==0){printf("The Queue is empty!\n");return;}strcpy(pItem,q->szQueue[q->nFront]);if(q->nFront++==MAX_SIZE)q->nFront=0;q->nCount--;}void InitStack(STACK*s,int nMaxSize)//初始化栈{s->nMaxSize=nMaxSize;s->nTop=0;s->szStack[MAX_SIZE][MAX_LEN]=0;}void PushStack(STACK*s,char*pItem)//入栈{char*p;if(s->nTop<s->nMaxSize){p=s->szStack[s->nTop];strcpy(p,pItem);s->nTop++;}else{printf("The stack overflow!\n");return;}}void PopStack(STACK*s,char*pItem)//出栈{char*p;if(s->nTop==0){printf("stack is empty!\n");return;}else{p=s->szStack[--s->nTop];strcpy(pItem,p);}}void GetTopStack(STACK*s,char*pItem)//获得栈顶运算符{char*p;char a[10]={0};if(s->nTop==0){a[0]=';';strcpy(pItem,a);}else{p=s->szStack[s->nTop-1];strcpy(pItem,p);}}int isdigit(char x)//判断字符{if(x>='0'&&x<='9')return1;return0;}int Priority(char*op)//获得操作符的优先级{int nPriority=0;switch(op[0]){case'^':nPriority=3;break;case'*':case'/':nPriority=2;break;case'+':case'-':nPriority=1;break;case';':nPriority=0;}return nPriority;}void Compute(char*num1,char*num2,char*op,char*chResult)//计算表达式的值{double fNum1,fNum2;double fResult=0;fNum1=atof(num1);fNum2=atof(num2);switch(op[0]){case'^':fResult=pow(fNum1,fNum2);break;case'*':fResult=fNum1*fNum2;break;case'/':fResult=fNum1/fNum2;break;case'+':fResult=fNum1+fNum2;break;case'-':fResult=fNum1-fNum2;break;}sprintf(chResult,"%.4f",fResult);return;}int main()//主程序{char x[MAX_LEN];//表达式char op[MAX_LEN];//栈顶运算符char num1[MAX_LEN],num2[MAX_LEN];//操作数char chResult[MAX_LEN];//运算结果struct QUEUE q1;//声明队列struct QUEUE*q;struct STACK OS;//声明OS栈和NS栈struct STACK NS;struct STACK*o;struct STACK*n;int i=0;//初始化int j=0;int k=0;q=&q1;o=&OS;n=&NS;InitStack(o,20);InitStack(n,20);InitQueue(q,20);printf("please input the expression end with\';'\n");do//输入表达式{printf("next\n");scanf("%s",x);InQueue(q,x);}while(x[0]!=';');printf("expression\n");while(true){if(q->nCount!=0){OutQueue(q,x);printf("%s",x);}if(isdigit(x[0]))//输入为数字PushStack(n,x);else//输入运算符{GetTopStack(o,op);//获得OS栈顶运算符if(x[0]==';'&&op[0]==';')//输入’;’结束表达式{printf("\n result is");break;}if(Priority(x)>Priority(op))//运算符的优先级〉栈顶运算符{PushStack(o,x);continue;}while((Priority(x)<=Priority(op))&&Priority(op))//运算符优先级<=栈顶运算符{PopStack(n,num1);PopStack(n,num2);PopStack(o,op);Compute(num2,num1,op,chResult);PushStack(n,chResult);GetTopStack(o,op);}PushStack(o,x);}}PopStack(n,chResult);printf("%s\n",chResult);return0;}实验三:关系数据语言的应用create table Stu(Sno char(4)primary key,Sname char(15),Sex char(2),Age numeric,Birthday datetime,Class char(10));create table Course(Cno char(2)primary key,Cname char(20),Chour numeric);create table Score(sno char(4),cno char(2),primary key(sno,cno),grade numeric);insert into Stuvalues('0101','zhangqiang','m','20','1994-02-20','zi1');insert into Stu values('0102','lihong','f','20','1994-08-10','zi1'); insert into Stu values('0103','wangtao','m','21','1993-05-18','zi1'); insert into Stu values('0104','liuli','f','19','1995-03-05','zi2'); insert into Stu values('0105','sundong','m','21','1993-12-17','zi2'); insert into Stu values('0106','wangping','m','22','1992-11-30','zi2'); insert into Stuvalues('0201','ouyangyan','f','20','1994-04-11','dian1');insert into Stuvalues('0202','yangrui','m','20','1994-05-13','dian1');insert into Stu values('0203','liuyan','f','18','1996-01-21','dian1'); insert into Stu values('0204','zhouyu','m','20','1994-07-10','dian1'); select*from stu;insert into course values('01','jisuanji','48'); insert into course values('02','java','32'); select*from course;insert into score values('0101','01','87'); insert into score values('0102','01','90'); insert into score values('0103','01','79'); insert into score values('0104','01','89'); insert into score values('0105','01','58'); insert into score values('0106','01','77'); insert into score values('0201','01','95'); insert into score values('0202','01','80'); insert into score values('0203','01','76'); insert into score values('0204','01','70'); insert into score values('0101','02','91'); insert into score values('0102','02','88'); insert into score values('0103','02','75'); insert into score values('0104','02','91'); insert into score values('0105','02','76'); insert into score values('0106','02','76'); insert into score values('0201','02','90'); insert into score values('0202','02','84'); insert into score values('0203','02','83'); insert into score values('0204','02','57'); select*from score;1.查询学生出生日期(Sno,Sname,BirthDay);Select sno,sname,birthDay from stu;2.按学号顺序查询自动化02班的所有学生(Class,Sname);Select Class,Sname from Stu where class='zi2'order by Sno;3.列出学生选择各门课程的成绩(Sname,Cname,Grade);Select Sname,Cname,Grade from Stu,Course,Score where Stu.Sno=Score.Sno and o=o;4.列出有过不及格成绩的学生名单(Sno,Sname,Class);Select distinct Stu.Sno,Sname,Class from Stu,Score whereStu.Sno=Score.Sno and Grade<60;5.求学生的平均成绩和总成绩(Sname,PJCJ,ZCJ);Select Sname,avg(Grade)PJCJ,sum(Grade)ZCJ from Stu,Score where Score.Sno=Stu.Sno group by Stu.Sname;6查找各科成绩都>=85分的学生(Sname,Class);Select Sname,Class from Stu where exists(Select*from Score where Stu.Sno=Score.Sno and o='01'and Score.Grade>=85)and exists(Select*from Score where Stu.Sno=Score.Sno and o='02' and Score.Grade>=85);7将课程号为“01”的课程名称修改为“软件技术”;Update Course set Cname='RuanJianJiShu'where Cno='01';select*from course;8修改一名学生的姓名、性别、年龄;Update Stu set Sname='gaoyu',Sex='f',age='20'where Sno='0204'; select*from stu;9将成绩为55~59分的男生的成绩修改为60分;Update Score set Grade=60where Sno in(Select Sno from Stu where Sex='m') and Grade between55and59;select*from score;ÎÒÈ¥10删除年龄不是20的学生的所有信息(包括选课和成绩);Delete Stu where Sno in(select Sno from Stu where age<'20'or age>'20');Select Sname,Cname,Grade,Age from Stu,Course,Score where;Stu.Sno=Score.Sno and o=o Array11删除一个班级的所有学生;Delete from Stu where Class='dian1';select*from stu;12删除所有数据表和数据库Drop database MyDB;。
软件技术基础实验指导书2014年9月1日目录实验一斐波那契数列的实现算法及分析 (3)实验二顺序表的实现与应用 (5)实验三链表的实现和应用 (7)实验四栈的实现和应用 (9)实验五队列 (11)实验六二叉树的创建和遍历 (12)实验七图 (15)实验八哈夫曼树及哈夫曼编码 (16)实验九查找算法的实现 (19)实验十内部排序算法的实现 (26)实验十一迷宫问题 (29)实验十二 B+树程序设计 (30)实验十三四叉树程序设计 (31)实验十四修路方案问题 (32)实验一斐波那契数列的实现算法及分析实验目的:1.掌握分别用递归和非递归方法计算斐波那契(Fibonacci)数列。
2.掌握算法性能测试的方法,并能进行算法分析和比较。
实验环境(硬/软件要求):Windows 2000, VisualC++ 6.0实验内容:二阶Fibonacci数列的定义如下:F0=1,F1=1, F2=2,F3=3,F4=5,。
,Fi=F(i-1)=F(i-2) (i>=1).试用递归法和非递归法两种方法写出计算Fn的函数。
实验要求:1.完成计算Fn的递归函数Fib-rec.2.完成计算Fn的非递归数列Fib-ite.3.当n=10,15,20,25,30,35,40,45时测试以上两种算法执行的时间,并把测试结果填写在附表1-1中。
附表1-1 测试表注:表格中填写的是测试时间,单位μm.4.试解释两种算法在执行时间上的不同,并对两种算法进行算法分析。
【C语言源程序】#include <stdio.h>#include <time.h>Long Fib-rec(int n){if(n==0||n==1)return(1);else return(Fib-rec(n-1) + Fib-rec(n-2) );}long Fib-ite(int n){long fib1,fib2,fib;int i;fib1=1;fib2=1;for (i=3;i<=n,i + + ){fib=fib1+fib2;fib1=fib2;fib2=fib;}return fib;}void main ( ){clock-t us1, us2;int n;printf(“请输入n:\n”);scanf(“%d,&n);us1=clock( );printf(“递归函数计算结果:%1d\n”,Fib-rec(n) ); us2=clock( );printf(“递归函数执行时间%1d毫秒\n”,us2-us1);us1=clock( );printf(“非递归函数计算结果:%1d\n”,Fib-ite(n) ); us2=clock( );printf(非递归函数执行时间%1d毫秒\n”,us2-us1);}实验二顺序表的实现与应用实验目的:1.掌握线性表的概念。
姓名:吴振国学号: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语句,检验逻辑。