北科大_ 数据结构上机实验报告
北京科技大学计算机与通信工程学院
实验报告
实验名称:数据结构上机实验
学生姓名:
专业:计算机科学与技术
班级:
学号:
指导教师:
实验成绩:________________________________
实验地点:
实验时间:2015 年__ __6 ___月
一、实验目的与实验要求
1 实验目的
(1)加深对常用数据结构和算法设计基本思路、思考方法及其适用场合的理解,并能运用于解决实际问题;
(2)能根据特定问题需求,分析建立计算模型(包括逻辑结构和物理结构)、设计算法和程序,并在设计中综合考虑多种因素,对结果的有效性进行分析;
(3)训练分析问题、解决问题的能力以及自主学习与程序设计实践能力;
(4)形成将非数值型问题抽象为计算模型到算法设计、程序实现、结果有效性分析的能力。
2 实验要求
(1)由于在有限的实验课内学时难以较好完成所有实验内容,因此要求在实验课前自主完成部分实验或实验的部分内容;
(2)对于每个实验都要针对问题进行分析,设计出有效的数据结构、算法和程序,对实现结果的正确性进行测试,给出测试用例和结果,分析算法的时间复杂度、空间复杂度、有效性和不足,在算法设计和实现过程中体现创新意识,并能综合考虑时空权衡、用户的友好性、程序的模块化和扩展性等;
(3)完成的每个实验需要在实验课内经指导教师现场检查、查看程序代码,回答指导教师提出的问题,以确认实验实际完成的质量;
(4)在实验报告中体现问题分析、算法思路、算法描述、程序实现和验证、算法和结果的有效性分析。
二、实验设备(环境)及要求
Win7、C语言、Dev-C++
三、实验内容、步骤与结果分析
1 实验1:链表的应用
1.1 实验内容
输入数据(设为整型)建立单链表,并求相邻两节点data值之和为最大的第一节点。
1.2 主要步骤
1.2.1 问题分析与算法思路
①采用单链表结构。
②新建链表:每输入一个整数数据,建立一个新节点。循环操作直到输入结束符结束输入。
③利用一个调用函数求两节点data值之和为最大的第一节点:假设,设一个int类型的变量s=0,读取链表中第一个节点的数据以及它的第二个节点的数据,并计算它们之和a,再计算第二个节点数据和第三个节点数据之和b,如果a>b,则s=a;反之,则s=b。利用if语句和while语句实现。
④每当输入一个数据,程序会判断输入的时候输入的数据是否是整数,如果不是整数,要求重新输入。
1.2.2 算法描述
typedef int datatype; //设当前数据元素为整型
typedef struct node //节点类型
{
datatype data; //节点的数据域
struct node *next; //节点的后继指针域
}Linknode,*Link;
Link Createlist() //创建单链表的算法
{
int a;
Link H,P,r; //H,P,r分别为表头,新节点和表尾节点指针
H=(Link)malloc(sizeof(Linknode)); //建立头节点
r=H;
scanf(“%d”,&a); //输入一个数据
while(a!=0)
{
P=(Link)malloc(sizeof(Linknode));//申请新节点
P->data=a; //存入数据
r->next=P; //新节点链入表尾
r=P;
scanf(“%d”,&a); //输入下一个数据
}
r->next=NULL; //将尾节点的指针域置空
return(H); //返回已创建的头节点
}
Link Adjmax(Link H) //求链表中相邻两节点data值之和为最大的第一节点的指针的算法
{
Link p,p1,q;
int i,j;
p=p1=H->next;
if(p1==NULL) return(p1); //表空返回
q=p->next;
if(q==NULL) return(p1); //表长=1时返回
i=p->data+q->data; //相邻两节点data值之和
while(q->next)
{
p=q;q=q->next; //取下一对相邻节点的指针
j=p->data+q->data;
if(j>i)
{
p1=p;i=j; //取和为最大的第一节点指针
}
}
return (p1);
}
1.2.3 程序实现
#include
#include
typedef int datatype; //设当前数据元素为整型
typedef struct node //节点类型
{
datatype data; //节点的数据域
struct node *next; //节点的后继指针域
}Linknode,*Link; //linknode为节点说明符,link为节点指针说明符
Link Createlist() //创建单链表的算法
{
int a,c;
float b;
Link H,P,r; //H,P,r分别为表头,新节点和表尾节点指针
H=(Link)malloc(sizeof(Linknode)); //建立头节点
r=H;
do
{
c=(fflush(stdin),scanf("%f",&b));
//printf("%d",c); //判断输入的是否是整数
a=(int)b;
if(c!=1||a!=b||a<-32768||a>32767) printf("非法输入!请重新输入!\n");
}while(c!=1||a!=b||a<-32768||a>32767);
while(a!=0)
{
P=(Link)malloc(sizeof(Linknode));//申请新节点
P->data=a; //存入数据
r->next=P; //新节点链入表尾
r=P;
do
{
c=(fflush(stdin),scanf("%f",&b)); //判断输入的是否是整数
a=(int)b;
if(c!=1||a!=b||a<-32768||a>32767) printf("非法输入!请重新输入!\n");
}while(c!=1||a!=b||a<-32768||a>32767);
}
r->next=NULL; //将尾节点的指针域置空
return(H); //返回已创建的头节点
}
Link Adjmax(Link H) //求链表中相邻两节点data值之和为最大的第一节点的指针的算法
{
Link p,p1,q;
int i,j;
p=p1=H->next;
if(p1==NULL) return(p1); //表空返回
q=p->next;
if(q==NULL) return(p1); //表长=1时返回
i=p->data+q->data; //相邻两节点data值之和
while(q->next)
{
p=q;q=q->next; //取下一对相邻节点的指针
j=p->data+q->data;
if(j>i)
{
p1=p;
i=j; //取和为最大的第一节点指针
}
}
return (p1);
}
void main() //主函数
{
Link A,B,p,q;
int a,b;
do
{
printf("请输入一组整数(以0为结束符,数之间回车):\n");
p=A=Createlist(); //创建新链表
B=Adjmax(A); //求链表中相邻两节点data值之和为最大的第一节点的指针
a=(int)(B->data); //取第一节点的data值
printf("第一节点的data值为:%d\n",a);
while(p->next) //释放链表空间
{
q=p;
p=p->next;
free(q);
}
free(p);
printf("是否继续输入下一组整数:是:1,否:0\n");
scanf("%d",&b);
}while(b);
}
1.3 结果分析
①输入的数组为:2 6 4 7 3,输出结果:第一节点为4。结果是正确的。
②输入的数组为:45 21 456 4 214 54 230,输出结果:第一节点为21。结果是正确的。
③输入的数组为:45 7 23 564 70 1224 12 145 24,输出结果:第一节点为70。结果是正确的。
1.3.1 测试
如图所示,只要输入的数据不是整数(字符或小数),或者输入的整数不在[32768,32767]这个范围,程序会用"非法输入!请重新输入!"提示用户,直到用户输入正确的数据。
1.3.2 算法和结果的有效性分析
时间复杂度:O(n)
空间复杂度:不复杂
有效性:算法正确,算法易读、易编码和易于调试
不足:每个数据输入之间只能用回车区分。
2 实验2:栈的应用
2.1 实验内容
设操作数:0,1,2,……,8,9(可扩充);运算符:+,-,*,/,(,),#(#号为结束)。输入中缀表达式,将其转换成后缀表达式,然后计算,输出结果。
例如:输入中缀表达式5+(4-2)*3 #,将其转换成后缀表达式:542-3*+#,然后计算,本例结果为11。
2.2 主要步骤
2.2.1 问题分析与算法思路
①利用栈来写程序。
②首先要获得中缀表达式,再利用一个调用函数是中缀表达式变为后缀表达式。再用一个函数求后缀表达式的值。
③利用一个调用函数取判断中缀表达式的合法性。
2.2.2 算法描述
typedef struct node
{
char data;
struct node *next;
}snode,*slink;
typedef struct node1
{
int data;
struct node1 *next;
}snode1,*slink1;
void Clearstack(slink s) //置栈空
{
s=NULL;
}
int Emptystack(slink s) //判断栈是否为空
{
if(s==NULL) return(1); //栈空返回1
else return(0); //栈非空返回0
}
char Getstop(slink s) //取栈顶元素
{
if(s!=NULL) return (s->data);
return (0);
}
void Push(slink*s,char x) //元素x进栈
{
slink p;
p=(slink)malloc(sizeof(snode)); //生成进栈p节点
p->data=x; //存入新元素
p->next=*s; //p节点作为新的栈顶链入
*s=p;
}
char Pop(slink*s) //出栈
{
char x;
slink p;
if(Emptystack(*s)) return (-1); //栈空,返回-1
else
{
x=(*s)->data;
p=*s;
*s=(*s)->next;
free(p);
return (x); //成功
}
}
int Precede(char x,char y) //比较x是否"大于"y
{
int a,b;
switch(x)
{
case '#':
case '(':a=0;break;
case '+':
case '-':a=1;break;
case '*':
case '/':a=2;break;
}
switch(y)
{
case '+':
case '-':b=1;break;
case '*':
case '/':b=2;break;
case '(':b=3;break;
}
if(a>=b) return (1);
else return (0);
}
void Mid_post(char E[],char B[]) //中缀表达式B到后缀表达式E的转换{
int i=0,j=0;
char x; int a;
slink s=NULL; //置空栈
Clearstack(s);
Push(&s,'#'); //结束符入栈
do
{
x=B[i++]; //扫描当前表达式分量x
switch(x)
{
case ' ':break;
case '#':
{
while(!Emptystack(s))
{
E[j++]=' '; //栈非空时
E[j++]=Pop(&s);
}
}break;
case ')':
{
while(Getstop(s)!='(')
{
E[j++]=' ';
E[j++]=Pop(&s);
} //反复出栈直到遇到'('
Pop(&s); //退掉'('
}break;
case '+':
case '-':
case '*':
case '/':
case '(':
{
while(Precede(Getstop(s),x)) //栈顶运算符(Q1)与x比较
{
E[j++]=' ';
E[j++]=Pop(&s); //Q1>=x时,输出栈顶符兵退栈
}
//E[j++]=' ';
Push(&s,x); //Q1 E[j++]=' '; }break; default:E[j++]=x; //操作数直接输出 } }while(x!='#'); E[j]='\0'; Clearstack(s); } int Ecount(char E[]) //后缀表达式求值 { int i=0,g=0,k=0,d=0,d1,g1; char x; int z,a,b; slink1 s=NULL; //置栈空 while(E[i]!='#') //扫描每一个字符是送x { x=E[i]; switch(x) { case ' ':break; case '+':b=Pop1(&s);a=Pop1(&s);z=a+b;Push1(&s,z);break; case '-':b=Pop1(&s);a=Pop1(&s);z=a-b;Push1(&s,z);break; case '*':b=Pop1(&s);a=Pop1(&s);z=a*b;Push1(&s,z);break; case '/':b=Pop1(&s);a=Pop1(&s);z=a/b;Push1(&s,z);break; //执行相应运算结果进栈 default: { g=0;g1=0; //获取操作数 while(E[i]!=' ') { g1=E[i]-'0'; g=g*10+g1; i++; } Push1(&s,g); //操作数进栈 } } i++; } if(!Emptystack1(s)) return(Getstop1(s)); //返回结果 Clearstack1(s); } 2.2.3 程序实现 #include #include #include typedef struct node { char data; struct node *next; }snode,*slink; typedef struct node1 { int data; struct node1 *next; }snode1,*slink1; void Clearstack(slink s) //置栈空 { s=NULL; } int Emptystack(slink s) //判断栈是否为空 { if(s==NULL) return(1); //栈空返回1 else return(0); //栈非空返回0 } char Getstop(slink s) //取栈顶元素 { if(s!=NULL) return (s->data); return (0); } void Push(slink*s,char x) //元素x进栈 { slink p; p=(slink)malloc(sizeof(snode)); //生成进栈p节点 p->data=x; //存入新元素 p->next=*s; //p节点作为新的栈顶链入*s=p; } char Pop(slink*s) //出栈 { char x; slink p; if(Emptystack(*s)) return (-1); //栈空,返回-1 else { x=(*s)->data; p=*s; *s=(*s)->next; free(p); return (x); //成功 } } void Push1(slink1*s,int x) //元素x进栈 { slink1 p; p=(slink1)malloc(sizeof(snode1)); //生成进栈p节点 p->data=x; //存入新元素 p->next=*s; //p节点作为新的栈顶链入*s=p; } int Pop1(slink1*s) //出栈 { int x; slink1 p; if(Emptystack1(*s)) return (-1); //栈空,返回-1 else { x=(*s)->data; p=*s; *s=(*s)->next; free(p); return (x); //成功 } } int Emptystack1(slink1 s) //判断栈是否为空 { if(s==NULL) return(1); //栈空返回1 else return(0); //栈非空返回0 } void Clearstack1(slink1 s) //置栈空 { s=NULL; } int Getstop1(slink1 s) //取栈顶元素 { if(s!=NULL) return (s->data); return (0); } int Precede(char x,char y) //比较x是否"大于"y { int a,b; switch(x) { case '#': case '(':a=0;break; case '+': case '-':a=1;break; case '*': case '/':a=2;break; } switch(y) { case '+': case '-':b=1;break; case '*': case '/':b=2;break; case '(':b=3;break; } if(a>=b) return (1); else return (0); } void Mid_post(char E[],char B[]) //中缀表达式B到后缀表达式E的转换{ int i=0,j=0; char x; int a; slink s=NULL; //置空栈 Clearstack(s); Push(&s,'#'); //结束符入栈 do { x=B[i++]; //扫描当前表达式分量x switch(x) { case ' ':break; case '#': { while(!Emptystack(s)) { E[j++]=' '; //栈非空时 E[j++]=Pop(&s); } }break; case ')': { while(Getstop(s)!='(') { E[j++]=' '; E[j++]=Pop(&s); } //反复出栈直到遇到'(' Pop(&s); //退掉'(' }break; case '+': case '-': case '*': case '/': case '(': { while(Precede(Getstop(s),x)) //栈顶运算符(Q1)与x比较 { E[j++]=' '; E[j++]=Pop(&s); //Q1>=x时,输出栈顶符兵退栈 } Push(&s,x); //Q1 E[j++]=' '; }break; default:E[j++]=x; //操作数直接输出 } }while(x!='#'); E[j]='\0'; Clearstack(s); } int Ecount(char E[]) //后缀表达式求值 { int i=0,g=0,k=0,d=0,d1,g1; char x; int z,a,b; slink1 s=NULL; //置栈空 while(E[i]!='#') //扫描每一个字符是送x { x=E[i]; switch(x) { case ' ':break; case '+':b=Pop1(&s);a=Pop1(&s);z=a+b;Push1(&s,z);break; case '-':b=Pop1(&s);a=Pop1(&s);z=a-b;Push1(&s,z);break; case '*':b=Pop1(&s);a=Pop1(&s);z=a*b;Push1(&s,z);break; case '/':b=Pop1(&s);a=Pop1(&s);z=a/b;Push1(&s,z);break; //执行相应运算结果进栈 default: { g=0;g1=0; //获取操作数 while(E[i]!=' ') { g1=E[i]-'0'; g=g*10+g1; i++; } Push1(&s,g); //操作数进栈 } } i++; } if(!Emptystack1(s)) return(Getstop1(s)); //返回结果 Clearstack1(s); } int pd(char B[]) //判断输入错误 { int i=0,c,j,k; c=strlen(B); //获取B的长度 while(B[i]!='#') { switch(B[i]) //检查有无非法字符 { case ' ':break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { j=i+1; //一个操作数之间不能有空格 if(B[j]==' ') { while(B[j]==' ') j++; switch(B[j]) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':printf("非法输入!请重新输入!\n");return(0);break; } } }break; case '+': case '-': case '*': case '/': { j=i-1; while(B[j]==' ') j--; switch(B[j]) { //'+','-','*','/'左边不能有'+','-','*','/','(','#' case '+': case '-': case '*': case '/': case '(': case '#':printf("非法输入!请重新输入!\n");return(0);break; } k=i+1; while(B[k]==' ') k++; switch(B[k]) //'+','-','*','/'左边不能有'+','-','*','/',')','#' { case '+': case '-': case '*': case '/': case ')': case '#':printf("非法输入!请重新输入!\n");return(0);break; } }break; case '(': //'('左边不能有'0'~'9','#',')' { j=i-1; while(B[j]==' ') j--; switch(B[j]) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '#': case ')':printf("非法输入!请重新输入!\n");return(0);break; } k=i+1; while(B[k]==' ') k++; switch(B[k]) //'('右边不能有'+','-','*','/','#' { case '+': case '-': case '*': case '/': case '#':printf("非法输入!请重新输入!\n");return(0);break; } }break; case ')': //')'左边不能有'(' { j=i-1; while(B[j]==' ') j--; switch(B[j]) { case '(':printf("非法输入!请重新输入!\n");return(0);break; } k=i+1; while(B[k]==' ') k++; //')'右边不能有'0'~'9' switch(B[k]) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':printf("非法输入!请重新输入!\n");return(0);break; } }break; case '\0':break; default:printf("8非法输入!请重新输入!\n");return(0); } i++; } if(B[0]=='#') { printf("表达式为空!请重新输入!\n");return(0); } else if (B[c-1]!='#') { printf("9非法输入!请重新输入!\n");return(0); } } void main() { int a,b,c,d; char B[100],E[100]; do { do { printf("请输入中缀表达式:\n"); B[100]=fflush(stdin); gets(B); //输入B while(B[0]=='\0') { B[100]=fflush(stdin); gets(B); } b=pd(B); //判断B是否合法 }while(b==0); Mid_post(E,B); printf("后缀表达式为:\n"); printf("%s\n",E); a=Ecount(E); printf("结果=%d\n",a); printf("是否继续?是:1否:0\n"); scanf("%d",&c); }while(c==1); } 2.3 结果分析 ①输入的中缀表达式为:5+(4-2)*3,输出的后缀表达式为:5 4 2 -3 * +,后缀表达式求值结果为:11。结果是正确的。 ②输入的中缀表达式为:123+45*2-56,输出的后缀表达式为:123 45 2 * + 56 -,后缀表达式求值结果为:157。结果是正确的。 ③输入的中缀表达式为:7856-56*5+(78-55),输出的后缀表达式为:7856 56 5 * - 78 55 - +,后缀表达式求值结果为:7599。结果是正确的。 2.3.1 测试 输入各种不合法表达式,例如45 56 - 56#、56 ++ 55#等,这时会有提示语句:非法输入!请重新输入! 又如,如果直接输入#,那么中缀表达式为空,这时会有提示语句:表达式为空!请重新输入! 2.3.2 算法和结果的有效性分析 时间复杂度:O(n) 空间复杂度:不复杂 有效性:算法正确、算法易读、易编码和易于调试 不足:代码不够简洁 3 实验3:队列的应用 3.1 实验内容 从键盘输入字符x,若x='0',则进行出队操作;若x='@',则输出当前队列的元素,结束;否则,将x入队。 3.2 主要步骤 3.2.1 问题分析与算法思路 ①采用队列结果 ②当队列为空时,输入0或@要有相应的结果。 3.2.2 算法描述 typedef struct node { char data; struct node *next; }Qnode,*Qlink; typedef struct 《数据结构课程实验》大纲 一、《数据结构课程实验》的地位与作用 “数据结构”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: (1)内容丰富,学习量大,给学习带来困难; (2)贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点; (3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度; (4)隐含在各部分的技术和方法丰富,也是学习的重点和难点。 根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。通过实验实践内容的训练,突出构造性思维训练的特征, 目的是提高学生组织数据及编写大型程序的能力。实验学时为18。 二、《数据结构课程实验》的目的和要求 不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能力。 三、《数据结构课程实验》内容 课程实验共18学时,要求完成以下六个题目: 实习一约瑟夫环问题(2学时) 结构力学(二)上机试验结构力学求解器的使用 上机报告 班级: 姓名: 学号: 日期: 实验三、计算结构的影响线 1.实验任务 (1)作以下图示梁中截面D 的内力D M 、QD F 的影响线。 观览器:D M 的影响线 观览器:QD F 的影响线 D |F=1 3 365 编辑器: 结点,1,0,0 结点,2,3,0 结点,3,6,0 结点,4,12,0 结点,6,6,1 结点,5,17,1 单元,1,2,1,1,0,1,1,1 单元,2,3,1,1,1,1,1,1 单元,3,4,1,1,1,1,1,0 单元,3,6,1,1,0,1,1,0 单元,6,5,1,1,0,1,1,0 结点支承,1,3,0,0,0 结点支承,4,1,0,0 结点支承,5,3,0,0,0 影响线参数,-2,1,1,3 影响线参数,-2,1,1,2 End 作以下图示梁中截面D 的内力D M 、QD F 的影响线。 观览器: D M 的影响线 QD F 的影响线 编辑器: 结点,1,0,0 结点,2,2,0 结点,3,4,0 结点,4,6,0 结点,5,8,0 结点,6,0,1 结点,7,8,1 结点,8,2,1 结点,9,4,1 结点,10,6,1 单元,1,2,1,1,0,1,1,1 单元,2,3,1,1,1,1,1,1 单元,3,4,1,1,1,1,1,1 单元,4,5,1,1,1,1,1,0 单元,1,6,1,1,1,1,1,0 单元,6,8,1,1,0,1,1,0 单元,8,9,1,1,0,1,1,0 单元,9,10,1,1,0,1,1,0 单元,10,7,1,1,0,1,1,0 单元,7,5,1,1,0,1,1,0 数据分析实验报告 文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58- 第一次试验报告 习题1.3 1建立数据集,定义变量并输入数据并保存。 2数据的描述,包括求均值、方差、中位数等统计量。 分析—描述统计—频率,选择如下: 输出: 统计量 全国居民 农村居民 城镇居民 N 有效 22 22 22 缺失 均值 1116.82 747.86 2336.41 中值 727.50 530.50 1499.50 方差 1031026.918 399673.838 4536136.444 百分位数 25 304.25 239.75 596.25 50 727.50 530.50 1499.50 75 1893.50 1197.00 4136.75 3画直方图,茎叶图,QQ 图。(全国居民) 分析—描述统计—探索,选择如下: 输出: 全国居民 Stem-and-Leaf Plot Frequency Stem & Leaf 5.00 0 . 56788 数据分析实验报告 【最新资料,WORD 文档,可编辑修改】 2.00 1 . 03 1.00 1 . 7 1.00 2 . 3 3.00 2 . 689 1.00 3 . 1 Stem width: 1000 Each leaf: 1 case(s) 分析—描述统计—QQ图,选择如下: 输出: 习题1.1 4数据正态性的检验:K—S检验,W检验数据: 取显着性水平为0.05 分析—描述统计—探索,选择如下:(1)K—S检验 结果:p=0.735 大于0.05 接受原假设,即数据来自正太总体。 (2 )W 检验 结果:在Shapiro-Wilk 检验结果972.00 w ,p=0.174大于0.05 接受原假设,即数据来自正太总体。 习题1.5 5 多维正态数据的统计量 数据: . 西华大学实验报告(计算机类) 开课学院及实验室:实验时间:年月日 一、实验目的 通过练习让学生对数据库、数据库和表的关系、数据词典、参照完整性和视图有较好的理解和掌握。 二、内容与设计思想 实验内容: 1.数据库设计器 2.数据库的创建 3.设定数据词典 4.参照完整性的设置 5.视图的创建和修改 三、使用环境 Windos XP操作系统;Visual ProFox 6.0 四、核心代码及调试过程 例3-27创建项目管理器SBGL,要求添入数据库sbsj,并查看该数据库。 图一 图二、“项目管理器”的数据选项卡 图三、“项目管理器”中的数据库与数据库表 例3-28从sbsj数据库所属的sb和zz两个表中抽取编号、名称和增值3个字段。,组成名称 为“我的视图”的SQL视图。 open database sbsj create sql view 我的视图; as select sb.编号,sb.名称,zz.增值from sb,zz where sb.编号=zz.编号 如有你有帮助,请购买下载,谢谢! 例3-29根据例3-28的查询要求,用视图设计器建立视图1,然后修改其中车床的增值来更新zz表原来的增值 图一、视图设计器-视图1 图二、视图设计器-视图1 图三、增值表 图四 图五、视图设计器更新源表数据 19.根据图3.30所示数据库sbsj的永久关系,若利用参照完整性生成器来删除sb。dbf的第一个记录,对其他3个表会否产生影响,是分级、限制和忽略3中情况来说明。 图一、数据库设计器 图二、sbsj.dbc“永久关系的参照完整性生成器” 级联:相关子表中的记录将自动删除 限制:子表有相关记录,在父表中删除记录就会产生“触发器失败”的提示信息 忽略:父表删除记录,与子表记录无关 五、总结 (自己写一些收获和体会) 通过这次上机练习让我学会了怎样在数据库中添加项目管理器、表的数据完整性的概念以及视图的各种操作,让我更容易的掌握理论知识的难点和一些基本命令的使用方法,以及一些平时在课堂上不注意的问题。在上机练习的过程中需要对每个细节都要留心,认真做好每一步这样才不至于出错,这就加强了平时不注意的问题得到回应,从而加深了细节问题的处理方式。在上机的学习之后更加了解了数据库表及其数据完整性是vfp重要的一个对象,命令熟练操作直接关系到数据库的成败。 第三次的上机操作,我了解了命令的使用方式对于建立数据库表及其数据完整性很重要,要学好各种命令以及数据库表及其数据完整性的使用方法,还需在多做习题加强学习。 六、附录 数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include 结构力学求解器学习报告 一、实习目的 结构力学上机实习使训练学生使用计算机进行结构计算的重要环节。通过实习,学生可以掌握如何使用计算机程序进行杆系结构的分析计算,进一步掌握结构力学课程的基本理论和基本概念。在此基础上,通过阅读有关程序设计框图,编写、调试结构力学程序,学生进一步提高运用计算机进行计算的能力,为后续课程的学习、毕业设计及今后工作中使用计算机进行计算打下良好的基础。 二、实习时间 大三上学期第19周星期一至星期五。 三、实习内容 本次实习以自学为主,学习如何使用结构力学求解器进行结构力学问题的求解,包括:二维平面结构(体系)的几何组成、静定、超静定、位移、内力、影响线、自由振动、弹性稳定、极限荷载等。对所有这些问题,求解器全部采用精确算法给出精确解答。 四、心得体会 第一天上机时,张老师对结构力学求解器的使用方法进行了简单的介绍,然后就是学生自己自学的时间了。每个学生都有自己对应的题目要完成,在完成这些题目的同时,我也逐渐对结构力学求解器的运用更加自如。 从刚开始的生疏到最后的熟练运用,我遇到了不少问题:①第一次使用在有些问题上拿不定注意,例如,在材料性质那一栏,我不知 道是EA和EI的取值②第一次接触这个软件,在使用过程中不知道该如何下手,题目条件的输入顺序也很模糊。③经常会忘记添加荷载的单位,导致计算结果出现问题。④对于有些命令不能很明确的知道其用法,致使在使用时经常出错。在面对这些问题时,我一般都会向同学和老师寻求帮助,直到最终将问题解决。 通过这几天的上机实习,不仅让我进一步掌握了结构力学的知识,同时,还使我对结构力学求解器有了更深入的了解: 1. 结构力学求解器首先是一个计算求解的强有效的工具。对于任意平面的结构,只要将参数输进求解器,就可以得到变形图和内力图,甚至还可以求得临界荷载等问题。 2.即便是结构力学的初学者,只要会用求解器,也可以用求解器来方便地求解许多结构的各类问题,以增强对结构受力特性的直观感受和切实体验。 3.书本中的方法并非所有类型的问题都可以解决,例如,不规则分布的荷载以及超静定结构用传统方法比较困难,但用求解器就较为简单。而且,用求解器求解问题时可以不忽略轴向变形等书本中忽略的条件,与实际更加相符。 4.求解器可以用静态图形显示结构简图、变形图、内力图,还可以用动画显示机构模态、振型等动态图形。利用复制到剪贴板的功能,可以将结构简图、变形图、内力图以点阵图或矢量图的形式粘贴到word文档中,并可以方便地进行再编辑。 数据库实验 (第三次) 题目1 实验内容: 1. 检索上海产的零件的工程名称; 2. 检索供应工程J1零件P1的供应商号SNO; 3. 检索供应工程J1零件为红色的供应商号SNO; 4. 检索没有使用天津生产的红色零件的工程号JNO; 5. 检索至少用了供应商S1所供应的全部零件的工程号JNO; 6. 检索购买了零件P1的工程项目号JNO及数量QTY,并要求对查询的结果按数 量QTY降序排列。 1 select jname from j where jno in (select jno from spj where sno in (select sno from s where city ='上海' ) ); 2 select sno from spj where jno ='j1'and pno ='p1' 3 selectdistinct sno from spj where pno in (select pno from p where color='红'and pno in (select pno from spj where jno ='j1' ) ); 4 selectdistinct jno from spj where pno notin (select pno from p where color ='红'and pno in (select pno from spj where sno in (select sno from s where city ='天津' ) ) ) 5 select jno from spj where sno ='s1' 6 select jno,qty from spj where pno ='p1' orderby qty desc 四﹑思考题 1.如何提高数据查询和连接速度。 建立视图 2. 试比较连接查询和嵌套查询 有些嵌套查询是可以用连接来代替的,而且使用连接的方式,性能要比 嵌套查询高出很多 当查询涉及多个关系时,用嵌套查询逐步求解结构层次清楚,易于构造,具有结构化程序设计的优点。但是相比于连接运算,目前商用关系数据库管理系统对嵌套查询的优化做的还不够完善,所以在实际应用中,能够用连接运算表达的查询尽可能采用连接运算。 邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template int vertexNum, arcNum; }; #endif MGraph.cpp #include 数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"< 结构力学实验报告 班级12土木2班 姓名 学号 实验报告一 实验名称 在求解器中输入平面结构体系 一实验目的 1、了解如何在求解器中输入结构体系 2、学习并掌握计算模型的交互式输入方法; 3、建立任意体系的计算模型并做几何组成分析; 4、计算平面静定结构的内力。 二实验仪器 计算机,软件:结构力学求解器 三实验步骤 图2-4-3 是刚结点的连接示例,其中图2-4-3a 中定义了一个虚拟刚结点和杆端的连接码;各个杆端与虚拟刚结点连接后成为图2-4-3b 的形式,去除虚拟刚结点后的效果为图2-4-3c 所示的刚结点;求解器中显示的是最后的图2-4-3c。图2-4-4 是组合结点的连接示例,同理,无需重复。铰结点是最常见的结点之一,其连接示例在图2-4-5 中给出。这里,共有四种连接方式,都等效于图2-4-5e 中的铰结点,通常采用图2-4-5a 所示方式即可。值得一提的是,如果将三个杆件固定住,图2-4-5b~d 中的虚拟刚结点也随之被固定不动,而图2-4-5a 中的虚拟刚结点仍然存在一个转动自由度,可以绕结点自由转动。这是一种结点转动机构,在求解器中会自动将其排除不计①。结点机构实际上也潜存于经典的结构力学之中,如将一个集中力矩加在铰结点上,便可以理解为加在了结点机构上(犹如加在可自由转动的销钉上),是无意义的。 综上所述,求解器中单元对话框中的“连接方式”是指各杆端与虚拟刚结点的连接方式,而不是杆件之间的连接方式。这样,各杆件通过虚拟刚结点这一中介再和其他杆件间接地连接。这种处理的好处是可以避免结点的重复编码(如本书中矩阵位移法中所介绍的),同时可以方便地构造各种 实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示 2009级数据结构实验报告 实验名称:约瑟夫问题 学生姓名:李凯 班级:21班 班内序号:06 学号:09210609 日期:2010年11月5日 1.实验要求 1)功能描述:有n个人围城一个圆圈,给任意一个正整数m,从第一个人开始依次报数,数到m时则第m个人出列,重复进行,直到所有人均出列为止。请输出n个人的出列顺序。 2)输入描述:从源文件中读取。 输出描述:依次从显示屏上输出出列顺序。 2. 程序分析 1)存储结构的选择 单循环链表 2)链表的ADT定义 ADT List{ 数据对象:D={a i|a i∈ElemSet,i=1,2,3,…n,n≧0} 数据关系:R={< a i-1, a i>| a i-1 ,a i∈D,i=1,2,3,4….,n} 基本操作: ListInit(&L);//构造一个空的单链表表L ListEmpty(L); //判断单链表L是否是空表,若是,则返回1,否则返回0. ListLength(L); //求单链表L的长度 GetElem(L,i);//返回链表L中第i个数据元素的值; ListSort(LinkList [内容要求] 1、存储结构:顺序表、单链表或其他存储结构,需要画示意图,可参考书上P59 页图2-9 2.2 关键算法分析 结点类: template 中国矿业大学力学与建筑工程学院 2013~2014学年度第二学期 《结构力学A1》上机实验报告 学号 班级 姓名 2014年5月26日 一、单跨超静定梁计算(50分) 1. 计算并绘制下面单跨超静定梁的弯矩图和剪力图。(20分) q =12N/m q =8N/m q =8N/m q=?8m 1 2 3 2. 如果按照梁跨中弯矩相等的原则,将梁上的荷载换算成均布荷载,则均布荷载应为多少?(10分) 2m 1m 1m 1m 1m 1m q=? 8m 3. 如果按照梁端部弯矩相等的原则,将梁上的荷载换算成均布荷载,则均布荷载应为多少?(10分) 4. 如果按照梁端部剪力相等的原则,将梁上的荷载换算成均布荷载,则均布荷载应为多少?(10分) 二、超静定刚架计算(50分) 1.刚架各杆EI 如图所示,计算刚架的弯矩图,剪力图和轴力图。(30分) 2. 若EI=106 (Nm 2 ),计算刚架一层梁和二层梁的水平位移。(20分) 弯矩图: y x 12345678 ( 1 )( 2 )( 3 )( 4 )( 5 )( 6 )( 7 ) -40.96 -16.29 3.04 19.04 25.04 19.04 3.04 -16.29 -40.96 剪力图: y x 12345678 ( 1 )( 2 )( 3 )( 4 )( 5 )( 6 )( 7 ) 26.00 22.00 18.00 12.00 -12.00 -18.00 -22.00 -26.00 解:跨中弯矩M1=25.04Nm(下部受拉)均布荷载q作用在梁上时,跨中弯矩为 M2=1/24*q*(l^2)(下部受拉) ∵M1=M2, ∴q=9.39N/m 如图所示: y x 12 ( 1 ) -50.08-50.08 图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template 实验报告一 平面刚架内力计算程序APF 实验目的:(1)分析构件刚度与外界温度对结构位移的影响,如各杆刚度改变对内力分布的影响、温度因数对内力分布的影响。 (2)观察并分析刚架在静力荷载及温度作用下的内力和变形规律,包括刚度的变化,结构形式的改变,荷载的作用位置变化等因素对内力及变形的影响。对结构静力分析的矩阵位移法的计算机应用有直观的了解 (3)掌握杆系结构计算的《结构力学求解器》的使用方法。通过实验加深对静定、超静定结构特性的认识。 实验设计1: 计算图示刚架当梁柱刚度12I I 分别为15、11、15、1 10时结构的内力和位移,由此分析当刚架在水平荷 载作用下横梁的水平位移与刚架梁柱 比(1 2I I )之间的关系。(计算时忽略轴向变形)。 数据文件: (1)变量定义,EI1=1,EI2=0.2(1,5,10) 结点,1,0,0 结点,2,0,4 结点,3,6,4 结点,4,6,0 单元,1,2,1,1,1,1,1,1 单元,2,3,1,1,1,1,1,1 单元,3,4,1,1,1,1,1,1 结点支承,1,6,0,0,0,0 结点支承,4,6,0,0,0,0 结点荷载,2,1,100,0 单元材料性质,1,1,-1,EI1,0,0,-1 单元材料性质,2,2,-1,EI2,0,0,-1 单元材料性质,3,3,-1,EI1,0,0,-1 (2)变量定义,EI1=5(1,0.2,0.1),EI2=1 结点,1,0,0 结点,2,0,4 结点,3,6,4 结点,4,6,0 单元,1,2,1,1,1,1,1,1 单元,2,3,1,1,1,1,1,1 单元,3,4,1,1,1,1,1,1 结点支承,1,6,0,0,0,0 结点支承,4,6,0,0,0,0 结点荷载,2,1,100,0 单元材料性质,1,1,-1,EI1,0,0,-1 单元材料性质,2,2,-1,EI2,0,0,-1 单元材料性质,3,3,-1,EI1,0,0,-1 主要计算结果: 位移: 数据分析实验报告 【最新资料,WORD文档,可编辑修改】 第一次试验报告 习题1.3 1建立数据集,定义变量并输入数据并保存。 2数据的描述,包括求均值、方差、中位数等统计量。 分析—描述统计—频率,选择如下: 输出: 方差1031026.918399673.8384536136.444百分位数25304.25239.75596.25 50727.50530.501499.50 751893.501197.004136.75 3画直方图,茎叶图,QQ图。(全国居民) 分析—描述统计—探索,选择如下: 输出: 全国居民Stem-and-Leaf Plot Frequency Stem & Leaf 9.00 0 . 122223344 5.00 0 . 56788 2.00 1 . 03 1.00 1 . 7 1.00 2 . 3 3.00 2 . 689 1.00 3 . 1 Stem width: 1000 Each leaf: 1 case(s) 分析—描述统计—QQ图,选择如下: 输出: 习题1.1 4数据正态性的检验:K—S检验,W检验数据: 取显着性水平为0.05 分析—描述统计—探索,选择如下:(1)K—S检验 单样本Kolmogorov-Smirnov 检验 身高N60正态参数a,,b均值139.00 标准差7.064 最极端差别绝对值.089 正.045 负-.089 Kolmogorov-Smirnov Z.686 渐近显着性(双侧).735 a. 检验分布为正态分布。 b. 根据数据计算得到。 结果:p=0.735 大于0.05 接受原假设,即数据来自正太总体。(2)W检验 本科实验报告 课程名称:数据结构 实验项目:线性结构、树形结构、图结构、查找、排序实验地点: 专业班级:学号: 学生姓名: 指导教师: 2011年12 月24 日 实验项目:线性结构 实验目的和要求 熟练掌握线性结构的基本操作在顺序表和链式表上的实现。 二、实验内容和原理 设顺序表递增有序,编写一个程序,将x插入,使之仍然有序。 三、主要仪器设备 使用的计算机:Nopated++ 四、操作方法与实验步骤 #include A[n]=x; } else { while(A[i] 结构力学 桁架结构受力性能实验报告 学号:1153377 姓名:周璇 专业:土木工程 实验时间:2016年05月04日周三,中午12:30-13:30 实验指导教师:陈涛 理论课任课教师:陈涛 一、实验目的 (1)参加并完成规定的实验项目内容,理解和掌握结构的实验方法和实验结果,通过 实践掌握试件的设计、实验结果整理的方法。 (2)进行静定、超静定结构受力的测定和影响线的绘制。 二、结构实验 (一)空间桁架受力性能概述 桁架在受结点荷载时,两边支座处产生反力,桁架中各杆件产生轴力,如图1.1为在抛物线桁架结点分别加载时结构示意图。用Q235钢材,桁架跨度6?260=1560mm ,最大高度260mm 。杆件之间为铰接相连。杆件直径为8mm 。 图1.1 (二)实验装置 图1.2为框架结构侧向受力实验采用的加载装置,25kg 挂钩和25kg 砝码。采用单结点集中力加载,由砝码、挂钩施加拉力,应变片测算待测杆件应变。结构尺寸如图1.2所示。 图1.2 (三)加载方式 简单多次加载,将挂钩和砝码依次施加在各个结点,待应变片返回数据稳定后,进行采集。采集结束后卸下重物,等待应变片数值降回初始值后再向下一节点施加荷载,重复采集操作。 (四)量测内容 需要量测桁架待测杆件的应变值在前后四对桁架杆布置单向应变片,具体布置位置如图 1.2 所示,即加粗杆件上黏贴应变片。 三、实验原理 对桁架上的5个位置分别施加相同荷载,记录不同条件下各杆件的应变值。 由公式 2 4 F A E d A σσεπ? ?=? =???=? 可以得到 24 d E F πε = 其中: F ——杆件轴力 E ——Q235钢弹性模量 d ——杆件直径 ε ——杆件应变值 σ ——杆件应力 A ——杆件横截面积 因而可以求得各杆件轴力,进而得到不同杆件的轴力影响线。 四、实验步骤 (1)将载荷挂在加载位置1,待应变片返回数据稳定后,采集相应应变数据。 (2)待应变片数值降回初始值后,重复(1)中操作,将荷载分别挂在加载位置2,3,4,5,分别采集记录各自对应的各杆件应变数据。 五、实验结果与整理 将对应位置杆件应变值取平均值,得到所示一榀桁架四根杆件的应变值如表2.2所示。 附件2: 北京理工大学珠海学院实验报告 ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY 实验题目图及其应用实验时间 2011.5.10 一、实验目的、意义 (1)熟悉图的邻接矩阵(或邻接表)的表示方法; (2)掌握建立图的邻接矩阵(或邻接表)算法; (3)掌握图的基本运算,熟悉对图遍历算法; (4)加深对图的理解,逐步培养解决实际问题的编程能力 二、实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: (1)建立图的邻接矩阵(或邻接表); (2)对其进行深度优先及广度优先遍历。 三、实验所涉及的知识点 1.创建一个图: CreateUDN(MGraph &G) 2.查找v顶点的第一个邻接点: FirstAdjVex(MGraph G,int v) 3. 查找基于v顶点的w邻接点的下一个邻接点: NextAdjVex(MGraph G,int v,int w) 4.图的矩阵输出: printArcs(MGraph G) 5:顶点定位: LocateVex(MGraph G,char v) 6. 访问顶点v输出: printAdjVex(MGraph G,int v) 7. 深度优先遍历: DFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 8. 广度优先遍历BFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 9. DFS,从第v个顶点出发递归深度优先遍历图G: DFS(MGraph G,int v) 四、实验记录 1.对顶点的定位其数组下标,利用了找到之后用return立即返回,在当图顶点 多的情况下节省了搜索时间,程序如下 //对顶点v定位,返回该顶点在数组的下标索引,若找不到则返回-1 int LocateVex(MGraph G,char v){ for (int i=0;i 2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨 实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。 三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;i数据结构实验报告格式
结构力学求解器求解示例
数据分析实验报告
数据库和数据结构实验报告
数据结构实验报告
结构力学求解器学习报告
数据库上机实验报告
数据结构实验报告图实验
数据结构实验报告全集
结构力学实验报告模板1
C上机实验报告实验四
数据结构实验报告模板
结构力学上机考试答案
数据结构实验报告图实验
结构力学 上机实验报告
数据分析实验报告
华仔数据结构实验报告
结构力学实验
数据结构图及其应用实验报告+代码
数据结构实验报告及心得体会