12月20日上机作业(共5篇)

时间:2019-05-14 17:57:17下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《12月20日上机作业》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《12月20日上机作业》。

第一篇:12月20日上机作业

12月20日上机作业:

请写出下面程序的结果:

1、有如下过程代码:

Private Sub Command1_Click()

Static numa As Integer

Dim numb As Integer

numa=numa+2

numb=numb+1

print numa;numb

End Sub

连续单击命令按钮三次,在窗体上输出是

2、有如下代码:

Public Temp As Integer

Private Temp1 As Integer

Private Sub Form_click()

Dim Temp As Integer

Temp = 10

Form1.Temp = 20

Print Form1.Temp, Temp

Print Temp1

End Sub

Private Sub command1_click()

Temp1 = 30

Print Temp1

End Sub

上面的代码中,局部变量有,窗体变量有。

当单击窗体时,窗体显示;当单击命令按钮时,窗体上显示。注意:

窗体级变量和全局变量、局部变量可以同名

如果不同级定义的变量具有相同的名称,系统优先访问作用域小的变量。

3、在窗体上画一个名称为Command1的命令按钮和三个名称分别为Label1、Label2、Label3的标签,然后编写如下代码:

Private x As Integer

Private Sub Command1_Click()

Static y As Integer

Dim z As Integer

n = 10

z = n + z

y = y + z

x = x + z

Label1.Caption = x

Label2.Caption = y

Label3.Caption = z

End Sub

运行程序,连续三次单击命令按钮后,则三个标签中显示的内容分别是__ __

4、有如下代码:

在Form1中:

Public x As Integer

Private Sub Form_Load()

x = 10

End Sub

Private Sub Form_Unload(Cancel As Integer)'关闭窗体1时,激活窗体2

Form2.Show

End Sub

在Form2中:

Public x As Integer

Private Sub Form_Click()

Print x

Print Form1.x

End Sub

Private Sub Form_Load()

x = 20

End Sub

当单击窗体2时,窗体2上显示。

5、当单击窗体第一次时,窗体上显示;当单击窗体第二次时,窗体上显示;当单击窗体第三次时,窗体上显示。

Public a As Integer

Dim b As Integer

Private Sub Form_Click()

Dim a As Integer

Static d As Integer

a = a + 1

b = b + 1

c = c + 1

d = d +

1Print a, b, c, d

End Sub

Private Sub Form_Load()

Dim c As Integer

c = 5

a = 10

b = 20

End Sub6、当单击窗体第一次时,窗体上显示;当单击窗体第二次时,窗体上显示;当单击窗体第三次时,窗体上显示。

Public a As Integer

Dim b As Integer

Private Sub Form_Click()

Static d As Integer

a = a + 1

b = b + 1

c = c + 1

d = d + 1

Print a, b, c, d

End Sub

Private Sub Form_Load()

Dim c As Integer

c =-9

a = 34

b =8

End Sub

第二篇:上机实习作业

上机实习试题

1、利用馆藏数据库,检索出郑州大学区域经济学专业,刘荣增教授近三年所带研究生的学位论文,写出检索步骤及结果。(结果可截屏)(万方博硕论文库)

2、利用馆藏数据库,检索北京大学老师撰写的题名含有“管理”或“市场”的学术论文,写出检索步骤及结果。(结果可截屏)(中国期刊全文数据库)

3、利用馆藏数据库,检索出《随遇而安》这本书的序言部分(结果可截屏)。(超星电子图书)

4、检索与课题“基于信息交流视角的档案、图书、情报管理一体化研究”相关或相似文献,写出检索步骤,检索词及结果。(结果可截屏)(中国期刊全文数据库——提取关键词)

注意事项:

请各位同学将过程写出来,以Word文件保存。保存文件名为班级、姓名学号。如:工业工程131张三45(45为学号后两位)。

班长负责将本班作业收齐全,以班级命名文件夹。比如

工业工程131,将本班的作业放在这个文件夹里,压缩后发到我的邮箱:1474605362@qq.com

