重庆邮电大学软件技术基础实验报告耿道渠.docx
《重庆邮电大学软件技术基础实验报告耿道渠.docx》由会员分享,可在线阅读,更多相关《重庆邮电大学软件技术基础实验报告耿道渠.docx(62页珍藏版)》请在冰点文库上搜索。
重庆邮电大学软件技术基础实验报告耿道渠
重庆邮电大学-软件技术基础--实验报告(耿道渠)
《软件技术基础》实验报告
实验名称:
顺序表的操作
班级学号姓名
第9周星期2、5,6节成绩
一、实验目的:
1、掌握顺序表结构的实现方式;
2、掌握顺序表常用算法的实现;
3、熟悉利用顺序表解决问题的一般思路;
4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:
1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:
(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。
(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。
2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。
要求实现菜单、初始化、添加、删除和显示等功能。
三、实验结果:
四、实验中遇到的问题及解决方法:
第一次编写C++,感觉力不从心,回去多看看PPT。
五、实验心得体会:
对顺序表的一些常用语句不熟悉,对顺序表的整体思路理解不深刻以后要加强练习
附:
源程序(自行编写或修改的程序。
若为修改程序请注明修改部分的功能,若为书上实例则可不附。
)
#include
#include
#include
#include
#defineMAXSIZE20
usingnamespacestd;
intnum;
typedefstruct
{
stringstudent_number;
stringname;
stringtel;
stringhome_phone;
intid;
}TEL;
voidshuaxin(TEL*);
voiddelet(TEL*);
voidfind(TEL*);
voidshow(TEL*);
intmain(void)
{
intchoose;
TELList[MAXSIZE];
while
(1)
{
cout<<"***************************欢迎来到XXX电话本系统*********************"<cout<<"1.初始化并建立"<cout<<"2.删除"<cout<<"3.查找"<cout<<"4.显示全部"<cin>>choose;
system("cls");
while(choose<1||choose>4)
{
cout<<"输入错误,数字1-4,请重新输入!
"<cin>>choose;
system("cls");
}
switch(choose)
{
case1:
shuaxin(List);break;
case2:
delet(List);break;
case3:
find(List);break;
case4:
show(List);break;
}
//system("cls");
}
return0;
}
voidshuaxin(TEL*list)
{
inti,j;
for(i=0;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<<"初始化成功,现在开始建表:
"<cout<<"请输入需要建立的电话个数:
(小于"<cin>>num;
while(num<1||num>MAXSIZE)
{
system("cls");
cout<<"输入错误,请重新输入"<cin>>num;
}
system("cls");
cout<<"请依次输入学生的学号,姓名,移动电话,家庭电话"<for(j=1;j<=num;j++)
{
cout<cin>>list[j-1].student_number;
cin>>list[j-1].name;
cin>>list[j-1].tel;
cin>>list[j-1].home_phone;
cout<}
if(num==(j-1))
{
system("cls");
cout<<"建立表完毕!
"<}
}
voiddelet(TEL*list)
{
intj,i=0;
cout<<"请输入你需要删除的序号"<cin>>j;
while(j<0||j>num)
{
cout<<"输入错误,请重新输入"<cin>>j;
}
while(list[i].id!
=j)
i++;
for(j=i;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<<"删除完毕"<}
voidfind(TEL*list)
{
stringtelnum;
inti,key=0;
cout<<"请输入你需要查找的电话号码"<cin>>telnum;
system("cls");
for(i=0;i{
if(telnum==list[i].tel||telnum==list[i].home_phone)
{
if(key==0)
cout<<"依次学号姓名移动电话家庭电话"<cout<cout<cout<cout<cout<cout<key=1;
}
}
if(key==0)
cout<<"未找到此电话号码"<}
voidshow(TEL*list)
{
inti;
cout<<"现在有"<cout<<"依次学号姓名移动电话家庭电话"<for(i=0;i{
cout<cout<cout<cout<cout<cout<}
cout<<"输出完毕"<}
《软件技术基础》实验报告
实验名称:
链表的操作
(一)
班级学号姓名
第10周星期2、5,6节成绩
一、实验目的:
1、掌握单链表结构的实现方式;
2、掌握单链表常用算法的实现。
二、实验内容:
1、设计一个链表,要求编程实现如下任务:
(1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。
(3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。
(4)在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。
三、实验结果:
四、实验中遇到的问题及解决方法:
编写过程中经常把C语言和C++的语句形式搞混乱,课后认真了解了C++后得以解决。
五、实验心得体会:
对单链表的实现方式和常用算法掌握不足,对C++部分基本概念不熟悉,需课后补强
附:
源程序(自行编写或修改的程序。
若为修改程序请注明修改部分的功能,若为书上实例则可不附。
)
#include
#include
#include
structLNode
{
intdata;
structLNode*next;
};
LNode*find(LNode*head,intx)
{
LNode*p=head->next;
while(p!
=NULL&&p->data!
=x)
p=p->next;
returnp;
}
voidInsert(LNode*head,inti,intx)
{
if(i<1)
cout<<"不存在第"<
else
{
LNode*p=head;
intk=0;
while(p!
=NULL&&k{
p=p->next;
k++;
}
if(p==NULL)
cout<
else
{
LNode*s=newLNode;
s->data=x;
s->next=p->next;
p->next=s;
}
}
}
voidDelete(LNode*head,inti)
{
if(i<1)
cout<<"不存在第"<
else
{
LNode*p=head;
LNode*q;
intk=0;
while(p!
=NULL&&k
{
q=p;
p=p->next;
k++;
}
if(p==NULL)
cout<
else
{
q->next=p->next;
deletep;
}
}
}
voidmain()
{
LNode*head,*p;
head=newLNode;
head->next=NULL;
inti,x,y;
cout<<"请输入5个数,每个书中间空一格:
"<for(i=1;i<=5;i++)
{
cin>>x;
Insert(head,i,x);
}
i=0;
cout<<"请输入需要删除的节点(1~5):
"<cin>>i;
Delete(head,i);
cout<<"删除的节点"<
"<p=head->next;
while(p!
=NULL)
{
cout<data<<"";
p=p->next;
}
cout<cout<<"请输入需要查找的指定值的结点:
";
cin>>x;
if(find(head,x)!
=NULL)
cout<<"查找成功"<else
cout<<"查找失败"<cout<i=0;
x=0;
cout<<"请输入在i节点及元素x"<cin>>i>>x;
Insert(head,i,x);
cout<<"显示:
"<p=head->next;
while(p!
=NULL)
{
cout<data<<"";
p=p->next;
}
cout<}
《软件技术基础》实验报告
实验名称:
链表的操作
(二)
班级学号姓名
第11周星期2、5,6节成绩
一、实验目的:
1、熟悉利用线性链表解决问题的一般思路;
2、参照给定的链表的程序样例,验证给出的链表的常见算法,了解单链表结构的优点和不足。
二、实验内容:
1、使用链表实现一个电话本的管理程序,电话本中的每条记录包括姓名和电话两项。
要求实现菜单管理、记录的添加、删除和显示等功能。
三、实验结果:
四、实验中遇到的问题及解决方法:
对查找名字、查找号码等功能掌握不清,问老师和同学后基本清楚
五、实验心得体会:
体会到了C++的神奇与精彩,但是自己还不能实现这种神奇,达到这种精彩,但是增强了自身兴趣
附:
源程序(自行编写或修改的程序。
若为修改程序请注明修改部分的功能,若为书上实例则可不附。
)
#include
#include
#include
#include
#defineLENsizeof(TEL)
#defineSIZEsizeof(Size)
intn=0;
typedefstructtel
{
charname[10];
longnum;
structtel*next;
}TEL;
typedefstructtel_size
{
charname[10];
longnum;
}Size;
TEL*search(void);//从文件读取
TEL*insert(TEL*head);//插入
TEL*del(TEL*head);//删除
voidshowall(TEL*head);//输出到屏幕
voidfind_name(TEL*head);//通过名字查找
voidfind_number(TEL*head);//通过号码查找
TEL*revise(TEL*head);
voidsav(TEL*head);//储存
intmain(void)
{
TEL*head=NULL;
intchoose;
printf("welcometothistelphonenumbersystem\n");
head=search();
printf("1.insert\n");//选择显示界面
printf("2.del\n");
printf("3.showall\n");
printf("4.find_name\n");
printf("5.find_number\n");
printf("6.revise\n");
printf("7.save\n");
printf("8.end\n");
do//选择项
{
printf("pleasechooseyourchoose:
\n");
scanf("%d",&choose);
switch(choose)
{
case1:
head=insert(head);break;
case2:
head=del(head);break;
case3:
showall(head);break;
case4:
find_name(head);break;
case5:
find_number(head);break;
case6:
head=revise(head);break;
case7:
sav(head);break;
case8:
return0;
default:
printf("inputwrong!
\n");
printf("\n");
}
}while
(1);
return0;
}
TEL*search(void)//寻找文件是否存在函数
{
FILE*fp;
TEL*head=NULL;
TEL*p2,*p1;
p1=p2=(TEL*)malloc(LEN);
if((fp=fopen("TELnumber.txt","a+"))==NULL)//打开或者新建文件
{
printf("cantopenfile!
\n");
exit(0);
}
fseek(fp,0L,0);//文件指针倒回到开头
while(!
feof(fp))
{
if(fread(p1,SIZE,1,fp)!
=1)//需要防止读出错误情况
break;
if(head==NULL)
head=p1;
elsep2->next=p1;
p2=p1;
n++;
p1=(TEL*)malloc(LEN);
}
free(p1);
p2->next=NULL;
fclose(fp);
returnhead;
}
TEL*insert(TEL*head)//插入新号码函数
{
TEL*p0,*p1,*p2;
p0=(TEL*)malloc(LEN);
printf("pleaseinputanameandnumber:
\n");
scanf("%s%ld",p0->name,&p0->num);
p1=head;
p2=p1;
if(head==NULL)
{
head=p0;
p0->next=NULL;
}else
{
while(strcmp(p0->name,p1->name)>0&&p1->next!
=NULL)//比较字符串,找到应该插入位置
{
p2=p1;
p1=p1->next;
}
if(strcmp(p0->name,p1->name)<=0)//比较字符串,插入新号码
{
p2->next=p0;
p0->next=p1;
}else
{
p1->next=p0;
p0->next=NULL;
}
}
n++;
returnhead;
}
TEL*del(TEL*head)//删除函数
{
TEL*p1,*p2;
p1=head;
longdele;
printf("pleaseinputwhatnumberdoyouwanttodel:
\n");//输入删除的电话号码
scanf("%ld",&dele);
if(head==NULL)
printf("NULLlist!
\n");//空表情况
else
{
while(dele!
=p1->num&&p1!
=NULL)//找到位置
{
p2=p1;
p1=p1->next;
}
}
if(dele==p1->num)
{
if(dele==head->num)//删除在头部情况
head=head->next;
elsep2->next=p1->next;//输出删除的数据并用链表架空
printf("delethisperson'number:
\n");
printf("%10s%15ld",p1->name,p1->num);
n--;
}elseprintf("cantfindthisperson!
\n");//没找到情况
returnhead;
}
voidshowall(TEL*head)//打印函数
{
inti=0;
TEL*p;
p=head;
if(head==NULL)
printf("NULLlist!
\n");//空表情况
else
{
printf("thereis%dnumber:
\n",n);
printf("namenumber\n");
do
{
i++;
printf("%d.%10s%15ld\n",i,p->name,p->num);
p=p->next;
}while(p!
=NULL);
}
}
voidfind_name(TEL*head)//以名字方式寻找号码
{
TEL*p;
intdis=0;
charf_name[20];
p=head;
printf("pleaseinputaname:
\n");//输入名字
scanf("%s",f_name);
if(head==NULL)
printf("NULLlist!
\n");//空表情况
else
{
do
{
if(strcmp(p