数据结构实验——预备实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
预备知识实验
一、实验目的
1、复习C语言中结构体类型的定义方法,掌握数据元素类型的定义方法。
2、掌握存储空间分配和释放的基本方法。
3、巩固结构体变量成员的“.”引用和“->“引用。
4、掌握C语言函数的声明、定义和调用。
二、实验内容
学生信息管理:某年级共有n个学生,每个学生的信息构成一个记录,如下表所示,学生的学号作为关键字(key)。这n个记录构成了一个长度为n的线性表。现要求完
1、输入所有学生的信息,建立学生表。
2、输出所有学生的信息。
3、查找:在学生表中查找指定学生的信息,如果找到就显示该生的所有信息,否则显
示“该学生的信息不存在,查找失败”。
4、修改:在学生表中修改指定学生的信息,然后显示所有学生信息,如果表中不存在
该生就显示“该生的信息不存在,修改失败”。
5、添加:在当前学生表的末尾添加一个记录(记录数增加1)
例如,添加记录为:4256033 吴强男 82 85 90
要求:按下列方法和步骤完成程序,并上机调试通过。
(1)用struct和typedef语句定义学生记录类型(即定义数据元素的类型)。
typedef struct student{
int number;
char name[20];
char sex[2];
int English;
int Computer;
int Math;
int total;
double average;
}STUDENT;
(2)确定存储结构,现采用顺序存储结构。定义一个类型为STUDENT的一维数组stu,最大元素个数为100.
#define MAXSIZE 100
STUDENT stu[MAXSIZE];
(3)函数声明。题目中有5问,声明5个函数。
●输入所有学生的信息,建立学生表。
void InputStu(STUDENT stu[],int n);
●输出所有学生的信息。
void OutputStu(STUDENT stu[],int n);
●查找:在学生表中查找指定学生的信息,如果找到就显示该生的所有信息,否则显
示“该学生的信息不存在,查找失败”。
void SearchStu(STUDENT stu[],int n)
●修改:在学生表中修改指定学生的信息,然后显示所有学生信息,如果表中不存在
该生就显示“该生的信息不存在,修改失败”。
void UpdateStu(STUDENT stu[],int n)
●添加:在当前学生表的末尾添加一个记录(记录数增加1)
例如,添加记录为:4256033 吴强男 82 85 90
void AppendStu(STUDENT stu[],int *pn)
(4)函数调用。编写main函数。
void main(){
int n;
STUDENT stu[MAXSIZE];
int index;
printf("\n请输入学生记录个数n=");
scanf("%d",&n);
printf("请输入学生信息:\n");
InputStu(stu,n);
while(1){
printf("\n\t\t\t\t学生信息管理系统\n");
printf("\t1.显示学生信息\n");
printf("\t2.查找学生信息\n");
printf("\t3.修改学生信息\n");
printf("\t4.添加学生信息\n");
printf("\t请选择(1-4):");
scanf("%d",&index);
switch(index){
case 1:OutputStu(stu,n);break;
case 2:SearchStu(stu,n);break;
case 3:UpdateStu(stu,n);break;
case 4:AppendStu(stu,&n);break;
default:printf("\n输入有误,请重新输入!\n");
}
}
}
(5)操作函数的定义。5个自定义函数的定义。
void InputStu(STUDENT stu[],int n){
int i;
for(i=0;i scanf("%d",&stu[i].num); scanf("%s",&stu[i].name); scanf("%s",&stu[i].sex); scanf("%d",&stu[i].English); scanf("%d",&stu[i].Computer); scanf("%d",&stu[i].Math); stu[i].total=stu[i].English+stu[i].Computer+stu[i].Math; stu[i].average=stu[i].total/3.0; } } void OutputStu(STUDENT stu[],int n){ int i=1; STUDENT *p; printf("\n序号\t学号\t姓名\t性别\t英语\t计算机\t高数\t总分\t平均分\n"); for(p=&stu[0];p printf("%d\t",i++); printf("%d\t",p->num); printf("%s\t",p->name); printf("%s\t",p->sex); printf("%d\t",p->English); printf("%d\t",p->Computer); printf("%d\t",p->Math); printf("%d\t",p->total); printf("%0.2f\t",p->average); printf("\n"); } } void SearchStu(STUDENT stu[],int n){ int x; printf("\n请输入待查找的学号:"); scanf("%d",&x); for(int i=0;i if(stu[i].num==x){ printf("\n查找成功\n"); break; } } if(i printf("\n学号\t姓名\t性别\t英语\t计算机\t高数\t总分\t平均分\n"); printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t%0.2f\t\n",stu[i].num,stu[i].name,stu[i].sex,