数据结构课内大作业.docx

上传人:b****8 文档编号:10714314 上传时间:2023-02-22 格式:DOCX 页数:13 大小:21.11KB
下载 相关 举报
数据结构课内大作业.docx_第1页
第1页 / 共13页
数据结构课内大作业.docx_第2页
第2页 / 共13页
数据结构课内大作业.docx_第3页
第3页 / 共13页
数据结构课内大作业.docx_第4页
第4页 / 共13页
数据结构课内大作业.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构课内大作业.docx

《数据结构课内大作业.docx》由会员分享,可在线阅读,更多相关《数据结构课内大作业.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构课内大作业.docx

数据结构课内大作业

数据结构课内大作业

《数据结构与算法》课程的课内大作业,可使学生深化理解书本知识,致力于用学过的理论知识和上机取得的实践经验,解决具体、复杂的实际问题,培养软件工作者所需的动手能力、独立解决问题的能力。

该课程设计侧重软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧、多人合作,以至一整套软件工作规范的训练和科学作风的培养。

一、课程大作业要求

学生必须仔细阅读《数据结构与算法分析》课内大作业设计方案,认真主动完成课程设计的要求。

有问题及时主动通过各种方式与教师联系沟通。

学生要发挥自主学习的能力,充分利用课外时间,安排好时间和计划,并在完成课程大作业过程中不断检测自己的计划完成情况。

课内大作业需要同学们在12月9日前完成,并提交相应的报告,对于完成确实有问题的同学,请及时和教师沟通。

二、数据结构课程课内大作业的具体内容

本次课内大作业完成如下模块(共4个题目,每个学生至少挑选1个题目完成,其中尾号为1,2的同学完成第1题,尾号为3,4的同学完成第2题,尾号为5,6的同学完成第3题,尾号为7,8的同学完成第4题,尾号为9,0的同学完成第5题,如果对于分配有任何意见,请email联系教师并说明情况)

(1)运动会分数统计

任务:

参加运动会有n个学校,学校编号为1……n。

比赛分成m个男子项目,和w个女子项目。

项目编号为男子1……m,女子m+1……m+w。

不同的项目取前五名或前三名积分;取前五名的积分分别为:

7、5、3、2、1,前三名的积分分别为:

5、3、2;哪些取前五名或前三名由学生自己设定。

(m<=20,n<=20)

功能要求:

●可以输入各个项目的前三名或前五名的成绩;

●能统计各学校总分;

●可以按学校编号、学校总分、男女团体总分排序输出;

●可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

规定:

输入数据形式和范围:

20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)

输出形式:

有中文提示,各学校分数为整形

界面要求:

有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

存储结构:

学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;

测试数据:

要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明;

(2)订票系统

任务:

通过此系统可以实现如下功能:

录入:

可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)

查询:

可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;

订票:

可以订票(订票情况可以存在一个数据文件中,结构自己设定),如果该航班已经无票,可以提供相关可选择航班;

退票:

可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:

当航班信息改变可以修改航班数据文件

要求:

根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;

(3)学生信息管理的数据检索

任务:

通过该程序实现如下功能

●建立学生信息管理的数据文件stud.dat;文件中至少包含15个学生的信息;每个学生至少包括:

学号、姓名、年龄等5项内容(另2项自定),当再次运行程序时从该文件中读取数据;

●可以添加(插入、追加)学生信息;

●可以修改某个学生的某项信息。

●为该数据信息建立一个索引:

每个学生信息记录在索引中有一个索引项,其包含该学生的学号、记录的位置(即记录在文件中的序号);索引文件采用平衡二叉(AVL)树。

程序应能根据输入的学号通过索引进行查找;并且,你所建立的索引需要保存到文件中,以便重复使用。

要求:

根据以上功能说明,设计学生信息建立程序,学生信息索引系统,设计程序完成功能;

(4)文章编辑

任务:

通过该程序实现如下功能:

功能:

输入一页文字,程序可以统计出文字、数字、空格的个数。

静态存储一页文章,每行最多不超过80个字符,共N行;

相关要求:

●分别统计出其中英文字母数和空格数及整篇文章总字数;

●统计某一字符串在文章中出现的次数,并输出该次数;

●删除某一子串,并将后面的字符前移。

●存储结构使用线性表,分别用几个子函数实现相应的功能;

输入数据的形式和范围:

可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:

●分行输出用户输入的各行字符;

●分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"输出删除某一字符串后的文章;

要求:

根据以上功能说明和输入/输出要求,设计程序完成相关的文字编辑功能和相应的输入输出功能。

(5)校园导游程序

任务:

用无向网表示你所在学校的校园建筑平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的通路,存放路径长度等信息。

要求实现以下功能:

●查询各建筑的相关信息;

●查询图中任意两个建筑间的最短路径;

●查询图中任意两个建筑间的所有路径。

要求:

根据以上功能说明,设计校园建筑平面图的建立、查询,任意两个建筑间的最短路径查询等功能,并设计程序完成功能。

三、报告格式

1.问题描述:

包括目标、任务、条件和约束的描述。

2.设计:

⑴数据结构设计和核心算法设计描述;

⑵各个程序模块必须要有相应的注释;

⑶主要程序模块的输入、处理(算法框架描述)和输出描述;

⑷主要程序之间的调用与被调用关系等。

3.测试:

测试范例,测试结果,测试结果的分析与讨论,测试过程中遇到的主要问题及所采用的解决措施.

4.使用说明和报告小结:

⑴使用说明主要描述如何使用你的程序以及使用时的主要事项;

⑵在小结中说明程序的改进思想、经验和体会,并回答教师布置的讨论题。

5.各个函数功能说,运行示例的结果。

6.将以上各项文字材料及程序清单等装订成册,形成一个完整的实验报告。

附录:

关于文件操作

C语言的文件操作主要有三个步骤:

Ø打开文件

打开文件使用函数fopen(“文件名”,”方式”);

其中,”文件名”可以是字符串变量表示,它告诉系统要打开的文件的文件名,一般应为文件全名;“方式”为打开该文件欲进行什么操作,如“读”/r,或者“写”/w等。

该函数执行后返回所打开文件缓冲区指针。

所以,一般需要:

先定义一个文件类型的指针,如:

FILE*fp;

然后,fp=fopen(“D:

\mydata.dat”,”w”);

若打开不成功,则指针值为NULL。

Ø文件读写

读/写文件主要有如下几组函数:

●fprintf(fp,”格式描述串”,<输出列表>),写数据到文件

●fscanf(fp,”格式描述串”,<变量列表>),从文件读数据

●fwrite(”数据缓冲区地址”,”记录字节数”,”记录数”,fp),写记录数据到文件(二进制)

●fread(”数据缓冲区地址”,”记录字节数”,”记录数”,fp),从二进制文件中读数据

●fputc()和fgetc(),读/写数据为字符类型。

当把文件中的数据读到内存后,可以对其中的数据进行所需要的操作(如通过赋值语句等对先观数据进行修改等)。

这阶段看作是对文件数据进行实质性操作的阶段。

Ø关闭文件

关闭文件用函数:

close(fp);

其中,fp为你所要关闭的文件指针,当一个程序中对多个文件进行操作时,特别注意不要关闭不希望关闭的文件。

此外,数据存储到文件中时,数据的存储格式也有不同,即通常所说的“文本文件”和“二进制文件”。

Ø文件读写示例:

例一.将0-14这15个整数存入文件file.dat

#include

#definemax15

/*以文本方式存储15个整数*/

voidsave_dat()