第三篇:2012PPT上机作业

PowerPoint上机作业题

1、新建一个ppt文件,文件命名为“XXX幻灯片作业.ppt”,(XXX为你的学号),内容要求如下:

1)幻灯片内容不限,自己创意,发挥自己的想象空间,但幻灯片不得少于6张;

2)所需文字、图片、音乐等素材均自行准备,可以从网上下载;

3)必须包含如下元素:文字、声音、背景、图片、超级链接等,即:  会使用设计模板和设置幻灯片背景

 会插入图片和设置背景音乐

 会设置动画和幻灯片切换效果

 会使用超级链接

4)设置所建立的演示文稿的页眉,页脚和幻灯片编号。

2、特别说明

(1)以上作业必须上交;

(2)交作业位置:FTP://192.168.9.211→学生作业→你的大班号(如JC01)

→PPT作业;

(3)上交作业时间:一次PPT上机课结束后;

第四篇:数据库上机作业2

实验2 SQL的数据定义功能

实验目的

通过在MS SQL SERVER 2000上练习创建、删除、修改基本表以及建立、删除索引,理解和学习使用SQL的数据定义功能。

知识点拨:

1.SQL的功能

2.定义功能中定义的对象; 3.数据定义功能的语法格式:

a)基本表的建立、修改与删除: b)索引的建立与删除: 4.应该注意的问题

实验内容

1.了解SQL SERVER 2000查询分析器的基本框架及用法; 2.学会使用查询分析器创建、删除、修改基本表; 3.学会使用查询分析器建立和删除索引

实验步骤

1. 选择自己上次实验创建的数据库:

注意:每次使用查询分析器之前都应先设置当前数据库,在查询分析器中设置当前数据库的两种方法: ① 在工具栏的数据库复选框中选中欲设置为当前数据库的数据库名,如:JX; ② 使用SQL语句:USE JX 2. 基本表的创建、修改和删除,以下内容请使用查询分析器完成;: a)删除上次创建的SC表,并在查询分析器中使用SQL语句重新创建,主码为(Sno,Cno,Tno);

1.DROP TABLE SC 2.CREATE TABLE SC(Sno CHAR(5),Cno CHAR(3),Tno INT,Grade SMALLINT,PRIMARY KEY(Sno,Cno,Tno));b)修改教师信息表Teacher中教工号字段类型为CHAR(4);

ALTER TABLE Teacher ALTER COLUMN Tno CHAR(4);c)删除学生信息表中的parent字段;

LTER TABLE Student DROP COLUMN parent

d)在学生表中增加总学分(Total)字段,类型为Smallint;

ALTER TABLE Student ADD Total Smallint

3. 索引的创建和删除:请使用企业管理器和查询分析器练习。a)检查以上几张表是否已经建立了索引?如果有,是什么索引?

没有

b)在Course表的Cno字段创建聚集索引Index_Cno,并检查数据的排列顺序;

CREATE CLUSTERED Index_Cno ON Course(Cno)降序

c)在Student表的Sname列上创建降序唯一索引Index_Sname,并检查数据的排列顺序;

CREATE UNIQUE Index_Sname ON Student(Sname)d)在Teacher表的“姓名”和“系名”字段上创建一个组合索引Index_TX CREATE UNIQUE Index_TX ON Teacher(Tname ,Tdept)e)在SC表的Grade字段上创建一个降序索引Index_Grade; CREATE UNIQUE INDEX_Grade ON SC(Gradet)f)删除创建的索引Index_TX。

DROP INDEX teacher.index_TX 4. 使用企业管理器定义JX数据库表的约束: a)对前三张表建立主键约束。

1)..ALTER TABLE Student

(......PRIMARY KEY(Sno))

2).ALTER TABLE Teacher

(....PRIMARY KEY(Tno))

3).ALTER TABLE Course

(...PRIMARY KEY(Cno))

b)在SC表的Sno字段创建外键约束,引用Student表的Sno字段;在SC表的Cno字段创建外键约束,引用Course表的Cno字段;在SC表的Tno字段创建外键约束,引用Teacher表的教工号字段。

