软件技术基础实验报告.docx
《软件技术基础实验报告.docx》由会员分享,可在线阅读,更多相关《软件技术基础实验报告.docx(50页珍藏版)》请在冰豆网上搜索。
软件技术基础实验报告
《软件开发技术基础》
实验报告
学院:
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;icin>>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