{FILE*fp;

inti;

if((fp=fopen("d:

\\file.dat","w"))==NULL)

{printf("cannotopenfile\n");

/*打开D盘根目录下的文件file.dat,注意:

因为\是C的转义字符,所以需要再加一个\。

*/

return;

}

for(i=0;i

fprintf(fp,"%d",i);

printf("Datahavebeensavedtoafile\n");

fclose(fp);

}

main()

{

save_dat();

}

当用记事本打开数据文件file.dat,可以看到0-14这15个数以字符(文本)格式存储在文件中,并且,这15个数据是紧挨着存储的。

当再用fscanf(“%d”,&i)从该文件中读取这些数据时、将不能正确读取、故需要注意数据存储格式。

可以修改fprintf()为:

for(i=0;i

fprintf(fp,"%6d",i);

这样,每个整数占6位宽度,存储时各数据之间就留有空格,再用fscanf(“%d”,&i)读取时,每个空格将成为数据的分界符;但是,如果将fscanf(“%d”,&i)修改为

fscanf(“%d,”,&i)/*多一个逗号*/

那么,在读取数据时,将按格式描述串中约定的逗号作各个数据之间的分隔符,此时,需要将存储文件是的fprintf()对应地修改为:

for(i=0;i

fprintf(fp,"%d,",i);

用该语句存储数据的结果(从记事本打开看),可以看到每个数据之间也存储了逗号(最后一个数据之后也有逗号)。

当然,这15个整数也可以以二进制格式存储到文件中,如下程序即是:

#include

#definemax15

/*用二进制方式存储0-14*/

voidsave_dat()

{FILE*fp;

inti;

if((fp=fopen("d:

\\file.dat","wb"))==NULL)

{printf("cannotopenfile\n");

return;

}

for(i=0;i

fwrite(&i,sizeof(int),1,fp);

printf("Datahavebeensavedtoafile\n");

fclose(fp);

}

main()

{

save_dat();

}

运行该程序并用记事本打开文件file.dat,所看到的数据就不再是ASCII码格式,而是以整数的内码(二进制补码)存储的了。

因此,也只能采用对应的语句(fread)读取数据。

例二.存储记录(结构体)数据

以下程序是定义了学生信息结构体,然后输入4个学生信息、存入文件d:

\stud1.dat

#include

#definesize4

/*建立学生信息-结构体-数据文件*/

structstud_type

{charname[10];

intnum,age;

charaddr[15];

}stud[size];

voidsave_dat()

{FILE*fp;

inti;

if((fp=fopen("d:

\\stud1.dat","wb"))==NULL)

{printf("cannotopenfile\n");

return;

}

for(i=0;i

if(fwrite(&stud[i],sizeof(structstud_type),1,fp)!

=1)

printf("filewriteerror!

\n");

printf("Datahavebeensavedtoafile\n");

fclose(fp);

}

main()

{inti;

printf("PleaseentertheStudentInformation:

\n");

for(i=0;i

scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);

save_dat();

}

用记事本打开数据文件stud1.dat,看到学生信息中的姓名、地址这两个字符串数据是按SACII码存储的,但学号和年龄(数值)却是按内码存储的。

对应的读取该数据文件中数据的程序如下:

#include

#definesize4

/*从记录数据文件中读取学生信息数据*/

structstud_type

{charname[10];

intnum,age;

charaddr[15];

}stud[size];

main()

{inti;

FILE*fp;

fp=fopen("d:

\\stud1.dat","rb");

if(fp==NULL){printf("fileopenerror!

\n");return;}

for(i=0;i

{fread(&stud[i],sizeof(structstud_type),1,fp);

printf("%-10s%4d%4d%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);

}

fclose(fp);

}

可以验证,存入的数据被正确地读取、显示。

当然,也可以将结构体(记录)采用文本格式存储到文件中,看入下程序:

#include

#definesize4

/*建立学生信息-结构体-数据文件,用文本格式存储*/

structstud_type

{charname[10];

intnum,age;

charaddr[15];

}stud[size];

voidsave_dat()

{FILE*fp;

inti;

if((fp=fopen("d:

\\stud3.dat","w"))==NULL)

{printf("cannotopenfile\n");

return;

}

for(i=0;i

fprintf(fp,"%-10s%5d%3d%-15s",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);

printf("Datahavebeensavedtoafile\n");

fclose(fp);

}

main()

{inti;

printf("PleaseentertheStudentInformation:

\n");

for(i=0;i

scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);

save_dat();

}

用记事本打开文件stud3.dat,可以看到,记录(结构体)中的数值数据也以SACII码存储的(注意比较数据文件stud1.dat和stud3.dat在记事本中的显示区别)。

更多的知识和示例,可以参考C程序设计教程。

Ø其他相关知识

1)用户程序的文件读写,实际上是在文件缓冲区中进行,系统自动为文件的读写设置一个文件指针,每从文件中读、写一个数据单位(如文本文件则以字节为单位、如果是记录文件则以结构体大小为单位),指针自动移动一个数据单位。

所以,C还提供了函数rewind()、fseek()和ftell(),主要用来定位指针。

当用户程序对文件进行写操作时,数据并非立即写入磁盘文件,而是暂存于缓冲区中,当缓冲区满或执行关闭文件操作时,系统才将缓冲区中的数据写入文件。

这就说明程序在文件操作结束使用关闭文件语句关闭的重要性。

2)对于非流式文件(如文本文件、缓冲文件系统),如果要修改文件中某些数据(并写入文件),通常采用复制的方法(复制完成后再将原文件删除并将复制的文件改名),因为,这类文件是顺序文件。

3)部分目录操作函数参考

cddir(char*path)dir.h

改变当前目录(缺省目录)到path指定的路径。

Path参数为路径名的字符串(所以用指针类型)。

findfirst(char*filename,structffblk*fblk,intattrib)

在头文件dir.hdos.h

其中:

filename为文件全名(带路径)、可以使用通配符查找一类文件;structffblk为C定义的文件控制块的结构体,用户实参名为fblk,在打开文件时由系统自动建立该结构体并返回其位置(指针),用户可以访问其成员fblk.ff_name(所查到的文件名)等;attrib是告诉系统要查的文件的属性(如归档、只读、系统、目录等),C提供的参数常量有:

FA_RDONLY只读

FA_HIDDEN隐藏

FA_SYSTEM系统

FA_LABEL磁盘卷标

FA_DIREC目录

FA_ARCH归档

当查找成功返回0,否则返回-1等。

该函数在指定的路径下查找指定的文件,如果找到第一个则返回0,ffblk.ff_name返回文件名。

findnext(structffblk*fblk)dir.h

该函数与findfirst()配合使用,当要查找一类文件的下一个文件时使用这个函数继续查找。

mkdir(char*pathname)dir.h

创建pathname指定的(子)目录。

rmdir(char*pathname)dir.h

删除pathname指定的目录。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1