文档库 最新最全的文档下载
当前位置:文档库 › 云南大学软件学院数据结构实验6

云南大学软件学院数据结构实验6

云南大学软件学院数据结构实验6
云南大学软件学院数据结构实验6

实验难度: A □ B □ C □

学期:2017秋季学期

任课教师:

实验题目:

组员及组长:

承担工作:

联系电话:

电子邮件:

完成提交时间:年月日

一、【实验构思(Conceive)】(10%)

(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析)

1.基本思路:用无向网表示校区内的各建筑的平面图,

图中顶点表示主要建筑,存放建筑的编号、名称、简介等信息,图中的边表示建筑间的道路,存放路径长度等信息,将导游图看作一张带权无向图,顶点表示校园的各个建筑,边表示各建筑之间的道路,边上的权值表示距离;根据用户的输入信息用迪杰斯特拉算法计算出任意两个地点之间的最短路径,并用二维数组来存储相关的信息,输出给用户;同时用数组存储各个地点的相关信息,当用户输入要了解的地点名称是,调用相关函数输出该地点的相关信息给用户。

2、在程序中运用到了图的相关知识以及迪杰斯特拉算法

和哈密尔顿图的遍历等,无向图的相关知识和相关操作,还有图的存储及相关的数据结构。

二、【实验设计(Design)】(20%)

(本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等)

主程序模块:该模块包含一个main函数,在main函数中调用其他函数和子程序。int main()

