数据结构实验指导书及答案(徐州工程学院)

合集下载

数据结构实验指导书及答案(徐州工程学院)

数据结构实验指导书及答案(徐州工程学院)

《数据结构实验》实验指导书及答案信电工程学院计算机科学和技术教研室编2011.12数据结构实验所有代码整理作者郑涛声明:在这里我整理了数据结构实验的所有代码,希望能对大家的数据结构实验的考试有所帮助,大家可以有选择地浏览,特别针对一些重点知识需要加强记忆(ps:重点知识最好让孙天凯给出),希望大家能够在数据结构实验的考试中取得令人满意的成绩,如果有做的不好的地方请大家谅解并欢迎予以指正。

实验一熟悉编程环境实验预备知识:1.熟悉本课程的语言编译环境(TC或VC),能够用C语言编写完整的程序,并能够发现和改正错误。

2.能够灵活的编写C程序,并能够熟练输入C程序。

一、实验目的1.熟悉C语言编译环境,掌握C程序的编写、编译、运行和调试过程。

2.能够熟练的将C程序存储到指定位置。

二、实验环境⒈硬件:每个学生需配备计算机一台。

⒉软件:Windows操作系统+Turbo C;三、实验要求1.将实验中每个功能用一个函数实现。

2.每个输入前要有输入提示(如:请输入2个整数当中用空格分割:),每个输出数据都要求有内容说明(如:280和100的和是:380。

)。

3.函数名称和变量名称等用英文或英文简写(每个单词第一个字母大写)形式说明。

四、实验内容1.在自己的U盘中建立“姓名+学号”文件夹,并在该文件夹中创建“实验1”文件夹(以后每次实验分别创建对应的文件夹),本次实验的所有程序和数据都要求存储到本文件夹中(以后实验都按照本次要求)。

2.编写一个输入某个学生10门课程成绩的函数(10门课程成绩放到结构体数组中,结构体包括:课程编号,课程名称,课程成绩)。

3.编写一个求10门成绩中最高成绩的函数,输出最高成绩和对应的课程名称,如果有多个最高成绩,则每个最高成绩均输出。

4.编写一个求10门成绩平均成绩的函数。

5.编写函数求出比平均成绩高的所有课程及成绩。

#include<stdio.h>#include<conio.h>struct subject{int subject_id;char subject_name[20];double subject_grades;};struct subject sub[10];void input(){int i;printf("please input:\n");for(i=0;i<10;i++){scanf("%d %s %lf",&sub[i].subject_id,&sub[i].subject_name,&sub[i].subject_g rades);}printf("you just input:\n");for(i=0;i<3;i++){printf("%d %s %lf\n",sub[i].subject_id,sub[i].subject_name,sub[i].subject_g rades);}}void subject_max(){int i,flag;double max=sub[0].subject_grades;for(i=0;i<10;i++){if(sub[i].subject_grades>max)max=sub[i].subject_grades;flag=i;}printf("The high score of subjectis %s %lf\n",sub[flag].subject_name,max);}void subject_average(){int i;double average,sum=sub[0].subject_grades;for(i=1;i<10;i++){sum+=sub[i].subject_grades;}average=sum/10;printf("subject's average is %lf\n",average);}void subjct_gtaverage(){int i,flag;double average,sum=sub[0].subject_grades;for(i=1;i<10;i++){sum+=sub[i].subject_grades;}average=sum/10;for(i=0;i<10;i++){if(sub[i].subject_grades>average){flag=i;printf("subject greater than average is %s %lf\n",sub[flag].subject_name,sub[flag].subject_grades);}}}int main(){input();subject_max();subject_average();subjct_gtaverage();return 0;}实验二顺序表的基本操作实验预备知识:1.熟练运用数组进行程序设计,掌握数组名和指针作为函数参数。

徐州工程学院 数据库 答案

徐州工程学院 数据库 答案

第1章数据库系统概论三、简答题1. 答:数据库DB是长期存储在计算机内、有组织的、统一管理的相关数据的集合。

DB能为各种用户共享,具有较小冗余度、数据间联系紧密而又有较高的数据独立性等特点。

2. 答:数据库管理系统DBMS是位于用户与操作系统(OS)之间的一层数据管理软件,它为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更新及各种数据控制。

DBMS 总是基于某种数据模型,可以分为层次型、网状型、关系型和面向对象型等。

