《程序设计艺术和方法》课程实验报告Word格式文档下载.docx
- 文档编号:15383666
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:24
- 大小:383.21KB
《程序设计艺术和方法》课程实验报告Word格式文档下载.docx
《《程序设计艺术和方法》课程实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《程序设计艺术和方法》课程实验报告Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
STL巨大而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。
三、实验项目摘要
1.练习vector和list的使用。
定义一个空的vector,元素类型为int,生成10个随机数插入到vector中,用迭代
器遍历vector并输出其中的元素值。
在vector头部插入一个随机数,用迭代器遍历vector
并输出其中的元素值。
用泛型算法find查找某个随机数,如果找到便输出,否则将此数
插入vector尾部。
用泛型算法sort将vector排序,用迭代器遍历vector并输出其中的元
素值。
删除vector尾部的元素,用迭代器遍历vector并输出其中的元素值。
将vector清
空。
定义一个list,并重复上述实验,并注意观察结果
2练习泛型算法的使用。
定义一个vector,元素类型为int,插入10个随机数,使用sort按升序排序,输出
每个元素的值,再按降叙排序,输出每个元素的值。
练习用find查找元素。
用min和
max找出容器中的最小元素个最大元素,并输出。
四、实验结果与分析(源程序及相关说明)
1.练习vector和list的使用:
#include<
iostream>
vector>
#include<
iomanip>
ctime>
algorithm>
usingnamespacestd;
vector<
int>
myV;
boolsortup(intv1,intv2)
{
returnv1<
v2;
}
intmain(intargc,char*argv[])
{
srand(time(NULL));
//随机产生十个数
for(inti=0;
i<
10;
i++)
myV.push_back(rand());
sort(myV.begin(),myV.end(),sortup);
//用sort排序升序
vector<
:
iteratorit1;
for(it1=myV.begin();
it1!
=myV.end();
it1++)
{
cout<
<
(*it1)<
setw(6);
//打印数组
}
endl;
intmin=myV[0];
for(it1=myV.begin()+1;
if((*it1)<
min)min=(*it1);
"
最小元素为"
<
min<
intmax=myV[0];
if((*it1)>
max)max=(*it1);
最大元素为"
max<
intvalue=rand();
it1=find(myV.begin(),myV.end(),value);
if((*it1)==value)
找到了这个随机数"
endl;
else
没有找到这个随机数"
myV.insert(myV.end(),value);
//数组中没有随机数,插入尾部
插入尾部的随机数为"
value<
\n"
//随机在vector头部插入一个随机数
intt=rand();
//定义t;
将一个随机数赋给t,插入到数组·
头部
myV.insert(myV.begin(),t);
插入头部的随机数为"
t<
//删除尾部元素
myV.pop_back();
myV.clear();
//清空数组
if(myV.empty())
cout<
"
It'
sempty!
endl;
system("
PAUSE"
);
//pressanykeytocontinue...
return0;
}
运行截图:
2练习泛型算法的使用:
list>
//#inclued<
typedeflist<
lin;
intvalue[]={2,4,6,1,8};
voidprint(lin&
l)
inti;
lin:
iteratorlit;
//定义一个迭代器
for(lit=l.begin();
lit!
=l.end();
lit++)
cout<
(*lit)<
;
//打印list中的元素
boolsortsp(intv1,intv2)//升序排序算法
returnv1>
intmain(){
linlin2;
lin2.push_front(3);
lin2.push_front(4);
lin2.insert(lin2.begin(),value,value+5);
lin2内的元素为:
print(lin2);
lin2.sort();
排序后的lin2:
lin2.push_front(10);
//在list头部插入10
在list头部插入10之后的结果:
lin2.remove(6);
删除一个数后的lin1:
system("
//pressanykeytocontineu...
return0;
二
搜索算法的实验
1.掌握宽度优先搜索算法。
2.掌握深度优先搜索算法。
1宽度优先搜索算法:
又称广度优搜索。
是最简单的图的算法的原形。
其属于一种盲搜寻法,目的是系统地展开并检查图中的所有节点,以寻找结果。
换句话说,它并不考虑结果的可能位址,彻底地搜索整张图,直到找到结果为止。
2深度优先搜索算法:
它的目的是要达到被搜索结构的叶结点。
在一个HTML文件中,当一个超链被选择后,被连接的HTML文件将执行深度优先搜索,即在搜索其余的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。
当不再有其他超链可选择时,说明搜索已经结束。
1.将书上的走迷宫代码上机运行并检验结果,并注意体会搜索的思想。
2.八皇后问题:
在一个国际象棋棋盘上放八个皇后,使得任何两个皇后之间不相互攻击,求出所有
的布棋方法。
上机运行并检验结果。
思考:
将此题推广到N皇后的情况,检验在N比较大的情况下,比方说N=16的时
候,你的程序能否快速的求出结果,如果不能,思考有什么方法能够优化算法。
3骑士游历问题:
在国际棋盘上使一个骑士遍历所有的格子一遍且仅一遍,对于任意给定的顶点,
输出一条符合上述要求的路径。
4倒水问题:
给定2个没有刻度容器,对于任意给定的容积,求出如何只用两个瓶装出L升
的水,如果可以,输出步骤,如果不可以,请输出NoSolution。
2,八皇后问题:
stdio.h>
/*声明常量N存储行和列*/
#defineN8
#defineNUM8
/*声明全局变量,h[N][N]控制盘格,H[N][N]控制输出,n[N]存储每一步的
*纵坐标,count用于计数。
*/
inth[N][N],n[N],H[N][N];
intcount=0;
/*声明函数voidtryit(int,int)尝试符合条件的方法*/
voidtryit(int,int);
/*声明函数voidoutputArray(int[][N])输出数组*/
voidoutputArray(int[][N]);
main()
intx=0,y=0,i,j;
/*初始化为零*/
for(i=0;
=N-1;
for(j=0;
j<
j++)
h[i][j]=0;
tryit(x,y);
printf("
//其他的布局略\n"
共有%d种布局.\n"
92);
return(0);
/*定义函数voidtryit(int,int)尝试符合条件的方法*/
voidtryit(intx,inty)
inti,j;
if(count<
=NUM)
/*重复时跳出递归*/
if((H[0][0]==1&
&
H[1][4]==1&
H[2][7]==1&
H[3][5]==1&
H[4][2]==1&
H[5][6]==1&
H[6][1]==1&
H[7][3]==1)&
count!
=1)
{}
else
if(x>
=0&
x<
=N-1&
y>
y<
h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计艺术和方法 程序设计 艺术 方法 课程 实验 报告