admin 管理员组

文章数量: 1086019


2024年4月26日发(作者:终止程序的代码)

云南大学物理实验教学中心

实验报告

课程名称: 计算机软件技术基础

实验项目: 实验二、线性表(顺序存储)及其应用

学生姓名:

学号:

专业

学院

成绩

指导教师:

年 日 时 分至 时 分

实验时间:

实验地点:

实验类型:教学(演示□ 验证□ 综合█ 设计□) 学生科研□

课外开放□ 测试□ 其它□

一、实验目的:

掌握顺序表的建立及基本操作。

二、问题:

建立一个顺序表,表中元素为学生,每个学生信息包

含姓名、学号和成绩三部分,对该表实现:① 输出、②

插入、③ 删除、④ 查找功能,并计算出平均成绩和总

成绩。

三、程序的编写与调试

1、原程序:

#include

using namespace std;

typedef struct

{ long double num; char name[10]; int score; } STUDENT;

class sq_LList

{ private:

int mm;

int nn;

STUDENT *v;

public:

sq_LList(int);

void prt_sq_LList();

void ins_sq_LList(int, STUDENT);

void del_sq_LList(int);

void sea_num_sq_LList(int);

1

void sea_name_sq_LList(int ,char 批注[A2]);

void cal_sq_LList(int);

};

/*输出*/

sq_LList ::sq_LList(int m)