3. 答:①数据定义语言及其翻译处理程序;②数据操纵语言及其编译(或解释)程序;③数据库运行控制程序;④实用程序。

4. 答:文件系统中的文件是面向应用的,一个文件基本上对应于一个应用程序,文件之间不存在联系,数据冗余大,数据共享性差,数据独立性差;数据库系统中的文件不再面向特定的某个或多个应用,而是面向整个应用系统,文件之间是相互联系的,减少了数据冗余,实现了数据共享,数据独立性高。

5. 答:①实现数据的集中化控制;②数据的冗余度小,易扩充;③采用一定的数据模型实现数据结构化;④避免了数据的不一致性;⑤实现数据共享;⑥提供数据库保护;⑦数据独立性;⑧数据由DBMS统一管理和控制。

6. 答:数据独立性是指数据库中的数据独立于应用程序,即数据的逻辑结构、存储结构与存取方式的改变不影响应用程序。

数据独立性一般分为数据的逻辑独立性和数据的物理独立性。

数据逻辑独立性是指数据库总体逻辑结构的改变(如修改数据定义、增加新的数据类型、改变数据间的联系等)不需要修改应用程序。

数据物理独立性是指数据的物理结构(存储结构、存取方式等)的改变,如存储设备的更换、物理存储格式和存取方式的改变等不影响数据库的逻辑结构,因而不会引起应用程序的改变。

7. 答:数据库系统中数据不是面向单个应用组织的,而是直接面向数据本身及数据间的内在联系来组织的,因此可以方便地供多用户多应用共享,这样,数据的冗余度就大幅度降低了。

数据结构实验报告答案

数据结构实验报告答案

数据结构实验报告答案数据结构实验报告答案引言:数据结构是计算机科学中的重要概念,它涉及组织和管理数据的方法和技术。

在本次实验中,我们将研究和实践几种常见的数据结构,包括数组、链表、栈和队列。

通过这些实验,我们将深入理解数据结构的原理和应用。

一、数组数组是一种线性数据结构,它由一系列相同类型的元素组成。

数组的特点是可以通过索引来访问和修改元素,具有随机访问的能力。

在本次实验中,我们将实现一个简单的数组类,并进行一些基本操作,如插入、删除和查找。

首先,我们定义一个数组类,包含以下成员变量和方法:- size:数组的大小- elements:存储元素的数组- insert(index, element):在指定位置插入元素- remove(index):删除指定位置的元素- get(index):获取指定位置的元素- search(element):查找元素在数组中的位置通过实现上述方法,我们可以对数组进行各种操作。

例如,我们可以在数组的末尾插入一个元素,然后在指定位置删除一个元素。

我们还可以通过元素的值来查找其在数组中的位置。

二、链表链表是另一种常见的线性数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。

链表的特点是插入和删除操作的效率较高,但随机访问的效率较低。

在本次实验中,我们将实现一个简单的单向链表,并进行一些基本操作。

首先,我们定义一个节点类,包含以下成员变量和方法:- data:节点的数据元素- next:指向下一个节点的指针然后,我们定义一个链表类,包含以下成员变量和方法:- head:链表的头节点- insert(element):在链表的末尾插入一个节点- remove(element):删除链表中指定的节点- search(element):查找链表中指定元素的节点通过实现上述方法,我们可以对链表进行各种操作。

例如,我们可以在链表的末尾插入一个节点,然后删除链表中指定的节点。

数据结构实验答案

