C语言课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广东技术师范学院天河学院C语言程序设计
课程设计报告
题目:最优交通路径
设计者:范兴
专业班级:计算机应用技术101班
学号:2010040735108
指导教师:胡安明
所属系部:计算机科学与技术系
年月日
广东技术师范学院天河学院(C++/VC++)
课程设计任务书
班级:计应 101设计人:范兴成绩 ____ 地点________
一、题目:最优交通路径
二、目的与要求
1.目的:
(1)培养学生综合利用C语言进行程序设计的能力,掌握常用软件开发的步骤和原理
(2)提高学生实际动手能力
2.基本要求:
(1)要应用所学的C语言知识及程序编写思想来完成软件的设计开发;
(2)要求使用Visual C++来完成设计程序
(3)程序调试通过后,完成程序文档的处理,加必要的注释。

(4)要求各小组的各个成员实现不同的模块
3.功能描述如下:
论述各自小组完成程序的要实现的功能,格式如下:
(1)设计合理的界面,进行程序中预置了部分城市间的距离;
(2)然后由用户选择两个城市,计算出两城市之间的最短距离以及相应的路线
(3)按照要求输入数据,就能得到结果,按任意键盘退出。

课程设计报告主要内容
目录
第一章软件功能设计说明 (3)
1、软件功能 (3)
2、第三组分工完成部分 (3)
3、小组安排 (3)
4、时间安排 (3)
第二章软件各功能具体的设计思想 (4)
1、功能模块实现过程论述 (4)
2、我主要负责测试程序 (4)
3、实现效果 (4)
第三章软件程序清单 (6)
第四章参考文献 (12)
第五章设计的收获及心得 (13)
第一章软件功能设计说明
1、软件功能
a) 我们组要完成的程序是“最优交通路径”;
b) 该程序实现的功能是程序中预置了部分城市的距离,然后由用户选择
两个城市,计算出城市之间的最短距离以及相应的路线
c) 该程序能够方便用户查找两个城市间最短的路线(基本正确,仅供参
考)。

2、第三组分工完成部分:主要部分是代码的主函数、部分函数的编写与测试
3、小组安排:收集资料:丘纯杰
系统设计:沙晓阳、周冠健、杨悦源
写主函数:卓海花
写其它函数:黄燕宁
测试其它函数:陈国华
测试程序:范兴
PPT:高爱香
4、时间安排: 2011年4月25日开始
第一阶段:选定课题、收集资料(1天)
第二阶段:小组成员分工、开始编制源程序(共3天时间)
第三阶段:上机调试、修改、完善系统(1天)
第四阶段:上交备份盘(0.5天)
第二章软件各功能具体的设计思想
1、功能模块实现过程论述:
运行改程序后,首先调用CreateUDNO函数生成一个拥有25个城市,30条公路的交通图。

然后调用narrate()函数输提示信息,提示用户输入出发城市和终点城市的序号,再调用ShortestPath()函数求出最短路径,由Output()函数把计算的结果格式化输出结果,最终退出main()函数,程序结束。

2、我主要负责测试程序
我的测试结果是:(3)北京起点、(23)广州终点;运行结果是:最短距离为2981km;和最短路径为:北京→郑州→武汉→株洲→广州;
以下是我从网上搜索的北京到广州的最短路线:
综上所述,搜索结果和测试结果大致相同,由于技术的不成熟,最优路线中还存在小部分的偏差。