{ mm=m;

v=new STUDENT [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;

}

void sq_LList ::prt_sq_LList()

{ int i;

for(i=0; i

{ cout<<"学号: "<

"<<"分数: "<

2

}

}

/*插入*/

void sq_LList ::ins_sq_LList(int i, STUDENT b)

{ int k;

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;

}

/*删除*/

void sq_LList ::del_sq_LList(int i)

{ int k;

if(nn==0)

{cout<<"underflow"<

if((i<1)||(i>nn))

{cout<<"Not this element in the list!"<

return ;

}

3

for(k=i; k

v[k-1]=v[k];

nn=nn-1;

}

/*按学号查找*/

void sq_LList ::sea_num_sq_LList(int i)

{ int k,t ;

____

t=0;

for(i=0;i

{ if(v[i].num==k)

{ t=t+1;

cout<<"学号: "<

"<<"分数: "<

}

}

if(t==0)

cout<<"No this student in the list!"<

}

/*按姓名查找*/

void sq_LList ::sea_name_sq_LList(int i, char y[])

{ int t;

4

____

t=0;

for(i=0;i

{ if(strcmp(y,v[i].name)=0)

{t=t+1

cout<<"学号: "<

"<<"分数: "<

}

}

if(t==0) cout<<"No this student in the list!"<

}

/*计算*/

void sq_LList ::cal_sq_LList(int m)

{ int i;

float sum,avr;

{ sum=0;

for(i=0;i

{sum=sum+v[i].score;

avr=sum/(i+1);

}

}

cout<<"总 分:"<

5

cout<<"平均分:"<

}

int main()

{ int mx; sq_LList s1(100);

while (1)

{ cout<<"1.输出 2.插入 3.删除 4.查找 5.计算 0.退

出n";

cout<<"输入0-5:";

cin>>mx;

switch(mx)

{ case 1: _sq_LList(); break;

case 2: int i; STUDENT b;

cout<<"输入插入点位置和插入元素值:";

cin>>i>>>>>>;

_sq_LList(i,b); _sq_LList(); break;

case 3: cout<<"请输入删除学生的位置:";

cin>>i;

_sq_LList(i);_sq_LList(); break;

case 4: int main()

{ int mx;

while (1)

{cout<<"1.按学号查找 2.按姓名查找 0.返"<

6

cout<<"输入0-2:";

cin>>mx;

switch (mx)

{

case 1: long double k; 批注[A1]:删除

cout<<"请输入要查找学生的学号:";

cin>>k; 批注[A1]:删除

_num_sq_LList(i); break;

case 2: char y[10]; 批注[A3]

cout<<"请输入要查找学生的姓名:";

cin>>y; 批注[A3]

_name_sq_LList(); break;

case 0: cout<<"返回"<

}

}

return 0;

} break;

case 5: _sq_LList(); break;

case 0: cout<<"程序结束"<

}

}

return 0;

7

}

2、正确程序:

#include

using namespace std;

typedef struct

{ long double num; char name[10]; int score; } STUDENT;

class sq_LList

{ private:

int mm;

int nn;

STUDENT *v;

public:

sq_LList(int);

void prt_sq_LList();

void ins_sq_LList(int, STUDENT);

void del_sq_LList(int);

void sea_num_sq_LList(int);

void sea_name_sq_LList();

void cal_sq_LList(int);

8

};

/*输出*/

sq_LList ::sq_LList(int m)

{ mm=m;

v=new STUDENT [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;

}

void sq_LList ::prt_sq_LList()

{ int i;

for(i=0; i

{ cout<<"学号: "<

"<<"分数: "<

}

}

9

/*插入*/

void sq_LList ::ins_sq_LList(int i, STUDENT b)

{ int k;

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;

}

/*删除*/

void sq_LList ::del_sq_LList(int i)

{ int k;

if(nn==0)

{cout<<"underflow"<

if((i<1)||(i>nn))

{cout<<"Not this element in the list!"<

return ;

}

for(k=i; k

v[k-1]=v[k];

10

nn=nn-1;

}

/*按学号查找*/

void sq_LList ::sea_num_sq_LList(int i)

{ int k,t ;

cin>>k;

t=0;

for(i=0;i

{ if(v[i].num==k)

{ t=t+1;

cout<<"学号: "<

"<<"分数: "<

}

}

if(t==0)

cout<<"No this student in the list!"<

}

/*按姓名查找*/

void sq_LList ::sea_name_sq_LList()

{ char y[10]; int i,t;

cin>>y;

t=0;

11

for(i=0;i

{ if(strcmp(y,v[i].name)==0)

{t=t+1;

cout<<"学号: "<

"<<"分数: "<

}

}

if(t==0) cout<<"No this student in the list!"<

}

/*计算*/

void sq_LList ::cal_sq_LList(int m)

{ int i;

float sum,avr;

{ sum=0;

for(i=0;i

{sum=sum+v[i].score;

avr=sum/(i+1);

}

}

cout<<"总 分:"<

cout<<"平均分:"<

}

12

int main()

{ int mx; sq_LList s1(100);

while (1)

{ cout<<"1.输出 2.插入 3.删除 4.查找 5.计算 0.退

出n";

cout<<"输入0-5:";

cin>>mx;

switch(mx)

{ case 1: _sq_LList(); break;

case 2: int i; STUDENT b;

cout<<"输入插入点位置和插入元素值:";

cin>>i>>>>>>;

_sq_LList(i,b); _sq_LList(); break;

case 3: cout<<"请输入删除学生的位置:";

cin>>i;

_sq_LList(i);_sq_LList(); break;

case 4:

{ int mx;

while (1)

{cout<<"1.按学号查找 2.按姓名查找 0.返"<

cout<<"输入0-2:";

cin>>mx;

13

switch (mx)

{

case 1: cout<<"请输入要查找学生的学号:";

_num_sq_LList(i); break;

case 2: cout<<"请输入要查找学生的姓名:";

_name_sq_LList(); break;

case 0: cout<<"返回"<

}

}

return 0;

} break;

case 5: _sq_LList(i); break;

case 0: cout<<"程序结束"<

}

}

return 0;

}

四、实验总结

通过此次试验,我对线性表(顺序存储)有了全面的认识,知

道了什么是线性表,以及线性表有什么作用;并学会了如何根据要

求建立一个实际的线性表,包括线性表的输出、插入、删除、查

14


本文标签: 线性表 实验 学生 查找 程序