数据结构实验答案
[程序实现]
# include
# define maxnum 20
typedef int DataType ;
typedef struct
{ DataType data[maxnum] ;
int length ;
}SeqList ;
int MergeQL(SeqList la , SeqList lb , SeqList *lc)
实验一 线性表的顺序存储实验
一,实验目的
1,掌握用Visual C++6.0上机调试顺序表的基本方法
2,掌握顺序表的基本操作,插入,删除,查找,以及有序顺序表的合并等算法的实现
二,实验内容
1,顺序表基本操作的实现
[问题描述] 当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置.若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置.
ListNode *s,*r; /*工作指针*/
r=head; /*尾指针初值也指向头结点*/
while((ch=getchar())!='\n')
{
s=(ListNode *)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
(*L)->next=NULL;
}
int List_Length(ListNode *L )
{
int n=0;ListNode *p=L->next;
while(p!=NULL)

数据结构习题解答

数据结构习题解答

数据结构习题解答信息工程学院徐燕萍第1章绪论一、基本内容数据、数据元素、数据对象、数据结构、存储结构和数据类型等概念术语的确定含义;抽象数据类型的定义、表示和实现方法;描述算法的类C语言;算法设计的基本要求以及从时间和空间角度分析算法的方法。

二、学习要点1.熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。

分清哪些是逻辑结构的性质,哪些是存储结构的性质。

2.了解抽象数据类型的定义、表示和实现方法。

3.熟悉类C语言的书写规范,特别要注意值调用和引用调用的区别,输入、输出的方式以及错误处理方式。

4.理解算法五个要素的确切含义:①动态有穷性(能执行结束);②确定性(对于相同的输入执行相同的路径);③有输入;④有输出;⑤可行性(用以描述算法的操作都是足够基本的)。

5.掌握计算语句频度和估算算法时间复杂度的方法。

三、基础知识题1.1简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

答:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

数据对象是性质相同的数据元素的集合,是数据的一个子集。

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

存储结构是数据结构在计算机中的表示(又称映像)。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

1.2试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。

数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。

程序设计语言中的数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

而抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)

数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)

数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)数据结构基础及深入及考试习题及实验参考答案见附录结论1、数据的逻辑结构是指数据元素之间的逻辑关系。

即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。

2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。

它依赖于计算机。

存储结构可分为4大类:顺序、链式、索引、散列3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。

它由基本的数据类型构成,并包括一组相关的服务(或称操作)。

它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。

4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。

5、在数据结构中,从逻辑上可以把数据结构分成(C)A、动态结构和表态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构6、算法的时间复杂度取决于(A)A、问题的规模B、待处理数据的初态C、问题的规模和待处理数据的初态线性表1、线性表的存储结构包括顺序存储结构和链式存储结构两种。

2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为(E),删除一个元素需要移动的元素的个数为(A)。

A、(n-1)/2B、nC、n+1D、n-1E、n/2F、(n+1)/2G、(n-2)/23、“线性表的逻辑顺序与存储顺序总是一致的。

”这个结论是(B)A、正确的B、错误的C、不一定,与具体的结构有关4、线性表采用链式存储结构时,要求内存中可用存储单元的地址(D)A、必须是连续的B、部分地址必须是连续的C一定是不连续的D连续或不连续都可以5、带头结点的单链表为空的判定条件是(B)A、head==NULLB、head->ne某t==NULLC、head->ne某t=headD、head!=NULL6、不带头结点的单链表head为空的判定条件是(A)A、head==NULLB、head->ne某t==NULLC、head->ne某t=headD、head!=NULL7、非空的循环单链表head的尾结点P满足(C)A、p->ne某t==NULLB、p==NULLC、p->ne某t==headD、p==head8、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是(B)A、O(1)B、O(n)C、O(n2)D、O(nlog2n)数据结构(第4版)习题及实验参考答案9、在一个单链表中,若删除p所指结点的后继结点,则执行(A)A、p->ne某t=p->ne某t->ne某t;B、p=p->ne某t;p->ne某t=p->ne某t->ne某t;C、p->ne某t=p->ne某t;D、p=p->ne某t->ne某t;10、在一个单链表中,若在p所指结点之后插入所指结点,则执行(B)A、->ne某t=p;p->ne某t=;B、->ne某t=p->ne某t;p->ne某t=;C、->ne某t=p->ne某t;p=;D、p->ne某t=;->ne某t=p;11、在一个单链表中,已知q是p的前趋结点,若在q和p之间插入结点,则执行(C)A、->ne某t=p->ne某t;p->ne某t=;B、p->ne某t=->ne某t;->ne某t=p;C、q->ne某t=;->ne某t=p;D、p->ne某t=;->ne某t=q;12、在线性结构中,第一个结点没有前趋结点,其余每个结点有且只有1个前趋结点。

徐州工程学院数据结构最小生成树实验文档

徐州工程学院数据结构最小生成树实验文档

.实验九图的最小生成树算法的实现实验预备知识:1.理解图最小生成树的意义和相应算法。

2.掌握带权图的存储结构。

一、实验目的1.使学生熟悉最小生成树的算法实现。

2.掌握带权图的存储结构和处理方法。

二、实验环境⒈硬件:每个学生需配备计算机一台。

