• 沒有找到結果。

数据结构实验与学习指导 - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "数据结构实验与学习指导 - 万水书苑-出版资源网"

Copied!
6
0
0

加載中.... (立即查看全文)

全文

(1)第一部分 实验 第 1 章 绪论. 实验一. 类 C 算法的程序实现(一). 一、实验目的 1.熟悉类 C 语言书写规范,学会将类 C 语言描述的算法转换成 C 语言源程序,并上机 调试。 2.加深理解数据的逻辑结构和物理结构等概念,学会分析基本算法的时间复杂度和空间 复杂度。 二、知识准备 1.数据结构的基本概念:数据、数据元素、数据对象、数据结构、数据的逻辑结构、物 理(存储)结构、数据类型、抽象数据类型等知识。 2.算法的概念和算法分析等知识。 3.C 语言程序设计有关函数及数组等的知识及编程环境的使用方法。 三、实验内容和实现分析 (一)实验内容 1.通过键盘输入一组整数数据并存入一维数组中。 2.求数组中数据的最小值、最大值,并通过函数参数返回。 以上各功能分别编写成函数形式,由主程序调用,注意参数的传递。 (二)实现分析 定义数据的最大数目、数据元素的类型及一维数组: #define MAXSIZE 30 typedef int ElemType; ElemType a[MAXSIZE]. /*定义数据的最大数目*/ /*定义数据元素的类型,假设为 int */ /*定义一个一维数组存放数据元素值*/. 1.数据输入的实现。在向数组中输入数据之前,首先通过键盘输入数据的个数 n,然后 经过 n 次循环输入数据,并存入数组 b[ ]中。算法如下: void Creat(ElemType b[],int n){ scanf(&n); /*算法描述可以省略 C 语言格式*/ for(i=0;i<n;i++) scanf(&b[i]);.

(2) 数据结构实验与学习指导. 2 }. 该算法的时间复杂度为 O(n)。 2.求数组 b[]中最小值、最大值的实现。首先使最小值变量 min 和最大值变量 max 等于 数组的第一项值 b[0],然后与数组中的每一个元素值 b[i]相比较,如果 b[i]小于 min,则使 min 等于 b[i];如果 b[i]大于 max,则使 max 等于 b[i],经过 n 次循环,就可以求出最小值和最大 值。算法如下: void MaxMin(ElemType b[],int n, ElemType *max ,ElemType *min ) { /*求数组 b 中的 n 个数据的最大值和最小值*/ max=min=b[0]; for(i=1;i<n;i++) { if (b[i] >max) max= b[i]; if (b[i] <min) min= b[i]; }/*for*/ } /*Maxmin*/. 该算法的时间复杂度为 O(n)。 四、实验程序 /* sy1_1.c */ #include<stdio.h> /*C 源程序*/ #define MAXSIZE 30 /*定义数据的最大数目*/ typedef int ElemType; /*定义数据元素的类型,假设为 int,用户也可以自行定义*/ void Create(ElemType b[],int n){ int i; printf("\n 请输入%d 个数字:\n",n); for(i=0; i<n; i++) scanf("%d",&b[i]); /*通过键盘输入一组整数数据,存入一维数组中*/ printf("\n 您输入的数据是:"); for(i=0;i<n;i++) printf("%4d",b[i]); /*将数据输出到屏幕上*/ }/*Create*/ void Maxmin(ElemType b[],int n, ElemType *max ,ElemType *min ) { /*求数组 b 中的 n 个数据的最大值和最小值*/ int i; *min=b[0]; *max=b[0]; for(i=1;i<n;i++) { if (b[i]>*max) *max=b[i]; if (b[i]<*min) *min=b[i]; }/*for*/ printf("\n 最小值是%d",*min); printf("\n 最大值是%d",*max); return; }/*Maxmin*/ void main() { ElemType a[MAXSIZE],max,min; int i,n; printf("\n 输入您要创建的数组元素个数:"); scanf("%d",&n); Create(a,n); printf("\n 创建完成!\n");.

(3) 第一部分 实验. 3. Maxmin(a,n,&max, &min); printf("\n 主函数中:"); printf("\n 最小值是%d",min); printf("\n 最大值是%d",max); getch(); }. 说明:类 C 语言作为数据结构和算法的描述工具,使得数据结构和算法的描述与讨论简 明清晰,不拘泥于 C 语言的细节,又容易转换成 C 语言程序。有关基本操作的算法采用函数 的形式描述,在 C 语言的实现中,可以通过指针变量作形式参数,接收变量的地址,达到“传 地址”的目的。希望读者对这些知识点通过练习加深理解和体会。 程序测试: 请输入要创建的数组元素个数:4 请输入 4 个数字: 33 22 11 55 您输入的数据是: 33 22 11 55 创建完成! 最小值是 11 最大值是 55 主函数中: 最小值是 11 最大值是 55. 五、思考题 如果要求数据元素的个数和数据值的输入都在函数中完成,如何将数据元素的个数传回 主程序中?. 实验二. 类 C 算法的程序实现(二). 一、实验目的 1.进一步掌握将类 C 语言描述的算法转换成 C 语言源程序及上机调试的方法。 2.掌握用结构体定义复杂数据类型的方法、数据项的引用及结构体数组应用的知识。 3.进一步加深理解数据的逻辑结构和物理结构等概念,为学好数据结构打基础。 二、知识准备 C 语言程序设计中有关结构体和数组等知识。 三、实验内容和实现分析 (一)实验内容 1.建立含有若干个学生信息(包括学号、姓名、成绩)的数组,将结果在屏幕上输出。 2.求所有学生的平均成绩。.

