常州工学院C++校园导游咨询数据结构
一、课程设计的目的
数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思文能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:
了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
二、主要设计思想
课程设计主要是锻炼学生的动手实践能力。实践是检验学生对课本知识的掌握程序和实践动手能力,本课程的实践教学的主要设计思想是:
■ 实践将理论与应用结合起来,使学生学会如何将书上的知识用于解决实际的问题,培养软件工作所需要的动手能力。
■ 根据实践教学对象的不同采用多种教学手段。
■ 实践教学内容按照难易程度分级进行,题目要体现创新性。
■ 实践教学形式根据环境和教学内容的区别采用不同的形式。
■ 实践教学效果的检验要根据题目的不同采用多种教学检验方法。
三、课程设计基本目标
经过一个学期对数据结构这门课程的学习,学生已基本把握了一些基础知识,通过本次课程设计,在之前的基础上,使学生具备合作开发软件的思想和素养,能独立开发出一个可执行代码的规范化程序,显著提高学生的分析问题和解决问题的能力。
四、课程设计题目
1、校园导游咨询
2、多项式相加
3、内部排序比较
(一)校园导游咨询
【问题描述】
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
【基本要求】
(1) 设计常州工学院学的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2) 为来访客人提供图中任意景点相关信息的查询。
(3) 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
【数据结构描述】
/*定义符号常量*/
#define INT_MAX 10000 #define n 10
/*定义全局变量*/
int cost[n][n];/* 边的值*/ int shortest[n][n];/* 两点间的最短距离*/
int path[n][n];/* 经过的景点*/
/*自定义函数原型说明*/
void introduce(); 景点介绍
int shortestdistance(); 要查找的两景点的最短距离
void floyed(); 用floyed算法求两个景点的最短路径
void display(int i,int j); 打印两个景点的路径及最短距离
【主要算法流程描述】
源程序代码:
#include<stdio.h>
#include<process.h>
#define INT_MAX 10000
#define n 10
int cost[n][n];/* 边的值*/
int shortest[n][n];/* 两点间的最短距离*/
int path[n][n];/* 经过的景点*/
void introduce()
{/*景点介绍*/
int a;
printf("请输入您想查询的景点编号:");
scanf("%d",&a);
getchar(); printf("\n");
switch(a)
{
case 1:
printf("1:永远的127\n\n 本人的宿舍,其特点为...(看过便知),常工一景\n\n");break;
case 2:
printf("2:小桥流水\n\n 学校连接河东河西的纽带,横跨风则江。\n\n");break;
case 3:
printf("3:行政楼\n\n 学校行政办公的主楼。\n\n");break;
case 4:
printf("4:学校西门\n\n 常州共学院的正门。\n\n");break;
case 5:
printf("5:图书馆\n\n 学校信息资源中心,内设大量的自习室。\n\n");break;
case 6:
printf("6:篮球场\n\n 学生玩篮球耍帅扮酷的斗牛场。\n\n");break;
case 7:
printf("7:院士语林\n\n 收集名人语录,催人上进。\n\n");break;
case 8:
printf("8:院士楼\n\n 学校的主教学楼之一,是计算机学院与外国语学院的教学
楼。\n\n");break;
case 9:
printf("9:体育馆\n\n 学生上体育课及运动的场地,设有田径场、足球场、篮球场等。\n\n\n");break;
case 10:
printf("10:秋白楼\n\n 学校主教学楼之一,有大量实验室。\n\n");break;
default:
printf("景点编号输入错误!请输入1->10的数字编号!\n\n"); break;
} }
void floyed()
{/*用floyed算法求两个景点的最短路径*/
int i,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
shortest[i][j]=cost[i][j];
path[i][j]=0;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{/*用path[][]记录从i到j的最短路径上点j的前驱景点的序号*/
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;
} }
void display(int i,int j)
{/* 打印两个景点的路径及最短距离 */
int a,b;
a=i; b=j;
printf("您要查询的两景点间最短路径是:\n\n");
if(shortest[i][j]!=INT_MAX)
{
if(i<j)
{
printf("%d",b);
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按逆序打印出来*/
printf("<-%d",path[i][j]);
if(i<j) j=path[i][j];
else i=path[j][i];
}
printf("<-%d",a); printf("\n\n");
printf("(%d->%d)最短距离是:%d米\n\n",a,b,shortest[a][b]);
}
else
{ printf("%d",a);
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按顺序打印出来*/
printf("->%d",path[i][j]);
if(i<j) j=path[i][j];
else i=path[j][i];
}
printf("->%d",b); printf("\n\n");
printf("(%d->%d)最短距离是:%5d米\n\n",a,b,shortest[a][b]);
} }
else
printf("输入错误!不存在此路!\n\n"); printf("\n");
}
int shortestdistance()
{/*要查找的两景点的最短距离*/
int i,j;
printf("请输入要查询的两个景点的编号并用','间隔:");
scanf("%d,%d",&i,&j);
if(i>n||i<=0||j>n||j<0)
{
printf("输入信息错误!\n\n");
printf(" 请输入要查询的两个景点的编号并用','间隔:\n");
scanf("%d,%d",&i,&j);
}
else
{
floyed(); display(i,j);
}
return 1;}710