操作系统:DOS或 Windows;⒉软件: DOS或 Windows操作系统 +Turbo C;三、实验要求1.能够独立完成带权图的存储和最小生成树的生成四、实验内容1.在自己的 U盘的“姓名 +学号”文件夹中创建“实验 9”文件夹,本次实验的所有程序和数据都要求存储到本文件夹中。

2.现在某电信公司要对如下图的几个城市之间进行光纤连接布线,请用合适的存储结构将下图存储到计算机中方便进行处理。

3.现在公司想以最小的代价将所有城市连通,方便所有城市间通信,请用普里姆算法和克鲁斯卡尔算法实现本图的最小生成树#include <stdio.h>#include <stdlib.h>#define INF 50typedef struct ArcNode{int adjvex;// 该弧所指向的顶点位置struct ArcNode *nextarc;// 下一个临接点int weight;// 弧的权重}ArcNode;// 表结点typedef struct VNode{char data;// 顶点信息ArcNode *firstarc;// 指向下一个结点}VNode,AdjList[6];typedef struct{AdjList LH;// 创建头结点数组int vexnum;// 图的点的个数int arcnum;// 图的边的个数}Graph;typedef struct{char nextvex;int lowcost;int know;}Auxiliary_array;// 辅助数组结构体void main (void){void buildtu (Graph*);void printgraph(Graph*);void prim( Graph *G, char u);char u;Graph UDG;Graph *G = &UDG;buildtu(G);printgraph(G);// 打印图printf(" 请输入起始顶点:\n");while(getchar()!='\n');u = getchar();prim(G ,u);}void buildtu (Graph *G) {// 建图int search(Graph *G,char a);int i,n1,n2,w;char a,b;ArcNode *p, *q;printf(" 请输入顶点个数和边的条数:\n");scanf("%d %d",&G->vexnum,&G->arcnum);printf(" 请输入顶点信息\n");for (i = 0; i < G->vexnum; ++i){while (getchar()!='\n');scanf("%c",&G->LH[i].data);G->LH[i].firstarc = NULL;}printf(" 请输入有关系的结点和该边的权重:\n");for(i=0;i<G->arcnum;++i){while (getchar()!='\n');scanf("%c %c %d",&a,&b,&w);n1=search(G,a);n2=search(G,b);p=G->LH[n1].firstarc;if(p == NULL){p=G->LH[n1].firstarc=(ArcNode *) malloc (sizeof(ArcNode));}else{while( p->nextarc !=NULL ){p=p->nextarc;}p=p->nextarc=(ArcNode *) malloc (sizeof(ArcNode));}q=G->LH[n2].firstarc;if(q == NULL){q=G->LH[n2].firstarc=(ArcNode *) malloc (sizeof(ArcNode));}else{while( q->nextarc !=NULL ){q=q->nextarc;}q=q->nextarc=(ArcNode *) malloc (sizeof(ArcNode));}p->adjvex=n2;p->weight=w;p->nextarc=NULL;q->adjvex=n1;q->weight=w;q->nextarc=NULL;}}int search (Graph *G,char a){ // 确定顶点a 在头结点数组中的位置int i;for(i=0;i<G->vexnum;++i){if(G->LH[i].data==a){return i;}}}void printgraph(Graph *G){// 打印图int i;ArcNode *p;for (i=0 ; i < G->vexnum; ++i){p=G->LH[i].firstarc;printf("data:%c \t",G->LH[i].data);while(p!=NULL){printf("firstarc->adjvex=%d",p->adjvex);p=p->nextarc;}printf("\n");}}void prim( Graph *G, char u){// 用 prim 算法实现最小生成树int search (Graph *G,char a);int minimize(Graph *G, Auxiliary_array[]);void printtable(Auxiliary_array[]);Auxiliary_array A[6]; // 创建辅助数组int i,j,seat;int location;ArcNode *p ;for (i = 0; i < G->vexnum; ++i) {A[i].nextvex = '0';A[i].know = 0;A[i].lowcost = INF;}location = search(G ,u);// 确定 u 元素在头结点数组中的位置for (p=G->LH[location].firstarc ; p != NULL; p=p->nextarc ){i = p->adjvex;A[i].nextvex = G->LH[location].data;A[i].lowcost = p->weight;A[i].know= 0;}A[location].know = 1;A[location].lowcost = 0;A[location].nextvex = '0';for(j=0;j<G->vexnum-1;++j){seat = minimize( G,A );printf("select min: %d\n", seat);A[seat].know = 1;p=G->LH[seat].firstarc;for (p; p != NULL; p=p->nextarc){i=p->adjvex;if(A[i].know == 0 && p->weight < A[i].lowcost){A[i].nextvex = G->LH[seat].data;A[i].lowcost = p->weight;}}}printtable(A); //打印辅助数组中的信息for (j = 0; j < G->vexnum; ++j)if (j != location)printf("%c<---->%c\n",A[j].nextvex,G->LH[j].data);}int minimize(Graph *G, Auxiliary_array A[]){// 取出辅助数组中权值最小的顶点所在的位置int i,place,num;num = INF;for (i = 0; i < G->vexnum; ++i){if(A[i].know == 0 && num >= A[i].lowcost){num= A[i].lowcost;place = i;}}return place;}void printtable(Auxiliary_array A[]) {//打印辅助数组int i;for (i = 0; i < 6; i++) {printf("modifier:%c lowcost:%d known:%d\n",A[i].nextvex,A[i].lowcost, A[i].know);}}实验总结:通过该实验,我深刻明白到了自己对循环的能力不足,书写代码的逻辑性也不够强,相信在以后的学习中能加强这方面的学习,争取在以后的学习中解决这两个方面的问题。

