数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)

数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)
数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)

算法与数据结构实验报告航班查询与检索

题目:航班查询与检索

指导老师:

组长:

成员:

一:航班信息的查询与检索

初始化信息

进行排序

主菜单显示输入查询序号判断序号是否合法

按航班号查询按时间

查询

按地点

查询

按票价

查询

输出航班信息

结束

开始

按时间查询:

按站点查询:

开始

输入票价范围

判断有无符合条件票价

输出相应信息

返回查询信息

按票价范围查询

输入查询时间

Time=1

按抵达时间查询

按起飞时间查询

返回查询信息

开始

是 否

二分法查询:

开始

返回查询信息

输入起点终点及AD

AD=1?

按目的站查询

按起点站查询

二:

算法分析:程序主要采用结构体 链表 顺序表 队列

主要算法:/*航班信息的查询与检索*/ 三:/*航班信息的查询与检索*/

#include #include

输入航班号

开始

输入航班号对应序列号

High=mid+1

Low<=hi gh

Num=F[mid].flight_number

Mid=(high+low)/2

Num

Low=mid+1

返回

#include

#define N 6 //航班数

//航班信息

typedef struct flight

{

char flight_number[10]; //航班号

char start_address[10]; //起飞站

char arrived_address[10]; //终点站

char work_date[10]; //班期

char start_time[6]; //起飞时间

char arrived_time[6]; //到达时间

char FlightType[4]; //机型

int fare; //票价

}DataType;

struct flight Flight[N];

//-----------按航班号进行基数排序-----------

typedef char KeyType;

#define D 7 // D为排序码的最大位数

#define R 'a' // R为基数,这里为小于字母'a'代表的整型值struct Node; //单链表结点类型

typedef struct Node RadixNode;

struct Node

{

KeyType key[D]; //关键字

DataType info; //数据信息

RadixNode *next;

};

typedef RadixNode * RadixList;

typedef struct QueueNode

{

RadixNode *f; //对列的头指针

RadixNode *e; //对列的尾指针

}Queue;

Queue queue[R];//用队列表示桶

void radixSort(RadixList * plist, int d, int r)

