数据结构(c++版)实验参考书(共4篇)
1.信息系C++实验报告(实验8) 篇一
姓
名
学
号
实验学时 2 实验时间 2017 年 12 月 1 日
实验地点
指导教师
课程名称 C++程序设计 专
业班
级
成绩
实验项目 类和对象(构造函数、析构函数、组合类、友元)
实 验 目 的 1、理解类的概念;2、掌握声明类的方法; 3、掌握对象的定义和初始化 4、掌握通过类编写程序 5、构造函数、析构函数 6、对象数组、对象引用、对象指针 7、组合类 8、静态成员 9、友元 实 验 内 容 和 要 求 1、阅读“程序 1.txt”,然后回答以下问题:
1)行 A 定义了一个类 Test 的对象,它将调用哪个构造函数?
2)行 A 能否写成 Test t1();?
为什么不可以或者可以?
3)行 B 定义了另一个对象,它将调用哪个构造函数?
4)解释第二个构造函数的函数体中用到 this 指针的原因:?
5)解释行 C 数组 p 的含义?
2、阅读“程序 2.txt”,然后回答以下问题:
1)行 A 中动态申请的数组为何还要将数组大小加 1?
2)String 类中是否还存在默认的构造函数“String();“?
3)行 B 开始的构造函数称之为
构造函数。解释其功能
4)执行行 C 时会调用哪个构造函数?
5)上机验证该程序。
3、阅读“程序 3.txt”,然后回答以下问题:
1)执行行 A 后,a1.c=
a2.c=
A::c=
2)执行行 B 后,a1.c=
a2.c=
A::c=
3)行 B 可否改为”A::c=400;”
为什么
4)c 为类 A 的私有成员,但行 D 中为何通过 t 能直接访问成员 c?
5)执行行 E 后,a1.c=
a2.c=
A::c=
第 1 题、第 2 题和第 3 题不用抄题目,只需写答案在报告纸上。
4、定义一个点类 Point,包括数据成员点的 x 坐标和 y 坐标(int)、构造函数以及设置点 x,y 坐标的成员函数。定义一个 CRect 类,代表一个矩形,要求
CRect 类中有代表矩形的左上角坐标(x1,y1)和右下角坐标(x2,y2)点类的对象(组合类),要求 CRect 类中有三个成员函数 RectHeight()、RectWidth()以及area(),通过这三个函数能得到矩形的高和宽和面积。
要求 CRect 类中有构造函数,要求 CRect 类中有成员函数 SetR(),通过这函数能设置矩形的左上角坐标和右下角坐标。
5、建立一个类 primenum,求指定数据范围内的所有质数。具体要求如下:
1)私有数据成员 int data[25]
依次存放指定范围内求出的所有质数 int low,high
存放指定的数据范围的下限和上限 int num
存放 low 与 high 之间的质数的个数
2)公有成员函数 primenum(int low,int high)
构造函数,初始化 low 和 high,同时在函数体内初始化 num 为 0 int isprime(int x)
判断 x 是否为质数。若是质数,返回 1;否则,返回 0.void process()
求指定范围内的所有质数,把它们依次存放在数组 data,并将求出的质数个数存放在 num 中 void print()
输出求出的质数个数以及所有质数,要求每行输出 5 个质数。
3)在主函数中对该类进行测试。例如:定义一个 primenum 类的对象 test,指定查找范围为 100~200,求出 100~200 之间的所有质数。
实 验 过 程(算法、源代码以及注释)
实 验 结 果(记录程序执行的结果,分析结果)
2.数据结构(c++版)实验参考书 篇二
设计文档
惠州学院
HUIZHOU UNIVERSITY
课程名称: 程序设计综合实验
姓名:实验名称: 俄罗斯方块 学号:任课教师:
专业:班级: 计算机科学与技术1班
实验时间:
计算机科学与技术
综合实验项目:俄罗斯方块游戏
1、问题需求
(1)游戏等级:游戏分为1-10十个等级,等级越高,方块下落速度越快;(2)由方向键控制游戏:上键控制方块变形、下键控制方块下移并判断是否有消行、左键控制方块左移、右键控制方块右移;
(3)游戏积分:一次性消的行数越多加的分数越多,当消行每超过30行自动提高一个游戏等级。
2、总体设计:
(1)用数组存放方块(2)输出地图
(3)在地图里面输出方块(4)开始游戏(5)方块的旋转(6)方块是否能下落(7)判断方块是否能下落(8)提示下一个即将下落的方块(9)控制方块的下落速度
(10)分成10等级,等级越高方块下落得更快(11)消行处理(12)游戏结束
3、详细设计设计说明:本程序运行代码如下:
#include
#define SQUARE_COLOR FOREGROUND_RED| FOREGROUND_GREEN|FOREGROUND_INTENSITY //方块的颜色 #define up
#define down
#define left
#define right
#define esc #define MAPW
//地图的宽度
#define MAPH
//地图的高度
BOOL isavailable(int a[],int x,int y,int w,int h);//判定是否能放下 void turn(int a[][4],int w,int h,int *x,int y);
//转动 int * create();
//创建方块 void init();
//初始化工作
void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors);void clearcache();
//清除键盘缓冲区 void end();void clearsquare(int *a,int w,int h,int x,int y);void gameover();void deletemap(int m[][MAPW],int row,int w,int h);//消除一行
int dx=30,dy=5;
//屏幕上的偏移量 int score=0,level=0;
int map[MAPH][MAPW];int a1[4][4]={{1},{1,1,1}};int a2[4][4]={{0,1},{1,1,1}};int a3[4][4]={{1,1},{0,1,1}};int a4[4][4]={{0,0,1},{1,1,1}};int a5[4][4]={{0,1,1},{1,1}};int a6[4][4]={{1,1,1,1}};int a7[4][4]={{1,1},{1,1}};int a[4][4];
int main(){
init();int *b=NULL;b=create();
//预创建方块 int q=0;int sign,blank,x,y;while(1){
for(int i=0;i<4;i++)
//复制方块
for(int j=0;j<4;j++)
if(a[i][j]=*(b+i*4+j))blank=i;
y=1-blank;x=4;clearsquare(&a[0][0],4,4,13,13);b=create();HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| drawblocks(b,4,4,13,13,wColors,1);wColors[0]=SQUARE_COLOR;drawblocks(&a[0][0],4,4,x,y,wColors,1);clearcache();char string[5];wColors[0]=FOREGROUND_RED| textout(handle,26+dx,5+dy,wColors,1,itoa(score,string,10));textout(handle,26+dx,9+dy,wColors,1,itoa(level,string,10));sign=1;while(sign){
int delay=0,max_delay=100-10*level;//延迟量 while(delay if(_kbhit())//用if避免按住键使方块卡住 { switch(key){ case up: clearsquare(&a[0][0],4,4,x,y);turn(a,4,4,&x,y);draw=1;break; int draw=0;int key=_getch();FOREGROUND_GREEN|FOREGROUND_INTENSITY };FOREGROUND_GREEN|FOREGROUND_INTENSITY; case down: } } } delay=max_delay;break; if(isavailable(&a[0][0],x-1,y,4,4)){ } clearsquare(&a[0][0],4,4,x,y);x--;draw=1; case left: break; if(isavailable(&a[0][0],x+1,y,4,4)){ } break;end();break; clearsquare(&a[0][0],4,4,x,y);x++;draw=1; case right: case esc: if(draw){ } HANDLE handle;handle=initiate(); WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1);draw=0; _sleep(8);delay++;if(isavailable(&a[0][0],x,y+1,4,4))//判断是否能下移 { clearsquare(&a[0][0],4,4,x,y);y++; HANDLE handle; } } } } else { } handle=initiate(); WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1); sign=0; //标记,使跳出 while(sign)循环,产生新方块 if(y<=1)gameover(); //是否结束 for(int i=0;i<4;i++) //放下方块 for(int j=0;j<4;j++) if(a[i][j]&&((i+y) map[i+y][j+x]=a[i][j]; int full,k=0; for(i=y;i } full=1; for(int j=1;j<11;j++){ } deletemap(map,i,MAPW,MAPH);k++; q++; score=score+k;level=min(q/30,9);if(!map[i][j])full=0; if(full) //消掉一行 return EXIT_SUCCESS;BOOL isavailable(int a[],int x,int y,int w,int h){ for(int i=max(y,1);i } return 0;return 1;int * create(){ } void init(){ for(int i=0;i<20;i++){ } for(i=0;i<12;i++){ } map[0][i]=-1;map[19][i]=-1;map[i][0]=-2;map[i][11]=-2; //初始化工作 int * a=NULL;int c=rand()%7;switch(c){ case 0: } return a;a=&a1[0][0];break;a=&a2[0][0];break;a=&a3[0][0];break;a=&a4[0][0];break;a=&a5[0][0];break;a=&a6[0][0];break;a=&a7[0][0];break;case 1: case 2: case 3: case 4: case 5: case 6: } map[0][0]=-3;map[0][11]=-3;map[19][0]=-3;map[19][11]=-3;HANDLE handle;handle=initiate();WORD wColors[1]={ FOREGROUND_GREEN|FOREGROUND_INTENSITY};textout(handle,26+dx,3+dy,wColors,1,“分数”);textout(handle,26+dx,7+dy,wColors,1,“等级”);textout(handle,26+dx,11+dy,wColors,1,“下一个方块提示”);wColors[1]=FOREGROUND_RED|FOREGROUND_INTENSITY;drawblocks(&map[0][0],12,20,0,0,wColors,1);textout(handle,dx,dy,wColors,1,“◇══════════◇”);wColors[0]= FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,dx-16,dy,wColors,1,“按任意键开始”);wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;textout(handle,dx-15,dy+3,wColors,1,“制作者”);wColors[0]=FOREGROUND_BLUE| FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,dx-15,dy+5,wColors,1,“赵强”);int x=_getch();srand(x);textout(handle,dx-16,dy,wColors,1,“ ”);void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors){ HANDLE handle;handle = initiate();int temp; for(int i=0;i for(int j=0;j if((temp=a[i*w+j])&&y+i>0){ if(temp==-3) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“◆”); } } else if(temp==-2) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“║”);textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“═”);textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“■”); else if(temp==-1)else if(temp==1)void clearcache(){ } void end(){ } void turn(int a[][4],int w,int h,int *x,int y){ int b[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};int sign=0,line=0;for(int i=h-1;i>=0;i--){ } for(int j=0;j { } line++;sign=0;if(a[i][j]){ } b[j][line]=a[i][j];sign=1;exit(EXIT_SUCCESS);while(_kbhit()){ } _getch();if(sign) for(i=0;i<4;i++) if(isavailable(&b[0][0],*x-i,y,w,h)) { *x-=i; for(int k=0;k for(int j=0;j a[k][j]=b[k][j]; break;} } void clearsquare(int *a,int w,int h,int x,int y){ HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};for(int i=0;i for(int j=0;j if(a[i*w+j]&&i+y>0) textout(handle,2*(x+j)+dx,y+i+dy,wColors,1,“ } void gameover(){ HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| FOREGROUND_GREEN};textout(handle,7+dx,10+dy,wColors,1,”游戏结束“);clearcache();_getch();exit(EXIT_SUCCESS);} void deletemap(int m[][MAPW],int row,int w,int h){ HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};textout(handle,2+dx,row+dy,wColors,1,”﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌“); ”); } _sleep(100);for(int i=row;i>1;i--){ } for(i=1;i } BOOL textout(HANDLE hOutput,int x,int y,WORD wColors[],int nColors,LPTSTR lpszString){ DWORD cWritten; BOOL fSuccess; COORD coord; coord.X = x; // start at first cell coord.Y = y; // of first row fSuccess = WriteConsoleOutputCharacter(hOutput,// screen buffer handle lpszString,// pointer to source string lstrlen(lpszString), // length of string coord,// first cell to write to &cWritten); // actual number written if(!fSuccess) cout<<“error:WriteConsoleOutputCharacter”< for(;fSuccess && coord.X < lstrlen(lpszString)+x;coord.X += nColors)HANDLE hOutput; hOutput = GetStdHandle(STD_OUTPUT_HANDLE);return hOutput; { fSuccess = WriteConsoleOutputAttribute(hOutput,// 屏幕缓存处理 wColors,// pointer to source string nColors,// length of string coord,// first cell to write to &cWritten); // actual number written } if(!fSuccess) return 0;} 4、程序运行结果截图: cout<<“error:WriteConsoleOutputAttribute”< 方块左移 方块右移 下一个方块开始下落 方块变形 消一行,增加1分 成功消多行 消多行后分数增加更多 消完30行后,提升一个等级 方块叠到顶端后游戏结束 5、程序使用说明: (1)按任意键开始游戏 (2)控制方块下落位置进行消行处理 (3)成功消行后加分,当消30行之后等级升一级,最高达到10等级 (4)当产生的新方块不能再下落时,游戏结束。(5)过程中可以按ESC直接退出游戏 6、本实验的心得体会 2、将该文件拷贝到工程文件夹下,在终端执行: #make create(将会在根目录下创建出include, src, bin 三个目录) #make 即可编译 #make clean删除所有生成的中间文件和可执行文件 3、如果需要编译C++的.cpp和C语言的.c文件,即C、C++混合编译,将CC=gcc 改为CC=g++即可。(如果还不行,那就需要在.cpp文件的extern “C”中将被调用的.c声明一下,或者将所有.c文件做成成静态库,后者适合.c文件较多的情况) CC=gcc CFLAGS=-o PARAM=-Wall CUR=$(shell pwd) SRC=$(CUR)/src SRCS=$(SRC)/*.c TARGET=$(CUR)/bin/exe .PHONY:$(TARGET) all:$(TARGET) $(TARGET):$(SRCS) $(CC)$^ $(CFLAGS)$@ $(PARAM) clean: @-rm-rf $(TARGET) @-rm-rf $(CUR)/include/*~ @-rm-rf $(SRC)/*~ @-rm-rf $(CUR)/*~ create: @-mkdir src/ @-mkdir include/ 二 实验目的:熟悉SQL SERVER2008 环境,熟悉查询分析器的使用,能够熟练运用sql命令完成数据库,基本表、主码、外码和其它必要的约束条件的定义。 三 实验内容及要求:(从下面10个题目中选择一个)题目一: 利用sql建立学生信息数据库,并定义以下基本表: 学生(学号,年龄,性别,系号)课程(课号,课名,学分,学时)选课(学号,课号,成绩) 定义主码、外码、和年龄、学分、学分的取值范围。在三个表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 题目二: 利用sql建立图书管理数据库,并定义以下基本表: 图书(书号,书名,价格,出版社)读者(卡号,姓名,年龄,所属单位)借阅(书号,卡号,借阅日期) 定义主码、外码、和年龄、价格的取值范围。在三个表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 题目三: 利用sql建立商品信息数据库,并定义以下基本表: 商品(编号,品名,进价,库存,售价,厂商编号)顾客(卡号,姓名,电话,积分) 厂商(编号,厂址,名称、电话、经理)销售(卡号,商品编号,数量,日期) 定义主码、外码、和价格、积分的取值范围。在表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 题目四: 利用sql建立图书信息数据库,并定义以下基本表: 图书(书号,书名,作者编号,价格,出版社编号)作者(编号,姓名,电话) 出版社(编号,出版社名称,地址)定义主码、外码、和价格的取值范围。在三个表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 题目五: 利用sql建立零件信息数据库,并定义以下基本表: 零件(编号,名称,颜色,生产车间号)车间(编号,名称,人数,主任)产品(编号,名称,车间编号) 使用(产品编号,使用零件编号,个数) 定义主码、外码、和人数、个数的取值范围。在三个表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 题目六: 利用sql建立药品信息数据库,并定义以下基本表: 药品(编号,名称,价格,厂商编号)处方(药品号,数量,医生编号)医生(编号,姓名,科室,职称) 定义主码、外码、和数量、价格的取值范围。在三个表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 题目七: 利用sql建立教材数据库,并定义以下基本表: 学生(学号,年龄,性别,系名)教材(编号,书名,出版社编号,价格)订购(学号,书号,数量)出版社(编号,名称,地址) 定义主码、外码、和价格、数量的取值范围。在三个表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 题目八: 利用sql建立雇员信息数据库,并定义以下基本表: 员工(编号,姓名,性别,年龄,部门编号,年薪)部门(编号,名称,人数,负责人)项目(编号,名称,负责部门) 定义主码、外码、和年龄、学分、学分的取值范围。在三个表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 题目九: 利用sql建立帐户信息数据库,并定义以下基本表: 帐户(编号,姓名,余额,建立日期,储蓄所编号)储蓄所(编号,名称,地址,人数,所属城市)借贷(帐户,借贷类型,金额,日期) 定义主码、外码、和人数、余额的取值范围。在三个表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 题目十: 利用sql建立仓库信息数据库,并定义以下基本表: 仓库(编号,保管员编号,面积) 保管员(编号,姓名,年龄,电话、月薪)商品(编号,品名,仓库编号、数量,单价)定义主码、外码、和年龄、面积的取值范围。在三个表中输入若干记录,注意如果输入违反完整性约束条件的记录系统有何反应。 【数据结构(c++版)实验参考书】推荐阅读: 数据结构实验_1707-22 数据结构_实验2_顺序表的基本操作11-01 991“数据结构与C语言程序设计”考试大纲(2018版)08-04 数据结构试题答案07-29 数据结构导论课后答案07-19 课设总结数据结构08-14 数据结构试卷03答案10-08 数据结构试卷(一)及答案08-12 数据结构教学计划编制09-15 数据结构理论教学大纲09-193.数据结构(c++版)实验参考书 篇三
4.数据结构(c++版)实验参考书 篇四