(4) 数据结构实验与学习指导. 4. (二)实现分析 为了实现上述功能,将学生信息说明成结构体: typedef struct std_info { int Num; char Name[8]; float Score; }ElemType ;/* 学生信息*/. 定义结构体数组: ElemType stud [MAXSIZE];. 可以将输入学生信息的功能及求所有学生的平均成绩各写成一个函数实现。求所有学生 的平均成绩就是对学生信息数组中的 Score 项求平均值,在函数中将所有学生的成绩求和,再 除以学生人数即可。以上两个算法的时间复杂度均为 O(n)。 四、程序实现 /* sy1_2.c */ #include<stdio.h> #define MAXSIZE 30 /*定义数组的最大长度*/ typedef struct std_info { int Num; char Name[8]; float Score; }ElemType ; int n; ElemType stud[MAXSIZE]; /*定义学生信息数组*/ void Create_St(ElemType St[]) /*创建学生信息数组*/ { int i,num; char ss[8]; float score; printf("请输入学生人数:\n"); scanf("%d",&n); for(i=1;i<=n;i++) /*输入 n 个学生信息*/ { printf("请输入第%d 个学生的信息(Num,Name,Score):\n",i); scanf("%d",&num); getchar();gets(ss); scanf("%f",&score); St[i].Num=num; strcpy(St[i].Name,ss); St[i].Score=score; } }/* Create_St*/ void Print_St(ElemType St[],int n ) /*输出学生信息*/ { int i; printf("学生信息数组的内容是:\n"); for(i=1;i<=n;i++) printf("num=%d,Name=%s,score=%f\n", St[i].Num, St[i].Name, St[i].Score);.

(5) 第一部分 实验 }/* Print_St*/ float Avr(ElemType St[],int n){ int i; float sum=0.0 ; for(i=1;i<=n;i++) sum+=St[i].Score; return(sum/(n)); }/* Avr*/ void main() { float av; Create_St(stud); printf("主函数中学生数量是:%d\n",n); Print_St(stud,n); av=Avr(stud,n); printf("学生平均分数是:%f\n", av); }. /*求学生平均成绩*/. 子程序说明: void Create_St(ElemType St[])——创建学生信息数组子程序。 void Print_St(ElemType St[],int n)——输出学生信息子程序。 float Avr(ElemType St[],int n)——求学生平均成绩子程序。 程序测试(假设输入 4 个数据) : 请输入学生人数: 4(学生人数) 请输入第 1 个学生的信息(Num,Name,Score): 1(学号) Wang Fan(姓名) 88(成绩) 请输入第 2 个学生的信息(Num,Name,Score): 2 Li Mlng 99 请输入第 3 个学生的信息(Num,Name,Score): 3 Zhang Li 77 请输入第 4 个学生的信息(Num,Name,Score): 4 Wu Lan 66 主函数中学生数量是:4 学生信息数组的内容是: num=1,Name=Wang Fan,score=88.000000 num=2,Name=Li Mlng,score=99.000000 num=3,Name=Zhang Li,score=77.000000 num=4,Name=Wu Lan,score=66.000000 学生平均分数是 82.500000. 5.

(6) 数据结构实验与学习指导. 6. 常用的一些常量定义、包含库函数等语句可以写在用户自己定义的一个头文件中,如第 2 章 sj.h 的说明,以便在后面的实验中应用。 五、思考题 如果将语句 int n; ElemType stud[MAXSIZE];. 定义在主函数中,调用函数时如何传递参数,如何访问结构体的成员?请编程序验证。.

(7)

參考文獻

相關文件

[r]

笛卡儿企图通过坐标系给几何引进新方 法, 他的成就远远超出他的期望. 坐标系是数 学中的双刃剑, 使得几何的目的可以通过代 数达到, 反过来,

3.正弦函数y=Asin(ωx+φ)的图象之间的变换关系是学生最熟悉的一种伸缩变换.教 材从学生最熟悉的这一内容入手 ,分别比较了函数y=sin2x 和y=sinx 的图象之间的关

[r]

为此, 我们需要建立函 数的差商与函数的导数间的基本关系式, 这些关系式称为“微分学中值定理”...

十、信息的传递

同学们,小学阶段的英语学习就要结束了,在丰富多样、活泼有趣的英

穿插课文之中、形 式多种多样的活动使 我们所学的知识与技 能得到即时的巩固、应 用和内化,它是我们主 动建构知识、拓展能