软件技术基础实验报告.docx

上传人:b****6 文档编号:6535683 上传时间:2023-01-07 格式:DOCX 页数:50 大小:823.73KB
下载 相关 举报
软件技术基础实验报告.docx_第1页
第1页 / 共50页
软件技术基础实验报告.docx_第2页
第2页 / 共50页
软件技术基础实验报告.docx_第3页
第3页 / 共50页
软件技术基础实验报告.docx_第4页
第4页 / 共50页
软件技术基础实验报告.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

软件技术基础实验报告.docx

《软件技术基础实验报告.docx》由会员分享,可在线阅读,更多相关《软件技术基础实验报告.docx(50页珍藏版)》请在冰豆网上搜索。

软件技术基础实验报告.docx

软件技术基础实验报告

《软件开发技术基础》

实验报告

学院:

XX学院

班级:

XX

姓名:

XX

学号:

XX

《软件开发技术基础》实验报告

 

实验名称:

实验一顺序表的操作

班级学号姓名

第周星期节成绩

一、实验目的:

1、掌握顺序表结构的实现方式;

2、掌握顺序表常用算法的实现;

3、熟悉利用顺序表解决问题的一般思路;

4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。

二、实验要求:

1、掌握顺序表的特点及常见算法。

2、提交实验报告,报告内容包括:

目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:

1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:

