交通系统系统设计及一元高次多项式的加减乘运算课程设计报告 推荐.docx
- 文档编号:25208113
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:76
- 大小:380.39KB
交通系统系统设计及一元高次多项式的加减乘运算课程设计报告 推荐.docx
《交通系统系统设计及一元高次多项式的加减乘运算课程设计报告 推荐.docx》由会员分享,可在线阅读,更多相关《交通系统系统设计及一元高次多项式的加减乘运算课程设计报告 推荐.docx(76页珍藏版)》请在冰豆网上搜索。
交通系统系统设计及一元高次多项式的加减乘运算课程设计报告推荐
《数据结构》课程设计报告
报告(论文)题目:
交通系统系统设计及一元
高次多项式的加减乘运算
作者所在系部:
计算机系
作者所在专业:
计算机科学与技术
作者所在班级:
B12511
作者学号:
20124051117
作者姓名:
王硕
指导教师姓名:
斯庆巴拉
完成时间:
2013年12月25日
北华航天工业学院教务处制
第1章问题描述
1.1题目内容
1.1.1交通咨询系统设计
设计一个交通咨询系统,能让旅客咨询从任一城市顶点到另一城市顶点之间的最短路径(里程)或最低花费或最少时间等问题。
对于不同咨询要求,可输入城市间的路程或所需时间或所需费用。
1.1.2一元高次多项式的加、减、乘运算
用链表表示一元高次多项式,实现两个多项式的加、减、乘运算。
1.2基本要求
1.2.1交通咨询系统设计
1.创建图的存储结构使用邻接矩阵。
2.查询分为两类。
一类是能让旅客咨询从一个城市到另外所有城市的最短路径(要求使用迪杰斯特拉算法),显示出所有路径,按升序排列。
第二类是任意两个城市间的最短路径(要求使用弗洛伊德算法),显示最短路径。
3.按给定交通地图完成以上功能。
1.2.2一元高次多项式的加、减、乘运算
1.描述多项式时,将每个子项看成是由系数和指数两部分组成。
2.输入并创建一元多项式,以链表作为存储结构。
3.实现两个多项式的相加、相减和相乘运算。
4.显示多项式,查看运算结果。
5.用户界面包括以下功能:
创建加法减法乘法显示退出
1.3测试数据
1.3.1交通咨询系统设计
任意输入所需要查找的一个或两个城市,然后查找最短距离、最少花费和最短时间。
1.3.2一元高次多项式的加、减、乘运算
2X^4+3X^4=5X^4
6X^3+3X^5=6X^3+3X^5
7X^9*4X^5=28X^45
第2章需求分析
2.1功能说明
2.1.1交通咨询系统设计
查询分为两类。
一类是能让旅客咨询从一个城市到另外所有城市的最短路径,显示出所有路径,按升序排列。
第二类是任意两个城市间的最短路径,显示最短路径。
2.1.2一元高次多项式的加、减、乘运算
描述多项式时,将每个子项看成是由系数和指数两部分组成。
输入并创建一元多项式,以链表作为存储结构。
实现两个多项式的相加、相减和相乘运算。
显示多项式,查看运算结果。
2.2输入说明
2.2.1交通咨询系统设计
用户根据自己所需要的利用交通系统查询的功能自己进行查询。
2.2.2一元高次多项式的加、减、乘运算
程序运行后显现提示信息,由用户输入两个多项式,由用户自行选择加减乘功能进行运算。
2.3输出说明
2.3.1交通咨询系统设计
根据用户不同的选择功能输出不同。
2.3.2一元高次多项式的加、减、乘运算
用户输入数据完毕,程序将输出运算结果。
2.4测试数据
2.4.1交通咨询系统设计
用户自行选择功能,可进行按序号查找和按名称查找。
2.4.2一元高次多项式的加、减、乘运算
测试数据应为两组整数,正负都没有关系。
第3章概要设计
3.1抽象数据类型定义
3.1.1交通咨询系统设计
为实现上程序功能,应创建图的存储结构并使用邻接矩阵表示集合。
1.建图的存储结构
typedefstruct
{
intvexs[max];
stringname[max];
intcost[max][max];
intdistance[max][max];
inttime[max][max];
intvnm,enm;
}mgraph;
2.邻接矩阵
voidcreate(mgraph&g,intn,inte)
{
inti,j;
g.vnm=n;
g.enm=e;
for(i=1;i<=g.vnm;i++)
g.vexs[i]=i;
//对应数组下标即为城市代号
for(i=1;i<=g.vnm;i++)
{//初始化
for(j=1;j<=g.vnm;j++)
{
if(i==j)
{
g.distance[i][j]=0;
g.cost[i][j]=0;
g.time[i][j]=0;
}
else
{
g.distance[i][j]=MAX;
g.cost[i][j]=MAX;
g.time[i][j]=MAX;
}
}
}
3.1.2一元高次多项式的加、减、乘运算
链表和数组的使用,下面是链表的定义:
typedefstruct{
doublexishu;
doublezhishu;
}LNode,*LinkList;
数组的定义:
LNodea[2],b[3];
3.2程序模块结构
3.2.1交通咨询系统设计
本程序包含主程序、最少花费、最短距离、最少时间模块和迪杰斯特拉算法、弗洛伊德算法模块等三个模块。
最少花费、最短距离、最少时间模块实现判断两城市之间信息。
迪杰斯特拉算法、弗洛伊德算法模块实现两城市之间的各种信息的具体计算。
三个模块间的调用关系如图3-1所示。
图3-1模块间的调用关系图
3.2.2一元高次多项式的加、减、乘运算
本程序包含主程序、加减乘运算函数模块显示模块三个模块。
加减乘模块是用来计算一元高次多项式的加减乘的核心模块。
显示模块是用来显示计算结果的模块。
三个模块间的调用关系如图3-2所示。
图3-2模块间的调用关系图
第4章详细设计
4.1定义的数据类型
4.1.1交通咨询系统设计
1.元素类型、结点类型和指针类型
typedefstruct
{
intvexs[max];
stringname[max];
intcost[max][max];
intdistance[max][max];
inttime[max][max];
intvnm,enm;
}mgraph;st;
2.图和邻接矩阵的定义
//图的有关信息
typedefstruct
{
intsign;
intlen;
inthour;
intspend;
}save;
//存放城市代号和距离
voidcreate(mgraph&g,intn,inte)
{
inti,j;
g.vnm=n;
g.enm=e;
for(i=1;i<=g.vnm;i++)
g.vexs[i]=i;
//对应数组下标即为城市代号
for(i=1;i<=g.vnm;i++)
{//初始化
for(j=1;j<=g.vnm;j++)
{
if(i==j)
{
g.distance[i][j]=0;
g.cost[i][j]=0;
g.time[i][j]=0;
}
else
{
g.distance[i][j]=MAX;
g.cost[i][j]=MAX;
g.time[i][j]=MAX;
}
}
}
3.迪杰斯特拉算法和弗洛伊德算法
利用迪杰斯特拉算法和弗洛伊德算法计算最少花费、最短距离、最少时间。
其基本操作的伪码算法如下:
迪杰斯特拉一城至诸城最少花费
voidshortestcost(mgraphg,intv0)
{
inti,v,pre,w,min,k,j;
intfinal[max];
intp[max];
saved[max];
intm,n;
for(v=1;v<=g.vnm;v++)
{
final[v]=0;
d[v].spend=g.cost[v0][v];
d[v].sign=v;
p[v0]=-1;
if(d[v].spend =v0) p[v]=v0; if(d[v].spend==MAX) p[v]=-2; } d[v0].spend=0; final[v0]=-1; for(i=2;i<=g.vnm;i++) { min=MAX; for(w=1;w<=g.vnm;w++) if(! final[w]) if(d[w].spend { v=w; min=d[w].spend; } final[v]=1; for(w=1;w<=g.vnm;w++) {//修改d中存放的最短距离和前驱结点 if(! final[w]&&(min+g.cost[v][w] { d[w].spend=min+g.cost[v][w]; d[w].sign=w; p[w]=v; } } } //选择排序法 for(i=1;i { k=i; for(j=i+1;j<=g.vnm;j++) if(d[j].spend k=j; if(k! =i) { n=d[k].sign; d[k].sign=d[i].sign; d[i].sign=n; m=d[k].spend; d[k].spend=d[i].spend; d[i].spend=m; } } for(i=1;i<=g.vnm;i++) { if(d[i].sign! =v0) { cout<<"从"< (2)< (2)< "< cout<<"所经过的路径: "; cout< pre=p[d[i].sign]; while(pre>0) { cout<<"<-"< pre=p[pre]; } cout< } } //迪杰斯特拉一城至诸城最短时间 voidshortesttime(mgraphg,intv0) { inti,v,pre,w,min,k,j; intfinal[max]; intp[max]; saved[max]; intm,n; for(v=1;v<=g.vnm;v++) { final[v]=0; d[v].hour=g.time[v0][v]; d[v].sign=v; p[v0]=-1; if(d[v].hour =v0) p[v]=v0; if(d[v].hour==MAX) p[v]=-2; } d[v0].hour=0; final[v0]=-1; for(i=2;i<=g.vnm;i++) { min=MAX; for(w=1;w<=g.vnm;w++) if(! final[w]) if(d[w].hour { v=w; min=d[w].hour; } final[v]=1; for(w=1;w<=g.vnm;w++) {//修改d中存放的最短距离和前驱结点 if(! final[w]&&(min+g.time[v][w] { d[w].hour=min+g.time[v][w]; d[w].sign=w; p[w]=v; } } } //选择排序法 for(i=1;i { k=i; for(j=i+1;j<=g.vnm;j++) if(d[j].hour k=j; if(k! =i) { n=d[k].sign; d[k].sign=d[i].sign; d[i].sign=n; m=d[k].hour; d[k].hour=d[i].hour; d[i].hour=m; } } for(i=1;i<=g.vnm;i++) { if(d[i].sign! =v0) { cout<<"从"< (2)< (2)< "< (2)< cout<<"所经过的路径: "; cout< pre=p[d[i].sign]; while(pre>0) { cout<<"<-"< pre=p[pre]; } cout< } } } //迪杰斯特拉算法 voidshortestdistance(mgraphg,intv0) { inti,v,pre,w,min,k,j; intfinal[max]; intp[max]; saved[max]; intm,n; for(v=1;v<=g.vnm;v++) { final[v]=0; d[v].len=g.distance[v0][v]; d[v].sign=v; p[v0]=-1; if(d[v].len =v0) p[v]=v0; if(d[v].len==MAX) p[v]=-2; } d[v0].len=0; final[v0]=-1; for(i=2;i<=g.vnm;i++) { min=MAX; for(w=1;w<=g.vnm;w++) if(! final[w]) if(d[w].len { v=w; min=d[w].len; } final[v]=1; for(w=1;w<=g.vnm;w++) {//修改d中存放的最短距离和前驱结点 if(! final[w]&&(min+g.distance[v][w] { d[w].len=min+g.distance[v][w]; d[w].sign=w; p[w]=v; } } } //选择排序法 for(i=1;i { k=i; for(j=i+1;j<=g.vnm;j++) if(d[j].len k=j; if(k! =i) { n=d[k].sign; d[k].sign=d[i].sign; d[i].sign=n; m=d[k].len; d[k].len=d[i].len; d[i].len=m; } } for(i=1;i<=g.vnm;i++) { if(d[i].sign! =v0) { cout<<"从"< (2)< (2)< "< cout<<"所经过的路径: "; cout< pre=p[d[i].sign]; while(pre>0) { cout<<"<-"< pre=p[pre]; } cout< } } } 4.主函数的伪码算法 voidmain() { mgraphg; create(g,25,30); intnum; stringname; do { cout<<"-----------------------交通咨询系统------------------------"< cout<<"++++++++++++++++++++++城市名称及代码+++++++++++++++++++++++"< cout<<"1: 北京2: 长春3: 成都4: 大连5: 福州6: 广州7: 贵阳"< cout<<"8: 哈尔滨9: 呼和浩特10: 昆明11: 兰州12: 柳州13: 南昌"< cout<<"14: 南宁15: 上海16: 沈阳17: 深圳18: 天津19: 武汉"< cout<<"20: 乌鲁木齐21: 西安22: 西宁23: 徐州24: 郑州25: 株州"< cout<<"++++++++++++++++++++++++++++++++++++++++++++"< cout< cout<<"*******1一城至诸城2任意两城3退出系统****"< cout<<"请选择: "; cin>>num; switch(num) { case1: onecity(g);break; case2: twocity(g);break; case3: cout<<"退出系统成功! "< default: cout<<"无此选项! 请重新输入: "< } } while(num! =3); return; } 4.1.2一元高次多项式的加、减、乘运算 1.元素类型、结点类型和指针类型 typedefstruct{ doublexishu; doublezhishu; }LNode,*LinkList; LNodea[2],b[3]; 2.加减乘的运算 下面是加法运算的伪代码: voidjia()//加法 { if(a[0].zhishu==a[1].zhishu)//如果指数相等,让两系数相加 { b[0].xishu=a[0].xishu+a[1].xishu;//b[0].xishu是两系数之和 if(a[0].zhishu==0&&a[1].zhishu==0) { if(a[0].xishu==0&&a[1].xishu==0) cout<<"0"< if(a[0].xishu==0&&a[1].xishu! =0) cout< if(a[0].xishu! =0&&a[1].xishu==0) cout< if(a[0].xishu! =0&&a[1].xishu! =0) cout< } if(a[0].zhishu! =0&&a[1].zhishu! =0) { if(a[0].xishu==0&&a[1].xishu==0) cout<<"0"< if(a[0].xishu==0&&a[1].xishu! =0) cout< if(a[0].xishu! =0&&a[1].xishu==0) cout< if(a[0].xishu! =0&&a[1].xishu! =0) cout< } } if(a[0].zhishu! =a[1].zhishu)//指数不等 { if(a[0].zhishu==0&&a[1].zhishu! =0) { if(a[0].xishu==0&&a[1].xishu==0) cout<<"0"< if(a[0].xishu==0&&a[1].xishu! =0) cout< if(a[0].xishu! =0&&a[1].xishu==0) cout< if(a[0].xishu! =0&&a[1].xishu! =0) cout< } if(a[1].zhishu==0&&a[0].zhishu! =0) { if(a[0].xishu==0&&a[1].xishu==0) cout<<"0"< if(a[0].xishu==0&&a[1].xishu! =0) cout< if(a[0].xishu! =0&&a[1].xishu==0) cout< if(a[0].xishu! =0&&a[1].xishu! =0) cout< } if(a[0].zhishu! =0&&a[1].zhishu! =0) { if(a[0].xishu==0&&a[1].xishu==0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通系统系统设计及一元高次多项式的加减乘运算课程设计报告 推荐 交通 系统 设计 一元 多项式 加减 运算 课程设计 报告