{

int v0, v1;

int i, num;

char flag;

Create(NUM, 11);

do

{

flag = Menu();

switch (flag)

{

case'1':

system("cls");//清空屏幕的当前内容

List();//输出景点列表

printf("\n请选择起点景点(0~26):");

scanf("%d", &v0);

printf("\n请选择终点景点(0~26):");

scanf("%d", &v1);

ShortPath(v0);//求出最短路径

Output(v0, v1);//输出结果

printf("\n请按任意键继续...\n");

getchar();//利用getchar()函数让程序运行到上一行时,等待下下一个按键时才返回

getchar();

break;

case'2':

system("cls");

List();

printf("\n请输入您要查找的景点编号:");

scanf("%d", &num);

for (i = 0; i

{

if (num == g.vex[i].number)

{

printf("\n你要查找的景点信息如下:");

printf("\n%s:", g.vex[i].sight);

printf("%s\n\n", g.vex[i].description);

printf("\n按任意键返回...");

getchar();

getchar();

break;

}

}

if (i == NUM)

{

printf("\n没有找到!");

printf("\n按任意键返回...");

getchar();

getchar();

}

break;

case'e':

exit(0);

}

} while (flag != '0');

return 0;

}

流程图:

子程序模块包括:地点列表函数、输出函数、哈密尔顿图的遍历函数、迪杰斯特拉算法判断最短路径函数、创建图的函数。各模块之间的调用关系:在主函数中调用列表函数,输出个地点,同时调用最短路径判断函数,计算出两地点之间的最短路径;调用输出函数来输出相关的信息给用户,调用图的创建函数来创建校园个地点所表示的无向图。在哈密尔顿图的遍历函数中递归调用该函数本身来实现校园内所有地点的遍历。

核心关键算法:

迪杰斯特拉算法:

void ShortPath(int num)//迪杰斯特拉算法最短路径函数,num为入口点的编号

{

int v, w, i, t;//v, w, i为计数变量

int final[NUM];

int min;

for (v = 0; v

{

final[v] = 0;//假设从顶点num到顶点v没有最短路径

D[v] = g.arc[num][v].adj;//将与之相关的权值放入D中存放

for (w = 0; w

P[v][w] = 0;

if (D[v]<20000)//存在路径

{

P[v][num] = 1;//存在标志位为1

P[v][v] = 1;//自身到自身

}

}

D[num] = 0;

final[num] = 1;//初始化num顶点属于S集合

//***********************************************

//开始主循环,作为更新。每次求得num到某个顶点的最短路径,并将其加入到S集合for (i = 0; i

{

min = Max;//当前所知离顶点num的最近距离

for (w = 0; w

if (!final[w])//w顶点离num顶点更近

{

if(D[w]

{

v = w;

min = D[w];

}

}

final[v] = 1;//离num顶点更近的v加入到s集合

for (w = 0; w

if (!final[w] && ((min + g.arc[v][w].adj)

{

D[w] = min + g.arc[v][w].adj;

for (t = 0; t

P[w][t] = P[v][t];

P[w][w] = 1;

}

}

}

哈密尔顿图遍历:

void HaMiTonian(int m)//哈密尔顿图的遍历

{

if (m>26)

return;

L: NextValue(m);

if (x[m] == 0)

return;

if (m == 26 && g.arc[0][x[26] - 1].adj != 0000)

Display();

else

HaMiTonian(m + 1);

goto L;

}

三、【实现(Implement)】(30%)

(本部分应包括:抽象数据类型各操作的具体实现代码、关键操作的具体算法实现、函数实现,主程序实现等,并给出关键算法的时间复杂度分析。如有界面则需包括界面的关键实现方法等。)

typedef struct ArcCell

{

int adj;//相邻矩阵的建筑之间的路程

}ArcCell;//定义改的类型

typedef struct VertexType

{

int number;//建筑编号

char* sight;//建筑名

char* description;//建筑描述

}VertexType;//定义定点的类型

typedef struct

{

VertexType vex[NUM];//图中的顶点,即为景点

ArcCell arc[NUM][NUM];//图中的边,即距离

int vexnum, arcnum;//顶点数,边数

}MGragh;//定义图的类型

MGragh g;//把图定义为全局变量

抽象数据类型定义:图的存储结构的定义、图的类型的定义、各相关头文件的定义及相关变量存储的大小的定义和各个函数的原型定义:

#include

#include

#include

#define Max 10000

#define NUM 27

typedef struct ArcCell

{

int adj;//相邻矩阵的建筑之间的路程

}ArcCell;//定义改的类型

typedef struct VertexType

{

int number;//建筑编号

char* sight;//建筑名

char* description;//建筑描述

}VertexType;//定义定点的类型

typedef struct

{

VertexType vex[NUM];//图中的顶点,即为景点

ArcCell arc[NUM][NUM];//图中的边,即距离

int vexnum, arcnum;//顶点数,边数

}MGragh;//定义图的类型

MGragh g;//把图定义为全局变量

int P[NUM][NUM];//用于存储最短路径下标的数组

long int D[NUM];//辅助变量存储最短路径长度

int x[26] = { 0 };

void Create(int v, int a);//构造图函数

void List();//列表函数

void ShortPath(int num);//最短路径函数

void Output(int sight1, int sight2);//输出函数

char Menu();//主菜单

void HaMiTonian(int);//哈密尔顿图的遍历

void NextValue(int);

void Display();//显示遍历结果

整个程序中用的相关的函数,在主函数中调用相关的函数和子程序,用哈密尔顿图的遍历函数实现校园中各地点在无向图中的描述,用迪杰斯特拉算法实现最短路径的判断和计算,设计输出函数来输出相关的信息给用户,各个子程序和相关函数之间调用相关的函数来实现相关的功能,用创建图函数来实现校园内各个地点在图中的表示。

在时间复杂度上,迪杰斯特拉算法采用两层循环,其复杂度O(n^2)。

四、【测试结果(Testing)】(10%)

(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析,可附截图)

开始界面:

功能1:

当用户输入1时,程序调用相关函数,算出两个地点之间的最短路径并把结果输出给用户,当用户输入1(百家大道)为起始地点,24(梓苑)为终点,程序算出了两点之间的最短路径长度及给出了相关的路径。

功能2:当用户输入2时,程序给出相关地点的相关信息:

退出:当用户输入e时,程序退出

五、【实验总结】(10%)

(本部分应包括:自己在实验中完成的任务,及存在的问题,所完成实验过程中的具体经验总结、心得)

总结及心得:通过本次实验,我对在课堂上学到的有关图的知识有了进一步的了解和认识,对图的存储结构有了更深入的了解,学会了如何用代码来实现图的存储,同时我也对迪杰斯特拉算法有了进一步的了解,知道了如何用迪杰斯

特拉算法来计算图中两个顶点之间的最短路径以及如何用哈密尔顿图的遍历算法来实现图的遍历,另外,我也学会了如何把图这种数据结构用到实际的程序中来实现相关的操作,对校园中各个地点如何用图这种数据结构来描述有了一定的了解和认识,学会了如何实现图的遍历及最短路径的判断和相关信息的输出。同时我也学会了如何组织一个程序,包括各个子程序之间的关系和各个函数之间的调用。

六、思考题或【项目运作描述(Operate)】(10%)

(注:选择C难度的才需要填写“项目运作描述”,其他难度的只需完成思考题)(项目运作描述应包括:项目的成本效益分析,应用效果等的分析。)

在作用上,迪杰斯特拉算法每次可以算出单一定点到其他个顶点的最短路径;而弗洛伊德算法可以求出任意两个顶点间的最短路径。

在时间复杂度上,迪杰斯特拉算法采用两层循环,其复杂度O(n^2),弗洛伊德算法采用三层循环,其复杂O(n^3)。

七、【代码】(10%)

(本部分应包括:完整的代码及充分的注释。注意纸质的实验报告无需包括此部分。格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五)

例如:

#include

#include

#include

#define Max 10000

#define NUM 27

typedef struct ArcCell

{

int adj;//相邻矩阵的建筑之间的路程

}ArcCell;//定义改的类型

typedef struct VertexType

{

int number;//建筑编号

char* sight;//建筑名

char* description;//建筑描述

}VertexType;//定义定点的类型

typedef struct

{

VertexType vex[NUM];//图中的顶点,即为景点

ArcCell arc[NUM][NUM];//图中的边,即距离

int vexnum, arcnum;//顶点数,边数

}MGragh;//定义图的类型

MGragh g;//把图定义为全局变量

int P[NUM][NUM];//用于存储最短路径下标的数组long int D[NUM];//辅助变量存储最短路径长度

int x[26] = { 0 };

void Create(int v, int a);//构造图函数

void List();//列表函数

void ShortPath(int num);//最短路径函数

void Output(int sight1, int sight2);//输出函数

char Menu();//主菜单

void HaMiTonian(int);//哈密尔顿图的遍历

void NextValue(int);

void Display();//显示遍历结果

int main()

{

int v0, v1;

int i, num;

char flag;

Create(NUM, 11);

do

{

flag = Menu();

switch (flag)

{

case'1':

system("cls");//清空屏幕的当前内容

List();//输出景点列表

printf("\n请选择起点景点(0~26):");

scanf("%d", &v0);

printf("\n请选择终点景点(0~26):");

scanf("%d", &v1);

ShortPath(v0);//求出最短路径

Output(v0, v1);//输出结果

printf("\n请按任意键继续...\n");

getchar();//利用getchar()函数让程序运行到上一行时,等待下下一个按键时才返回

getchar();

break;

case'2':

system("cls");

List();

printf("\n请输入您要查找的景点编号:");

scanf("%d", &num);

for (i = 0; i

{

if (num == g.vex[i].number)

{

printf("\n你要查找的景点信息如下:");

printf("\n%s:", g.vex[i].sight);

printf("%s\n\n", g.vex[i].description);

printf("\n按任意键返回...");

getchar();

getchar();

break;

}

}

if (i == NUM)

{

printf("\n没有找到!");

printf("\n按任意键返回...");

getchar();

getchar();

}

break;

case'e':

exit(0);

}

} while (flag != '0');

return 0;

}

char Menu()

{

char c;

int flag;

do

{

flag = 1;

system("cls");

List();

//printf("*********************************\n");

printf("\t\t\t\t*\t 1、查询建筑路径*\n");

printf("\t\t\t\t*\t 2、查询建筑信息*\n");

printf("\t\t\t\t*\t e、退出*\n");

printf("\t\t\t\t**********************************\n");

printf("\n\t\t\t\t请输入您的选择:");

scanf("%c", &c);

if (c == '1' || c == '2' || c == 'e')

flag = 0;

} while (flag);

return c;

}

void Create(int v, int a)//创建图函数

{

int i, j;

g.vexnum = v;//初始化结构中的景点数和边数

g.arcnum = a;

for (i = 0; i

//for (j=0;j

g.vex[i].number = i;//初始化每一个景点的编号

//**********************************************************

//初始化每一个景点及景点描述

g.vex[0].sight = "云大西二门";

g.vex[0].description = "简称西门,主要出口之一";

g.vex[1].sight = "百家大道";

g.vex[1].description = "正对西二门的一条大道";

g.vex[2].sight = "文典广场";

g.vex[2].description = "大型活动场所,在这进行升旗仪式";

g.vex[3].sight = "云大学生会堂";

g.vex[3].description = "在这里举行重大典礼和仪式,后面是团委办公室";

g.vex[4].sight = "中山邦翰楼";

g.vex[4].description = "学生事务中心,教学楼之一";

g.vex[5].sight = "仰止楼";

g.vex[5].description = "云南大学呈贡校区图书馆";

g.vex[6].sight = "桦苑";

g.vex[6].description = "学生住宿区之一";

g.vex[7].sight = "楠苑";

g.vex[7].description = "学生住宿区之一";

g.vex[8].sight = "格物楼";

g.vex[8].description = "教学楼之一";

g.vex[9].sight = "楠苑体育场";

g.vex[9].description = "篮球场,足球场,排球场,网球场";

g.vex[10].sight = "知味堂";

g.vex[10].description = "楠苑食堂";

g.vex[11].sight = "楠苑超市";

g.vex[11].description = "云大后勤超市之一,在楠苑";

g.vex[12].sight = "楠苑综合楼";

g.vex[12].description = "综合服务楼";

g.vex[13].sight = "楸苑";

g.vex[13].description = "学生住宿区之一";

g.vex[14].sight = "力行楼";

g.vex[14].description = "教学楼之一";

g.vex[15].sight = "软件学院楼";

g.vex[15].description = "软件学院教学楼实验楼";

g.vex[16].sight = "校医院";

g.vex[16].description = "云大校医院";

g.vex[17].sight = "明远楼";

g.vex[17].description = "教务办公行政楼";

g.vex[18].sight = "至公大道";

g.vex[18].description = "正对北门的大道";

g.vex[19].sight = "泽湖";

g.vex[19].description = "云大景点之一";

g.vex[20].sight = "云大北门";

g.vex[20].description = "云大正门";

g.vex[21].sight = "文汇楼";

g.vex[21].description = "教学楼之一";

g.vex[22].sight = "余味堂";

g.vex[22].description = "梓苑食堂";

g.vex[23].sight = "梓苑超市";

g.vex[23].description = "云大后勤超市之一,在梓苑";

g.vex[24].sight = "梓苑";

g.vex[24].description = "学生住宿区之一";

g.vex[25].sight = "钟楼";

g.vex[25].description = "云大标志性建筑";

g.vex[26].sight = "校车乘车点";

g.vex[26].description = "乘坐校车处";

//**********************************************************

//先把所有景点的距离均设置为10000,即为每一个景点间互不可达for (i = 0; i

for (j = 0; j

g.arc[i][j].adj = Max;

//**********************************************************

//再设置可达景点间的距离(对图中对称的边同时赋值)

g.arc[1][2].adj = g.arc[2][1].adj = 20;

g.arc[2][3].adj = g.arc[3][2].adj = 20;

g.arc[1][4].adj = g.arc[4][1].adj = 50;

g.arc[4][5].adj = g.arc[5][4].adj = 200;

g.arc[4][6].adj = g.arc[6][4].adj = 130;

g.arc[5][7].adj = g.arc[7][5].adj = 600;

g.arc[5][8].adj = g.arc[8][5].adj = 800;

g.arc[5][9].adj = g.arc[9][5].adj = 600;

g.arc[7][8].adj = g.arc[8][7].adj = 100;

g.arc[7][9].adj = g.arc[9][7].adj = 600;

g.arc[7][10].adj = g.arc[10][7].adj = 150;

g.arc[7][11].adj = g.arc[11][7].adj = 110;

g.arc[7][12].adj = g.arc[12][7].adj = 100;

g.arc[8][12].adj = g.arc[12][8].adj = 80;

g.arc[9][11].adj = g.arc[11][9].adj = 700;

g.arc[10][11].adj = g.arc[11][10].adj = 5;

g.arc[10][13].adj = g.arc[13][10].adj = 150;

g.arc[12][13].adj = g.arc[13][12].adj = 100;

g.arc[12][26].adj = g.arc[26][12].adj = 20;

g.arc[13][14].adj = g.arc[14][13].adj = 200;

g.arc[13][15].adj = g.arc[15][13].adj = 250;

g.arc[13][16].adj = g.arc[16][13].adj = 700;

g.arc[13][26].adj = g.arc[26][13].adj = 100;

g.arc[14][15].adj = g.arc[15][14].adj = 20;

g.arc[14][16].adj = g.arc[16][14].adj = 500;

g.arc[14][17].adj = g.arc[17][14].adj = 1500;

g.arc[16][17].adj = g.arc[17][16].adj = 1300;

g.arc[17][18].adj = g.arc[18][17].adj = 50;

g.arc[17][25].adj = g.arc[25][17].adj = 300;

g.arc[18][19].adj = g.arc[19][18].adj = 30;

g.arc[19][20].adj = g.arc[20][19].adj = 100;

g.arc[20][21].adj = g.arc[21][20].adj = 950;

g.arc[20][22].adj = g.arc[22][20].adj = 900;

g.arc[21][22].adj = g.arc[22][21].adj = 150;

g.arc[21][24].adj = g.arc[24][21].adj = 110;

g.arc[21][25].adj = g.arc[25][21].adj = 750;

g.arc[22][23].adj = g.arc[23][22].adj = 40;

g.arc[22][24].adj = g.arc[24][22].adj = 120;

g.arc[23][24].adj = g.arc[24][23].adj = 60;

g.arc[24][1].adj = g.arc[1][24].adj = 300;

}

void List()//景点列表

{

int i, k = 0;

printf("\n\n\t\t\t\t**********************************");

printf("\n\t\t\t\t* *");

printf("\n\t\t\t\t* 欢迎使用云南大学呈贡校区*");

printf("\n\t\t\t\t* 校园导游系统*");

printf("\n\t\t\t\t* *");

printf("\n\t\t\t\t**********************************");

printf("\n\t\t\t\t* 地点列表*");

printf("\n\t\t\t\t*--------------------------------*");

for (i = 0; i

{

printf("\n\t\t\t\t*\t(%2d)%-s\t\t *", i, g.vex[i].sight);//输出景点列表

k = k + 1;

}

printf("\n\t\t\t\t**********************************\n");

}

void ShortPath(int num)//迪杰斯特拉算法最短路径函数,num为入口点的编号

{

int v, w, i, t;//v, w, i为计数变量

int final[NUM];

int min;

for (v = 0; v

{

final[v] = 0;//假设从顶点num到顶点v没有最短路径

D[v] = g.arc[num][v].adj;//将与之相关的权值放入D中存放

for (w = 0; w

P[v][w] = 0;

if (D[v]<20000)//存在路径

{

P[v][num] = 1;//存在标志位为1

P[v][v] = 1;//自身到自身

}

}

D[num] = 0;

final[num] = 1;//初始化num顶点属于S集合

//***********************************************

//开始主循环,作为更新。每次求得num到某个顶点的最短路径,并将其加入到S集合for (i = 0; i

{

min = Max;//当前所知离顶点num的最近距离

for (w = 0; w

if (!final[w])//w顶点离num顶点更近

{

if(D[w]

{

v = w;

min = D[w];

}

}

final[v] = 1;//离num顶点更近的v加入到s集合

for (w = 0; w

if (!final[w] && ((min + g.arc[v][w].adj)

{

D[w] = min + g.arc[v][w].adj;

for (t = 0; t

P[w][t] = P[v][t];

P[w][w] = 1;

}

}

}

void Output(int sight1, int sight2)

{

int a, b, c, d, q = 0;

a = sight2;//将景点2赋值给a

if (a != sight1)//景点2 =!景点1

{

printf("\n从%s到%s的最短路径是", g.vex[sight1].sight, g.vex[sight2].sight);//输出提示信息

printf("(最短距离为:%dm.)\n\n", D[a]);//输出景点1到景点2的最短路径长度,存放在D[]数组中

printf("%s", g.vex[sight1].sight);//输出景点1的名称

d = sight1;//将景点1的编号赋值给d

for (c = 0; c

{

gate:;

P[a][sight1] = 0;

for (b = 0; b

{

if (g.arc[d][b].adj<20000 && P[a][b])//如果景点1和它的一个临界节点之间存在路径且最短路径

{

printf("-->%s", g.vex[b].sight);//输出此节点的名称

q = q + 1;//计数变量+1,满8控制输出时的换行

P[a][b] = 0;

d = b;//将b作为出发点进行下一次循环输出,如此反复

if (q % 9 == 0)

printf("\n");

goto gate;

}

}

}

}

}

void HaMiTonian(int m)//哈密尔顿图的遍历

{

if (m>26)

return;

L: NextValue(m);

if (x[m] == 0)

return;

if (m == 26 && g.arc[0][x[26] - 1].adj != 0000) Display();

else

HaMiTonian(m + 1);

goto L;

}

void NextValue(int k)

{

int j;

S: x[k] = (x[k] + 1) % 10;

if (x[k] == 0)

return;

if (g.arc[x[k - 1] - 1][x[k] - 1].adj != 10000)

{

for (j = 0; j

if (x[j] == x[k])

goto S;

return;

}

else

goto S;

}

void Display()

{

int i = 0;

for (i = 0; i<26; i++)

printf("%s->", g.vex[x[i] - 1].sight);

}

云南大学软件学院数据结构实验三实验报告——文件加密译码器

云南大学软件学院数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □ 学期: 任课教师: 实验题目: 实验三栈和队列及其应用 小组长: 联系电话: 电子邮件: 完成提交时间:年月日

云南大学软件学院2010学年秋季学期 《数据结构实验》成绩考核表 学号:姓名:本人承担角色:课题分析,算法设计,程序编写,后期调试,完成实验报告 综合得分:(满分100分) 指导教师:年月日 (注:此表在难度为C时使用,每个成员一份。)

云南大学软件学院2010学年秋季学期 《数据结构实验》成绩考核表 学号:姓名:本人承担角色:课题分析,算法设计,后期调试 综合得分:(满分100分) 指导教师:年月日(注:此表在难度为C时使用,每个成员一份。)

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识) 本次实验的目的在于使我们深入了解栈和队列的特性,以便在实际问题背景下灵活运用它们;同时还将巩固对这两种结构构造方法的理解。 核心算法:加密与解密算法。 加密算法:将文件各位取反,再加上密码值。构成密文。 解密算法:将密文减去密码值,在按位取反,获得明文。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系) 定义一个类MyClass: class MyClass { char *buffer; //定义存储文件的缓存 char name[MAX_PATH]; //来存储用户输入的文件名 char pass[16]; //来存储用户输入的密码 DWORD size, psdlen; //定义变量存储文件的长度,密码的长度DWORD GetSize(); //检查文件的长度 void EncAlg(DWORD bsize); //声明加密函数 void DecAlg(DWORD bsize); //声明解密函数 public: MyClass(char *, char *); //声明构造函数 ~MyClass(); //声明析构函数 FILE *fp; //指向文件流的指针

云南大学830大学物理考试大纲

云南大学830-《大学物理》考试大纲 一、考查目标 大学物理考试内容涵盖力学、热学、电磁学、光学四门课程。要求考生熟练地掌握普通物理的基础知识和基本理论,具备一定的分析问题和解决问题的能力。 二、考试形式与试卷结构 1、试卷满分及考试时间 试卷满分为150分,考试时间为180分钟。 2、试卷的内容结构 力学 30% 热学 20% 电磁学 30% 光学 20% 3、试卷的题型结构 计算题共10 - 12小题。 三、考察的知识及范围 (一)力学 1. 质点运动学: 矢径;参考系;运动方程;瞬时速度;瞬时加速度;切向加速度; 法向加速度;圆周运动;运动的相对性。 2.质点动力学:

惯性参照系;牛顿运动定律;功;功率;质点的动能;弹性势能; 重力势能;保守力;功能原理;机械能守恒与转化定律;动量、冲量、动量定理;动量守恒定律。 3.刚体的转动: 角速度矢量;质心;转动惯量;转动动能;转动定律;力矩;力矩的功;定轴转动中的转动动能定律;角动量和冲量矩;角动量定理;角动量守恒定律。 4.简谐振动和波: 运动学特征(位移、速度、加速度,简谐振动过程中的振幅、角频率、频率、位相、初位相、相位差、同相和反相);动力学分析;振动方程;旋转矢量表示法;谐振动的能量;谐振动的合成; 波的产生与传播;面简谐波波动方程;波的能量、能流密度;波的叠加与干涉;驻波;多普勒效应。 5.狭义相对论基础: 伽利略变换;经典力学的时空观;狭义相对论的相对性原理;光速不变原理;洛仑兹变换;同时性的相对性;狭义相对论的时空观;狭义相对论的动力学基础;相对论的质能守恒定律。 (二)热学 1.气体分子运动论: 理想气体状态方程,理想气体的压强公式,麦克斯韦速率分布律,玻耳兹曼分布律,能量按自由度均分定理,气体的输运过程。 2.热力学: 热力学第一定律,热力学第一定律的应用,循环过程、卡诺循环,

数据结构-迷宫实验报告

云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □ 实验难度 A □ B □ C □ 承担任务 (难度为C时填写) 指导教师评分(签名) 【实验题目】 实验4.数组的表示极其应用 【问题描述】 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 【基本要求】 首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d 表示走到下一坐标的方向。如;对于下列数据的迷宫,输出的一条通路为:(l,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),…。?

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识) 本实验的目的是设计一个程序,实现手动或者自动生成一个n×m矩阵的迷宫,寻找一条从入口点到出口点的通路。我们将其简化成具体实验内容如下:选择手动或者自动生成一个n×m的迷宫,将迷宫的左上角作入口,右下角作出口,设“0”为通路,“1”为墙,即无法穿越。假设从起点出发,目的为右下角终点,可向“上、下、左、右、左上、左下、右上、右下”8个方向行走。如果迷宫可以走通,则用“■”代表“1”,用“□”代表“0”,用“→”代表行走迷宫的路径。输出迷宫原型图、迷宫路线图以及迷宫行走路径。如果迷宫为死迷宫,输出信息。 可以二维数组存储迷宫数据,用户指定入口下标和出口下标。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。? 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系) 1. 设定迷宫的抽象数据类型定义: ADT Maze { 数据对象:D = { a i, j | a i, j ∈ { ‘■’、‘□’、‘※’、‘→’、‘←’、 ‘↑’、‘↓’ } , 0≤ i≤row+1, 0≤j≤col+1, row, col≤18 } 数据关系:R = { ROW, COL } ROW = { < a i-1, j , a i, j > | a i-1, j , a i, j ∈D, i=1, … , row+1, j=0, … , col+1} COL = { < a i, j-1, a i, j > | a i, j-1 , a i, j ∈D, i=0, … , row+1, j=1, … , col+1} 基本操作: Init_hand_Maze( Maze, row, col) 初始条件:二维数组Maze[][]已存在。

云南大学软件学院软件工程复习题

云南大学软件学院软件工程期中复习汇总 第0章 1. 以软件构件技术为基础,结合信息安全技术、网络服务技术、人机交互技术已经成为目前各类应用软件的支撑技术 2. 软件构件技术集中体现了软件的构造性有力地支持了软件的演化性是解决软件危机的重要途径 3.软件发展方向:(1)从单机环境发展到网络环境 (2)从以个体计算过程为反映对象向以群体合作过程为反映对象的发展 (3)从以产品为中心向以服务为中心的发展 (4)从以正面功能为核心向兼顾侧面约束的发展 (5)从被动反应向主动操作的发展 第1章 1.软件工程致力于专业的软件开发理论、方法和工具,同时着眼于(costeffective)低成本的软件开发方法; 2.软件是计算机程序和相关文档; 3.开发新软件包括开发新程序,配置通用软件和对已经存在的软件进行再利用; 4.软件工程是一个工程学科,包括软件产品的各个方面; 5.计算机科学和软件工程的不同? 答:计算机科学关注理论和基础;软件工程关注实际的开发别切生成有用的软件产品; 计算机科学理论并不能完全为软件工程提供支撑(它有别于物理学和电子工程的关系)6.系统工程和软件工程有什么区别? 系统工程关注的计算机基础系统发展的各个方面,涵盖软件,硬件以及(process engineering),软件工程是这些过程的一部分,他涉及到开发软件基础结构,软件的控制,软件的应用及系统中的数据库; 系统工程师涉及到系统规格说明(系统规约),系统架构的设计整合和开发; 7:什么是软件过程? 软件过程是一系列活动的集合,并且这些活动的目的是开发或演化软件 8.软件过程的通用活动包括哪几方面? (1)Specification:系统应该做什么,和开发约束(development constrains) (2)Development:软件系统的产品 (3)Validation:检查产品是否是客户想要的 (4)Evolution:根据需求的改变来修改软件; 9.什么是软件过程模型? 是从一个特定的角度得到的软件过程的简化的表示; 10.通用软件过程模型 瀑布模型 增量式开发 面向复用的软件工程 11.什么是软件工程方法? 软件开发的结构化方法包括系统模型,符号,规则,设计忠告和设计指导 12.What are the attributes of good software? ?The software should deliver the required functionality and performance to the user

云南大学软件学院数据结构实验4

实验难度: A □ B □ C □ 学期:2017秋季学期 任课教师: 实验题目: 组员及组长: 承担工作: 联系电话: 电子邮件: 完成提交时间:年月日

一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析) 首先输入迷宫数据,在计算机的屏幕上显示一个8行8列的矩阵表示迷宫。矩阵中的每个数据或为通路(以0表示),或为墙(以1表示),所求路径必须是简单路径,即在求得的路径上不能重复出现同一道块。假设以栈S记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作为“当前位置入栈”;从当前路径删除前一通道块的操作为“出栈”。若找到出口,则从栈中弹出数据,在屏幕上显示从入口到出口的路径坐标。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等) 1、定义坐标(X,Y): struct Coor { int row; int column; int direction; }; 2、定义方向: struct Move { int row; int column; }; 3、定义/链表结点: struct LinkNode { Coor data; LinkNode *next; }; 4、定义栈: class stack { private: LinkNode *top; public:

云南大学大学物理实验5

云南大学软件学院 实验报告 课程: 大学物理实验 学期: 2014-2015学年 第一学期 任课教师: 许红星 序号: 39 专业: 网络工程 学号: 姓名: 成绩: 实验5 静电场 一、实验目的 了解同心圆静电场的电势及电场的分布状况,更深的理解电势及电场的性质,更深层次的理解静电场。 二、实验原理 根据高斯定理推导出电场及电势的分布公式;利用数据分析软件,如Microsoft Excel 绘制电场及电势的分布图。 场强分布: 当r < R 1时, 001=?=???E dS E S 当R 1 < r < R 2时, ?=???01εq dS E S 210241 r q E επ= 当R 2 < r < R 3时, 003=?=???E dS E S 当r > R 3时, 021*******εεπεq q E q q dS E S +=?+=??? 电势分布: 根据电势的定义,可以求得电势的分布。

当r < R 1时, 3210210110143211414141332211R q q R q R q U dr E dr E dr E dr E dr E U R R R R R R r r ++ -=?+?+?+?=?=?????∞∞επεπεπ 当R 1 < r < R 2时, 321021010143214141413322R q q R q r q U dr E dr E dr E dr E U R R R R r r ++ -=?+?+?=?=????∞∞επεπεπ 当R 2 < r < R 3时, 3 2101431413 3 R q q U dr E dr E dr E U R R r r +=?+?=?=???∞∞επ 当r > R 3时, r q q U dr E dr E U r r 21014141+=?=?=??∞ ∞επ 三、实验任务 1. 选取相关参数,截图如下: 同心圆半径和电荷量:

云南大学软件学院计算机网络原理期中试卷 王世普

云南大学2015至2016学年上学期软件学院2014级 《计算机网络原理》期中考试试卷(闭卷)答案 满分:100分考试时间:100分钟任课教师:王世普 第一题答题卡: 第二题答题卡: 1.(1)is the protocol suite for the current Internet.. (1)A. NCP B. TCP/IP C.UNIX D.ACM 2.A GIF image is sent as email ,What is the content-type (2) . (2)A.multipart/mixed B.multipart/image C.image/JPEG D.image/gif 3.A user want to send some forms(表单)to Web server using HTTP protocol, the request line method is (3). (3)A.GET B.PA TCH C.MOVE D.POST 4.If a TCP segment carries data along with an acknowledgment, this technology is called (4)acknowledgment. (4)A. backpacking B. piggybacking C. piggying D. mother’s help 5.TCP is a (5)transport layer protocol that ensure data to be exchanged reliably by(6). So it requires set up connection before data exchanged by ( 7 )-way handshaking. (5)A.connection B.connectionless C.join D.disconnection (6)A.datagrams B.acknowledgements C.data D.segment (7)A.one B.two C.three D.four 6.A user requests a Web page that consists of a basic HTML file and 5 JPEG image files. d trans denoting the time to transfer a file. The total time is (8) to request the Web page in Nonpersistent connections mode?

云南大学应用物理专业教学计划(学校印刷)

物理学院 学院简介…… 应用物理专业本科人才培养方案 一、培养目标及要求 本专业培养掌握物理学的基本理论与方法,具有良好的数学基础和科学素养,受到应用基础研究、技术开发、计算机应用以及工程技术和实验技能的系统训练,适应高新技术发展的需要,具备较强的知识更新能力和较广泛的科技适应能力的宽口径应用型高级专门人才。 毕业生应获得以下几方面的知识和能力: 1) 掌握系统的数学、计算机等方面的基本原理、基本知识; 2) 掌握较坚实的物理学基础理论、较广泛的应用物理知识、基本实验方法和技能;具备运用物理学中某一专门方面的知识和技能进行技术开发、应用研究、教学和相应管理工作的能力; 3) 了解相近专业以及应用领域的一般原理和知识; 4) 了解我国科学技术、知识产权等方面的方针、政策和法规; 5) 了解应用物理的理论前沿、应用前景和最新发展动态以及相关高新技术产业的发展状况; 6) 掌握资料查询、文献检索及运用现代信息技术获取最新参考文献的基本方法;具有一定的实验设计,创造实验条件,归纳、整理、分析实验结果,撰写论文,参与学术交流的能力。 本专业毕业生能在物理学或相关的科学技术领域中从事科研、教学、技术开发和相关的管理工作,也可攻读相关学科理工类硕士研究生。 二、学分要求及分配 应用物理专业人才培养方案修读学分分布表 课程类别总学分 学分类型分配 备注讲授实验实训 公共必修课39 总学分161 综合素质教育选修课22 学科基础课29 专业核心(必修)课34 23 11 校印版有错20, 专业选修课48 10

综合实践12 2 10 三、修业年限:四年 四、授予学位:理学学士 五、课程设置及学时、学分分配表 (一)通识教育课程61学分 1.公共必修课程39学分 课程名称开 课 学 期 总 学 分 总 学 时 学分类型分 配 学时类型分配 周 学 时 副 修 课 程 双 学 位 课 程 备注讲 授 实 验 实 训 讲 授 实 验 实 训 大学生心理健康教育 1 1 18 1 18 1 计算机基础(一) 1 2 64 1 1 36 28 4 思想道德修养与法律基础 1 3 54 3 54 3 体育(1) 1 1 36 1 36 2 形势与政策(1) 1 18 18 1 英语读写(1) 1 2 72 2 72 4 英语听说(1) 1 1 36 1 36 2 计算机基础(二) 2 2 64 1 1 36 28 4 军训和军事理论 2 2 0 2 0 0 2周体育(2) 2 1 36 1 36 2 形势与政策(2) 2 18 18 1 英语读写(2) 2 2 72 2 72 4 英语听说(2) 2 1 36 1 36 2 马克思主义基本原理概论 2 3 54 3 54 3 中国近现代史纲要 3 2 36 2 36 2 毛泽东思想和中国特色社 会主义理论体系概论(上) 3 3 5 4 3 54 3 体育(3) 3 1 36 1 36 2 形势与政策(3) 3 18 18 1 英语读写(3) 3 2 36 2 36 2 英语听说(3) 3 1 36 1 36 2 毛泽东思想和中国特色社 会主义理论体系概论(下) 4 3 54 3 54 3 体育(4)4136 136 2形势与政策(4)418 18 1 英语读写(4) 4 2 36 2 36 2 英语听说(4) 4 1 36 1 36 2

数据结构实验报告[3]

云南大学 数据结构实验报告 第三次实验 学号: 姓名: 一、实验目的 1、复习结构体、指针; 2、掌握链表的创建、遍历等操作; 3、了解函数指针。 二、实验内容 1、(必做题)每个学生的成绩信息包括:学号、语文、数学、英语、总分、加权平均分;采用链表存储若干学生的成绩信息;输入学生的学号、语文、数学、英语成绩;计算学生的总分和加权平均分(语文占30%,数学占50%,英语占20%);输出学生的成绩信息。 三、算法描述 (采用自然语言描述) 首先创建链表存储n个学生的成绩信息,再通过键盘输入学生的信息,创建指针p所指结点存储学生的成绩信息,从键盘读入学生人数,求出学生的总分和加权平均分,输出结果。 四、详细设计 (画出程序流程图)

五、程序代码 (给出必要注释) #include #include typedef struct score {int number; int chinese; int math; int english; int total; float average; struct score *next; } student; //创建链表存储n个学生的信息,通过键盘输入信息student*input_score(int n) {int i; student*stu,*p; for(i=0,stu=NULL;inumber);

云南大学 软件学院 计网实验2

云南大学软件学院 实验报告 课程:计算机网络原理实验任课教师: 姓名:学号:专业:成绩: 实验二、应用层协议分析实验报告 1.实验目的: 分析HTTP协议报文的首部格式,理解HTTP协议的工作过程;分析DNS的工作过程。 2.实验环境: (1)连入Internet的主机一台 (2)主机安装Ethereal软件 3.实验步骤: a.下载一个非常简单的HTML文件(该文件不嵌入任何对象),利用Ethereal软件分析HTTP 协议。 (1)启动Web browser。清空浏览器的缓存。 (2)启动Ethereal,开始Ethereal分组俘获。 (3)在打开的Web browser窗口中可输入下列地址之一 浏览器中将显示一个只有一行或多行文字的非常简单的HTML文件。 (4)停止分组俘获。在显示过滤筛选说明处输入“http”,分组列表子窗口中将只显示所俘获到的HTTP报文。将捕获结果保存为test1。 (5)根据结果回答下列问题回答实验a的问题。 实验b.下载一个含多个嵌入对象的网页,利用Ethereal软件分析HTTP协议。 (1)启动浏览器,将浏览器的缓存清空。 (2)启动Ethereal分组俘获器。开始Ethereal分组俘获。 (3)在浏览器的地址栏中输入某个地址,(需要满足该地址下的网页是包含多个内嵌对象即可)。 (4)停止Ethereal分组俘获,在显示过滤筛选说明处输入“http”,分组列表子窗口中将只显示所俘获到的HTTP报文。将捕获结果保存为test2 (5)重新启动Web browser。启动Ethereal分组俘获器,进行分组捕获。在Web browser 当中重新输入相同的URL或单击浏览器中的“刷新”按钮。 (6)步骤同(5)。将捕获结果保存为test3 (7)根据结果回答下列问题回答实验b的问题。 实验c. DNS 实验 (1)在ms-dos 下,键入ipconfig/flushdns,清理并重设定DNS客户解析器缓存的内容。

贵州大学849材料科学基础2020年考研专业课初试大纲

贵州大学硕士研究生入学考试大纲 考试科目代码/名称:849材料科学基础 一、考试基本要求 本科目考试着重考核考生掌握“材料科学基础”基本概念、基本思想、基本分析方法和基本理论的程度,要求考生对“材料科学”理论体系的基本框架有一个比较全面的了解,理解金属材料、高分子材料制造-加工-结构-性能-应用相关关系,旨在评估考生运用材料科学的基本原理和方法解决实际材料工程问题的能力。 二、适用范围 适用于“材料科学与工程专业”和“高分子材料与工程专业”。 三、考试形式 闭卷,180分钟。 《材料科学基础》试题形式为1+2模块:“1”为所有考生的必答题模块,主要考点为材料科学与工程基础;“2”为专业特色模块,其专业特色模块名称为:材料科学与工程、高分子材料与工程,考生可根据自身的优势选择其中的 1个模块答题。 四、考试内容和考试要求 (一)必答题模块考试内容及要求: (1)材料科学基础概述:掌握材料、材料科学、材料工程的含义,材料的分类,材料结构的层次,材料性能的环境效应,工程材料的选择、各种材料(金属、无机非金属及高分子)的结构与性能的区别等。 (2)晶体结构:掌握晶体价键类型及空间点阵,及常见材料的晶体特征。 (3)材料的变形与断裂:掌握材料的拉伸变形、典型的应力应变曲线、脆性材料与塑性材料、韧性断裂及脆性断裂的微观特征、脆韧转变内因外因等。 (二)选做题模块考试内容及要求: 1、材料科学与工程模块考试内容及要求: (1)金属的晶体结构 掌握:原子间的键合,空间点阵,晶向指数和晶面指数。晶体的对称性。极射投影。三种典型的金属晶体结构,金属的多晶型性,合金相结构。 (2)晶体缺陷 掌握:点缺陷的形成、分类,点缺陷的平衡浓度,点缺陷的运动。刃型位错和螺型位错的特征,柏氏矢量的确定、特性以及表示方法。作用在位错上的力和位错的运动,分析位错运动的两种基本形式:滑移和攀移的特点。位错的应力场及位错与晶体缺陷间的交互作用,分析运动位错的交割及其所形成的扭

(精选)云南大学软件学院数据结构实验3

实验难度: A □ B □ C □序号学号姓名成绩 指导教师(签名) 学期:2017秋季学期 任课教师: 实验题目: 组员及组长: 承担工作: 联系电话: 电子邮件: 完成提交时间:年月日

一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析) 魔王语言的解释规则: 大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。 在 A 的基础上,(根据产生式)自定义规则,将一段魔王的话翻译为有意义的人类语言(中文):输入wasjg,则魔王语言解释为“我爱数据结构”。 运用了离散数学的一些基本知识及程序设计知识。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等) //---------------抽象数据类型的定义------------------// #define STACK_INIT_SIZE 50 #define STACKINCREMENT 10 #define OVERLOW -2 #define ERROR -1 typedef struct { char *base; //顺序栈的栈底指针 int top; //顺序栈的栈顶 int size; //栈元素空间的大小 }SqStack; //结构体类型顺序栈 typedef struct { char *base; int front; int rear; }SqQueue; //结构体类型队列 //---------------各个模块功能的描述------------------// void Init_SqStack(SqStack &s) //初始化顺序桟 void Push_SqStack(SqStack &s, char c) //压入数据 int Pop_SqStack(SqStack &s, char &e) //出桟 char GetTop_SqStack(SqStack s)//或得栈顶

数据结构实验二链表

云南大学数学与统计学实验教学中心 实 验 报 告 一、实验目的: 通过实验掌握线性链表的建立及基本操作,巩固课堂内容,练习其程序的设计与实现。 由于顺序存储结构的操作相对比较简单,而且在前期课程《高级语言程序设计》中使用得也多, 所以本次实验侧重于对线性链表存储结构上的操作及应用的实现。 二、实验内容: 本实验包含以下几个子问题: 1、 采用表尾挂入法建立一个以LA 为头指针的单链表: 2、 3、 就地逆转以LB 为头指针的单链表,即得到如下形式的单链表: 4、 将逆转后的LB 表接到LA 表之尾并构成循环链: LA 二、实验要求: 1. 每一个子问题用一个C 语言的函数来完成。 2. 对每一个子问题的结果用一个打印函数输出其结果以验证程序运行是否正确。 打印函数必须是公共的,即:用一个输出函数,既可以对单链表又可对循环链表实现,

打印输出。 3.用主函数调用各个子函数,以完成题目要求。 4.程序设计时应尽量考虑通用性,若改变题给数据仍能实现要求。 [实现提示]: .第3小题题中的“就地逆转”即只允许引入除LB外的两个工作指针来实现。 即可以以循环方式从链表首部起逐个地修改各个结点的指针:从NEXT(向后)指针改变为PRIOR(向前)的指针,并注意保存搜索时的指针。 三、实验环境 Windows win7 程序设计语言C 四、实验过程(请学生认真填写): 1. 实验设计的(各)流程图:

2. 程序设计的代码及解释(必须给出): /*----------------------------------LinkList-------------------------------------*/ /*基本要求---------------------------------------------------------------------*/ /*采用表尾挂入法建立一个以LA为头指针的单链表--------------*/ /*采用表首插入法建立一个以LB为头指针的单链表.---------------*/ /*就地逆转以LB为头指针的单链表,即得到如下形式的单链表.*/ /*将逆转后的LB表接到LA表之尾并构成循环链-------------------*/ /*每一个子问题用一个C语言的函数来完成--------------------------*/ /* 打印函数必须是公共的-------------------------------------------------*/ /*-------------------------------------Start-------------------------------------*/ /*--------------------------------------------------------------------------------*/ #include #include #include #define LIST_SIZE 10 /*--------------------------------------------------------------------------------*/ /*定义链表类型--------------------------------------------------------------*/ typedef struct LNode{ int data; struct LNode *next; }LinkList; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ main(){ LinkList *InitialList1(); LinkList *InitialList2(); LinkList *reverse(LinkList *L); void connect(LinkList *L1,LinkList *L2); void putList(LinkList *L); LinkList *L1,*L2; L1=InitialList1(); L2=InitialList2(); printf("The original of list L1:\n"); putList(L1); printf("The original of list L2:\n");

实验二--弗兰克-赫兹实验

实验二--弗兰克-赫兹实验

云南大学物理实验教学中心 实验报告 课程名称:普通物理实验 实验项目:实验二弗兰克-赫兹实验 学生姓名:马晓娇学号:20131050137 物理科学技术学院物理系 2013 级天文菁英班专业 指导老师:张远宪 试验时间:2015 年11月 20 日 13 时 00 分至 15 时 00 分 实验地点:物理科学技术学院

实验类型:教学 (演示□验证□综合□设计□) 学生科研□课外开放□测试□其它□

一、实验目的 1. 了解弗兰克—赫兹实验的原理和方法,测定汞的第一激发电位,验证原子能 级的存在; 2. 练习使用微机控制的实验数据采集处理系统; 二、实验原理 玻尔的原子模型指出:原子是由原子核和核外电子组成的。原子核位于原子的中心,电子沿着以核为中心的各种不同直径的轨道运动。对于不同的原子,在轨道上运动的电子分布各不相同。 在一定轨道上运动的电子,具有对应的能量。当一个原子内的电子从低能量的轨道跃迁到较高能量的轨道时,该原子就处于一种受激状态。如图l所示,若轨道上为正常状态,则电子从轨道Ⅰ跃迁到轨道Ⅱ时,该原子处于第一激发态;电子跃迁到轨道Ⅲ,原子处于第二激发态。图中,E1、E2、E3分别是与轨道l、Ⅱ、Ⅲ相对应的能量。 当原子状态改变时,伴随着能量的变化。若原子从低能级En态跃迁到高能级Em态,则原子需吸收一定的能量△E: V(1) E Em En =- 原子状态的改变通常有两种方法:一是原子吸收或放出电磁辐射;二是原子与其他粒子发生碰撞而交换能量。本实验利用慢电子与氩原子相碰撞,使氩原子从正常状态跃迁到第一激发态,从而证实原子能级的存在。 由玻尔理论可知,处于正常状态的原子发生状态改变时,所需能量不能小于该原子从正常状态跃迁到第一激发态所需的能量,这个能量称临界能量。当电子与原子相碰撞时,如果电子能量小于临界能量,则电子与原子之间发生弹性碰撞,电子的能量几乎不损失。如果电子的能量大于临界能量,则电子与原子发生非弹性碰撞,电子把能量传递给原子,所传递的能量值恰好等于原子两个状态间的能量差,而其余的能量仍由电子保留。 电子获得能量的方法是将电子置于加速电场中加速。设加速电压为U,则经过加速后的电子具有能量eU,e是电子电量。当电压等于Ug时,电子具有的能量恰好能使原子从正常状态跃迁到第一激发态.因此称Ug为第一激发电势。 弗兰克一赫兹实验的实验原理图如图1所示。电子与原子的碰撞是在充满氩气的F—H管(弗兰克一赫兹管)内进行的。F-H管包括灯丝附近的阴极K,两个栅极G1、G2.板极A。第一栅极G1靠近阴极K,目的在于控制管内电子流的大小,以抵消阴极附近电子云形成的负电势的影响。当F—H管中的灯丝通电时,加热阴极K,由阴极K发射初速度很小的电子。在阴极K与栅极G2之问加上一个可调的加速电势差VG2,它能使从阴极K发射出的电子朝栅极G2加速。由于阴极K到栅极G2之间的距离比较大,在适当的气压下,这些电子有足够的空间与氩原子发生碰撞。在栅极G与板极A之问加一个拒斥电压VG2,当电子从栅极

《数据结构》实验指导书

《数据结构》实验指导书 石家庄铁道学院计算机系 2006.8

目录 实验指导书概述 (2) 实验大纲实习题 (3) 实习报告规范 (7) 实习步骤 (8) 附录1:实验报告示例 (10) 附录2:实验教学大纲 (13) 实验指导书概述 “数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大难度:  (1) 内容多,时间短,给学习带来困难;  (2) 贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;  (3) 隐含在各部分的技术和方法丰富,也是学习的重点和难点;  (4) 先修课程中所介绍的专业性知识不多,加大了学习难度。 由于数据结构课程的技术性与实践性,《数据结构》课程实验的设置十分必要。为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能力。通过实验实践内容

的训练,突出构造性思维训练的特征, 提高学生组织数据及编写大型程序的能力。 上机实习是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。较大的实习题比平时的习题要复杂得多,也更接近实际。实习着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力。实习还能使书上的知识变“活”,达到深化理解和灵活掌握教学内容的目的。平时的练习较偏重于如何编写功能单一的“小”算法,而实习题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。此外,还有很重要的一点是:机器是比任何教师都严格的检查者。 每个实习题采取了统一的格式,由问题描述、基本要求、测试数据、实现提示和选做内容等5个部分组成。 问题描述旨在为读者建立问题提出的背景环境,指明问题“是什么”; 基本要求则对问题进一步求精,划出问题的边界,指出具体的参量或前提条件,并规定该题的最低限度要求; 测试数据部分旨在为检查学生上机作业提供方便,在完成实习题时应自己设计完整和严格的测试方案,当数据输入量较大时,提倡以文件形式向程序提供输入数据; 实现提示对实现中的难点及其解法思路等问题作了简要提示,个别问题给出了参考实现; 选做内容向那些尚有余力的读者提出了更严峻的挑战,同时也能开拓其他读者的思路,在完成基本要求时就力求避免就事论事的不良思想方法,尽可能寻求具有普遍意义的解法,使得程序结构合理,容易修改扩充。 在实现的时候应注意,要尽量减少依赖于具体机器计算环境的用法,若使用,也应在注释中指出。这样得出的程序易于在不同机器上运行,有好的可移植性。C语言是结构化程序设计语言,具有递归能力,可移植性也较好,是特别推荐的实现语言。 本书的一个特点是为实习制定了严格的规范。一种普遍存在的错误观念是,调试程序全凭运气。学生花2个小时的机上时间只找出一个错误,甚至一无所获的情况是常见的。其原因在于,很多人只认识到找错误,而没有认识到努力预先避免错误的重要性,也不知道应该如何努力。实际上,结构不好、思路和概念不清的程序可能是根本无法调试正确的。严格按照实习步骤规范进行实习,不但能有效地避免上述种种问题,更重要的是有利于培养软件工作者不可缺少的科学工作方法和作风。 在附录中提供了一个完整的实习报告示例,在起到实习报告规格范例作用的同时,还隐含地提供了很多有益的东西,比如基于数据类型的系统划分方法以及所提倡的程序设计风格等等。计算机学科在不断发展,可以使用的语言工具越来越丰富,在本书中的实习示例是应用面向过程的语言进行设计和编程,同样的实习题,也可以用面向对象的语言来实现。 实验大纲实习题 实习一线性表应用 本次实习的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的各种操作为侧重点。通过本次实习还可帮助读者复习高级语言的使用方法。 约瑟夫环 [问题描述]

云南大学软件学院数据结构实验

实验难度: A □ B □ C □序号学号成绩 指导教师(签名) 学期:2017秋季学期 任课教师: 实验题目: 组员及组长: 承担工作: 联系: 电子: 完成提交时间:年月日

一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析) 魔王语言的解释规则: 大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。 在A 的基础上,(根据产生式)自定义规则,将一段魔王的话翻译为有意义的人类语言(中文):输入wasjg,则魔王语言解释为“我爱数据结构”。 运用了离散数学的一些基本知识及程序设计知识。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等) //---------------抽象数据类型的定义------------------// #define STACK_INIT_SIZE 50 #define STACKINCREMENT 10 #define OVERLOW -2 #define ERROR -1 typedef struct { char *base; //顺序栈的栈底指针 int top; //顺序栈的栈顶 int size; //栈元素空间的大小 }SqStack; //结构体类型顺序栈 typedef struct { char *base; int front; int rear; }SqQueue; //结构体类型队列 //---------------各个模块功能的描述------------------// void Init_SqStack(SqStack &s) //初始化顺序桟 void Push_SqStack(SqStack &s, char c) //压入数据 int Pop_SqStack(SqStack &s, char &e) //出桟 char GetTop_SqStack(SqStack s)//或得栈顶

相关文档
相关文档 最新文档