(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。

(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。

(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。

2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。

要求实现菜单、初始化、添加、删除和显示等功能。

四、程序要求:

1、采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过50个。

2、写出完整的程序并能调试运行。

五、实验结果:

1、顺序表的结果:

2、电话簿的结果:

六、实验中遇到的问题及解决方法:

1.在删除数据的时候如果有两个一样的数时要怎样解决?

解决方法:

用while进行判断。

2.在删除操作中,删除函数中的l是指针,所以用->指向,而在主函数中l是结构体,用“.”。

3.在查找的时候有一个返回值,而这个返回值是指针,所以在写查找函数的时候要把返回值类型写上。

七、实验心得体会:

一开始不知所措,首先应该有一个大的方向,把主程序编号,再逐步求精,落实到每一个函数的编写。

对于c语言要熟练掌握,要熟悉循环等得操作,要熟练掌握顺序表中的插入,删除,查找,的基本函数。

在此的基础上灵活使用。

附:

1、顺序表的程序:

#include

#include

#include

#include

#defineMAXSIZE50

structSeqlist

{

intdata[MAXSIZE];

intlength;

};

Seqlist*init()

{

Seqlist*p;

p=(Seqlist*)malloc(sizeof(Seqlist));

p->length=0;

returnp;

}

voidinsert(Seqlist*p)

{

intnum=0;

printf("请输入要键入的个数:

");

scanf("%d",&num);

if(num<1)

printf("键入的数据个数错误!

\n");

else

{

printf("键入数据为:

\n");

for(;num>0;num--)

{

p->length++;

scanf("%d",p->data+p->length-1);

if(p->length==MAXSIZE)

{

printf("数组已满\n");

break;

}

}

}

getchar();

}

voiddeletee(Seqlist*p)

{

inti=0;

printf("请输入要删除元素的位置:

");

scanf("%d",&i);

if(i<1||i>p->length)

printf("表中没有第%d个元素!

\n",i);

else

{

for(intj=i;j<=p->length-1;j++)

p->data[j-1]=p->data[j];

p->length--;

}

getchar();

}

intfind(Seqlist*p)

{

intx;

printf("请输入要查找的数据:

");

scanf("%d",&x);

for(inti=0;ilength;i++)

{

if(p->data[i]==x)

{

printf("此数据位于第%d个位置\n",i+1);

returni+1;

}

}

if(i>=p->length)

printf("数组中没有此数据!

\n");

getchar();

return0;

}

voiddisplay(Seqlist*p)

{

for(inti=0;ilength;i++)

printf("%-5d",p->data[i]);

putchar('\n');

getchar();

}

intmain(void)

{

Seqlist*p;

p=init();

charflag;

printf("1-插入2-删除3-查找4-显示0-退出\n");

while

(1)

{

printf("请输入操作:

");

switch(flag=getchar())

{

case'1':

insert(p);putchar('\n');break;

case'2':

deletee(p);printf("删除后数据为:

");display(p);putchar('\n');getchar();break;

case'3':

find(p);putchar('\n');getchar();break;

case'4':

printf("显示数据为:

");display(p);putchar('\n');break;

case'0':

free(p);return0;

}

}

}

2、电话簿的程序:

#include

#include

#include

#include

usingnamespacestd;

typedefstructcontact

{

stringname;

stringphonenumber;

stringphone;

contact*next;

}CNT;

classPhonebook

{

public:

Phonebook();

CNT*Input();

CNT*Turn_to_end();

voidAdd();

voidDelete();

voidShowmenu();

CNT*Find();

voidShow_item(CNT*p);

voidDisplay();

voidModification();

private:

CNT*head;

};

 

Phonebook:

:

Phonebook()

{

head=newCNT;

head->next=NULL;

}

 

voidPhonebook:

:

Show_item(CNT*p)

{

cout<<"|----姓名----|--电话号码--|-------------地址------------|"<

cout<<'|'<name<<'|'<phonenumber<<'|'<phone<<'|'<

cout<<"|-------------------------------------------------------|"<

cout<<"\n";

}

 

voidPhonebook:

:

Display()

{

CNT*p;

cout<<"|----姓名----|--电话号码--|-------------地址------------|"<

for(p=head->next;p!

=NULL;p=p->next)

cout<<'|'<name<<'|'<phonenumber<<'|'<phone<<'|'<

cout<<"|-------------------------------------------------------|"<

cout<<"\n";

}

 

CNT*Phonebook:

:

Input()

{

CNT*temp;

temp=newCNT;

cout<<"请输入姓名:

";

cin>>temp->name;

cout<<"请输入手机号码:

";

cin>>temp->phonenumber;

cout<<"请输入固定电话:

";

cin>>temp->phone;

temp->next=NULL;

cout<<"\n";

returntemp;

}

CNT*Phonebook:

:

Turn_to_end()

{

CNT*temp=head;

while(temp->next!

=NULL)

{

temp=temp->next;

}

cout<<"\n";

returntemp;

}

voidPhonebook:

:

Add()

{

CNT*temp,*p;

temp=Input();

p=Turn_to_end();

p->next=temp;

cout<<"\n";

}

 

voidPhonebook:

:

Delete()

{

CNT*p,*q;

q=p=head;

stringdata;

cout<<"请输入要删除联系人的信息:

";

cin>>data;

for(p=p->next;p!

=NULL&&p->name!

=data&&p->phonenumber!

=data&&p->phone!

=data;p=p->next)

q=p;

if(p!

=NULL)

{

q->next=p->next;

deletep;

}

else

cout<<"该信息不存在"<

cout<<"\n";

}

 

voidPhonebook:

:

Showmenu()

{

cout<<"电话簿"<

cout<<"1新增2显示3删除"<

cout<<"4查找5修改0退出"<

}

 

CNT*Phonebook:

:

Find()

{

CNT*p=head;

stringdata;

cout<<"请输入要查找或要修改的联系人的信息:

";

cin>>data;

for(p=p->next;p!

=NULL&&p->name!

=data&&p->phonenumber!

=data&&p->phone!

=data;p=p->next);

if(p!

=NULL)

Show_item(p);

else

cout<<"不存在该信息"<

returnp;

cout<<"\n";

}

voidPhonebook:

:

Modification()

{

CNT*p;

p=Find();

if(p!

=NULL)

{

cout<<"请输入姓名:

";

cin>>p->name;

cout<<"请输入手机号码:

";

cin>>p->phonenumber;

cout<<"请输入固定电话:

";

cin>>p->phone;

}

cout<<"\n";

}

 

intmain()

{

intselect;

Phonebookphbook;

phbook.Showmenu();

while

(1)

{

cout<<"\n请输入要选择的操作(0~6):

";

cin>>select;

getchar();

switch(select)

{

case0:

exit(0);

break;

case1:

phbook.Add();

break;

case2:

phbook.Display();

break;

case3:

phbook.Delete();

break;

case4:

phbook.Find();

break;

case5:

phbook.Modification();

break;

}

}

return0;

}

实验名称:

实验二链表的操作

(一)

班级学号姓名

第周星期节成绩

一、实验目的:

1、掌握单链表结构的实现方式;

2、掌握单链表常用算法的实现。

二、实验要求:

1、掌握链表的特点及常见算法。

2、提交实验报告,报告内容包括:

目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:

1、设计一个链表,要求编程实现如下任务:

(1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。

(2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。

(3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。

(4)在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。

四、程序要求:

1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。

2、写出完整的程序并能调试运行。

五、实验结果:

六、实验中遇到的问题及解决方法:

问题:

在查找数据时显示的是一样的?

解决方法:

在查找函数前要标明返回值的类型lnode*find。

七、实验心得体会:

首先要把书上的关于单链表的定义理解,在这个的基础上使用它。

单链表通过结点在数据后附加后继元素的指针信息,可以更灵活的添加,删除,查找,插入,元素。

要清楚指针的指向。

首先要定义一个头结点,并且指针域要为空。

将各个操作分别编写函数,有利于分块使用而且可以多次使用。

附:

#include

inta[50],leng=0;

voiddelet();

voidchazhao();

voidmain()

{

cout<<"请输入数组的个数(小于50):

";

cin>>leng;

cout<<"请输入数据:

";

for(inti=0;i

cin>>a[i];

inty;

cout<<"\n";

do

{

cout<<"请选择:

1-删除2-查找0退出"<

cin>>y;

if(y==1)delet();cout<<"\n";

if(y==2)chazhao();cout<<"\n";

}while(y!

=0);

}

voiddelet()

{

cout<<"请输入删除的数的位置:

";

inti;

cin>>i;

if(i>=leng)

{

cout<<"数组的的长度小于你删除的位置"<

return;

}

for(intj=i;j

{

a[j-1]=a[j];

}

leng--;

for(intk=0;k

{

cout<

}

}

voidchazhao()

{

inttemp,x=0;

cout<<"请输入你要查找的数字:

";

cin>>temp;

for(inti=0;i

{

if(a[i]==temp)

{

x=i+1;cout<<"你要查找的数是数组的第"<

return;

}

}

if(x==0)

cout<<"数组中没有你要查找的数";

}

实验名称:

实验三链表的操作

(二)

班级学号姓名

第周星期节成绩

一、实验目的:

1、熟悉利用线性链表解决问题的一般思路;

2、参照给定的链表的程序样例,验证给出的链表的常见算法,了解单链表结构的优点和不足。

二、实验要求:

1、熟练掌握链表的使用,并能运用其解决些常规问题。

2、提交实验报告,报告内容包括:

目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:

1、使用链表实现一个电话本的管理程序,电话本中的每条记录包括姓名和电话两项。

要求实现菜单、初始化、添加、删除和显示等功能。

四、程序要求:

1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。

2、写出完整的程序并能调试运行。

五、实验结果:

六、实验中遇到的问题及解决方法:

1.实验结果版面不好看

解决方法:

反复调试执行,每次都对自己不满意的地方进行一些改正。

2.怎样比较name与s->name?

解决方法:

用string.h中的strcmp函数。

3.在传递数据时有问题?

解决方法:

返回的值要注意数据类型,是指针还是整数等。

七、实验心得体会:

在应用中可以利用while实现选择,并根据选择用switch来完成选择。

为了简化编程,结点插入操作可仅仅在头部进行。

单链表的方法使添加操作更加简便。

不需要事先分配结点空间,而是在需要时动态的申请,节省了空间。

附:

#include

#include

#include

#include

typedefstructStudent

{

charstu_number[12];

charstu_name[12];

charstu_phone[12];

structStudent*next;

}STU;

voidshow_menu()

{

puts("1添加2删除3查找4插入5显示0退出");

}

voidshow_item(STU*p)

{

printf("|编号|学号|姓名|电话号码|\n");

printf("|1|%-12s|%-12s|%-12s|\n",p->stu_number,p->stu_name,p->stu_phone);

}

STU*init()

{

STU*p;

p=(STU*)malloc(sizeof(STU));

p->next=NULL;

returnp;

}

voiddisplay(STU*head)

{

inti;

STU*p;

p=head->next;

printf("|编号|学号|姓名|电话号码|\n");

for(i=1;p!

=NULL;i++,p=p->next)

{

printf("|%-4d|%-12s|%-12s|%-12s|\n",i,p->stu_number,p->stu_name,p->stu_phone);

}

}

STU*turn_to_end(STU*head)

{

STU*p;

for(p=head;p->next!

=NULL;p=p->next);

returnp;

}

STU*putin()

{

STU*temp;

temp=(STU*)malloc(sizeof(STU));

printf("请输入姓名:

");

gets(temp->stu_name);

printf("请输入学号:

");

gets(temp->stu_number);

printf("请输入电话号码:

");

gets(temp->stu_phone);

temp->next=NULL;

returntemp;

}

voidadd(STU*head)

{

STU*temp,*p;

p=head;

temp=putin();

p=turn_to_end(head);

p->next=temp;

}

STU*find(STU*head,inti)

{

STU*p;

if(i<1)

puts("输入错误");

else

{

for(p=head;p->next!

=NULL&&i>0;i--,p=p->next);

if(i>0)

{

puts("不存在该结点");

returnNULL;

}

}

returnp;

}

STU*find_stu(STU*head,char*data)

{

STU*p,*q;

q=p=head;

for(p=head->next;p!

=NULL&&strcmp(p->stu_name,data)!

=0&&strcmp(p->stu_number,data)!

=0&&strcmp(p->stu_phone,data)!

=0;p=p->next)

q=p;

if(p!

=NULL)

returnq;

else

{

puts("不存在该信息");

returnp;

}

}

voiddelet(STU*head,char*data)

{

STU*p,*q;

p=q=head;

q=find_stu(head,data);

if(q!

=NULL)

{

p=q->next;

q->next=p->next;

free(p);

}

}

voidinsert(STU*head,inti)

{

STU*p,*q,*temp;

q=p=head;

if(i<0)

puts("输入错误");

elseif(i==0)

{

temp=putin();

temp->next=p->next;

q->next=temp;

}

else

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1