ALTER TABLE ADD FOREIGN KEY(Sno)REFERNCES Student(Sno)

ALTER TABLE ADD FOREIGN KEY(Cno)REFERNCES Course(Cno)

ALTER TABLE ADD FOREIGN KEY(Tno)REFERNCES Teacher(Tno)c)在Teacher表上创建Unique约束Unique_TNP,不允许出现姓名和联系电话完全一样的教师记录。

ALTER TABLE Teacher ADD CONSTRAINT UNIQUE_TNP unique(Tname,Tphone)d)在Student表中创建Default约束Df_Sbirth,当用户插入学生记录的时候,如果没有提供Sbirth字段的值,那么获取系统当前的日期作为默认值(使用系统函数getdate())。

e)

在SC表中创建Check约束Ck_Grade,限制用户在插入或更改成绩时,不能超过0-100的范围。

ALTER TABLE SC ADD CONSTRAINT CK_Grade CHECK(Grade<100 or Grade>0)

第五篇:数据结构上机作业

实验一 线性表

一、实验题

线性表的应用———多项式计算

二、程序设计思路

包括每个函数的功能说明,及一些重要函数的算法实现思路一链式存储:

1.void InitPoly(LNode *&p)初始化多项式 2.void TraversePoly(LNode *&p)遍历多项式 3.void ClearPoly(LNode *&p)清除多项式

4.void InsertPoly(LNode *&p, double a, int e)插入一项 5.void DeletetPoly(LNode *&p,int pos)

删除一项

6.double PolySum(LNode *&p, double x)

多项式求值 7.LNode * PolyAdd(LNode *&p1,LNode *& p2)

多项式相加 顺序存储:

1.void InitPoly1(SeqList &L)初始化多项式 2.void ClearPoly1(SeqList &L)清除多项式 3.void TraversePoly1(SeqList L)

遍历多项式

4.bool InsertPoly1(SeqList &L, ElemType item)插入一项 5.double PolySum1(SeqList L,double x)

多项式求值 6.bool DeleteList1(SeqList &L,int pos)

删除一项

7.SeqList PolyAdd1(SeqList &L1,SeqList& L2)

多项式相加

三、源程序代码

#include #include #include #include “Linkpoly.h” #include “Seqpoly.h” void main(){ cout<<“现在进行第一次测试。(链表表示)”<>n;cout<<“请依次输入要测试的各项的系数和指数:”;for(i=0;i>a;cin>>e;InsertPoly(pa, a, e);//插入一项 pa=pa->next;} pa=pa->next;cout<<“该多项式为:”;TraversePoly(pa);//输出多项式 cout<>a;cin>>e;cin>>pos;if(DeletetPoly(pa, a, e, pos)){ cout<<“删除成功!现在多项式为:”;TraversePoly(pa);cout<>x;sum=PolySum(pa, x);cout<<“该多项式的值为:”<>n;cout<<“请输入该多项式的各项系数和指数:”;for(i=0;i>a;cin>>e;InsertPoly(pb, a, e);//插入一项 pb=pb->next;} pb=pb->next;pp=PolyAdd(pa, pb);cout<<“两多项式相加后得到的多项式为:”;TraversePoly(pp);cout<>n;cout<<“请依次输入要测试的各项的系数和指数:”;for(i=0;i>a;cin>>e;InsertPoly1(s, a, e);} cout<<“该多项式为:”;TraversePoly1(s);cout<>a;cin>>e;cin>>pos;if(DeletetPoly1(s, a, e, pos)){ cout<<“删除成功!现在多项式为:”;TraversePoly1(s);cout<>x;sum=PolySum1(s, x);cout<<“该多项式的值为:”<>n;cout<<“请输入该多项式的各项系数和指数:”;for(i=0;i>a;cin>>e;InsertPoly1(t, a, e);//插入一项 } q=PolyAdd1(s, t);cout<<“两多项式相加后得到的多项式为:”;TraversePoly1(q);cout<next=p;return true;} void TraversePoly(NodeType *p)//输出多项式 { NodeType *h=p->next;if(h!=p){ cout<coef<<“*”<<“X”<<“^”<exp;h=h->next;} while(h!=p){ if(h->coef>0)cout<<“+”;cout<coef<<“*”<<“X”<<“^”<exp;h=h->next;} } void ClearPoly(NodeType *&p)//清除多项式 { NodeType *cp,*np;cp=p->next;while(cp!=p){ np=cp->next;delete cp;cp=np;} p->next=p;} bool InsertPoly(NodeType *&p, float a, int e)//插入一项 { NodeType *h;if((h=new NodeType)==NULL)return false;h->coef=a;h->exp=e;h->next=p->next;p->next=h;return true;} bool DeletetPoly(NodeType *&p, float a, int e, int pos)//一项