#《数据结构与算法》实验指导书

#《数据结构与算法》实验指导书

《数据结构和算法》实验指导书郁松软件学院第一部分:《数据结构》实验步骤和实验报告规范一、《数据结构》实验步骤随着计算机性能的提高,它所面临的软件开发的复杂度也日趋增加,因此软件开发需要系统的方法。

一种常用的软件开发方法,是将软件开发过程分为分析、设计、实现和维护四个阶段。

虽然数据结构课程中的实习题的复杂度远不如实际中真正的软件系统,但为了培养一个软件工作者所应具备的科学工作的方法和作风,我们制订了如下所述完成实习的5个步骤:1、问题分析和任务定义通常,实验题目的陈述比较简洁,或者说有模棱两可的含义。

因此,在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么,限制条件是什么。

注意:本步骤强调的是做什么,而不是怎么做。

对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。

例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么,是否接受非法的输入,对非法输入的回答方式是什么等等。

这一步还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式输入的数据。

2、数据类型和系统设计在设计这一步骤中需分逻辑设计和详细设计两步实现。

逻辑设计指的是,对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。

详细设计则为定义相应的存储结构并写出各过程和函数的伪码算法。

在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。

作为逻辑设计的结果,应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的规格说明),各个主要模块的算法,并画出模块之间的调用关系图。

详细设汁的结果是对数据结构和基本操作的规格说明作出进一步的求精,写出数据存储结构的类型定义,按照算法书写规范用类C语言写出过程或函数形式的算法框架。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构实验》实验指导书及答案信电工程学院计算机科学和技术教研室编2011.12数据结构实验所有代码整理作者郑涛声明:在这里我整理了数据结构实验的所有代码,希望能对大家的数据结构实验的考试有所帮助,大家可以有选择地浏览,特别针对一些重点知识需要加强记忆(ps:重点知识最好让孙天凯给出),希望大家能够在数据结构实验的考试中取得令人满意的成绩,如果有做的不好的地方请大家谅解并欢迎予以指正。

实验一熟悉编程环境实验预备知识:1.熟悉本课程的语言编译环境(TC或VC),能够用C语言编写完整的程序,并能够发现和改正错误。

2.能够灵活的编写C程序,并能够熟练输入C程序。

一、实验目的1.熟悉C语言编译环境,掌握C程序的编写、编译、运行和调试过程。

2.能够熟练的将C程序存储到指定位置。

二、实验环境⒈硬件:每个学生需配备计算机一台。

⒉软件:Windows操作系统+Turbo C;三、实验要求1.将实验中每个功能用一个函数实现。

2.每个输入前要有输入提示(如:请输入2个整数当中用空格分割:),每个输出数据都要求有内容说明(如:280和100的和是:380。

)。

3.函数名称和变量名称等用英文或英文简写(每个单词第一个字母大写)形式说明。

四、实验内容1.在自己的U盘中建立“姓名+学号”文件夹,并在该文件夹中创建“实验1”文件夹(以后每次实验分别创建对应的文件夹),本次实验的所有程序和数据都要求存储到本文件夹中(以后实验都按照本次要求)。

