1、 课程设计课程名称: 程序设计课程设计 设计名称: 相邻数对、ISBN 识别码 文本文件单词统计、构造可以使n 个城市连接的最小生成树 专业班级:软件 1502 班 学号: 2015005509学生姓名: 冯旭超 指导教师: 吕进来 2017 年 06 月 23 日太原理工大学课程设计任务书学生姓名 专业班级 软件 课程名称 程序设计课程设计(Programming Curriculum Design)设计名称 相邻数对 ,ISBN 识别码,文本文件单词统计等 设计周数 2设计任务主要设计参数1.基本要求掌握 C 或 C+语言、结构化程序和面向对象程序设计方法、数据结构和离散数学理论知识,熟悉
2、 C 或 C+程序的开发环境及调试过程,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。2.培养学生以下技能培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。通过对所选题目分析,找出解决方法,设计算法,编制程序与调试程序。能熟练调试程序,在教师的指导下,完成课题任务。按课程设计报告的要求撰写设计报告。设计内容设计要求1.设计内容相邻数对;ISBN 识别码;文本文件单词统计;构造可以使 n 个城市连接的最小生成树;送货;学生信息管理系统2.设计要求至少完成上述设计内容中的 4 个设计题目;对每个题目要给出设计方案、功能模块划分、算法思想;选
3、择使用的数据结构; 给出题目的程序实现;按要求撰写设计报告。主要参考资 料1.程序设计课程设计指导书;2.程序设计技术 、 数据结构等课程教材;3. 其他自选的相关资料。学生提交归档文件课程设计报告封面应给出专业、班级、姓名、学号、指导教师和完成日期。每个设计题目的内容包括以下几项:设计题目、问题描述、问题分析、功能实现、测试实例及运行结果、源程序清单。注:1.课程设计完成后,学生提交的归档文件应按照:封面任务书说明书图纸的顺序进行装订上交(大张图纸不必装订) 。2.可根据实际内容需要续表,但应保持原格式不变。指导教师签名: 日期:2017.6.3I目 录1. 相邻数对 .12. ISBN 识
4、别码 33. 文本文件单词统计.54. 构造可以使 n 个城市连接的最小生成树11 1题目一 相邻数对1.1【问题描述】给定n 个不同的整数,问这些数中有多少对整数,它们的值正好相差1。输入格式输入的第一行包含一个整数n,表示给定整数的个数。第二行包含所给定的n 个整数。输出格式输出一个整数,表示值正好相差 1 的数对的个数。1.2【设计及分析】输入输出610 2 6 3 7 83测试数据输出说明值正好相差1 的数对包括(2, 3), (6, 7), (7, 8)。所以输出:3数据约定1using namespace std;int main()int n; int m = 0;cout n;
5、int A1000;cout Ai;for (int i = 0; i using namespace std;char a13;int main()int i = 1, sum = 0; int x;cout ai;sum = a1 * 1 + a3 * 2 + a4 * 3 + a5 * 4 + a7 * 5 + a8 * 6 + a9 * 7 + a10 * 8 + a11 * 9;sum = sum - 45 * 0;x = sum % 11;if (x = 10 /存储单词,不超过 20 个字符int count; /单词出现的次数 ElemType;typedef structEl
6、emType *elem; /存储空间基址int length; /当前长度int listsize; /当前分配的存储容量- 4 -7 SqList;int lnitList(SqList *p) p-elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType);if (p-elem = NULL)return 0;p-length = 0;p-listsize = LIST_INIT_SIZE; return 1;int LocateElem(SqList *p, char *word)int low, high, mid;low = 0
7、; high = p-length - 1;while (low elemmid.word) = 0)/表中进行二分查找p-elemmid.count+;return 0;else if (strcmp(word, p-elemmid.word) length = p-listsize)base = (ElemType*)realloc(p-elem, (p-listsize + LISTINCREMENT)*sizeof(ElemType);if (base = NULL)return 0; p-listsize = p-listsize + LISTINCREMENT;/扩充表长p-ele
8、m = base;for (j = p-length; j = i; j-)p-elemj = p-elemj - 1;strcpy(p-elemi - 1.word, word);p-elemi - 1.count = 1;p-length+;return 1;void PrintList(SqList *p, int num)8FILE *fw;int i;int no = num;fw = fopen(“D:单词计数.txt“, “w“);fprintf(fw, “该文章共有%d个单词n以下字母顺序来显示每个单词出现的个数n*n“, no);fprintf(fw, “单词 出现次数n“,
9、 no);for (i = 0; i length; i+)fprintf(fw, “%-24s %-5dn“, p-elemi.word, p-elemi.count);fprintf(fw, “*n“);fclose(fw);/主函数void main()SqList L;char word21, ch, filename30, filename150; int num = 0, i, j = 0, mark = 0;FILE *fp;lnitList(printf(“请将要检索的文本文件放入D盘根目录,然后输入文件名(不用写后缀):“);scanf(“%s“, sprintf(filen
10、ame1, “D:%s.txt“, filename); getchar();if (fp = fopen(filename1, “r“) = NULL)printf(“打开文件失败,请输入文件名与文件路径n“);getchar();exit(0);ch = fgetc(fp);while (ch != EOF)if (ch = A9num+;wordj = 0;mark = 0;j = 0;i = LocateElem(if (i 0)lnsertList(ch = fgetc(fp);fclose(fp);printf(“统计结束¥请查看打开的 单词统计.txt里面便是检索结果。n“);P
11、rintList(system(“start“D:单词计数.txt“);getchar();3.4【测试及运行结果】103.5【总结】这个实验要熟悉线性表的各个操作,才能做出来完整的程序。11题目四 构造可以使 n 个城市连接的最小生成树4.1【问题描述】给定一个地区的n 个城市间的距离网,用Prim 算法或Kruskal 算法建立最小生成树,并计算得到的最小生成树的代价。4.2【设计及分析】1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。2、要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道
12、路,并显示得到的最小生成树的代价。3、表示城市间距离网的邻接矩阵(要求至少 6 个城市,10 条边)。4.3【设计功能的实现】#include“stdafx.h“#include#include#includeusing namespace std;#define MaxVextexNum 30 /* 最大顶点数为30 */*#define INFINITY 1000 定义一个权值的最大值 */typedef structint vexsMaxVextexNum; /* 顶点表 */int arcsMaxVextexNumMaxVextexNum; /* 邻接矩阵,即边表 */int n; /
13、* 顶点数和边数 */MGraph; /* MGragh是以邻接矩阵存储的图类型 */typedef structint adjvertex; /* 某顶点与已构造好的部分生成树的顶点之间权值最小的顶点 */int lowcost; /* 某顶点与已构造好的部分生成树的顶点之 间的最小权值 */ClosEdgeMaxVextexNum; /* 用prim算法求最小生成树时的辅助数组 */void CreatGraph(MGraph *G) /* 建立有向图G的邻接矩阵存储 */int i, j;printf(“请输入顶点数n :“);scanf(“%d“, /* 输入顶点数和边数 */prin
14、tf(“n请输顶点字符信息(共%d个):“, G-n);for (i = 0; in; i+)scanf(“%d“, /* 输入顶点信息,建立顶点表 */12printf(“n请输入邻接矩阵,不存在则输入1000n“);for (i = 0; i n; i+)for (j = 0; j n; j+)cin G-arcsij;printf(“此连邻接矩阵为(1000为不存在):n“);for (i = 0; in; i+)for (j = 0; jn; j+)printf(“%8d“, G-arcsij);printf(“n“);void PRIM(MGraph G, int u, ClosEd
15、ge closedge)/* 从第u个顶点出发构造图G的最小生成树,最小生成树顶点信息存放在数组closedge中*/int i, j, w, k, cost = 0;for (i = 0; i%d,%dn“, i, closedgei.adjvertex, G.arcsiclosedgei.adjvertex);cost = cost + G.arcsiclosedgei.adjvertex;printf(“n最小生成树的代价为:%dnn“, cost);int main()int t;MGraph G;ClosEdge closedge;CreatGraph(printf(“请输入起始点:“);scanf(“%d“, PRIM(G, t, closedge);return 1;4.4【测试及运行结果】144.5【总结】这个实验必须把普利姆算法搞懂,将思路理清晰,才能让程序完整的被写出来。