太原理工大学软件学院课程设计实验报告相邻数对ISBN识别码文本文件单词统计送货.docx
- 文档编号:5936050
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:31
- 大小:496.33KB
太原理工大学软件学院课程设计实验报告相邻数对ISBN识别码文本文件单词统计送货.docx
《太原理工大学软件学院课程设计实验报告相邻数对ISBN识别码文本文件单词统计送货.docx》由会员分享,可在线阅读,更多相关《太原理工大学软件学院课程设计实验报告相邻数对ISBN识别码文本文件单词统计送货.docx(31页珍藏版)》请在冰豆网上搜索。
太原理工大学软件学院课程设计实验报告相邻数对ISBN识别码文本文件单词统计送货
课程设计
课程名称:
程序设计课程设计
设计名称:
相邻数对、ISBN识别码
文本文件单词统计、构造最小生成树
送货、学生信息管理系统
专业班级:
学号:
学生姓名:
指导教师:
2017年06月21日
太原理工大学课程设计任务书
学生姓名
专业班级
课程名称
程序设计课程设计(ProgrammingCurriculumDesign)
设计名称
相邻数对,ISBN识别码,文本文件单词统计等
设计周数
2
设计
任务
主要
设计
参数
1.基本要求
掌握C或C++语言、结构化程序和面向对象程序设计方法、数据结构和离散数学理论知识,熟悉C或C++程序的开发环境及调试过程,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。
2.培养学生以下技能
①培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。
②通过对所选题目分析,找出解决方法,设计算法,编制程序与调试程序。
③能熟练调试程序,在教师的指导下,完成课题任务。
④按课程设计报告的要求撰写设计报告。
设计内容
设计要求
1.设计内容
①相邻数对;②ISBN识别码;③文本文件单词统计;④构造可以使n个城市连接的最小生成树;⑤送货;⑥学生信息管理系统
2.设计要求
①至少完成上述设计内容中的4个设计题目;②对每个题目要给出设计方案、功能模块划分、算法思想;③选择使用的数据结构;④给出题目的程序实现;⑤按要求撰写设计报告。
主要参考
资料
1.《程序设计课程设计》指导书;
2.《程序设计技术》、《数据结构》等课程教材;
3.其他自选的相关资料。
学生提交
归档文件
课程设计报告封面应给出专业、班级、姓名、学号、指导教师和完成日期。
每个设计题目的内容包括以下几项:
设计题目、问题描述、问题分析、功能实现、测试实例及运行结果、源程序清单。
注:
1.课程设计完成后,学生提交的归档文件应按照:
封面—任务书—说明书—图纸的顺序进行装订上交(大张图纸不必装订)。
2.可根据实际内容需要续表,但应保持原格式不变。
指导教师签名:
日期:
2017.6.3
1.设计内容II
①相邻数对;②ISBN识别码;③文本文件单词统计;④构造可以使n个城市连接的最小生成树;⑤送货;⑥学生信息管理系统II
2.设计要求II
目录I
题目一相邻数对3
1.1【问题描述】3
1.2【设计及分析】3
1.3【设计功能的实现】3
1.4【测试及运行结果】4
1.5【总结】4
题目二ISBN识别码5
2.1【问题描述】5
2.2【设计及分析】5
2.4【测试及运行结果】6
2.5【总结】7
题目三文本文件单词统计8
3.1【问题描述】8
3.2【设计及分析】8
3.3【设计功能的实现】8
3.4【测试及运行结果】11
3.5【总结】13
题目四构造可以使n个城市连接的最小生成树14
4.1【问题描述】14
4.2【设计及分析】14
4.3【设计功能的实现】14
4.4【测试及运行结果】17
4.5【总结】18
题目五送货19
5.1【问题描述】19
为了增加公司收入,F 公司新开设了物流业务。
由于 F 公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。
然而,F 公司现在只安排了小明一个人负责所有街道的服务。
任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。
城市中有 n 个交叉路口,m 条街道连接在这些交叉路口之间,每条街道的首尾都正好连接着一个交叉路口。
除开街道的首尾端点,街道不会在其他位置与其他街道相交。
每个交叉路口都至少连接着一条街道,有的交叉路口可能只连接着一条或两条街道。
19
基本需求:
19
小明希望设计一个方案,从编号为1的交叉路口出发,每次必须沿街道去往街道另一端的路口,再从新的路口出发去往下一个路口,直到所有的街道都经过了正好一次。
19
输入数据格式:
输入的第一行包含两个整数 n, m(1≤n≤10, n-1≤m≤20),表示交叉路口的数量和街道的数量,交叉路口从 1 到 n 标号。
接下来m行,每行两个整数a,b,表示和标号为a的交叉路口和标号为b的交叉路口之间有一条街道,街道是双向的,小明可以从任意一端走向另一端。
两个路口之间最多有一条街道。
19
输出输出格式:
如果小明可以经过每条街道正好一次,则输出一行包含m+1个整数p1,p2,p3,...,pm+1,表示小明经过的路口的顺序,相邻两个整数之间用一个空格分隔。
如果有多种方案满足条件,则输出字典序最小的一种方案,即首先保证p1最小,p1最小的前提下再保证p2最小,依此类推。
19
如果不存在方案使得小明经过每条街道正好一次,则输出一个整数-1。
19
5.2【设计及分析】19
5.3【设计功能的实现】20
5.4【测试及运行结果】22
5.5【总结】23
题目一相邻数对
1.1【问题描述】
给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。
输入格式
输入的第一行包含一个整数n,表示给定整数的个数。
第二行包含所给定的n个整数。
输出格式
输出一个整数,表示值正好相差1的数对的个数。
1.2【设计及分析】
先设定一个全局数组a,数组的大小尽量大,数组的下标对应的是输入的整数范围。
数组内0表示没有对应于该下标的整数,1表示有对应于该下标的整数。
将数组全部初始化为0,表示没有进行输入。
然后输入整数个数和相应的整数对数组进行修改,然后进行相邻数对筛选得出数对及数对的个数。
数据流图如图1-1。
1.3【设计功能的实现】
#include
inta[1005];
voidinita(int*a){//初始化数组
intn=0;
for(;n<1004;n++)
a[n]=0;
}
voidmain(){
intn,i,m,count=0;
inita(a);
printf("请输入整数的个数:
\n");
scanf("%d",&n);
printf("请输入整数:
\n");
for(i=0;i scanf("%d",&m); a[m]=1; } printf("输入的整数中的相邻数对如下: \n"); for(i=0;i<1005;i++){//相邻数对的筛选 if((a[i]==1)&&(a[i+1]==1)){ printf("(%d,%d)",i,i+1); count+=1; } } printf("\n输入的整数中共有%d个相邻数对\n",count); } 1.4【测试及运行结果】 1.5【总结】 1.该题目比较简单,在经过老师的指导,有了大概的设计思想并进行代码的编写。 2.在写代码的过程中,用了全局数组a,在初始化数组后对其进行调整,但是在编写过程中,没有考虑好各变量的关系,调整数组时发生了数据与输入数据不一致的情况,此时虽然没有语法错误,但经过检查后发现了逻辑错误,然后增加了一个变量进行修改。 3.该程序比较简单,但是觉得数组大部分的空间没有利用,有一定的资源浪费,在运算速度上也是比较慢的。 题目二ISBN识别码 2.1【问题描述】 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。 ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。 识别码的计算方法如下: 首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。 例如ISBN号码0-670-82162-4中的识别码4是这样得到的: 对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158mod11的结果4作为识别码。 编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。 输入格式 输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。 输出格式 输出一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。 2.2【设计及分析】 用一个函数来计算正确的ISBN码。 在主函数中,先输入一个字符串存放于全局数组a中,然后用对字符串中特定符号‘-’进行删除,并保存与数组a1中,原数组不变。 处理数组a1,用judge函数来计算正确的ISBN码,然后对数组a1中的ISBN码与计算的值是否相等,相等则输出RIGHT,反之将计算出的ISBN码赋值给数组a中的ISBN码,并输出数组a。 数据流图如图2-1。 2.3【设计功能的实现】 #include #include #include chara[100],a1[100]; intjudge(char*a){//计算正确的ISBN码 inti=0,l,s=0,m; for(;i<9;i++){ a[i]-=48; l=a[i]*(i+1); s=s+l; } m=s%11; returnm; } voidmain(){ inti,m,j=0,l; printf("请输入ISBN码: "); gets(a); l=strlen(a); for(i=0;a[i]! ='\0';i++){//将‘-’删除掉便于计算 if(a[i]! ='-') a1[j++]=a[i]; else a1[j]=a[i];} m=judge(a1);//计算ISBN码 //printf("%d",m); if(m==(a1[9]-48))//判断ISBN码是否正确 printf("RIGHT");//正确输出RIGHT else {a[l-1]=(m+48);//错误则修改ISBN码并输出正确的ISBN码 printf("%s",a); } } 2.4【测试及运行结果】 2.5【总结】 1、在编写程序框架时,我准备先实现ISBN码的正确计算与修改,所以先使用的是整数进行计算,在整数计算成功后修改为题目中所要求的字符串输入。 2、在对字符串进行处理时,要考虑字符‘-’在字符串中的位置,最初打算用三个数组来控制计算,但在计算过程中出现了错误。 然后采取将字符串中的‘-’删除并存储于新的数组a1中,原始数组不变。 3、在初始框架中,计算是针对整数进行的,在对字符串进行处理时,要考虑其与整数的关系,才能得到正确的计算值。 在修改数组a时也需要考虑计算值之间的转换。 题目三文本文件单词统计 3.1【问题描述】 要统计英文文本文件中出现了哪些单词,就要从文件中读取字符,读取出来的连续英文字符认为是一个单词,遇空格或标点符号单词结束。 3.2【设计及分析】 先构建一个结构体用于存放单词及对应的数目,然后用一个函数来对所获取的单词进行处理,单词相同的则对应数目加1,总单词数目加1;单词不同的总单词加1,对应单词数目加1。 主程序中通过文件进行读取单词,并将大写的字母转换为小写的字母。 然后进行单词的排序,先按照单词出现的频率排序,然后按照首字母进行排序,最后对首字母相同的单词进行排序。 数据流图如图3-1。 3.3【设计功能的实现】 #include #include #include structword{//结构体,用于存放单词及对应的个数 charstr[30]; intnum; }A[1000]; intsum;//记录总的单词数 voidchuli(chars[]){//处理获取的单词 inti,j; intflag=0; for(i=0;i<=sum;i++){ if(strcmp(A[i].str,s)==0){//相同的单词,单词总数加1,对应单词数量加1,标志flag变成1 A[i].num++; flag=1; sum++; } } if(flag==0){//单词不同,则加入单词,并将对应的单词数和单词总数量加1 for(j=0;j<30;j++) A[sum].str[j]=s[j]; A[sum].num++; sum++; } } intmain(){ charch,s[30]; inti,flag=0,l; intii,jj; structworda; FILE*fp; fp=fopen("tyut.txt","r"); if(fp==NULL){ printf("文件为空! "); } sum=0; ch=NULL; for(i=0;i<1000;i++) A[i].num=0;//将所有单词对应的数目设置为0 while(ch! =-1){ for(i=0;i<30;i++) s[i]='\0'; ch=fgetc(fp); if((ch>=65&&ch<=90)||(ch>=97&&ch<=122)){//从文件中获取字母 for(i=0;;i++){ if(ch>=65&&ch<=90)ch=ch+32;//将大写字母处理为小写字母 s[i]=ch; ch=fgetc(fp); if((ch>=65&&ch<=90)||(ch>=97&&ch<=122)) continue; elsebreak; } chuli(s);//处理所获取的单词s } } //将单词按照出现的频率排序,便于后面的按字母顺序排序,由于之前初始化A的sum=0,//所以去掉这一步按字母排序顺序会打乱
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原 理工大学 软件 学院 课程设计 实验 报告 相邻 ISBN 识别码 文本文件 单词 统计 送货