数据结构课程设计

发布 2022-10-01 21:33:28 阅读 4033

合肥学院。

计算机科学与技术系。

课程设计报告。

2017~2018学年第二学期。

文本文件单词的检索与计数。

一、问题分析和任务定义。

要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;

统计给定单词在文本文件**现的总次数;

检索输出某个单词出现在文本中的行号、在该行**现的次数以及位置。

1)建立文本文件。

2)给定单词的计数。

3)检索单词出现在文本文件中的行号、次数及其位置。

4)主控菜单程序的结构。

二、数据结构的选择和概要设计。

数据结构:1.所有存储形式都用顺序存储。

2.用矩阵检索单词出现的位置和次数。

概要设计:该设计要求可分为三个部分实现:

1.对文件的操作,其中包括文本文档的建立,文件名由用户用键盘输入;以及读取文本文档内容并显示在屏幕上;

2.给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;

3.检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行**现的次数以及在该行中的相应位置。

图2-1 课题目录。

图2-2 流程图。

图2-3 函数关系。

三、详细设计和编码。

1.头文件包含:

#include<>

#include<>

#include<>

2.功能细分。

1)创建自定义名字文档。

用字符数组filename存放特定的文件路径(d:\\dev-cpp\\课程设计数据\\)

从键盘输入自定义的文档名字name,把name和“.txt”用strcat连接。

再用strcat把路径filename与文档名name连接起来。

打开文件时用变量(filename)表示文件名,若无该文件则创建。

图3-1 创建自定义名字文档编码。

2)打开文件读取内容并输出。

输入文档名字,根据名字打开文件。

打开文件后,用fgets读取文档内容。

fgets读取一行输出一行,并用i记录行数。

fgets返回eof(end of file)表示文件结尾。

3)写入文本。

输入文档名字,根据名字打开文档,若无该文档,则重新建立一个。

根据提示,从键盘输入字符,最后以0结束。

用字符变量ch接收字符,并用fputc()把字符输出到文本文档中。

图3-2 写入文档编码。

4)单词的计数。

输入文档名字,根据名字打开文件。

根据提示输入单词。

用ch遍历文本文档。

把空格前的单词与给定单词比较,若相同则count++

若不相同则重新开始比较。

5)获取文件的行数。

输入单词。获取文本行数:

根据判断,由于有些行是空行,无法算作一行,所以要判断后一个字符是不是也是。

若是两个连续的,则line-1;

若不是,则line+1;

判断方法:当ch1为时,把ch1赋值给ch2,ch1继续获取下一个字符,若ch1==ch2,则line-1;

图3-3 获取文件行数编码。

6)矩阵存储单词检索。

输入单词。边统计边判断。

统计:定义一个二维数组a,所有位置的初始值为-1

遍历文本文件时,在遇到第一个前为第一行,遇到第一个空格前为第一个单词,即a[0][0]位置上的-1变为0,依次类推。

把每个单词与给定单词作比较,若该单词与给定单词相同,则该单词位置上的0的值变为1

统计每一行值为1的数的个数,为给定单词在该行**现的次数;

输出每一行为1的数的列的值,即为给定单词在该行**现的位置;

把行列数的值赋给矩阵的s,v;用循环,把数组中所有值为1的数的位置存储在矩阵的word(y,z)中,并且计算每行为1的总数count++;

图3-4 矩阵的结构体类型。

图3-5 单词的位置、个数的输出。

四、上机调试过程。

1.输出文档内容时,fgets()不能用eof判断是否到达结尾,若把eof换作null,但由于单词与单词之间有空格,无法正确显示。

解决:用fgetc读取每个字符存放于ch中,当ch!=eof的时候,就可以不断输出直到文件结尾,再用len记录行数,初始值为1,当遇到‘’时则+1。

2.单词的计数出错,无法准确计算出文档有多少和给定的单词。

解决:①在循环中,判断ch为空格或转行符号时,要用&&判断,不能用||,否则将在判断时出错。

在比较过程中,若下一个字符不符合就直接判断为错,从i=0重新开始,否则只要单词中包含给出的单词都表示正确。

在比较时还要主要标点符号,符号也会影响判断。

3.在计算文本文档行数的时候,若有空行,也会计算成一行。

解决:当两个连续的转行符号在一起时,line应该先+1再-1,即不变。

当一个转行符号后不是转行符号,也不是文件结尾,line+1

4.标点符号后有空格,重复计算单词。