{ if(pos>1||pos<-1)return false;NodeType *cp=p->next;NodeType *np=p;if(pos==0){ while(cp!=p){ if(cp->coef==a&&cp->exp==e)break;else{ np=cp;cp=cp->next;} } } else if(pos==-1)while(cp!=p){

删除np=cp;cp=cp->next;} np->next=cp->next;delete cp;return true;} double PolySum(NodeType *p, float x)//多项式求值 { int i;double sum=0,item;NodeType *cp=p->next;while(cp!=p){ item=1;for(i=1;i<=cp->exp;i++)item=item*x;sum=sum+item*cp->coef;cp=cp->next;} return sum;} NodeType *PolyAdd(NodeType *p1, NodeType *p2)//多项式相加 { float coef;NodeType *a=p1->next,*b=p2->next,*c,*pc;InitPoly(c);pc=c;while(a!=p1&&b!=p2){ if(a->exp==b->exp){ coef=a->coef+b->coef;if(coef!=0){ InsertPoly(pc, coef, a->exp);pc=pc->next;} a=a->next;b=b->next;} else if(a->expexp){ InsertPoly(pc,a->coef,a->exp);pc=pc->next;a=a->next;} else{ InsertPoly(pc,b->coef,b->exp);pc=pc->next;b=b->next;} } while(a!=p1){ InsertPoly(pc,a->coef,a->exp);pc=pc->next;a=a->next;} while(b!=p2){ InsertPoly(pc,b->coef,b->exp);pc=pc->next;b=b->next;} return c;} Seqploy.h: #define MaxSize 10000 struct ListType{ float *list;int size;};void InitPoly1(ListType &p)//初始化多项式 { p.list=(float*)malloc(MaxSize*sizeof(float));if(p.list==NULL){ cout<<“动态可分配的储存空间用完,退出运行!”<0){ cout<<“+”;cout<

输出多项式 } void ClearPoly1(ListType &p)//清除多项式 { if(p.list!=NULL){ delete []p.list;p.list=NULL;} p.size=0;} void InsertPoly1(ListType &p, float a, int e)//项

