抽象数据类型的实现
实验0:抽象数据类型的实现
1、实验目的
∙
∙
∙
∙ 了解抽象数据类型的表示和实现方法 会用C 语言中已存在的数据类型来说明新的结构。 能用已实现的操作来组合新的操作。 熟悉C 语言的程序设计
2、实验内容
输入圆的半径,输出圆的面积和周长。
设计一个圆的抽象数据类型,并定义求圆的面积和周长的两个操作, 输入数据是圆的半径r ,圆的面积S=πr 2, 圆的周长L=2πr 。
圆的类型定义:
struct circle {
float r;
float area;
float perimeter;}
typedef struct circle *Circle;
操作:
Circle createCircle(float r)
创建半径为r 的圆
float getArea(Circle c)
求圆的面积
float getPerimeter (Circle c)
求圆的周长
具体操作如下:
首先启动启动visual c++新建一个工程命名为circle, 紧接着分别新建头文件circle.h 和源文件circle.cpp 、以及主函数main.cpp 。
1) 其中文件中的定义为:
struct circle;
typedef struct circle *Circle;
Circle createCircle(float r);
float getArea(Circle c);
float getPerimeter (Circle c);
2) 主函数main.cpp 中的程序算法为:
#include
#include"circle.h"
void main()
{
}
3) 源文件circle.cpp 中的调用函数及其主要算法:
#include
#include
#include"circle.h"
float r; Circle acircle; printf("please input a radius to r"); scanf("%f",&r); acircle=createCircle(r); printf("the areas=%f\n",getArea(acircle)); printf("the perimeter=%f\n",getPerimeter(acircle));
struct circle
{
};
Circle createCircle( float r) /* 创建半径为r 的圆 */
{
}
float getArea(Circle c)
{
}
float getPerimeter (Circle c)
{
float r; float area; float perimeter; Circle newcircle=(Circle)malloc(sizeof(struct circle)); if(newcircle!=NULL) { } else free(newcircle); printf("Out of space!!\n"); /* 存储分配失败 */ return NULL; newcircle ->r=r; newcircle ->area=3.14f*r*r; newcircle ->perimeter=2*3.14f*r; return newcircle; return c->area; return c-> perimeter;
3、实验结果
4、实验分析
结构体是抽象的数据类型,在头文件中定义该数据之时不必注明过程。同时在主函数中必须在函数之前表明相关的调用函数以及库函数名,否则连最简单的Printf 到最后都不能识别。最值得注意的是scanf("%f",&r);如果其中取地址符号“&”漏写,即使编译和组件程序都没有错误,但是到输入数据之时则会出现无可预知的错误,假如是大型的程序代码,要回过头来检验该错误时是相当的困难,所以在格式化输入时也是相当值得小心和注意的。还有就是定义数据类型的时候不能重复定义同一个变量,这样会出现相应的错误,而且定义的变量不能在使用之时而使用不同的基类型的数据进行运算,解决措施则是在数据后加相应强制性后缀,通过改变数据的类型使得数据前后有统一性。最后则是不管用任何语言编写程序代码的过程中,逻辑性和函数性问题解决后,还有就是像“;”和用中文输入法输入的符号都会最终使得编译器无法识别,以致程序无法正常的运行。
5、实验总结
通过本次抽象数据类型的实现试验以及书本的相关内容,另我认
识到了抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。由此可知在定义或使用大量不同含义的数据之时,无需使用繁琐且难操作的数组等类型数据,使用结构体以及配合相应的逻辑思维,可以简单易操作的使用和管理大量不同含义的数据类型。同时也认识到了抽象数据类型的描述包括给出抽象数据类型的名称、数据的集合、数据之间的关系和操作的集合等方面的描述。抽象数据类型的设计者根据这些描述给出操作的具体实现,抽象数据类型的使用者依据这些描述使用抽象数据类型。从基本上认识了数据结构等的相关编译原理和注意输入错误、操作类型的错误,则对以后编写和修改程序肯定能够有举足轻重的作用。由这个实验可以知道若想成为一名出色的程序员,拥有雄厚的专业技能之外,一颗谨慎细致的心也是必不可少的。