软件技术基础实验一
重庆邮电大学-软件技术基础--实验报告(耿道渠)

《软件技术基础》实验报告实验名称:顺序表的操作班级学号姓名第9 周星期 2 、5,6 节成绩一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。
(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。
2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。
要求实现菜单、初始化、添加、删除和显示等功能。
三、实验结果:四、实验中遇到的问题及解决方法:第一次编写C++,感觉力不从心,回去多看看PPT。
五、实验心得体会:对顺序表的一些常用语句不熟悉,对顺序表的整体思路理解不深刻以后要加强练习附:源程序(自行编写或修改的程序。
若为修改程序请注明修改部分的功能,若为书上实例则可不附。
)#include <iostream>#include <string>#include <stdlib.h>#include <iomanip>#define MAXSIZE 20using namespace std;int num;typedef struct{string student_number;string name;string tel;string home_phone;int id;} TEL;void shuaxin(TEL *);void delet(TEL *);void find(TEL *);void show(TEL *);int main(void){int choose;TEL List[MAXSIZE];while(1){cout << "***************************欢迎来到XXX电话本系统*********************" << endl;cout << "1.初始化并建立" <<endl;cout << "2.删除" <<endl;cout << "3.查找" <<endl;cout << "4.显示全部" << endl <<endl;cin >> choose;system("cls");while( choose < 1 || choose > 4){cout << "输入错误,数字1-4,请重新输入!" << endl;cin >> choose;system("cls");}switch(choose){case 1: shuaxin(List); break;case 2: delet(List); break;case 3: find(List); break;case 4: show(List); break;}//system("cls");}return 0;}void shuaxin(TEL * list){int i,j;for(i = 0; i < MAXSIZE; i++){list[i].id = i + 1;list[i].home_phone = "none";list[i].name = "none";list[i].student_number = "none";list[i].tel = "none";system("cls");cout << "初始化成功,现在开始建表:" << endl;cout << "请输入需要建立的电话个数:(小于" << MAXSIZE << ")"<<endl;cin >> num;while( num < 1 || num > MAXSIZE ){system("cls");cout << "输入错误,请重新输入" << endl;cin >> num;}system("cls");cout << "请依次输入学生的学号,姓名,移动电话,家庭电话" << endl;for(j = 1; j <= num; j++){cout << j << '.';cin >> list[j - 1].student_number;cin >> list[j - 1].name;cin >> list[j - 1].tel;cin >> list[j - 1].home_phone;cout << endl;if(num == (j - 1) ){system("cls");cout << "建立表完毕!" << endl;}}void delet(TEL * list){int j,i = 0;cout << "请输入你需要删除的序号" << endl;cin >> j;while( j < 0 || j > num){cout << "输入错误,请重新输入" << endl;cin >> j;}while(list[i].id != j)i++;for(j = i; j < num - 1; j++){list[j].name = list[j + 1].name;list[j].tel = list[j + 1].tel;list[j].student_number = list[j + 1].student_number;list[j].home_phone = list[j + 1].home_phone;}list[j].home_phone = "none";list[j].name = "none";list[j].student_number = "none";list[j].tel = "none";num--;system("cls");cout << "删除完毕" << endl;}void find(TEL * list){string telnum;int i,key = 0;cout << "请输入你需要查找的电话号码" << endl;cin >> telnum;system("cls");for(i = 0; i < MAXSIZE; i++){if(telnum == list[i].tel || telnum == list[i].home_phone){if(key == 0)cout << "依次学号姓名移动电话家庭电话" << endl;cout << list[i].id << '.';cout << setw(12) << list[i].student_number;cout << setw(10) << list[i].name;cout << setw(14) << list[i].tel;cout << setw(10) << list[i].home_phone;cout << endl;key = 1;}}if( key == 0)cout << "未找到此电话号码" << endl;}void show(TEL * list){int i;cout << "现在有" << num << "个电话号码" << endl;cout << "依次学号姓名移动电话家庭电话" << endl;for(i = 0; i < num; i++){cout << list[i].id << '.';cout << setw(12) << list[i].student_number;cout << setw(10) << list[i].name;cout << setw(14) << list[i].tel;cout << setw(10) << list[i].home_phone;cout << endl;}cout << "输出完毕" << endl;}《软件技术基础》实验报告实验名称:链表的操作(一)班级学号姓名第10 周星期 2 、5,6 节成绩一、实验目的:1、掌握单链表结构的实现方式;2、掌握单链表常用算法的实现。
《软件技术基础》实验指导书_实验三、四

《软件技术基础》实验指导书电子商务教研室2009年9月实验三队列的应用◆实验目的与基本要求1、掌握队列的顺序存储和链式存储结构。
2、掌握队列的特点。
3、掌握队列的基本运算。
◆实验条件1、硬件:一台微机2、软件:操作系统和C语言系统◆实验方法确定存储结构后,上机调试实现队列的基本运算。
◆实验内容1、写出队列的出队和入队算法。
2、设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚,依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已停放n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆次序。
编制一个程序模拟该停车场的管理。
◆性质:必做◆类型:验证◆2h队列是从日常排队现象抽象出来的一种数学模型。
当然数据结构中的队列远没有生活中的排队灵活。
数据结构中的队列规定:数据只能从队尾进,从队首出来。
已经进入队列的数据次序不能再做改变。
这就叫做“先进先出”(FIFO)或者说“后进后出”(LILO)。
允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素,即尾指针总是指向最后被插入的元素;允许删除的一端称为队首,通常也用一个队首指针(front)指向队首元素的前一个位置(当然也可以直接指向队首元素,只是许多数据结构的书上都习惯这么定义)。
与队列类似,我们可以用一维数组来模拟队列这种数据结构,也可以用链表来模拟。
根据以上描述,队列可以可以有以下基本操作:1、创建初始化:按约定置队列为空状态。
《软件技术基础》实验指导

说明每个实验题目含有一个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)以上操作的正确性,均可以通过链表的输出结果来验证。
杭电软件技术基础实验报告