{ p.list[e]=a;if(p.size

{ int i,n;if(p.size==0){ cout<<“多项式为空,删除无效!”<

插入一if(p.list[e]==a)p.list[e]=0;else if(pos==-1)p.list[p.size]=0;return true;} double PolySum1(ListType p, float x)//值

{ double sum=0,item;int i,j;for(i=0;i<=p.size;i++){ item=1;for(j=1;j<=i;j++)item=item*x;sum=sum+item*p.list[i];} return sum;} ListType PolyAdd1(ListType p1, ListType p2)//项式相加

{ ListType p;InitPoly1(p);float coef;

多项式求多int i,j;for(i=0;i<=p1.size;i++){ coef=p1.list[i]+p2.list[i];InsertPoly1(p, coef, i);} if(i<=p1.size)for(j=i;j<=p1.size;j++)InsertPoly1(p, p1.list[j], j);if(i<=p2.size)for(j=i;j<=p2.size;j++)InsertPoly1(p, p2.list[j], j);return p;四实验结果分析

五.心得体会 对于结构体的认识增加了,对于动态存储也有了更多的认识,也是在不知不觉中提高了。

实验二 字符串的操作

一、实验题目——字符串的操作

二、程序设计思路

采用定长顺序存储表示,由用户创建串s和串t,实现在串s中下标为pos的字符之前插入串t。

三、源程序代码

#define MAXLEN 10 typedef struct {

/*串结构定义*/

char ch[MAXLEN];

int len;}SString;void createstring(SString *s)

/*创建串s*/ { int i,j;char c;printf(“input the length of the string:”);

scanf(“%d”,&j);

for(i=0;i

{

printf(“input the %d:”,i+1);

fflush(stdin);

scanf(“%c”,&c);

s->ch[i] = c;

} s->len = j;} void output(SString *s)

/*输出串s*/ {

int i;for(i=0;ilen;i++)

printf(“%c

”,s->ch[i]);

printf(“n”);} int StrInsert(SString *s, int pos, SString *t)/*在串s中下标为pos的字符之前插入串t */ {

int i;if(pos<0 || pos>s->len)

/*插入位置不合法*/

return(0);

if(s->len + t->len<=MAXLEN)

/*插入后串长≤MAXLEN*/ {

for(i=s->len + t->len-1;i>=t->len + pos;i--)

s->ch[i]=s->ch[i-t->len];/*将下标为pos的字符后的元素往后移动t->len个长度*/

for(i=0;ilen;i++)

s->ch[i+pos]=t->ch[i];

/*将串t从下标为pos位置开始插入到串s*/

s->len=s->len+t->len;} else { if(pos+t->len<=MAXLEN)/*插入后串长>MAXLEN,但串t的字符序列可以全部插入*/

{

for(i=MAXLEN-1;i>t->len+pos-1;i--)

s->ch[i]=s->ch[i-t->len];

for(i=0;ilen;i++)

s->ch[i+pos]=t->ch[i];

/*将串t从下标为pos位置开始插入到串s*/

s->len=MAXLEN;

}

else

/*插入后串长>MAXLEN,并且串t的部分字符也要舍弃*/

{

for(i=0;i

s->ch[i+pos]=t->ch[i];

/*直接从下标为pos的位置按顺序插入串t*/

s->len=MAXLEN;

}

return(1);} } void main(){

SString *str1;SString *str2;int i,j,k,pos;int flag=0;str1 =(SString *)malloc(sizeof(SString));str1->len = 0;printf(“creat the string 1:n”);createstring(str1);printf(“creat the string 2:n”);createstring(str2);printf(“input the insert local:”);scanf(“%d”,&pos);flag=StrInsert(str1,pos,str2);if(flag == 0)

printf(“insert error!”);else {

printf(“after insert:n”);

output(str1);} }

四、实验结果

五、实验体会

通过本次实验,我加深了对串数据结构的理解。在串的定长顺序存储结构中,按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。在存储方式中,结点大小的选择和顺序存储方式的格式选择一样都很重要,它直接影响着串处理的效率。

实验三

一、实验题目——非递归算法对二叉树进行中前序遍历

二、程序设计思路

创建一棵10个节点构造的完全二叉树,并对其进行前、中、后序遍历。

三、源程序代码

#define STUDENT EType #define SType SType

#define HeadEType int

#include #include

//定义数据结构类型

struct STUDENT { char name[8];int age;char number[15];char address[20];};

struct BinaryTreeNode { EType data;BinaryTreeNode *LChild;BinaryTreeNode *RChild;};typedef BinaryTreeNode BinaryTree;

typedef struct { BinaryTreeNode *ptr;bool status;}SType;

typedef struct { SType *element;int top;int MaxSize;}Stack;

void CreatStack(Stack &S, int MaxStackSize){// 构造一个最大容量为MaxStackSize 的堆栈

S.MaxSize = MaxStackSize;

S.element = new SType[S.MaxSize];

S.top =-1;}

bool IsEmpty(Stack &S){// 判断堆栈S是否为空

if(S.top ==-1)

return true;

return false;}

bool IsFull(Stack &S){// 判断堆栈S是否为空

if(S.top == MaxSize-1)

return true;

return false;}

bool Push(Stack &S , SType &x){// x进s栈,返回进栈后的状态值

if(IsFull(S))

return false;

S.top++;

S.element[S.top] = x;

return true;}

bool Pop(Stack &S , SType &x){// 将s栈顶的值取至x中,返回出栈后的状态值

if(IsEmpty(S))

return false;

x = S.element[S.top];

S.top--;

return true;}

BinaryTreeNode

*MakeNode(EType &x)

{//构造结点

BinaryTreeNode *ptr;

ptr = new BinaryTreeNode;

if(!ptr)return NULL;

ptr->data = x;

ptr-> LChild = NULL;

ptr-> RChild = NULL;

return

ptr;}

void MakeBinaryTree(BinaryTreeNode *root, BinaryTreeNode *left, BinaryTreeNode *right){// 联接root,left, right所指的结点指针为二叉树

root->LChild=left;

root->RChild=right;}

void PreOrderNoRecursive(BinaryTreeNode *BT){//二叉树前序遍历非递归的算法

Stack S;SType ele;BinaryTreeNode *q=BT;int MaxStackSize=50;//假设堆的空间足够大,即MaxStackSize值足够大

CreatStack(S,MaxStackSize);//产生一个空栈

while(q||!IsEmpty(S)){

if(q)

{

cout<data.name<<“ ”;//访问“根”节点

ele.ptr=q;

Push(S,ele);//节点指针进栈,以后回溯时在退栈

q=q->LChild;//指针指向刚刚被访问的“根”节点的左子树

}

else

//当左子树为空时,利用堆栈回溯

if(!IsEmpty(S))

{

Pop(S,ele);//退栈回溯

q=ele.ptr;//指针重新指向刚刚被访问的“根”节点

q=q->RChild;//指针指向该回溯节点的右子树

} } }

void InOrderNoRecursive(BinaryTreeNode *BT){//二叉树的中序遍历非递归的算法

Stack S;SType ele;BinaryTreeNode *q=BT;int MaxStackSize=50;//假设堆的空间足够大,即MaxStackSize值足够大

CreatStack(S,MaxStackSize);//产生一个空栈

while(q ||!IsEmpty(S)){

while(q)//找到最左边的子树

{

ele.ptr=q;

Push(S,ele);//指针非空时,将当前的“根”节点指针进栈,用于以后回溯

q=q->LChild;//指针继续指向该“根”节点的左子树

}

if(!IsEmpty(S))//当左子树为空时,进行退栈回溯

{

Pop(S,ele);//从堆栈中回溯节点指针(节点还未访问)

q=ele.ptr;

cout<data.name<<“ ”;//访问回溯的“根”节点

q=q->RChild;//指针向回溯的节点右子树推进

} } }

void PostOrderNoRecursive(BinaryTreeNode *BT){//二叉树的后序遍历非递归的算法

Stack S;SType ele;BinaryTreeNode *q=BT;int MaxStackSize=50;//假设堆的空间足够大,即MaxStackSize值足够大

CreatStack(S,MaxStackSize);//产生一个空栈

while(q ||!IsEmpty(S)){

if(q)//找最左边的子树

{

ele.ptr=q;

ele.status=false;//进栈前标记为第一次进栈

Push(S,ele);

q=q->LChild;//指针继续向左推进

}

else

if(!IsEmpty(S))//直到左子树为空时,退栈回溯

{

Pop(S,ele);//从堆栈中弹出回溯节点(还未访问)

q=ele.ptr;//q指向当前回溯节点

if(ele.status)//判断节点进栈标志,是否对其进行访问

{

cout<data.name<<“ ”;//访问回溯节点

q=NULL;//将q设为空,为了继续退栈

}

else

{

ele.status=true;//改变回溯节点的进栈标记,以便再次进栈

Push(S,ele);

q=q->RChild;//指针向该回溯节点的右孩子推进

}

} } }

//主函数 void main(){ BinaryTreeNode *ptr[11];

char Name[][8]={“ ”,“A”,“B”,“C”,“D”,“E”,“F”,“G”,“H”,“I”,“J”};EType x[11];for(int i=1;i<11;i++){

strcpy(x[11-i].name,Name[11-i]);

ptr[11-i]=MakeNode(x[11-i]);//构造10个二叉树节点

}

//将节点链接域填值,构造一个二叉树

//这里构造的是一棵有10个节点的完全二叉树

for(int j=1;j<5;j++){

MakeBinaryTree(ptr[j],ptr[2*j],ptr[2*j+1]);} MakeBinaryTree(ptr[5],ptr[10],NULL);//该完全二叉树构造完毕

//***********对已构造的完全二叉树进行前序非递归遍历************// cout<<“对该二叉树进行前序遍历结果:”<

//***********对已构造的完全二叉树进行中序非递归遍历************// cout<

//***********对已构造的完全二叉树进行中序非递归遍历************// cout<

四、实验结果分析

五、实验总结

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。

实验四

一、实验题目——深度优先算法实现图的遍历

二、程序设计思路

以邻接矩阵或邻接表为存储结构,以用户指定的顶点为起始点,实现无向连通图的深度优先,并输出遍历的结点序列。首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点为起始点,进行深度优先,并输出遍历的结果。

三、源程序代码

#include #define MaxVerNum 50 struct edgenode { int endver;int inform;edgenode* edgenext;

};struct vexnode

{ char vertex;edgenode* edgelink;};struct Graph

{ vexnode adjlists[MaxVerNum];int vexnum;int arcnum;};//队列的定义及相关函数的实现 struct QueueNode { int nData;QueueNode* next;};struct QueueList { QueueNode* front;QueueNode* rear;};void EnQueue(QueueList* Q,int e){ QueueNode *q=new QueueNode;q->nData=e;q->next=NULL;if(Q==NULL)

return;if(Q->rear==NULL)

Q->front=Q->rear=q;else {

Q->rear->next=q;

Q->rear=Q->rear->next;} } void DeQueue(QueueList* Q,int* e){ if(Q==NULL)

return;if(Q->front==Q->rear){

*e=Q->front->nData;

Q->front=Q->rear=NULL;} else {

*e=Q->front->nData;

Q->front=Q->front->next;} } //创建图

void CreatAdjList(Graph* G){ int i,j,k;edgenode* p1;edgenode* p2;cout<<“请输入顶点数和边数:”<>G->vexnum>>G->arcnum;cout<<“开始输入顶点表:”<vexnum;i++){

cin>>G->adjlists[i].vertex;

G->adjlists[i].edgelink=NULL;} cout<<“开始输入边表信息:”<arcnum;k++){

cout<<“请输入边对应的顶点:”;

cin>>i>>j;

p1=new edgenode;

p1->endver=j;

p1->edgenext=G->adjlists[i].edgelink;

G->adjlists[i].edgelink=p1;

p2=new edgenode;

p2->endver=i;

p2->edgenext=G->adjlists[j].edgelink;

G->adjlists[j].edgelink=p2;

//因为是无向图,所以有两次建立边表的过程

} }

//------------------------------深度优先遍历 void DFS(Graph *G,int i,int visit[]){ cout<adjlists[i].vertex<<“ ”;visit[i]=1;edgenode *p=new edgenode;p=G->adjlists[i].edgelink;if(G->adjlists[i].edgelink&&!visit[p->endver]){

DFS(G,p->endver,visit);} } void DFStraversal(Graph *G,char c)//深度优先遍历 { cout<<“该图的深度优先遍历结果为:”<vexnum;i++){