2.编写一个输入某个学生10门课程成绩的函数(10门课程成绩放到结构体数组中,结构体包括:课程编号,课程名称,课程成绩)。

3.编写一个求10门成绩中最高成绩的函数,输出最高成绩和对应的课程名称,如果有多个最高成绩,则每个最高成绩均输出。

4.编写一个求10门成绩平均成绩的函数。

5.编写函数求出比平均成绩高的所有课程及成绩。

#include<stdio.h>#include<conio.h>struct subject{int subject_id;char subject_name[20];double subject_grades;};struct subject sub[10];void input(){int i;printf("please input:\n");for(i=0;i<10;i++){scanf("%d %s %lf",&sub[i].subject_id,&sub[i].subject_name,&sub[i].subject_g rades);}printf("you just input:\n");for(i=0;i<3;i++){printf("%d %s %lf\n",sub[i].subject_id,sub[i].subject_name,sub[i].subject_g rades);}}void subject_max(){int i,flag;double max=sub[0].subject_grades;for(i=0;i<10;i++){if(sub[i].subject_grades>max)max=sub[i].subject_grades;flag=i;}printf("The high score of subject is %s %lf\n",sub[flag].subject_name,max);}void subject_average(){int i;double average,sum=sub[0].subject_grades;for(i=1;i<10;i++){sum+=sub[i].subject_grades;}average=sum/10;printf("subject's average is %lf\n",average);}void subjct_gtaverage(){int i,flag;double average,sum=sub[0].subject_grades;for(i=1;i<10;i++){sum+=sub[i].subject_grades;}average=sum/10;for(i=0;i<10;i++){if(sub[i].subject_grades>average){flag=i;printf("subject greater than average is %s %lf\n",sub[flag].subject_name,sub[flag].subject_grades);}}}int main(){input();subject_max();subject_average();subjct_gtaverage();return 0;}实验二顺序表的基本操作实验预备知识:1.熟练运用数组进行程序设计,掌握数组名和指针作为函数参数。

2.掌握结构体和结构体数组的访问与使用。

3.熟练实现顺序表类型和变量(如下所示)定于、熟悉顺序表的访问原理(顺序存储、随机访问)。

一、实验目的1.掌握顺序表的建立、数据元素的插入和删除、掌握数据元素的访问。

2.能够熟练的使用函数来实现顺序表的各种操作。

二、实验环境⒈硬件:每个学生需配备计算机一台。

⒉软件:Windows操作系统+Turbo C;三、实验要求1.定义一顺序表类型,并定义顺序表。

2.将教材中顺序表的建立、初始化、插入、删除等函数实现。

3.顺序表能够存储10名学生的基本信息(包括姓名、学号和成绩)。

4.由主函数按照用户要求对各个顺序表操作访问。

5.每次操作之前要有明确的说明,操作后要输出操作结果。

6.分析顺序表的插入、删除、查找的时间和空间复杂度。

四、实验内容1.在自己的U盘的“姓名+学号”文件夹中创建“实验2”文件夹,本次实验的所有程序和数据都要求存储到本文件夹中。

2.完成顺序表操作的如下函数:建立,初始化,增加,插入,删除。