{

int i,j,k;

RadixNode *p, *head;

head=(*plist)->next;

for(j=d-1; j>=0; j--) //进行d次分配和收集

{

p=head;

for(i=0; i

{

queue[i].f=NULL; queue[i].e=NULL; //清队列

}

while(p!=NULL)

{

k=p->key[j]; //按排序码的第j个分量进行分配

if(queue[k].f==NULL) queue[k].f=p; // 若第k个堆为空,则当前记录为队头

else (queue[k].e)->next=p; // 否则当前记录链接到第k队的队尾

queue[k].e=p;

p=p->next;

}

i=0;

while(queue[i].f==NULL) i++; // 从r个队列中找出第一个非空的队列

p=queue[i].e; head=queue[i].f; //head为收集链表的头指针

for(i++; i

if(queue[i].f!=NULL)

{ p->next=queue[i].f; p=queue[i].e; } // 收集非空队列

p->next=NULL;

}

(*plist)->next=head;

}

//初始化航班信息

struct Node element[N+1]={

" "," "," "," "," "," "," "," ",0,NULL,//表头

"CA1544","CA1544","合肥","北京","1245 ","10:55","12:40","733",960,NULL,

"MU5341","MU5341","上海","广州","每日","14:20","16:15","M90",1280,NULL, "CZ3869","CZ3869","重庆","深圳","246 ","08:55","10:35","733",1010,NULL, "MU3682","MU3682","桂林","南京","23467","20:50","22:15","M90",1380,NULL,

"HU1836","HU1836","上海","北京","每日","09:40","11:20","738",1250,NULL,

"CZ3528","CZ3528","成都","厦门","13457","15:10","16:50","CRJ",1060,NULL,

};

//------------信息显示------------

//按表的格式输出某个航班信息

//显示头部信息

void Cout_info1()

{

cout<<" ****************************************\n"<

cout<<" * 欢迎您使用*\n"<

cout<<" * 航班信息表*\n"<

cout<<" ****************************************\n"<

cout<<" 航班号起飞时间到达时间起飞站终点站班期机型票价\n"<

}

//显示主体信息

void Cout_info2_1(Node p[])//方式一

{

cout<<" "<info.flight_number;

cout<<" "<info.start_time;

cout<<" "<info.arrived_time;

cout<<" "<info.start_address;

cout<<" "<info.arrived_address; cout<<" "<info.work_date;

cout<<" "<info.FlightType;

cout<<" "<info.fare<<"元"<

}

void Cout_info2_2(flight F[],int i)//方式二

{

cout<<" "<

cout<<" "<

cout<<" "<

cout<<" "<

cout<<" "<

cout<<" "<

cout<<" "<

}

//显示所有航班信息

void output_ALL_info1(Node element[]) //方式一{

RadixList p=element;

Cout_info1();

p=p->next;

while(p!=NULL)

{

Cout_info2_1(p);

p=p->next;

}

cout<

}

void output_ALL_info2(flight F[]) //方式二

{

Cout_info1();

for(int i=0;i

{

Cout_info2_2(F,i);

}

cout<

}

//--------------信息复制----------------

//将排好的序列(链表)转化成顺序表存储形式

void copy(flight F[],Node element[])

{

RadixList p=element;

p=p->next;

int i;

for(i=0;i

{

strcpy(F[i].flight_number,p->info.flight_number);

strcpy(F[i].start_time,p->info.start_time);

strcpy(F[i].arrived_time,p->info.arrived_time);

strcpy(F[i].start_address,p->info.start_address);

strcpy(F[i].arrived_address,p->info.arrived_address);

strcpy(F[i].work_date,p->info.work_date);

strcpy(F[i].FlightType,p->info.FlightType);

F[i].fare=p->info.fare;

p=p->next;

}

}

//---------------服务菜单--------------

void F_By_Time(flight F[],int);

void F_By_Address(flight F[],int);

void F_By_fare(flight F[]);

void F_By_FN(flight F[]);

//主菜单

void mainmenu()

{

char ch;

int y;

cout<<" 主菜单\n"<

cout<<"

===========================================================\n"<

cout<<" Please choose: (input the number)(输入查询/排序命令)\n"<

cout<<" 1. Find by flight number(按航班号查询)\n"<

cout<<" 2. Find by start time(按起飞时间查询)\n"<

cout<<" 3. Find by arrived time(按到达时间查询)\n"<

cout<<" 4. Find by start address(按起飞地点查询)\n"<

cout<<" 5. Find by arrived address(按目的地点查询)\n"<

cout<<" 6. Find by the fare(按票价范围查询)\n"<

cout<<" ----其他键退出"<

cout<<"

===========================================================\n"<

while(1)

{

cout<<"请输入服务命令:";

cin>>y;

switch(y)

{

case 0: mainmenu();break;

case 1:F_By_FN(Flight);break;

case 2:F_By_Time(Flight,1);break;

case 3:F_By_Time(Flight,2);break;

case 4:F_By_Address(Flight,1);break;

case 5:F_By_Address(Flight,2);break;

case 6:F_By_fare(Flight);break;

default :cout<<" 谢谢惠顾!"<

}

cout<<"是否退出?(Y/N):";

cin>>ch;

if(ch=='Y'||ch=='y') break;

}

}

//--------------查询系统--------------

//通过航班号实现二分查找法查找

void F_By_FN(flight F[])

{

int low=0,high=N,mid;

char Num[10];

cout<<"请输入您要查询的航班号:";

cin>>Num;

Cout_info1();//显示头部信息

while(low<=high)

{

mid=(low+high)/2;

if(strcmp(Num,F[mid].flight_number)==0) {Cout_info2_2(F,mid);break;}

else if(strcmp(Num,F[mid].flight_number)<0) high=mid-1;

else low=mid+1;

}

cout<<" *************对不起,没有您要查找的航班号********** "<

}

//通过起飞/到达时间查询

void F_By_Time(flight F[],int Time)

{

int i;

char T[6];

cout<<"请输入您要查询的航班的起飞/抵达时间:";

cin>>T;

Cout_info1();//显示头部信息

for(i=0;i

{

if(Time==1) //按起飞时间查询

{

if(strcmp(T,F[i].start_time)==0) Cout_info2_2(F,i);

}

if(Time==2) //按抵达时间查询

{

if(strcmp(T,F[i].arrived_time)==0) Cout_info2_2(F,i);

}

}

cout<<" *******对不起,该时间没有航班******* "<

}

//通过站点查询

void F_By_Address(flight F[],int AD)

{

char str[10];

cout<<"请输入您要查询的航班的起飞/抵达地址:";

cin>>str;

Cout_info1();

for(int i=0;i

{

if(AD==1) //按起点站查询

{

if(strcmp(str,F[i].start_address)==0) Cout_info2_2(F,i);

}

if(AD==2) //按目的站查询

{

if(strcmp(str,F[i].arrived_address)==0) Cout_info2_2(F,i);

}

}

cout<<" ********对不起,该站点不存在******** "<

//通过票价范围查询

void F_By_fare(flight F[])

{

int T1,T2,i;

cout<<"请输入您要查询的航班的最低票价(单位:元):";

cin>>T1;

cout<<"请输入您要查询的航班的最高票价(单位:元):";

cin>>T2;

Cout_info1();

for(i=0;i

{

if(T1<=F[i].fare && T2>=F[i].fare) Cout_info2_2(F,i);

}

cout<<" *******对不起,没有适合您的航班,请修改您的票价范围********" <

//--------------主函数----------------

int main()

{

RadixList p=element;

for(int i=0;i

element[i].next=&element[i+1];

element[10].next=NULL;

radixSort(&p, D, R); //基数排序

output_ALL_info1(element); //输出排序后的有序序列(航班信息)

copy(Flight,element); //另存储排序后的航班信息

mainmenu(); //给出主菜单

return 0;

}

测试数据及测试结果:

边界值处理:

四:

遇到的问题及解决策略:首先是要实现所要的功能需用什么数据结构的问题,比如排序问题究竟用那一种,在组员的商量下和上网搜寻资料,采用对排序最符合,其次是在时间的查询过程中,比如输入时间16:40开始只能实现输入1640,最后通过改时间的数据类型实现了时间的输入,最后是在各个模块的组合过程中由于各个成员编程所起的名字或者其他原因,程序无法运行,最后在大家的努力下一起修改错误使得程序可以正常运行。

还未解决的问题:插入的订票的函数无法正常运行。

五:实验收获和心得:

通过这次次实验我们收获了很多,对数据结构这门课有了更深的了解.让我们对链表、队列、结构体的应用更娴熟,为我们更好的了解课本内容,改进不足提供了件。在这次课程设计的过程中充分说明了团队合作的重要性,组内成员共同讨论,即充分而认真的完成自己负责的模块又对组内其他成员的工作提供建议,使得这次课程设计能够按时完成。我们一定会更加努力,争取在以后的学习中能够学以致用,最后要感谢胡老师在设计过程中给我们的指导,有了胡老师的帮助,我们的流程图更加的规范、正确。再一次谢谢胡老师。

六:

人员分工:组内成员一起构思了流程图。并完成最后的整理工作

数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)

算法与数据结构实验报告航班查询与检索 题目:航班查询与检索 指导老师: 组长: 成员: 一:航班信息的查询与检索

初始化信息 进行排序 主菜单显示输入查询序号判断序号是否合法 按航班号查询按时间 查询 按地点 查询 按票价 查询 输出航班信息 结束 开始 按时间查询:

按站点查询: 开始 输入票价范围 判断有无符合条件票价 输出相应信息 返回查询信息 按票价范围查询 输入查询时间 Time=1 按抵达时间查询 按起飞时间查询 返回查询信息 开始 是 否

二分法查询: 开始 返回查询信息 输入起点终点及AD AD=1? 按目的站查询 按起点站查询 否 是

二: 算法分析:程序主要采用结构体 链表 顺序表 队列 主要算法:/*航班信息的查询与检索*/ 三:/*航班信息的查询与检索*/ #include #include 输入航班号 开始 输入航班号对应序列号 High=mid+1 Low<=hi gh Num=F[mid].flight_number Mid=(high+low)/2 Num

#include #define N 6 //航班数 //航班信息 typedef struct flight { char flight_number[10]; //航班号 char start_address[10]; //起飞站 char arrived_address[10]; //终点站 char work_date[10]; //班期 char start_time[6]; //起飞时间 char arrived_time[6]; //到达时间 char FlightType[4]; //机型 int fare; //票价 }DataType; struct flight Flight[N]; //-----------按航班号进行基数排序----------- typedef char KeyType; #define D 7 // D为排序码的最大位数 #define R 'a' // R为基数,这里为小于字母'a'代表的整型值struct Node; //单链表结点类型 typedef struct Node RadixNode; struct Node { KeyType key[D]; //关键字 DataType info; //数据信息 RadixNode *next; }; typedef RadixNode * RadixList; typedef struct QueueNode { RadixNode *f; //对列的头指针 RadixNode *e; //对列的尾指针 }Queue; Queue queue[R];//用队列表示桶 void radixSort(RadixList * plist, int d, int r) { int i,j,k; RadixNode *p, *head; head=(*plist)->next; for(j=d-1; j>=0; j--) //进行d次分配和收集 { p=head; for(i=0; i

matlab相关图形实现代码

根据数据点绘制饼图和针状图: x=[1 2 3 4 5 6]; >> subplot(2,2,1);pie(x); >> subplot(2,2,2);pie3(x); >> subplot(2,2,3);stem(x); >>subplot(2,2,4);stem3(x); 5% 10% 14% 19% 24% 29% 24% 29% 19% 5%14% 10%0 2 4 6 2 4 6 5 10 01 2 05 10

根据数据点绘制向量场图、羽状图和罗盘图: x=[1 2 3 4 5 6];y=[1 2 3 4 5 6]; u=[1 2 3 4 5 6];v=[1 2 3 4 5 6]; subplot(2,2,1);quiver(x,y,u,v); subplot(2,2,2);quiver(x,y,u,v,'r'); subplot(2,2,3);feather(u,v); subplot(2,2,4);compass(u,v); 024680 246 802468 246 80 5 10 15 2 4 6 5 10 30 210 60240 90270 120 300 150330 180

rand(m,n)产生m ×n 均匀分布的随机矩阵,元素取值在0.0~1.0。 randn 函数:产生标准正态分布的随机数或矩阵的函数。 Y = randn(m,n) 或 Y = randn([m n])返回一个m*n 的随机项矩阵。 > theta=10*rand(1,50); %确定50个随机数theta >> Z=peaks; %确定Z 为峰值函数peaks >> x=0:0.01:2*pi;y=sin(x); %确定正弦函数数据点x.y >> t=randn(1000,1); %确定1000个随机数t >> subplot(2,2,1);rose(theta); %关于(theta )的玫瑰花图 >> subplot(2,2,2);area(x,y); %关于(x,y)的面积图 >> subplot(2,2,3);contour(Z); %关于Z 的等值线图(未填充) >> subplot(2,2,4);hist(t); %关于t 的柱状图 5 10 30 210 60 240 90270 120300150330 18000246 -1 -0.500.5 110 20 30 40 10 2030 40-4 -2 2 4 100 200 300

数据结构实验总结报告

数据结构实验总结报告 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,

会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。 (3)程序界面更加人性化。 Huffman Tree Demo (C) 2011-12-16 boj Usage: huffman [-c file] [-u file] output_file -c Compress file. e.g. huffman -c test.txt test.huff -u Uncompress file. e.g. huffman -u test.huff test.txt 目前的程序提示如上所示。如果要求实用性,可以考虑加入其他人性化的功能。 三、调研常用的压缩算法,对这些算法进行比较分析 (一)无损压缩算法 ①RLE RLE又叫Run Length Encoding,是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用(例如,JPEG就使用它)。 变体1:重复次数+字符 文本字符串:A A A B B B C C C C D D D D,编码后得到:3 A 3 B 4 C 4 D。

程序文件流程图

目录 8.2.3.4 a.质量手册编号 (2) 8.2.3.4 b.程序文件编号 (2) 8.2.3.4 d.质量记录编号 (2) 8.2附图 1:组织(及所属部门)制订、发放的文件受控流程图 (3) 8.2附图 2:外来受控文件受控流程图 (4) 8.3.2质量记录控制流程图 (5) 8.4.2内部质量审核工作流程图 (6) 8.5.2 6.10进货检验的不合格品控制程序 (7) 8.5.2 6.10产品已交付和使用时发现的不合格品控制程序 (8) 8.5.2产品最终检验的不合格品控制程序流程图 (9) 8.5.2产品实现过程中不合格品控制程序流程图 (10) 8.6.2A类纠正措施流程图 (11) 8.6.2B类纠正措施 (12) 8.6.2C类纠正措施 (13) 8.7.2《质量情况通报》的编制、发放、回收、处理 (14) 8.7.2财务状况预警系统 (15) 8.7.2预防措施的制订、实施和评价 (16) 8.8.2管理评审控制程序流程图 (17) 8.9.2人员招聘录用程序流程图 (18) 8.9.2培训程序流程图 (19) 8.9.2考核程序流程图 (20) 8.11.2产品实现过程策划程序流程图 (21) 8.11.2策划依据 (22) 8.12.2产品要求的识别与评审过程 (23) 8.12.2产品合同修改过程 (24) 8.12.2市场信息控制过程 (25) 8.13.2设计和开发控制程序 (26) 8.14.2采购控制程序流程图 (27) 8.15.2生产运作程序流程图 (28) 8.17.2测量和监控策划程序 (29) 8.18.2体系业绩的测量和监控过程程序 (30) 8.19.2过程的测量、监控和分析程序流程图 (31) 8.20.2产品测量和监控程序流程图 (32) 8.21.2持续改进过程控制程序 (33)

数据结构课程设计航班信息查询与检索

学院名称 《数据结构》课程设计报告题目——航班信息查询与检索 班级: 姓名: 时间:2012/12/29---2013/1/5

二○一二年十二月二十九日 课程设计任务书及成绩评定 航班信息查询与检索 课题 名称 Ⅰ、题目的目的和要求: 1、设计目的 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。 (1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。 (2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。 2、设计题目要求: 问题描述:该设计要求对飞机航班信息进行排序和查找。可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。 任务要求:对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因此他们用得较少。每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,

这种航班号关键字可分成两段,即字母和数字。其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串即可。 Ⅱ、设计进度及完成情况 Ⅲ、主要参考文献及资料 [1] 严蔚敏数据结构(C语言版)清华大学出版社 1999 [2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999

[3] 谭浩强 C语言程序设计清华大学出版社 [4] 与所用编程环境相配套的C语言或C++相关的资料 Ⅳ、成绩评定: 设计成绩:(教师填写) 指导老师:(签字) 二○一三年一月五日

MATLAB程序代码

MATLAB 程序代码以及运行结果function [ ]= xy_1( A ) % Detailed explanation goes here x0=653.779 y0=604.47 %%%JD0的坐标 x1=757.119 y1=569.527 %%%JD1的坐标 dx=x0-x1 dy=y0-y1 L=(dx^2+dy^2)^0.5 %JD1到ID2的距离 T=T1(12,28,37) %%%切线长 xk0=T-L yk0=0 %JD2的局部坐标 c=0.9473 s=-0.3203 %%%预设cos和sin的值 %求左端缓和曲线坐标 for l=0:10:40 x=l-(l^5)/(40*(A^2))+l^9/(3456*(A^4)) %求左端缓和曲线X局部坐标 y=l^3/(6*A)-(l^7)/(336*(A^3)) %求左端缓和曲线Y局部坐标 dxk=x-xk0 dyk=y-yk0 B=[x0;y0]+[c,-s;s,c]*[dxk;dyk] %进行坐标换算 end end function [ T1 ] = T1( a,b,c) %求左端切线长 % Detailed explanation goes here A=a+b/60+c/3600 r=750 p1=p(40,750) p2=p(30,750) m1=m(40,750) T1=(r+p2-(r+p1)*cosd(A))/sind(A)+m1 end

function x = JZ1( ) %左端坐标系坐标转换矩阵 % Detailed explanation goes here x0=653.779 y0=604.47 %%%JD0的坐标 x1=757.119 y1=569.527 %%%JD1的坐标 dx=x0-x1 dy=y0-y1 L=(dx^2+dy^2)^0.5 %JD1到ID2的距离T=T1(12,28,37) %%%切线长 xk0=T-L yk0=0 %JD0的局部坐标 xk1=T yk1=0 %JD1的局部坐标 dxk=xk0-xk1 dyk=yk0-yk1 A=[dxk,-dyk;dyk,dxk] b=[dx,dy]' x=inv(A)*b %依次输出cos、sin 的值 end xy_1(30000) A = 30000 x0 = 653.7790 y0 = 604.4700 x1 =

数据结构课程设计题目选择

数据结构课程设计题目 说明: (1)选用语言:C或Java语言; (2)需要注明3人(可少于3人)小组各自承担和完成的任务(据此给予成绩); (3)如下带“*”的题目,“*”越多,难度越大一些,分值权重更高---要得到更高分数,推荐选择。 要求: (1) 用中文给出设计说明书(含重要子函数的流程图); (2) 给出测试通过、能实现相应功能的源代码; (3) 测试报告。 0、小学数学四则混合运算试题出题、评价、题库自动生成与组卷系统(****)---已经有2组选择 任务: (1)将随机给出的四则混合运算表达式显示在计算机显示器上,要求应试者给出答案;并且使用堆栈对该表达式求值,同给出的答案进行比较,判断 正确和错误。给出鼓励信息和嘉奖信息; (2)保存多人在不同时间应试的题目与他(或她)给出的答案,评价所出题目的难易程度(通过多人回答正确与否的情况给出),形成题库; (3)按照用户给出的题目难易程度指标(例如让50人的得分满足怎样的正态分布,如90分以上10%,80分以上30%,70分以上30%,60分以上20%,60分 以下10%),从题库中抽取不同的题目,组成试卷。 要求:随机产生的题目中,参加运算的数据随机、运算符随机。题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价。 1、集合的并、交和差运算---已经有1组选择 任务:编制一个能演示执行集合的并、交和差运算的程序。 要求: (1) 集合的元素限定为小写字母字符[…a?..?z?] 。 (2) 演示程序以用户和计算机的对话方式执行。 实现提示:以链表表示集合。 选作内容: (1) 集合的元素判定和子集判定运算。 (2) 求集合的补集。 (3) 集合的混合运算表达式求值。 (4) 集合的元素类型推广到其他类型,甚至任意类型。 2、停车场管理------已经有2组选择 任务:设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 要求:以栈模拟停车场,以队列模拟车场外的便道。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停车不收费)。栈以顺序存储结构实现,队列以链表结构实现。 3、哈夫曼码的编/译码系统(**)---已经有1组选择

航班信息查询与检索系统

课程设计报告 课程设计名称:数据结构课程设计 题目:设计并实现一个航班信息查询与检索系统 院系:计算机学院 专业: 班级: 学号: 姓名: 指导教师:

学术诚信声明 本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。 本人签名: 日期:年月日

目录 1 题目介绍 (5) 2 课程设计要求 (5) 2.1课程设计内容 (5) 2.2课程设计目标 (5) 3 概要设计 (5) 3.1设计思路 (5) 3.2流程图 (5) 4 算法概述 (6) 4.1定义数据类型 (6) 4.2函数描述 (7) 5 测试数据 (10) 附录(关键部分程序清单) (12)

1、题目介绍 设计一个航班信息查询与检索系统。可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。 2、课程设计要求 1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。如下表所示: 2、对航班信息进行排序与查找。 3、概要设计 3.1、设计思路 根据题目所要求,程序必须实现航班信息的录入和查询。程序首先定义了一个储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。在查询设计中,使用折半查找法对排好序的航班号数据实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。 3.2、流程图

Matlab程序代码

Matlab程序代码: clc; clear; N=20; T=0.1 t=0:T:N m=length(t) syms x1 x2 x3 fx=[0;x1+x2^2;x1-x2] gx=[exp(x2);exp(x2);0] hx=x3; R=10*eye(1) Q=[10 0 0;0 1 0;0 0 1] A=[0 1 0;0 0 1;0 0 0] B=[0;0;1] SS=B*inv(R)*B' [p1,p2,lamp,perr,wellposed,P]=aresolv(A,Q,SS) z1=hx z2=[diff(hx,x1) diff(hx,x2) diff(hx,x3)]*fx z3=[diff(z2,x1), diff(z2,x2), diff(z2,x3)]*fx ax=[diff(z3,x1), diff(z3,x2), diff(z3,x3)]*fx bx=[diff(z3,x1), diff(z3,x2), diff(z3,x3)]*gx z=[z1;z2;z3] k=inv(R)*B'*P %diff(z)=A*z+B*v=(A-B*K)*Z %x(0)=[1;0;0] abk=A-B*k x1(1)=1 x2(1)=0 x3(1)=1 z1(1)=x3(1) z2(1)=x1(1)-x2(1) z3(1)=-(x1+x2^2) for i=2:m z1(i)=z1(i-1)+T*(abk(1,1)*z1(i-1)+abk(1,2)*z2(i-1)+abk(1,3)*z3(i-1)) z2(i)=z2(i-1)+T*(abk(2,1)*z1(i-1)+abk(2,2)*z2(i-1)+abk(2,3)*z3(i-1)) z3(i)=z3(i-1)+T*(abk(3,1)*z1(i-1)+abk(3,2)*z2(i-1)+abk(3,3)*z3(i-1))

数据结构课程设计题目及要求

实验一~实验四任选一题;实验五~实验九任选一题。 实验一运动会分数统计 一、实验目的: (1)熟练掌握线性表的两种存储方式 (2)掌握链表的操作和应用。 (3)掌握指针、结构体的应用 (4)按照不同的学校,不同项目和不同的名次要求,产生各学校的成绩单、团体总分报表。 二、实验内容: 【问题描述】 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。 【基本要求】 产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。 【测试数据】 对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。 【实现提示】 可以假设m≤20,m≤30,w≤20,姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。 【选作内容】 允许用户指定某些项目可采取其他名次取法。

实验二停车场管理 一、实验目的: (1)熟练掌握栈顺存和链存两种存储方式。 (2)掌握栈的基本操作及应用。 (3)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 二、实验内容: 【问题描述】 设停车场是一个可停放n辆汽车的长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 【基本要求】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。 【测试数据】 设n=2,输入数据为:(A,1,5),(A,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。 【实现提示】 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 【选作内容】 (1)两个栈共享空间,思考应开辟数组的空间是多少? (2)汽车可有不同种类,则他们的占地面积不同收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。 (4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。

程序设计流程图.doc

程序设计流程图 程序设计流程图 程序设计的基本过程 (1)分析需求:了解清楚程序应有的功能。 (2)设计算法:根据所需的功能,理清思路,排出完成功能的具体步骤,其中每一步都应当是简单的、确定的。这一步也被称为逻辑编程。 (3)编写程序:根据前一步设计的算法,编写符合C++语言规则的程序文本。 (4)输入与编辑程序:将程序文本输入到计算机内,并保存为文件,文件名后缀为.cpp 。 至此,产生了完整的程序文本,被称为源程序或源代码。保存源程序的文件(例如前面的c:\student\ch1_01.cpp)称为源程序文件,简称源文件,文件名的后缀是.cpp 。 (5)编译(Compile):把C++程序编译成机器语言程序。 编译产生的程序称为目标程序,目标程序被自动保存为文件,这一文件称为目标文件,文件名的后缀是.obj 。 VC++进行编译的依据是源程序,如果源程序中的符号、词语、整体结构等有差错,超出了VC++的理解能力,VC++就无法完成编译,这样的差错称为语法错误。一旦发现语法错误,VC++就不生成目标文件,并在窗口下方列出错误;如果没有语法错误,则显示0 error(s) ,并生成目标文件,允许继续进行后面的步骤。 编译没有出现错误,仅仅说明程序中没有语法错误。 (6)生成执行程序:从目标文件进一步连接生成Windows环境下的可执行文件,即文件名后缀为.exe 的文件。

由于可执行文件是由若干个文件拼接而成的,其中不但有目标文件,还有另一些标准的库文件,一些规模较大的程序还会有多个目标文件,所以这一步骤又被称为连接(Link)。 (7)运行:在Windows环境中使用可执行文件。这是程序设计的最终目的。这一步也常被称为Run 。 程序设计流程图: 1.程序设计的流程图 2.程序结构流程图 3.程序算法描述流程图 4.程序算法流程图 5.浅谈程序设计的心得

航班查询系统

。 武汉轻工大学数计学院《数据结构》课程设计报告 名称:航班查询系统 班级:信息与计算科学1301 姓名:王杰 学号:1312010027 指导教师:王防修 学年学期:2014 ~ 2015 学年第一学期 2014 年12 月26 日

一、需求分析 1. 问题描述: 本任务要求对飞机航班信息进行排序和查找。可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。本设计主要是对排序以及查找等概念进行综合练习。以链式基数排序为主线,用到二分查找和顺序查找等知识,还有建立静态链表等相关概念. 2. 基本要求: 进入系统后,首先提示输入航班的信息,包括:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号及票价等,票价为整型,其他为字符型。当输入完一个信息后会提示是否继续输入,重复以上步骤输入全部的信息。进入主菜单后会给出用户操作的界面,根据提示进行航班信息的查询。 二、概要设计 1.系统的功能: 本任务要求对飞机航班信息进行排序和查找。可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。本设计主要是对排序以及查找等概念进行综合练习。以链式基数排序为主线,用到二分查找和顺序查找等知识,还有建立静态链表等相关概念。 2.系统模块分析: (1)航班排序对输入系统内的航班首先要进行排序,我们采用的基数排序,从低位到高位依次对关键字进行分配和收集,分两段实现其算法流程图。

(2)时间查找根据航班的起飞时间(到达时间)查找航班的信息。 (3)二分法查找功能 (4)显示功能显示功能是将所求单词的所有行列信息依次显示在屏幕上。 航班查询系统 程序源代码: # include # include # include #include # include # include # define Null 0 struct flight { char fltNum[15]; char StartingPoint [20]; char Terminal [20]; char DepartureTime[8]; char ArrivalTime[8];

基于matlab的计算器编程附代码

1.需求分析 本次的实验要求是设计一个计算器,主要功能如下: (1)实现基本数学运算(加减乘除等),而且要能进行混合运算 (2)实现部分函数功能,如求平方根、求倒数等 (3)能实现小数运算 界面与标准计算器界面类似 根据要求以及以前的学习情况,决定使用matlab进行编程。Matlab强大的计算功能以及便捷的GUI设计,可以较为简便的实现所要求的功能。按照要求,数据输入和输出支持小数点,支持四则混合运算,决定使用如下几个数据进行分析:(1+3)*5 Sqrt(4) 1/2 Sin4 用以检验是否可以进行加减乘除四则运算、平方根、倒数、正弦的运算。 2.程序设计 M atlab的程序设计较为简便,用GUI设计出一个计算器的模型,然后系统会自动生成一个框架,在框架中,写入每一个按键对应的程序就可以实现功能。 3.调式分析 编程的过程中遇到的问题不是很多,基本就是找要实现各个功能的子程序,通过上网和去图书馆,加上自己的编写,终于实现了实验要求的功能。但是有一点很重要,matlab不支持中文,所以从路径到文件名必须是全英文的,不然就无法识别。此外,给每个按键命名也是很重要的,不然在生成的程序框架里面,就无法识别各个按键的作用,编写程序的时候也就无法做到一一对应。 4.使用说明 程序的使用比较简单,由于是可视化界面,直接打开matlab,然后建立一个GUI 工程,再打开生成的fig文件,就是一个计算器的界面,直接按照市面上卖的计算器的

方法,按键使用即可。 5.测试结果 计算结果为20 4sqrt=2 Sin4结果为 1/2=0.5 经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。 6.心得体会 本次试验由于不限制语言,于是计算功能强大,操作简便的matlab变成了首选,matlab的GUI设计,操作是较为简单的,首先建立一个GUI工程,然后用可视化界面,

VBA程序设计用例:程序流程图及程序代码

VBA程序教学用例 【例1】求解一元二次方程Ax2+Bx+C=0。 顺序结构的VBA程序: SUB JFC1() A = Sheets("解一元二次方程").Cells(1, 2) B = Sheets("解一元二次方程").Cells(2, 2) C = Sheets("解一元二次方程").Cells(3, 2) X1=(-B+SQR(B^2-4*A*C))/2/A X2=(-B-SQR(B^2-4*A*C))/2/A DEBUG.PRINT “X1=”,X1 DEBUG.PRINT “X2=”,X2 END SUB 提示:先将三个系数A、B、C存放到表"解一元二次方程"的单元格B1:B3中,运行结果在立即窗口中(可用CTRL+G组合键打开立即窗口)。 带判断条件的VBA程序: Sub JFC2() A = Sheets("解一元二次方程").Cells(1, 2) B = Sheets("解一元二次方程").Cells(2, 2) C = Sheets("解一元二次方程").Cells(3, 2) If B * B - 4 * A * C >= 0 Then Sheets("解一元二次方程").Cells(4, 2) = (-B + Sqr(B ^ 2 - 4 * A * C)) / 2 / A Sheets("解一元二次方程").Cells(5, 2) = (-B - Sqr(B ^ 2 - 4 * A * C)) / 2 / A Else Sheets("解一元二次方程").Cells(4, 2) = "此方程无实根" Sheets("解一元二次方程").Cells(5, 2) = "此方程无实根" End If End Sub 提示:先将三个系数A、B、C存放到表"解一元二次方程"的单元格B1:B3中,运行结果在B4:B5中)。

基于MATLAB的潮流计算源程序代码(优.选)

%*************************电力系统直角坐标系下的牛顿拉夫逊法潮流计算********** clear clc load E:\data\IEEE014_Node.txt Node=IEEE014_Node; weishu=size(Node); nnum=weishu(1,1); %节点总数 load E:\data\IEEE014_Branch.txt branch=IEEE014_Branch; bwei=size(branch); bnum=bwei(1,1); %支路总数 Y=(zeros(nnum)); Sj=100; %********************************节点导纳矩阵******************************* for m=1:bnum; s=branch(m,1); %首节点 e=branch(m,2); %末节点 R=branch(m,3); %支路电阻 X=branch(m,4); %支路电抗 B=branch(m,5); %支路对地电纳 k=branch(m,6); if k==0 %无变压器支路情形 Y(s,e)=-1/(R+j*X); %互导纳 Y(e,s)=Y(s,e); end if k~=0 %有变压器支路情形 Y(s,e)=-(1/((R+j*X)*k)); Y(e,s)=Y(s,e); Y(s,s)=-(1-k)/((R+j*X)*k^2); Y(e,e)=-(k-1)/((R+j*X)*k); %对地导纳 end Y(s,s)=Y(s,s)-j*B/2; Y(e,e)=Y(e,e)-j*B/2; %自导纳的计算情形 end for t=1:nnum; Y(t,t)=-sum(Y(t,:))+Node(t,12)+j*Node(t,13); %求支路自导纳 end G=real(Y); %电导 B=imag(Y); %电纳 %******************节点分类************************************* * pq=0; pv=0; blancenode=0; pqnode=zeros(1,nnum); pvnode=zeros(1,nnum); for m=1:nnum; if Node(m,2)==3 blancenode=m; %平衡节点编号 else if Node(m,2)==0 pq=pq+1; pqnode(1,pq)=m; %PQ 节点编号 else if Node(m,2)==2 pv=pv+1; pvnode(1,pv)=m; %PV 节点编号 end end end end %*****************************设置电压初值********************************** Uoriginal=zeros(1,nnum); %对各节点电压矩阵初始化 for n=1:nnum Uoriginal(1,n)=Node(n,9); %对各点电压赋初值 if Node(n,9)==0;

关于数据结构课程设计心得体会范文

关于数据结构课程设计心得体会范文 心得体会是指一种读书、实践后所写的感受性文字。是指将学习的东西运用到实践中去,通过实践反思学习内容并记录下来的文字,近似于经验总结。下面是小编搜集的关于数据结构课程设计心得体会范文,希望对你有所帮助。 关于数据结构课程设计心得体会(1) 这学期开始两周时间是我们自己选题上机的时间,这学期开始两周时间是我们自己选题上机的时间,虽然上机时间只有短短两个星期但从中确实学到了不少知识。上机时间只有短短两个星期但从中确实学到了不少知识。 数据结构可以说是计算机里一门基础课程,据结构可以说是计算机里一门基础课程,但我觉得我们一低计算机里一门基础课程定要把基础学扎实,定要把基础学扎实,然而这次短短的上机帮我又重新巩固了 c 语言知识,让我的水平又一部的提高。数据结构这是一门语言知识让我的水平又一部的提高。数据结构这是一门知识,纯属于设计的科目,它需用把理论变为上机调试。 纯属于设计的科目,它需用把理论变为上机调试。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。来说具有一定的难度。它是其它编程语言的一门基本学科。我选的上机题目是交叉合并两个链表,对这个题目,我选的上机题目是交叉合并两个链表,对这个题目,我觉得很基础。刚开始调试代码的时候有时就是一个很小的错觉得很基础。 刚开始调试代码的时候有时就是一个很小的错调试代码的时候误,导致整个程序不能运行,然而开始的我还没从暑假的状导致整个程序不能运行,态转到学习上,每当程序错误时我都非常焦躁,态转到学习上,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件! 同时,通过此次课程设计使我了解到,必然具备的条件! 同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得件语言必不可缺少,要想成为一个有能力的人,硬件

Java课程设计实验报告及全部源码流程图

课程设计 一、实验目的 1.加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2. 使用本学期学习的Java SE技术(也可以使用课堂教学中没有学习过的Java技术,但是应当以Java SE技术为主)完成多功能日历GUI程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3.在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 二、实验要求 1.问题描述准确、规范。 2.程序结构合理,调试数据准确、有代表性.。 3.界面布局整齐,人机交互方便。 4.输出结果正确。 5.正确撰写实验报告。 三、实验内容 编写一个GUI程序实现日历的功能。一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报

时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 四、实验步骤 1.在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2.在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3.各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4. 根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5.详细的上机实验步骤见任务分工及程序设计进度表。 五、实验结果 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能齐全、符合操作习惯。 下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期,并能够选择背景图片):

基本粒子群算法的matlab源程序

主函数源程序(main.m) %------基本粒子群优化算法(Particle Swarm Optimization)----------- %------名称:基本粒子群优化算法(PSO) %------作用:求解优化问题 %------说明:全局性,并行性,高效的群体智能算法 %------初始格式化-------------------------------------------------- clear all; clc; format long; %------给定初始化条件---------------------------------------------- c1=1.4962; %学习因子1 c2=1.4962; %学习因子2 w=0.7298; %惯性权重 MaxDT=1000; %最大迭代次数 D=10; %搜索空间维数(未知数个数) N=40; %初始化群体个体数目 eps=10^(-6); %设置精度(在已知最小值时候用) %------初始化种群的个体(可以在这里限定位置和速度的范围)------------ for i=1:N for j=1:D x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end %------先计算各个粒子的适应度,并初始化Pi和Pg---------------------- for i=1:N p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end pg=x(1,:); %Pg为全局最优 for i=2:N if fitness(x(i,:),D) pg=x(i,:); end end %------进入主要循环,按照公式依次迭代,直到满足精度要求------------ for t=1:MaxDT for i=1:N v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:),D) p(i)=fitness(x(i,:),D); y(i,:)=x(i,:);

相关文档
最新文档