visit[i]=0;//全部初始化为0,即未访问状态

} int m;for(i=0;ivexnum;i++){

if(G->adjlists[i].vertex==c)//根据字符查找序号

{

m=i;

DFS(G,i,visit);

break;

} } //继续访问未被访问的结点

for(i=0;ivexnum;i++){

if(visit[i]==0)

DFS(G,i,visit);} cout<front=Q->rear=NULL;EnQueue(Q,v);while(Q->rear!=NULL){

int e=0;

DeQueue(Q,&e);

cout<adjlists[e].vertex<<“ ”;

visit[e]=1;

edgenode* p=new edgenode;

p=G->adjlists[e].edgelink;

if(p)

{

int m=p->endver;

if(m==0)

{

EnQueue(Q,m);

while(visit[m]==0)

{

p=p->edgenext;

if(p==NULL)

break;

m=p->endver;

EnQueue(Q,m);

}

}

}

} } void BFStraversal(Graph *G,char c){ cout<<“该图的广度优先遍历结果为:”<vexnum;i++){

visited[i]=0;} int m;for(i=0;ivexnum;i++){

if(G->adjlists[i].vertex==c)

{

m=i;

BFS(G,i,visited);

break;

} } //继续访问未被访问的结点

for(i=0;ivexnum;i++){

if(visited[i]==0)

BFS(G,i,visited);} cout<>ch;DFStraversal(G,ch);BFStraversal(G,ch);}