3、实现效果:
进入界面输入城市的始点、终点(0—24),最终会出现最短距离以及相应的路径;
由我选择的(3)北京起点、(23)广州终点;运行结果是:最短距离为2981km;和最短路径为:北京→郑州→武汉→株洲→广州;
第三章软件程序清单代码清单:
/*交通图最短路径程序*/
#include "string.h"
#include "stdio.h"
typedef struct ArcCell{
int adj; /*相邻接的城市序号*/
}ArcCell; /*定义边的类型*/
typedef struct VertexType{
int number; /*城市序号*/
char *city; /*城市名称*/
}VertexType; /*定义顶点的类型*/
typedef struct{
VertexType vex[25]; /*图中的顶点,即为城市*/ ArcCell arcs[25][25]; /*图中的边,即为城市间的距离*/ int vexnum,arcnum; /*顶点数,边数*/
}MGraph; /*定义图的类型*/
MGraph G; /*把图定义为全局变量*/
int P[25][25];
long int D[25];
void CreateUDN(v,a) /*造图函数*/
int v,a;
{ int i,j;
G.vexnum=v;
G.arcnum=a;
for(i=0;i<G.vexnum;++i) G.vex[i].number=i;
/*下边是城市名*/
G.vex[0].city="乌鲁木齐";
G.vex[1].city="西宁";
G.vex[2].city="兰州";
G.vex[3].city="呼和浩特";
G.vex[4].city="北京";
G.vex[5].city="天津";
G.vex[6].city="沈阳";
G.vex[7].city="长春";
G.vex[8].city="哈尔滨";
G.vex[9].city="大连";
G.vex[10].city="西安";
G.vex[11].city="郑州";
G.vex[12].city="徐州";
G.vex[13].city="成都";
G.vex[14].city="武汉";
G.vex[15].city="上海";
G.vex[16].city="昆明";
G.vex[17].city="贵州";
G.vex[18].city="株洲";
G.vex[19].city="南昌";
G.vex[20].city="福州";
G.vex[21].city="柳州";
G.vex[22].city="南宁";
G.vex[23].city="广州";
G.vex[24].city="深圳";
/*这里把所有的边假定为20000,含义是城市间不可到达*/
for(i=0;i<G.vexnum;++i)
for(j=0;j<G.vexnum;++j)
G.arcs[i][j].adj=20000;
/*下边是可直接到达的城市间的距离,由于两个城市间距离是互相的,所以要对图中对称的边同时赋值。

*/
G.arcs[0][2].adj=G.arcs[2][0].adj=1892;
G.arcs[1][2].adj=G.arcs[2][1].adj=216;
G.arcs[2][3].adj=G.arcs[3][2].adj=1145; G.arcs[2][10].adj=G.arcs[10][2].adj=676; G.arcs[3][4].adj=G.arcs[4][3].adj=668;
G.arcs[4][5].adj=G.arcs[5][4].adj=137;
G.arcs[5][6].adj=G.arcs[6][5].adj=704;
G.arcs[6][7].adj=G.arcs[7][6].adj=305;
G.arcs[7][8].adj=G.arcs[8][7].adj=242;
G.arcs[6][9].adj=G.arcs[9][6].adj=397;
G.arcs[4][11].adj=G.arcs[11][4].adj=695; G.arcs[5][12].adj=G.arcs[12][5].adj=674; G.arcs[10][13].adj=G.arcs[13][10].adj=842;
G.arcs[11][14].adj=G.arcs[14][11].adj=534;
G.arcs[12][15].adj=G.arcs[15][12].adj=651;
G.arcs[13][16].adj=G.arcs[16][13].adj=1100;
G.arcs[13][17].adj=G.arcs[17][13].adj=967;
G.arcs[14][18].adj=G.arcs[18][14].adj=409;
G.arcs[17][18].adj=G.arcs[18][17].adj=902;
G.arcs[15][19].adj=G.arcs[19][15].adj=825;
G.arcs[18][19].adj=G.arcs[19][18].adj=367;
G.arcs[19][20].adj=G.arcs[20][19].adj=622;
G.arcs[17][21].adj=G.arcs[21][17].adj=607;
G.arcs[18][21].adj=G.arcs[21][18].adj=672;
G.arcs[21][22].adj=G.arcs[22][21].adj=255;
G.arcs[18][23].adj=G.arcs[23][18].adj=675;
G.arcs[23][24].adj=G.arcs[24][23].adj=140;
G.arcs[16][17].adj=G.arcs[17][16].adj=639;
G.arcs[10][11].adj=G.arcs[11][10].adj=511;
G.arcs[11][12].adj=G.arcs[12][11].adj=349; }
void narrate() /*说明函数*/
{
int i,k=0;
printf("\n*****************欢迎使用最优交通路径程序!***************\n"); printf("\n城市列表如下:\n\n");
for(i=0;i<25;i++)
{
printf("(%2d)%-10s",i,G.vex[i].city); /*输出城市列表*/
k=k+1;
if(k%4==0) printf("\n");
}
}
void ShortestPath(num) /*最短路径函数*/
int num;
{
int v,w,i,t;
int final[25];
int min;
for(v=0;v<25;++v)
{
final[v]=0;D[v]=G.arcs[num][v].adj;
for(w=0;w<25;++w) P[v][w]=0;
if(D[v]<20000) {P[v][num]=1;P[v][v]=1;}
}
D[num]=0;final[num]=1;
for(i=0;i<25;++i)
{
min=20000;
for(w=0;w<25;++w)
if(!final[w])
if(D[w]<min){v=w;min=D[w];}
final[v]=1;
for(w=0;w<25;++w)
if(!final[w]&&((min+G.arcs[v][w].adj)<D[w]))
{
D[w]=min+G.arcs[v][w].adj;
for(t=0;t<25;t++) P[w][t]=P[v][t];
P[w][w]=1;
}
}
}
void output(city1,city2) /*输出函数*/
int city1;
int city2;
{
int a,b,c,d,q=0;
a=city2;
if(a!=city1)
{
printf("\n从%s到%s的最短路径是",G.vex[city1].city,G.vex[city2].city);
printf("(最短距离为%dkm.)\n\t",D[a]);
printf("%s",G.vex[city1].city);
d=city1;
for(c=0;c<25;++c)
{
gate:; /*标号,可以作为goto语句跳转的位置*/
P[a][city1]=0;
for(b=0;b<25;b++)
{
if(G.arcs[d][b].adj<20000&&P[a][b])
{
printf("-->%s",G.vex[b].city);q=q+1;
P[a][b]=0;
d=b;
if(q%8==0) printf("\n");
goto gate;
}
}
}
}
}
void main() /*主函数*/
{
int v0,v1;
CreateUDN(25,30);
narrate();
printf("\n\n请选择起点城市(0~24):");
scanf("%d",&v0);
printf("\n");
printf("请选择终点城市(0~24):");
scanf("%d",&v1);
printf("\n");
ShortestPath(v0); /*计算两个城市之间的最短路径*/ output(v0,v1); /*输出结果*/
printf("\n");
printf("\n 请按任意键退出...\n");
getch();
}
第四章参考文献
1、书名:《C言语实例解析精粹》
出版社:人民邮电出版社出版
主编:曹衍龙林瑞促徐慧汤倩
书号:ISBN-978-7-03-022782-9
2、书名:《C言语程序开发范例宝典》
出版社:人民邮电出版社出版
主编:王娣安剑孙秀梅
书号:ISBN-978-7-115-21818-6
3、书名:《C言语算法速查手册》
出版社:人民邮电出版社出版
主编:程晓旭耿鲁静张海王勇
书号:ISBN-978-7-115-21209-2
第五章设计的收获及心得
通过这次C语言的课程实训,使我深深感受到了设计软件的乐趣,也让我明白了软件设计是一件困难的事情。

要设计出一个成功的软件,单靠个人力量是很难完美完成的,我们要通过团队的力量,分工合作,充分发挥每个人的智慧,把大家的努力结果结合起来,就可以设计出一个成功的软件作品。

指导教师签字:
系部主任签字:
日期:2011年月日。

相关文档
最新文档