#include "stdio.h"#include "malloc.h"#include "string.h"#define LIST_INIT_SIZE 1#define LISTINCREMENT 1struct stu{char name[6];char num[3];int cj;};struct sqlist{struct stu *elem;int length;int listsize;};void main(){struct sqlist* initlist_hc();void cshlist_hc(struct sqlist *l);void listinsert_hc(struct sqlist *l);void listdelete_hc(struct sqlist *l);void listhb_hc(struct sqlist *l1,struct sqlist *l2,struct sqlist *l3);struct sqlist *l1,*l2,*l3;char f;int i, k=0;printf("请选择对顺序表的操作,操作菜单如下:\n");for(i=0;i<80;i++)printf("*");printf("建立顺序表(C)\n");printf("初始化顺序表(N)\n");printf("顺序表中插入元素(I)\n");printf("顺序表中删除元素(D)\n");printf("合并顺序表(H)\n");printf("退出系统(E)\n");for(i=0;i<80;i++)printf("*");do{printf("输入大写字母按Enter确定:");flushall();f=getchar();if(f=='C'){if(k==0)l1=initlist_hc();else {l2=initlist_hc();}k++;}else if(f=='N'){if(k==1)cshlist_hc(l1);else cshlist_hc(l2);}else if(f=='I'){if(k==1)listinsert_hc(l1);else listinsert_hc(l2);}else if(f=='D'){if(k==1)listdelete_hc(l1);else listdelete_hc(l2);}else if(f=='H'){l3=initlist_hc();listhb_hc(l1,l2,l3);}}while(f!='E'); }struct sqlist *initlist_hc(){struct sqlist *l;l=(struct sqlist*)malloc(sizeof(struct sqlist));if(!l)printf("出错!\n");return(l);}void cshlist_hc(struct sqlist *l){struct stu *newbase;void printlist_hc(struct sqlist *l);char x[6],y[3];int z;l->elem=(struct stu*)malloc(LIST_INIT_SIZE*sizeof(struct stu));if(!l->elem)printf("出错!\n");l->length=0;l->listsize=LIST_INIT_SIZE;printf("请输入信息以-1结束:\n");scanf("%s %s %d",x,y,&z);while(z!=-1){if(l->length==l->listsize){newbase=(struct stu*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(struct stu)); if(!newbase)printf("出错!\n");l->elem=newbase;l->listsize+=LISTINCREMENT;}strcpy(l->elem[l->length].name,x);strcpy(l->elem[l->length].num,y);l->elem[l->length].cj=z;scanf("%s %s %d",x,y,&z);if(z!=-1)l->length++;}printlist_hc(l);}void listinsert_hc(struct sqlist *l){int i,j;struct stu *newbase;void printlist_hc(struct sqlist *l);if(l->length==l->listsize){newbase=(struct stu*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(struct stu)); if(!newbase)printf("出错!\n");l->elem=newbase;l->listsize+=LISTINCREMENT;}printf("输入要插入信息的位置:");scanf("%d",&j);j--;for(i=l->length;i>=j;i--){strcpy(l->elem[i+1].name,l->elem[i].name);strcpy(l->elem[i+1].num,l->elem[i].num);l->elem[i+1].cj=l->elem[i].cj;}printf("输入插入信息:\n");scanf("%s %s %d",l->elem[j].name,l->elem[j].num,&l->elem[j].cj);l->length++;printlist_hc(l);}void listdelete_hc(struct sqlist *l){void printlist_hc(struct sqlist *l);int i,j;printf("输入删除信息的位置:");scanf("%d",&j);j--;printf("删除的信息为:%s,%s,%d\n",l->elem[j].name,l->elem[j].num,l->elem[j].cj);for(i=j+1;i<=l->length;i++){strcpy(l->elem[i-1].name,l->elem[i].name);strcpy(l->elem[i-1].num,l->elem[i].num);l->elem[i-1].cj=l->elem[i].cj;}l->length--;printlist_hc(l);}void listhb_hc(struct sqlist *l1,struct sqlist *l2,struct sqlist *l3){void printlist_hc(struct sqlist *l);struct stu *p1,*p2,*p3;struct stu *p1_last,*p2_last;p1=l1->elem;p2=l2->elem;l3->length=l1->length+l2->length+1;l3->listsize=l1->length+l2->length+2;p3=l3->elem=(struct stu*)malloc(l3->listsize*sizeof(struct stu));if(!l3->elem)printf("出错!\n");p1_last=l1->elem+l1->length;p2_last=l2->elem+l2->length;while(p1<=p1_last&&p2<=p2_last){if(p1->cj>p2->cj){strcpy(p3->name,p1->name);strcpy(p3->num,p1->num);p3->cj=p1->cj;p1++;p3++;}else{strcpy(p3->name,p2->name);strcpy(p3->num,p2->num);p3->cj=p2->cj;p2++;p3++;}}while(p1<=p1_last){strcpy(p3->name,p1->name);strcpy(p3->num,p1->num);p3->cj=p1->cj;p1++;p3++;}while(p2<=p2_last){strcpy(p3->name,p2->name);strcpy(p3->num,p2->num);p3->cj=p2->cj;p2++;p3++;}printlist_hc(l3);}void printlist_hc(struct sqlist *l){int i;printf("当前表中信息如下:\n");for(i=0;i<=l->length;i++){printf("%s,%s,%d\n",l->elem[i].name,l->elem[i].num,l->elem[i].cj);}}实验三单链表的基本操作实验预备知识:1.熟练运用指针进行程序设计,掌握结构体指针。

相关文档
最新文档