0;
}
2.4【测试与运行结果】
2.5【总结】
这个的关键点在于字符必须减去‘0’才可以进行运算。
题目三文本文件单词统计
3.1【问题描述】
假设有如下的英文文本文档:
(此处为太原理工大学学校简介英文版)
()
(1902),.
100,a,
.a“211”
100.
……
a
;,30,000
.,,
,
.a
.
设计C或程序,统计在这样的英文文本文件中,出现了多少个单词,每个单词出现了几
次。
连续的英文字符都认为单词(不包括数字),单词之间用空格或标点符号分隔。
3.2【设计与分析】
要统计英文文本文件中出现了哪些单词,就要从文件中读取字符,读取出来的连续英文字符
认为是一个单词,遇空格或标点符号单词结束。
使用线性表记录单词以与每个单词出现的次数。
线性表中的单词按字典顺序存储。
线性表的顺序存储结构如下:
100线性表存储空间的初始分配量
10线性表存储空间的分配增量
{
[21]存储单词,不超过20个字符
;单词出现的次数
};
{
*;存储空间基址
;当前长度
;当前分配的存储容量
-4-
};
3.3【设计功能的实现】
3.3.1实现顺序表的基本操作
⑴顺序表的初始化:
()
⑵顺序表上查找指定的单词:
(*s)
若找到,单词的出现次数增1,返回0,否则返回该单词的插入位置。
⑶在顺序表上插入新的单词:
(i,*s)
要求按字典顺序有序。
新单词的出现次数为1.
⑷输出顺序表上存储的单词统计信息:
()
输出文件中每个单词出现的次数以与文件中总的单词数(可输出到文件中)。
3.3.2统计单词数
统计过程如下:
(1)输入要统计单词的文本文件名,打开相应的文件;
(2)初始化顺序表;
(3)从文本文件中读取字符,直到文件结束。
具体描述如下:
(读文件没有结束结束)
{
过滤单词前的非字母字符;
读取一个单词,以字符串形式存储在一个字符数组中;
在线性表中查找该单词,若找到,单词的出现次数加1,否则返回其插入位置;
上一步中,若没找到,则进行插入操作;
处理下一个单词。
}
(4)关闭文件,输出统计结果。
""
<>
<>
<>
100线性表存储空间的初始分配量
10线性表存储空间的分配增量
{
[21];存储单词,不超过20个字符
;单词出现的次数
};
{
*;存储空间基址
;当前长度
;当前分配的存储容量-4-
};
(*p){>=(*)(*());
(>)0;
>=0;
>=;1;
}
(*p,*)
{
,;
=0;=>-1;
(<=)
{
=(+)/2;
((,>[])0)表中进行二分查找
{
>[];
0;
}
((,>[])<0)
=-1;
=+1;
}
+1;
}
(**)
{
j;
*;
(>>=>)
{
=(*)(>,(>+)*());
()0;>=>+扩充表长
>=;
}
(j=>;j>=i;)>[j]=>[j-1];
(>[i-1],);
>[i-1]=1;
>;
1;
}
(*p,)
{
*;
i;
=;
=("D:
\\单词计数","w");
(,"该文章共有个单词\n以下字母顺序来显示每个单词出现的个数\n*******************************\n",);
(,"单词出现次数\n",);
(i=0;i<>;)
(,"24s5d\n",>[i],>[i]);
(,"*******************************\n");
();
}主函数
()
{
L;
[21],,[30],1[50];=0,i,j=0,=0;
*;
();
("请将要检索的文本文件放入D盘根目录,然后输入文件名(不用写后缀):
");
("",);
(1,"D:
\\",);();
((=(1,"r")))
{
("打开文件失败,请输入文件名与文件路径\n");
();
(0);
}
=();
()
{
((>='A'<='Z')(>='a'<='z'))
{
=>='A'<='Z'?
+32:
;
[]=;
=1;
}
{
(1)
{
(j>20)
{
("文章中部分单词太长不予统计");
};
[j]='\0';
=0;
j=0;
i=(,);
(i>0)
(,i,);
}
}
=();
}
();
("统计结束¥¥请查看打开的单词统计里面便是检索结果。
\n");
(,);
("\"\"D:
\\单词计数");
();
}
3.4【测试与运行结果】
3.5【总结】
这个实验要熟悉线性表的各个操作,才能做出来完整的程序。
题目四构造可以使n个城市连接的最小生成树
4.1【问题描述】
给定一个地区的n个城市间的距离网,用算法或算法建立最小生成树,并计算
得到的最小生成树的代价。
4.2【设计与分析】
1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,
若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。
2、要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成
树的代价。
3、表示城市间距离网的邻接矩阵(要求至少6个城市,10条边)。
4.3【设计功能的实现】
""
<>
<>
<>
;
30/*最大顶点数为30*/
/*1000定义一个权值的最大值*/
{
[];/*顶点表*/
[][];/*邻接矩阵,即边表*/
n;/*顶点数和边数*/
};/*是以邻接矩阵存储的图类型*/
{
;/*某顶点与已构造好的部分生成树的顶点之间权值最小的顶点*/
;/*某顶点与已构造好的部分生成树的顶点之间的最小权值*/
}[];/*用算法求最小生成树时的辅助数组*/
(*G)/*建立有向图G的邻接矩阵存储*/
{
i,j;
("请输入顶点数n:
");
("",&(>n))*输入顶点数和边数*/
("\n请输顶点字符信息(共个):
",>n);
(i=0;i<>n;)
{
("",&(>[i]));/*输入顶点信息,建立顶点表*/
}
("\n请输入邻接矩阵,不存在则输入1000\n");
(i=0;i<>n;)
{
(j=0;j<>n;)
{
>>>[i][j];
}
}
("此连邻接矩阵为(1000为不存在):
\n");
(i=0;i<>n;)
{
(j=0;j<>n;)
("%8d",>[i][j]);
("\n");
}
}
(G,u,)
{/*从第u个顶点出发构造图G的最小生成树,最小生成树顶点信息存放在数组中*/
i,j,w,k,=0;
(i=0;i<;)/*辅助数组初始化*/
(iu)
{
[i]=u;
[i]=[u][i];
}
[u]=0;/*初始,{u}*/
(i=0;i<-1;)/*选择其余的1个顶点*/
{
w=1000;
(j=0;j<;)/*在辅助数组中选择权值最小的顶点*/
([j]0[j]{
w=[j];
k=j;
}/*求出生成树的下一个顶点k*/
[k]=0;/*第k顶点并入U集*/
(j=0;j<;)/*新顶点并入U后,修改辅助数组*/
([k][j]<[j])
{
[j]=k;
[j]=[k][j];
}
}
("\n最小生成树中包括的城市间的道路:
\n");
(i=0;i<;)/*打印最小生成树的各条边*/
(iu)
{
(">\n",i,[i],[i][[i]]);
=+[i][[i]];
}
("\n最小生成树的代价为\n\n",);
}
()
{
t;
G;
;
();
("请输入起始点:
");
("",);
(G,t,);
1;
}
4.4【测试与运行结果】
4.5【总结】
这个实验必须把普利姆算法搞懂,将思路理清晰,才能让程序完整的被写出来。