《软件技术基础》上机实验报告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个不重复的整数,按产生先后顺序形成一个数据序列,并输出该序列。
重庆邮电大学软件专业技术基础实验报告(耿道渠)
《软件技术基础》实验报告实验名称:顺序表的操作班级学号姓名第9 周星期 2 、5,6 节成绩一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。
(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。
2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。
要求实现菜单、初始化、添加、删除和显示等功能。
三、实验结果:四、实验中遇到的问题及解决方法:第一次编写C++,感觉力不从心,回去多看看PPT。
五、实验心得体会:对顺序表的一些常用语句不熟悉,对顺序表的整体思路理解不深刻以后要加强练习附:源程序(自行编写或修改的程序。
若为修改程序请注明修改部分的功能,若为书上实例则可不附。
)#include <iostream>#include <string>#include <stdlib.h>#include <iomanip>#define MAXSIZE 20using namespace std;int num;typedef struct{string student_number;string name;string tel;string home_phone;int id;} TEL;void shuaxin(TEL *);void delet(TEL *);void find(TEL *);void show(TEL *);int main(void){int choose;TEL List[MAXSIZE];while(1){cout << "***************************欢迎来到XXX电话本系统*********************" << endl;cout << "1.初始化并建立" <<endl;cout << "2.删除" <<endl;cout << "3.查找" <<endl;cout << "4.显示全部" << endl <<endl;cin >> choose;system("cls");while( choose < 1 || choose > 4){cout << "输入错误,数字1-4,请重新输入!" << endl;cin >> choose;system("cls");}switch(choose){case 1: shuaxin(List); break;case 2: delet(List); break;case 3: find(List); break;case 4: show(List); break;}//system("cls");}return 0;}void shuaxin(TEL * list){int i,j;for(i = 0; i < MAXSIZE; i++){list[i].id = i + 1;list[i].home_phone = "none";list[i].name = "none";list[i].student_number = "none";list[i].tel = "none";system("cls");cout << "初始化成功,现在开始建表:" << endl;cout << "请输入需要建立的电话个数:(小于" << MAXSIZE << ")"<<endl;cin >> num;while( num < 1 || num > MAXSIZE ){system("cls");cout << "输入错误,请重新输入" << endl;cin >> num;}system("cls");cout << "请依次输入学生的学号,姓名,移动电话,家庭电话" << endl;for(j = 1; j <= num; j++){cout << j << '.';cin >> list[j - 1].student_number;cin >> list[j - 1].name;cin >> list[j - 1].tel;cin >> list[j - 1].home_phone;cout << endl;if(num == (j - 1) ){system("cls");cout << "建立表完毕!" << endl;}}void delet(TEL * list){int j,i = 0;cout << "请输入你需要删除的序号" << endl;cin >> j;while( j < 0 || j > num){cout << "输入错误,请重新输入" << endl;cin >> j;}while(list[i].id != j)i++;for(j = i; j < num - 1; j++){list[j].name = list[j + 1].name;list[j].tel = list[j + 1].tel;list[j].student_number = list[j + 1].student_number;list[j].home_phone = list[j + 1].home_phone;}list[j].home_phone = "none";list[j].name = "none";list[j].student_number = "none";list[j].tel = "none";num--;system("cls");cout << "删除完毕" << endl;}void find(TEL * list){string telnum;int i,key = 0;cout << "请输入你需要查找的电话号码" << endl;cin >> telnum;system("cls");for(i = 0; i < MAXSIZE; i++){if(telnum == list[i].tel || telnum == list[i].home_phone){if(key == 0)cout << "依次学号姓名移动电话家庭电话" << endl;cout << list[i].id << '.';cout << setw(12) << list[i].student_number;cout << setw(10) << list[i].name;cout << setw(14) << list[i].tel;cout << setw(10) << list[i].home_phone;cout << endl;key = 1;}}if( key == 0)cout << "未找到此电话号码" << endl;}void show(TEL * list){int i;cout << "现在有" << num << "个电话号码" << endl;cout << "依次学号姓名移动电话家庭电话" << endl;for(i = 0; i < num; i++){cout << list[i].id << '.';cout << setw(12) << list[i].student_number;cout << setw(10) << list[i].name;cout << setw(14) << list[i].tel;cout << setw(10) << list[i].home_phone;cout << endl;}cout << "输出完毕" << endl;}《软件技术基础》实验报告实验名称:链表的操作(一)班级学号姓名第10 周星期 2 、5,6 节成绩一、实验目的:1、掌握单链表结构的实现方式;2、掌握单链表常用算法的实现。
软件技术(MATLAB)实验手册
实验课需要我们干什么?一、实验课前的知识点预习。
二、准备实验课要演练的例题。
三、实验课后的总结。
MA TLAB实验一MA TLAB软件环境一、实验目标1.熟悉MA TLAB软件的运行环境以及界面构成。
2.熟悉MA TLAB环境中命令窗口的基本操作。
3.熟悉变量的相关操作。
4.熟悉MA TLAB中基本运算函数。
二、实验内容及要求1.运行MA TLAB软件,观察MA TLAB的界面组成。
并了解各个部分的功能。
(标题栏+菜单栏+工具栏+命令窗口+历史命令窗口+当前目录窗口+工作空间)。
2.命令窗口主要用于进行MA TLAB的各种命令操作。
在该窗口中,可以运行MA TLAB的指令、函数、表达式以及显示除了图形外的所有运行结果。
3.变量的赋值以及引用。
4.MA TLAB基本运算函数的演练。
三、实验步骤(略)四、训练习题1.书上所有例题和课后习题。
2.ppt上的学生演练习题。
五、测试习题1.x=2;MA TLAB实验二深入学习MA TLAB环境设置一、实验目标1.熟悉MA TLAB软件环境设置(包括搜索路径和工作空间等设置)。
2.熟悉变量的存储与读取操作。
3.熟悉.m文件。
二、实验内容及要求1.查找和设置搜索路径,并且测试。
2.在工作空间中对变量进行各种操作。
3.使用save和load命令存储与读取变量。
4.区分.m文件中的命令文件和函数文件。
三、实验步骤(略)四、训练习题1.如何设置和更改matlab的初始化当前目录?2.演练课本中对应章节的例子。
3.独立完成课堂布置的实验作业:add.m 和diaoyongjiafa.m文件。
4.测试并体验.m文件的两大分类的区别和相似。
发现并解决.m文件中的若干问题(函数文件中是否可以定义多个函数?主函数子函数可以互相调用么?外部函数可以调用子函数么?子函数可以调用其他函数么?)。
五、测试习题1.精度计算的问题。
看如下的代码,分析:x=0;for n=1:82x=x+0.01endx==0.82MA TLAB实验三MA TLAB编程基础一、实验目标2.熟悉MA TLAB三大程序结构。
东北大学计算机软件技术基础实验报告.pdf
计算机软件技术基础实验专业:学生姓名:[哈哈哈]学号:[哈哈哈]实验时间:[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;。
软件技术基础实验指导书(1)
软件技术基础实验指导书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.掌握线性表的概念。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int a[20];
int i;
typedef struct link
{ int data;
struct link *next;
}link;
/*初始化单链表*/
(
L= NULL;
L= ( link *)malloc(sizeof(link));/*建立表头结点*/
L->next = NULL;
printf("删除后的链表为:\n");
print(L);
printf("\n");
}
4.
若删除文件中第6个数,即将num宏定义为6即可删除66.
I*D:\Progiraim File5\Microsoft Visual £tudio\MyProjects\jisuanl\Debug\jisuanl.exe"
0 99 S8 55 77 55 44 33 22 11
Ppgssany key to continue
若删除文件中第5个数,则将链表中两个55删除
3.输出单链表;
4.在第四个元素位置上插入从文件中读取的单个元素;
5.删除该单链表的从文件中指定序数的元素;
3.完整的源程序
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define max 10
L->next=s;
i++;
}
fclose(fp);
}
void print(link *L)/*输出单链表*/
(
link *p=L->next;
while(p!=NULL)
(
printf ("%d ",p->data);
p=p->next;
}
printf("\n");
int insert(link *L, int i)
(
int j,m;
link *p,*s;
j=1;p=L->next;
while((j<i-1)&&(p!=NULL))
( j++;p=p->next;
}
if(j==i-1)
( m=a[i];
s=(struct link*)malloc(sizeof(struct link));
s->data=a[i];
文件中的
allJ=22
aI2]=33
a[33=44
a [6] =77
a [73-88
a [81=99
at?J=0
国头插法插入后的链表为;
0 99 8S776G 55 44 33 22 li
第四个元素位置插入的数为
员入后的槌表为
09988 SS 77 66 55 44 33 22 11
删除掉的教为:
删除后的概表为:
else {q->next=p2->next;
delete(p2);
}
}
void main()
{ int t,m;
பைடு நூலகம்link *L;
L=(struct link*)malloc(sizeof(struct link));
initlink(L);
hcreat(L);
printf("用头插法插入后的链表为:\n");
L->data = 0;
}
void hcreat(link *L)/*头插法插入从文件中读取的多个元素*/
( link *s;
L->next=NULL;
s=(struct link*)malloc(sizeof(struct link));
int i=0;
FILE *fp;
if((fp=fopen("h:\\a.txt”,"r"))==NULL)
(q=p1;
p1=p1->next;
}
if(p1==NULL) cout<<"要删除的节点不存在";
else (q->next=p1->next;
delete(p1);
}
while((p2!=NULL)&&(p2->data!=a[num-1]))
(q=p2;
p2=p2->next;
}
if(p2==NULL) cout<<"要删除的节点不存在";
printf("error!\n");
printf("文件中的数为:\n");
while(!feof(fp)&& i<max)
(
fscanf(fp,"%d",&a[i]);
printf("a[%d]=%d\n”,i,a[i]);
s=new link;
s->data=a[i];
s->next=L->next;
print(L);
m=insert(L, 4);
printf("第四个元素位置插入的数为:\n");
printf("%d\n”,m);
printf("插入后的链表为:\n");
print(L);
printf("删除掉的数为:\n");
t=a[num-1];
printf("%d\n",t);
Delete(L, t);
s->next=p->next;
p->next=s;
}
return m;
}
void Delete(link *L,int t)/*在第四个元素位置上插入从文件中读取的单个元素*/
( link *p1,*p2,*q;
q=L;p1=p2=L->next;
while((p1!=NULL)&&(p1->data!=a[num-1]))
软件技术基础实验一
单链表的各种基本运算的实现
单链表的各种基本运算的实现
1.实验目的:
1.熟悉c语言上机环境;
2.实现单链表的创建;
3.掌握单链表的基本操作:插入、删除、输出等运算 ;
2.实验内容:
编写一个程序,实现单链表的各种基本操作,并在此基础上设计一个
主程序完成如下功能:
1.初始化单链表:
2.依次采用头插法插入从文件中读取的多个元素;