重庆邮电大学-软件技术基础--实验报告(耿道渠).doc_第1页
重庆邮电大学-软件技术基础--实验报告(耿道渠).doc_第2页
重庆邮电大学-软件技术基础--实验报告(耿道渠).doc_第3页
重庆邮电大学-软件技术基础--实验报告(耿道渠).doc_第4页
重庆邮电大学-软件技术基础--实验报告(耿道渠).doc_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件技术基础实验报告实验名称:顺序表的操作 班 级 学 号 姓 名 第 9 周 星 期 2 、 5,6 节 成 绩 一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。二、实验内容:1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。三、实验结果:四、实验中遇到的问题及解决方法: 第一次编写C+,感觉力不从心,回去多看看PPT。五、实验心得体会: 对顺序表的一些常用语句不熟悉,对顺序表的整体思路理解不深刻以后要加强练习附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。)#include #include #include #include #define MAXSIZE 20using namespace std;int num;typedef structstring 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 ListMAXSIZE;while(1)cout *欢迎来到XXX电话本系统* endl;cout 1.初始化并建立 endl;cout 2.删除 endl;cout 3.查找 endl;cout 4.显示全部 endl choose;system(cls);while( choose 4)cout 输入错误,数字1-4,请重新输入! 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+)listi.id = i + 1;listi.home_phone = none; = none;listi.student_number = none;listi.tel = none;system(cls);cout 初始化成功,现在开始建表: endl;cout 请输入需要建立的电话个数:(小于 MAXSIZE ) num;while( num MAXSIZE )system(cls);cout 输入错误,请重新输入 num;system(cls);cout 请依次输入学生的学号,姓名,移动电话,家庭电话 endl;for(j = 1; j = num; j+)cout j listj - 1.student_number;cin listj - 1.name;cin listj - 1.tel;cin listj - 1.home_phone;cout endl;if(num = (j - 1) )system(cls);cout 建立表完毕! endl;void delet(TEL * list)int j,i = 0;cout 请输入你需要删除的序号 j;while( j num)cout 输入错误,请重新输入 j;while(listi.id != j)i+;for(j = i; j num - 1; j+) = listj + 1.name;listj.tel = listj + 1.tel;listj.student_number = listj + 1.student_number;listj.home_phone = listj + 1.home_phone;listj.home_phone = none; = none;listj.student_number = none;listj.tel = none;num-;system(cls);cout 删除完毕 endl;void find(TEL * list)string telnum;int i,key = 0;cout 请输入你需要查找的电话号码 telnum;system(cls);for(i = 0; i MAXSIZE; i+)if(telnum = listi.tel | telnum = listi.home_phone)if(key = 0)cout 依次 学号 姓名 移动电话 家庭电话 endl;cout listi.id .;cout setw(12) listi.student_number;cout setw(10) ;cout setw(14) listi.tel;cout setw(10) listi.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 listi.id .;cout setw(12) listi.student_number;cout setw(10) ;cout setw(14) listi.tel;cout setw(10) listi.home_phone;cout endl;cout 输出完毕 endl;软件技术基础实验报告实验名称:链表的操作(一) 班 级 学 号 姓 名 第 10 周 星 期 2 、 5,6 节 成 绩 一、实验目的:1、掌握单链表结构的实现方式;2、掌握单链表常用算法的实现。二、实验内容:1、设计一个链表,要求编程实现如下任务:(1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。(3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。(4) 在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。三、实验结果:四、实验中遇到的问题及解决方法: 编写过程中经常把C语言和C+的语句形式搞混乱,课后认真了解了C+后得以解决。五、实验心得体会: 对单链表的实现方式和常用算法掌握不足,对C+部分基本概念不熟悉,需课后补强 附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。)#include#include#includestruct LNode int data;struct LNode *next;LNode *find(LNode *head,int x)LNode *p=head-next;while(p!=NULL & p-data!=x)p=p-next;return p;void Insert(LNode *head,int i,int x) if(i1)cout不存在第i个位置;elseLNode *p=head;int k=0;while(p!=NULL & knext;k+;if(p=NULL)couti超出链表最大可插入位置data=x;s-next=p-next;p-next=s;void Delete(LNode *head,int i)if(i1)cout不存在第i个元素;elseLNode *p=head;LNode *q;int k=0;while(p!=NULL & knext;k+;if(p=NULL)couti超出链表长度next=p-next;delete p;void main() LNode *head,*p;head=new LNode;head-next=NULL;int i,x,y;cout请输入5个数,每个书中间空一格:endl;for(i=1;ix;Insert(head,i,x);i=0;cout请输入需要删除的节点(15):i;Delete(head,i);cout删除的节点i后输出为:next;while(p!=NULL)coutdatanext;coutendl;coutx;if(find(head,x)!=NULL)cout查找成功endl;elsecout查找失败endl;coutendl;i=0;x=0;cout请输入在i节点及元素xix;Insert(head,i,x);cout显示:next;while(p!=NULL)coutdatanext;coutendl;软件技术基础实验报告实验名称:链表的操作(二) 班 级 学 号 姓 名 第 11 周 星 期 2 、 5,6 节 成 绩 一、实验目的:1、熟悉利用线性链表解决问题的一般思路;2、参照给定的链表的程序样例,验证给出的链表的常见算法,了解单链表结构的优点和不足。二、实验内容:1、使用链表实现一个电话本的管理程序,电话本中的每条记录包括姓名和电话两项。要求实现菜单管理、记录的添加、删除和显示等功能。三、实验结果:四、实验中遇到的问题及解决方法: 对查找名字、查找号码等功能掌握不清,问老师和同学后基本清楚五、实验心得体会:体会到了C+的神奇与精彩,但是自己还不能实现这种神奇,达到这种精彩,但是增强了自身兴趣附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。)#include #include #include #include #define LEN sizeof(TEL) #define SIZE sizeof(Size) int n = 0;typedef struct telchar name10;long num;struct tel * next;TEL;typedef struct tel_sizechar name10;long num;Size;TEL * search(void);/从文件读取TEL * insert(TEL *head);/插入TEL * del(TEL * head);/删除void showall(TEL * head);/输出到屏幕void find_name(TEL * head);/通过名字查找void find_number(TEL * head);/通过号码查找TEL * revise(TEL * head);void sav(TEL * head);/储存int main(void)TEL * head = NULL;int choose;printf(welcome to this telphone number systemn);head = search(); printf(1.insertn); /选择显示界面printf(2.deln);printf(3.showalln);printf(4.find_namen);printf(5.find_numbern);printf(6.revisen);printf(7.saven);printf(8.endn);do /选择项printf(please choose your choose:n);scanf(%d,&choose);switch(choose)case 1:head = insert(head);break;case 2:head = del(head);break;case 3:showall(head);break;case 4:find_name(head);break;case 5:find_number(head);break;case 6:head = revise(head);break;case 7:sav(head);break;case 8:return 0;default:printf(input wrong!n);printf(n);while(1);return 0;TEL * search(void)/寻找文件是否存在函数FILE * fp;TEL * head = NULL;TEL * p2,* p1;p1 = p2 = (TEL *)malloc(LEN);if( ( fp = fopen(TELnumber.txt,a+) ) = NULL)/打开或者新建文件printf(cant open file!n);exit(0);fseek(fp,0L,0);/文件指针倒回到开头while(!feof(fp)if( fread(p1,SIZE,1,fp) != 1 )/需要防止读出错误情况break;if(head = NULL)head = p1;else p2-next = p1;p2 = p1;n+;p1 = (TEL *)malloc(LEN);free(p1);p2-next = NULL;fclose(fp);return head;TEL * insert(TEL * head)/插入新号码函数TEL * p0, * p1, * p2;p0 = (TEL *)malloc(LEN);printf(please input a name and number:n);scanf(%s %ld,p0-name,&p0-num);p1 = head;p2 = p1;if(head = NULL)head = p0;p0-next = NULL;elsewhile( strcmp(p0-name,p1-name) 0 & p1-next != NULL)/比较字符串,找到应该插入位置p2 = p1;p1 = p1-next;if( strcmp(p0-name,p1-name) next = p0;p0-next = p1;elsep1-next = p0;p0-next = NULL;n+;return head;TEL * del(TEL * head)/删除函数TEL * p1, * p2;p1 = head;long dele;printf(please input what number do you want to del:n);/输入删除的电话号码scanf(%ld,&dele);if(head = NULL)printf(NULL list!n);/空表情况elsewhile(dele != p1-num & p1 != NULL)/找到位置p2 = p1;p1 = p1-next;if(dele = p1-num)if(dele = head-num)/删除在头部情况head = head-next;else p2-next = p1-next; /输出删除的数据并用链表架空printf(dele this personnumber:n);printf(%10s %15ld,p1-name,p1-num);n-;else printf(cant find this person!n);/没找到情况return head;void showall(TEL * head)/打印函数int i = 0;TEL * p;p = head;if(head = NULL)printf(NULL list!n);/空表情况elseprintf(there is %d number:n,n);printf( name number n);doi+;printf(%d. %10s %15ldn,i,p-name,p-num);p = p-next;while(p != NULL);void find_name(TEL * head)/以名字方式寻找号码TEL * p;int dis = 0;char f_name20;p = head;printf(please input a name:n);/输入名字scanf(%s,f_name);if(head = NULL)printf(NULL list!n);/空表情况elsedoif(strcmp(p-name,f_name) = 0)/只要找到同名 均输出dis = 1;printf(find this person:n);printf(%s %15ldn,p-name,p-num);p = p-next;while(p != NULL);if(dis = 0) printf(cant find this person!n);void find_number(TEL * head)/以号码方式寻找号码TEL * p;long f_num;int dis = 0;/dis作为判定是否找到变量p = head;printf(please input a numbern);/输入号码scanf(%ld,&f_num);if(head = NULL)printf(NULL list!n);/空表情况elsedoif(f_num = p-num)dis = 1;break;else p = p-next;while(p != NULL);if(dis = 1)printf(find this person:n);printf(%s %15ldn,p-name,p-num);else printf(cant find this person!n);TEL * revise(TEL * head)/修改函数TEL * p = head;int choose,num,i;printf(please choose which do you want to revise,input the numbern);/find_name(TEL * head);scanf(%d,&num);for(i = 2; i next;printf(1.revise namen);printf(2.revise telephone numbern);scanf( %d,&choose);switch(choose)case 1:printf(please input new namen);scanf(%s,p-name);break; case 2:printf(please input new telephone numbern);scanf(%ld,&p-num);break; return head;void sav(TEL * head)/储存函数FILE * fp;TEL * p;if( ( fp = fopen(TELnumber.txt,a+) ) = NULL)/打开或者新建文件printf(cant open file!n);exit(0);p = head;while(p != NULL)if( fwrite(p,SIZE,1,fp) = 1 )p = p-next;else printf(save wrong!n);exit(0);fclose(fp);软件技术基础实验报告实验名称:栈的操作 班 级 学 号 姓 名 第 1 2 周 星 期 2 、 5,6 节 成 绩 一、实验目的:掌握栈的的定义和运算,了解栈的应用。二、实验内容:1、堆栈的测试和应用。要求: 设计一个主函数实现对顺序堆栈代码进行测试。测试方法为:依次把数据元素1,3,5,7,9入栈,然后出栈堆栈中的数据元素并在屏幕上显示。三、实验结果:四、实验中遇到的问题及解决方法: 问题不是太多,但是编写过程还是比较艰辛。五、实验心得体会:栈在本书中比较重要,要多多理解书本知识,多问老师,多实践。附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。)#include #include #define MAX_SIZE 30using namespace std;struct SqStackint *data;int top;int stacksize;int InitStack(SqStack *,int);void push(SqStack *,int);void del(SqStack *);int main(void)int choose,size;int in,i;SqStack p;cout welcome! endl;cout 请输入长度: size;while(InitStack(&p,size)cout 请输入长度: size;system(cls);while(1)cout * endl;cout 1.入栈 endl;cout 2.出栈 endl;cout 3.栈内情况 endl;cout 4.清空栈 endl;cout 0.退出 endl;cout 请输入选项 endl;cout * choose;while(choose 4)cout 请输入一个0-4的常数 choose;system(cls);switch(choose)case 1:cout 输入一个整数 in;push(&p,in);break;case 2: del(&p);break;case 3:cout 栈底 endl;for(i = 0; i = p.top; i+)cout p.datai -1)cout p.datap.top 0 & size stacksize = size;s-top = -1;s-data = new intsize;return 0;else cout 初始化长度错误 top stacksize - 1)s-top+;s-datas-top = x;else cout 栈满 top -1)x = s-datas-top;s-top-;cout 出栈数为: x endl;else cout 栈空 endl;软件技术基础实验报告实验名称:队列的操作 班 级 学 号 姓 名 第 13 周 星 期 2 、 5,6 节 成 绩 一、实验目的:掌握队列的定义及其运算,了解队列的应用。二、实验内容: 1、队列测试和应用。要求: 设计一个主函数对循环队列代码进行测试。测试方法为:依次把数据元素2,4,6,8,10入队,然后出队中的数据元素并在屏幕上显示。三、实验结果:四、实验中遇到的问题及解决方法: 队列的方式和栈的方式既有不同也有相同,没有分好两者的编写方式,看书后了解清楚了。五、实验心得体会:队列和栈有些相似,可以在两者之间找相同点,互相总结。附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。)#include #include using namespace std;struct QNodeint data;struct QNode *next;struct LinkQueuestruct QNode *front;struct QNode *rear;void init(LinkQueue &Q);int Queuelenth(LinkQueue &Q);void EnQueue(LinkQueue &Q,int x);void DeQueue(LinkQueue &Q);int main(void)LinkQueue Q;int choose,x,e;init(Q);while(1)cout * endl;cout 欢迎来到XXX endl;cout 1.入队 endl;cout 2.出队 endl;cout 3.队列长度 endl;cout 0.退出 endl;cout 请选择: endl;cout * choose;while(choose 3 | choose 0)cout 输入错误,请输入0-3 choose;switch(choose)case 1: system(cls);cout 请输入一个数 x;EnQueue(Q,x); break;case 2: system(cls);DeQueue(Q);break;case 3: system(cls);x = Queuelenth(Q);cout 队列长度为 x next = NULL;Q.rear = Q.front;int Queuelenth(LinkQueue &Q)QNode * p = Q.front;int len = 0;while(p != Q.rear)len+;p = p-next;return len;void EnQueue(LinkQueue &Q,int x)QNode *q;if(Q.rear-next = Q.front)cout 队列已满 next = NULL;q-data = x;Q.rear-next = q;Q.rear = q;void DeQueue(LinkQueue &Q)int e;if(Q.front = Q.rear)cout 队列为空 next;e = Q.front-data;cout 出队数为 e endl;软件技术基础实验报告实验名称:二叉树的生成和遍历 班 级 学 号 姓 名 第 14 周 星 期 2 、 5,6 节 成 绩 一、实验目的:1、熟悉二叉树节点的定义和生成方式;2、熟悉二叉树链式结构的生成方式;3、掌握二叉树遍历算法的实现。二、实验内容: 1设计实现二叉树的建立及遍历算法,要求:(1)编写创建二叉链式存储结构的二叉树程序并输出。 (2)编写递归实现二叉树的先序、中序、后序遍历算法。 (3)编写主函数测试以上二叉树的创建和遍历函数。 2. 假设二叉树采用链式存储结构进行存储,编写程序实现二叉树的所有叶子结点的统计并输出统计个数。三、实验结果:四、实验中遇到的问题及解决方法: 对二叉树的查找顺序经常搞错,多看书理解后逐渐错误率降低。五、实验心得体会:二叉树的遍历在本书算一个难点,调试过程中经常出错,要对着课本一句句的编写,前方依旧很艰难附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。)#include#include#include#include#define maxsize 200typedef char datatype;typedef struct nodedatatype data;struct node *lchild,*rchild; bitree;bitree *creat()char ch;bitree *Qmaxsize;int front,rear;bitree *root,*s;root=NULL;front=1;rear=0;printf(请输入二叉树的各节点,表示虚节点,#表示结束:n);scanf(%c,&ch);while(ch!=#)putchar(ch);s=NULL;if(ch!=)s=(bitree *)malloc(si

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论