实验一 顺序表操作实现 下载本文

.

任务二

1.题目要求

创建一个新的程序文件sy11.cpp,请调用seqlist.cpp提供的功能函数(以#include “seqlist.cpp” 方式导入函数库)及自定义的函数完成以下操作:

? 创建一个包含学生学号、身高、性别的学生身高信息表并输出到屏幕,

学生信息从records.txt文件读取;

? 对已建立的学生身高信息表按学号从小到大排序,并把结果写入到数据

文件中(result.txt);

? 从键盘输入一位学生的相关信息插入到已排序的学生身高信息表中后仍

然保持学号的有序性;

? 对插入后的学生身高信息表进行倒置,结果输出在屏幕;

? 从键盘输入一个身高值,统计与该身高相同的学生个数并输出在屏幕; 在程序文件sy1.cpp需再定义以下三个功能函数: (1)void insertX(Seqlist *lp, datatype x) 功能:在学号从小到大排序的学生表中插入值为x的学生仍保持学号的有序性

(2)void reverse(Seqlist *lp)

功能:对lp指向的顺序表进行倒置操作 (3)int count(Seqlist *lp,float y)

功能:统计学生表中身高值为y的学生数并返回 2.请根据题目功能要求及程序中的注释填空完整sy1.cpp代码

/*sy11.cpp程序文件代码*/

#include \ //导入自定义类型及函数所在的文件seqlist.cpp,该文件与sy11.cpp存于同一目录中

void insertX(Seqlist *lp, datatype x); void reverse(Seqlist *lp); int count(Seqlist *lp,float y);

void main() {

Seqlist stu; //定义stu为学生顺序表变量 datatype x; //x为存储一个学生信息的变量 int c;

char strname[20]; //strname为存储文件名的数组

/*创建一个包含学生学号、身高、性别的学生身高信息表stu并输出到屏幕,学生信息从records.txt文件读取*/

initList(&stu) //调用函数initList初始化顺序表stu

createList(&stu) // 调用函数createList创建学生表stu

.

.

printf(\

pntList(&stu) //调用函数pntList打印学生表stu getchar(); //在执行程序能起到暂定的作用,按任意键继续

/*对已建立的学生身高信息表按学号从小到大排序,并把结果写入到数据文件中(result.txt)*/

sort_xh(stu) //调用函数sort_xh 对学生表stu按学号从小到大排序

printf(\

scanf(“”) //键盘输入文件名字符串存于strname字符数组中 save(&stu,strname) //调用函数save把排序后的顺序表stu存于文件中,文件名在strname数组中

/*从键盘输入一位学生的相关信息插入到已排序的学生身高信息表中后仍然保持学号的有序性;*/

printf(\ a student information: \\n\ scanf(\ insertX(&stu,x) //插入 printf(\ pntList(&stu); getchar();

/*对插入后的学生身高信息表进行倒置,结果输出在屏幕;*/ reserve(&stu) //倒置顺序表 printf(\ pntList(&stu); getchar();

/*从键盘输入一个身高值,统计与该身高相同的学生个数并输出在屏幕*/

printf(\ a student height: \\n\ scanf(\

c=count(&stu,y) //统计相同身高的学生数存于c中 printf(\ getchar(); }

/*在学号从小到大排序的学生表中插入值为x的学生仍保持学号的有序性*/ void insertX(Seqlist *lp,datatype x) {

int i,j;

if(lp->last>=MAX) Error(\

.

.

//在学号升序的顺序表中找插入位置后,插入x并使表长增1 else

for(i=0;ilast;i++) if(lp->last>x) break;

for(j=lp->last-1;j>=i;j--) /*从后往前元素后移*/ lp-> strname [j+1]=lp-> strname [j];

lp-> strname [i]=x; lp->last++; /*插入并表长增1*/ }

/*对lp指向的顺序表进行倒置操作*/ void reverse(Seqlist *lp) { int i,j;

datatype temp;

//通过前后数据元素交换的方式实现倒置 for (i = 0; j = lp->last – 1, j - i >= 0; i++, j--) { temp = lp->data[i].sg; lp->data[i].sg = lp->data[j].sg; lp->data[j].sg = temp; } }

/*统计学生表中身高值为y的学生数并返回*/ int count(Seqlist *lp,float y) { int i,c=0;

//遍历顺序表统计身高为y的学生数到c变量并返回值

i = lp->last; while (i) { if (lp->data[i - 1].sg = y) { c++; i--; } } }

实验总结分析(本程序的重点与难点,调试中出现的问题及解决方法等)

.