四、实验结果及分析

五、实验总结

本次试验采用的是邻接表的方式实现图的深度优先遍历和。对于深度优先遍历,主要是采用递归的方式。试验本身问题不是太大,但要注意输入的问题,什么时候用空格,什么时候用回车,这一点是需要注意的,因为一旦数据的输入有问题,结果当然也就不可能正确了。只有正确的输入数据,建立图,才能得出正确的遍历结果。

下载12月20日上机作业(共5篇)word格式文档
下载12月20日上机作业(共5篇).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    第5周上机作业

    第5周上机作业 作业完成期限:最迟第6周上机之前提交。 上传文档要求:将本文档和所有的C语言源程序(即.c文件)压缩成“姓名第5周.rar”格式上传到“教师课件学生上传作业第5周......

    第二次上机作业 姓名

    少先队中队队长竞选演讲稿 四一中队第二小队刘璐 在皎洁的月光下,有一个女孩在反复背诵着:“枝间新绿一重重,小蕾深藏数点红。爱情芳心莫轻吐,且教桃李闹春风。”背诗的那个小女......

    《数据结构》上机作业——实验报告(六)

    “计算机软件技术基础”课程实验报告(六) 实验名称:数据库及SQL语言 班级_______ 姓名__________ 学号______实验日期: 实验机时:3 学时实验成绩: ----------------- 一.实验目的:......

    上机实验作业-3-材料

    WD01 上万北京市民云集人民大会堂聆听新年音乐 上万北京市民选择在人民大会堂——这个象征着国家最高权力机关所在地度过了本世纪最后的时光。 在人民大会堂宴会厅——这个......

    信息检索上机作业范文

    1、 举例说明搜索引擎中filetype、site、双引号这三个高级检索语法的功能。 (1) filetype的作用是专业文档搜索。有价值的资料在网络上并非是普通的网页,而是以 Word、PowerP......

    数字图像处理上机作业(精选5篇)

    数字图像处理上机实验题 一、产生右图所示图像 f1(m,n),其中图像大小为256×256,中间亮条为128×32,暗处=0,亮处=100。对其进行 FFT: 1、 屏显示原图 f1(m,n)和FFT(f1)的幅度谱图......

    科技文献检索上机实习作业(三)

    船舶与机电工程学院 科技检索实验报告 院系:船舶与机电工程学院 专业:13电气自动化 班级: 13电气自动化 姓名: 万小宝 学号:130534016 作业说明: 1.作业请注明检索工具,检索途径,出......

    《数据结构》上机作业——实验报告(五)[推荐]

    “计算机软件技术基础”课程实验报告(五) 实验名称:排序算法 班级_______ 姓名__________ 学号______实验日期: 实验机时:3 学时实验成绩: ----------------- 一.实验目的: 1、 掌......