解决:修改判断条件,若标点符号后是空格,则不计算单词。

5.调试过程中,完成输入点击“enter”后,直接跳过程序进行下一步。

解决:下一步进入该函数时,程序会自动获取该enter键,导致函数直接结束。因此要用getchar()先获取该字符,才可以开始执行程序。

五、测试结果及其分析。

图5-1 程序主菜单。

图5-2 功能1 子菜单。

1.创建文件。

图5-3 创建文件成功。

图5-4 文档成功出现在文件夹中。

2.文档内容显示。

图5-5 文档内容。

图5-6 文档内容显示在屏幕上。

3.单词计数。

1)测试数据1

文档:给定单词:you

正确数据:9个。

检验数据:9个。

图5-7 中you的单词总数。

2)测试数据2

文档:给定单词:you(与you区分大小写)

正确数据:4个。

检验数据:4个。

图5-7 中you的单词总数。

3)测试数据3

文档:给定单词:it

正确数据:3个。

检验数据:3个。

图5-8 中it的单词总数。

4)测试数据4

文档:给定单词:is

正确数据:4个。

检验数据:4个。

图5-9 中is的单词总数。

4.单词定位。

1)测试数据1

文档:给定单词:you

共9个)图5-10 中you所在的位置和个数。

2)测试数据2

文档:给定单词:is

共4个)图5-10 中is所在的位置和个数。

5.时间性能分析。

程序中对数据进行顺序存储的时间性能为o(n);但是用矩阵记录单词的坐标和个数用了两层for循环,其时间性能为o(n*n);

在对文本文档进行遍历并输出,只需要while控制的一层循环,所以其时间性能为o(n);

在计算文本文档的行数和单词的个数的时候,用了多个if-else的判断,但是仍然只有一层while控制的循环,所以其时间性能为o(n);

总结:该程序的时间性能为o(n*n);

六、用户使用说明。

1.功能叙述。

创建文本文档

显示文本文档的内容。

统计给定单词在文本文档**现的次数。

检索给定单词,并输出其所在的行、列和每行总共出现的次数。

2.操作说明。

由数字0-9可以选择不同的功能,以及板块的退出。

除数字以外的符号可以结束程序(空格键和除外)

3.输入说明。

本程序涉及文件名字的输入和单词的输入。

输入文件名:文件名由数字个英文字母以及符号-组成;

单词的输入:字符间不可出现空格,只能用26个英文字母组成,且区分大小写。

七、参考文献。

1] 王昆仑,李红。 数据结构与算法。 北京:中国铁道出版社,2024年5月。

八、附录。#include<>

#include<>

#include<>

#definemax100

voidfileoperation();

voidcreatefile();

voidshow();

voidwordcount();

voidexplor();

typedefstruct

inty,z;

node;typedefstruct

ints,v;

intcount[max];

nodeword[max];

seqmatrix;

intmain()/主菜单。

intnumber;

printfn");

printf("1.文件操作");

printf("2.单词计数");

printf("3.单词定位");

printf("4.退出程序");

printfn");

printf("请输入功能序号:")

scanf("%d",&number);

switch(number)

case1:fileoperation();

case2:wordcount();

case3:explor();

default:exit(0);

return0;

voidfileoperation()/文件操作。

system("cls");

intnumber;

printfn");

printf("1.创建文件");

/printf("2.写入文件");

printf("2.显示内容");

printf("3.返回");

printfn");

printf("请输入功能序号:")

scanf("%d",&number);

switch(number)

case1:createfile();

case2:show();

case3:system("cls");main();

default:exit(0);

voidcreatefile()/创建文档。

system("cls");

charfilename[100]="d:\\dev-cpp\\课程设计数据\\"直接把地址赋值进数组中。

charname[25];

file*fp;

getchar();

printf("输入创建的文件的名字:")

gets(name);

strcat(name,".txt");连接成一个文件名。

strcat(filename,name);

if((fp=fopen(filename,"a+")null)

printf("null");

exit(0);

/给文件输入内容。

fprintf(fp,"weeachdictatewhatitis,howitis,andwhyitis.sheiskind,caring,nurturing,andloving.");

printf("创建成功!")

fclose(fp);

charch;

printf("任意值退出,0返回:")

ch=getchar();

if(ch=='0')

fileoperation();

elseexit(0);

数据结构课程设计

课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...

数据结构课程设计

数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...

数据结构课程设计

班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...