建立一个顺序表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现输出插入删除.docx
《建立一个顺序表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现输出插入删除.docx》由会员分享,可在线阅读,更多相关《建立一个顺序表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现输出插入删除.docx(11页珍藏版)》请在冰豆网上搜索。
![建立一个顺序表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现输出插入删除.docx](https://file1.bdocx.com/fileroot1/2023-1/24/52b303fd-f76d-42b2-8552-a72d96766fcf/52b303fd-f76d-42b2-8552-a72d96766fcf1.gif)
建立一个顺序表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现输出插入删除
建立一个顺序表-表中元素为学生-每个学生信息包含姓名、学号和成绩三部分-对该表实现输出、插入、删除、
云南大学物理实验教学中心
实验报告
课程名称:
计算机软件技术基础
实验项目:
实验二、线性表(顺序存储)及其应用
学生姓名:
学号:
学院系级专业
指导教师:
实验时间:
年日时分至时分
实验地点:
实验类型:
教学(演示□验证□综合█设计□)学生科研□课外开放□测试□其它□
一、实验目的:
掌握顺序表的建立及基本操作。
二、问题:
建立一个顺序表,表中元素为学生,每个学生信息包含姓名、学号和成绩三部分,对该表实现:
①输出、②插入、③删除、④查找功能,并计算出平均成绩和总成绩。
三、程序的编写与调试
1、原程序:
#include
usingnamespacestd;
typedefstruct
{longdoublenum;charname[10];intscore;}STUDENT;
classsq_LList
{private:
intmm;
intnn;
STUDENT*v;
public:
sq_LList(int);
voidprt_sq_LList();
voidins_sq_LList(int,STUDENT);
voiddel_sq_LList(int);
voidsea_num_sq_LList(int);
voidsea_name_sq_LList(int,char批注[A2]);
voidcal_sq_LList(int);
};
/*输出*/
sq_LList:
:
sq_LList(intm)
{mm=m;
v=newSTUDENT[mm];
v[0].num=970156;strcpy(v[0].name,"张小明");v[0].score=87;v[1].num=970157;strcpy(v[1].name,"李小青");v[1].score=96;
v[2].num=970158;strcpy(v[2].name,"刘华");v[2].score=85;
v[3].num=970159;strcpy(v[3].name,"王伟");v[3].score=93;v[4].num=970160;strcpy(v[4].name,"李启明");v[4].score=88;
nn=5;
}
voidsq_LList:
:
prt_sq_LList()
{inti;
for(i=0;i{cout<<"学号:
"<"<"<}
}
/*插入*/
voidsq_LList:
:
ins_sq_LList(inti,STUDENTb)
{intk;
if(nn==mm)
{cout<<"overflow";return;}
if(i>nn)i=nn+1;
if(i<1)i=1;
for(k=nn;k>=i;k--)
v[k]=v[k-1];
v[i-1]=b;nn=nn+1;
}
/*删除*/
voidsq_LList:
:
del_sq_LList(inti)
{intk;
if(nn==0)
{cout<<"underflow"<if((i<1)||(i>nn))
{cout<<"Notthiselementinthelist!
"<}
for(k=i;kv[k-1]=v[k];
nn=nn-1;
}
/*按学号查找*/
voidsq_LList:
:
sea_num_sq_LList(inti)
{intk,t;
____
t=0;
for(i=0;i{if(v[i].num==k)
{t=t+1;
cout<<"学号:
"<"<"<}
}
if(t==0)
cout<<"Nothisstudentinthelist!
"<}
/*按姓名查找*/
voidsq_LList:
:
sea_name_sq_LList(inti,chary[])
{intt;
____
t=0;
for(i=0;i{if(strcmp(y,v[i].name)=0)
{t=t+1
cout<<"学号:
"<"<"<}
}
if(t==0)cout<<"Nothisstudentinthelist!
"<}
/*计算*/
voidsq_LList:
:
cal_sq_LList(intm)
{inti;
floatsum,avr;
{sum=0;
for(i=0;i{sum=sum+v[i].score;
avr=sum/(i+1);
}
}
cout<<"总分:
"<cout<<"平均分:
"<}
intmain()
{intmx;sq_LLists1(100);
while
(1)
{cout<<"1.输出2.插入3.删除4.查找5.计算0.退出\n";
cout<<"输入0-5:
";
cin>>mx;
switch(mx)
{case1:
s1.prt_sq_LList();break;
case2:
inti;STUDENTb;
cout<<"输入插入点位置和插入元素值:
";
cin>>i>>b.num>>b.name>>b.score;
s1.ins_sq_LList(i,b);s1.prt_sq_LList();break;
case3:
cout<<"请输入删除学生的位置:
";
cin>>i;
s1.del_sq_LList(i);s1.prt_sq_LList();break;
case4:
intmain()
{intmx;
while
(1)
{cout<<"1.按学号查找2.按姓名查找0.返"<cout<<"输入0-2:
";
cin>>mx;
switch(mx)
{
case1:
longdoublek;批注[A1]:
删除
cout<<"请输入要查找学生的学号:
";
cin>>k;批注[A1]:
删除
s1.sea_num_sq_LList(i);break;
case2:
chary[10];批注[A3]
cout<<"请输入要查找学生的姓名:
";
cin>>y;批注[A3]
s1.sea_name_sq_LList();break;
case0:
cout<<"返回"<}
}
return0;
}break;
case5:
s1.cal_sq_LList();break;
case0:
cout<<"程序结束"<}
}
return0;
}
2、正确程序:
#include
usingnamespacestd;
typedefstruct
{longdoublenum;charname[10];intscore;}STUDENT;
classsq_LList
{private:
intmm;
intnn;
STUDENT*v;
public:
sq_LList(int);
voidprt_sq_LList();
voidins_sq_LList(int,STUDENT);
voiddel_sq_LList(int);
voidsea_num_sq_LList(int);
voidsea_name_sq_LList();
voidcal_sq_LList(int);
};
/*输出*/
sq_LList:
:
sq_LList(intm)
{mm=m;
v=newSTUDENT[mm];
v[0].num=970156;strcpy(v[0].name,"张小明");v[0].score=87;v[1].num=970157;strcpy(v[1].name,"李小青");v[1].score=96;
v[2].num=970158;strcpy(v[2].name,"刘华");v[2].score=85;
v[3].num=970159;strcpy(v[3].name,"王伟");v[3].score=93;v[4].num=970160;strcpy(v[4].name,"李启明");v[4].score=88;
nn=5;
}
voidsq_LList:
:
prt_sq_LList()
{inti;
for(i=0;i{cout<<"学号:
"<"<"<}
}
/*插入*/
voidsq_LList:
:
ins_sq_LList(inti,STUDENTb)
{intk;
if(nn==mm)
{cout<<"overflow";return;}
if(i>nn)i=nn+1;
if(i<1)i=1;
for(k=nn;k>=i;k--)
v[k]=v[k-1];
v[i-1]=b;nn=nn+1;
}
/*删除*/
voidsq_LList:
:
del_sq_LList(inti)
{intk;
if(nn==0)
{cout<<"underflow"<if((i<1)||(i>nn))
{cout<<"Notthiselementinthelist!
"<}
for(k=i;kv[k-1]=v[k];
nn=nn-1;
}
/*按学号查找*/
voidsq_LList:
:
sea_num_sq_LList(inti)
{intk,t;
cin>>k;
t=0;
for(i=0;i{if(v[i].num==k)
{t=t+1;
cout<<"学号:
"<"<"<}
}
if(t==0)
cout<<"Nothisstudentinthelist!
"<}
/*按姓名查找*/
voidsq_LList:
:
sea_name_sq_LList()
{chary[10];inti,t;
cin>>y;
t=0;
for(i=0;i{if(strcmp(y,v[i].name)==0)
{t=t+1;
cout<<"学号:
"<"<"<}
}
if(t==0)cout<<"Nothisstudentinthelist!
"<}
/*计算*/
voidsq_LList:
:
cal_sq_LList(intm)
{inti;
floatsum,avr;
{sum=0;
for(i=0;i{sum=sum+v[i].score;
avr=sum/(i+1);
}
}
cout<<"总分:
"<cout<<"平均分:
"<}
intmain()
{intmx;sq_LLists1(100);
while
(1)
{cout<<"1.输出2.插入3.删除4.查找5.计算0.退出\n";
cout<<"输入0-5:
";
cin>>mx;
switch(mx)
{case1:
s1.prt_sq_LList();break;
case2:
inti;STUDENTb;
cout<<"输入插入点位置和插入元素值:
";
cin>>i>>b.num>>b.name>>b.score;
s1.ins_sq_LList(i,b);s1.prt_sq_LList();break;
case3:
cout<<"请输入删除学生的位置:
";
cin>>i;
s1.del_sq_LList(i);s1.prt_sq_LList();break;
case4:
{intmx;
while
(1)
{cout<<"1.按学号查找2.按姓名查找0.返"<cout<<"输入0-2:
";
cin>>mx;
switch(mx)
{
case1:
cout<<"请输入要查找学生的学号:
";
s1.sea_num_sq_LList(i);break;
case2:
cout<<"请输入要查找学生的姓名:
";
s1.sea_name_sq_LList();break;
case0:
cout<<"返回"<}
}
return0;
}break;
case5:
s1.cal_sq_LList(i);break;
case0:
cout<<"程序结束"<}
}
return0;
}
四、实验总结
通过此次试验,我对线性表(顺序存储)有了全面的认识,知道了什么是线性表,以及线性表有什么作用;并学会了如何根据要求建立一个实际的线性表,包括线性表的输出、插入、删除、查找、计算等功能的编写。
另外,通过此次试验,自己的编程能力得到了一定的提高,对编程中常犯的错误以及如何更正有了更加深入的认识和了解等等。