本文目录一览:
- 1、试用C语言的结构类型定义表示复数的抽象数据类型
- 2、从C语言的角度来解释什么是抽象数据类型?
- 3、为何说C语言在对抽象数据类型的支持上是欠缺的?
- 4、我想问一下C语言中抽象数据类型中的基本操作中的操作名是自定义的还是系统定义了?
- 5、试用C语言的结构类型定义表示复数的抽象数据类型。
试用C语言的结构类型定义表示复数的抽象数据类型
#include stdio.h
//结构体
typedef struct
{
double a;
double b;
} COMPLEX;
//加
COMPLEX add (COMPLEX a, COMPLEX b)
{
a.a += b.a;
a.b += b.b;
return a;
}
//减
COMPLEX subtract (COMPLEX a, COMPLEX b)
{
a.a -= b.a;
a.b -= b.b;
return a;
}
//乘
COMPLEX multiply (COMPLEX a, COMPLEX b)
{
COMPLEX c;
c.a = a.a*b.a - a.b*b.b;
c.b = a.a*b.b + a.b*b.a;
return c;
}
//除
COMPLEX divide (COMPLEX a, COMPLEX b) {
COMPLEX c;
double divisor = b.a*b.a + b.b*b.b;
if (divisor - 0 == 0)
exit (0);
c.a = (a.a*b.a + a.b*b.b) / divisor;
c.b = (a.b*b.a - a.a*b.b) / divisor;
return c;
}
然后读入数据,判断运算符号就行了。
从C语言的角度来解释什么是抽象数据类型?
简单的说一下吧,所谓抽象数据类型ADT,是指
我们在逻辑上定义的
一种
数据类型。
如你所知道的,计算机内,无论是内存还是外存,都只是一组二进制的数位而已。
大多数时候,比如我们所熟知的
Char类型、Int类型等等,都是一组已经定义好的二进制数位。
所谓定义好,是指,在这一组数位中,如Char类型,8位,即一组8个二进制数位,我们如何标识和处理每一位,以及解读每一位所代表的意义。
你学过C,应该知道ASCII码,和二进制计数。
Char的这个数据类型的含义就是说
以二进制计数
算出对应的数值,
再以ASCII码为标准,解读出这8位二进制位中所表示的字母。
事实上,我想说的是,这就是一个基本的抽象数据类型了。
当然,ADT不仅仅是一组数位的定义,他还包括一组定义在这个结构上的一组操作。
struct这个方法,在后来的演变中,成为了C++和其他高等语言中的类(class)。
我知道,这样讲你肯定不是很明白,但关于这个东西,有一门课程叫做《数据结构》,中间详细叙述了所有有关
抽象数据类型的概念
。
其中,有一本
《数据结构C语言版》清华大学出版社
严蔚敏著
的教材,是所有计算机专业学生必修的一门课程。你可以看看。
祝好运!
为何说C语言在对抽象数据类型的支持上是欠缺的?
因为C语言是面向过程的,它没有类的概念。虽然C的结构体在一定程度上有类似类的概念,它仅仅是个结构体,没有对应的方法。结构体和结构体之间也没有关联。
我想问一下C语言中抽象数据类型中的基本操作中的操作名是自定义的还是系统定义了?
全都是自定义的。
C语言没什么抽象数据类型。都是教学参考书,为了一般化,假装假设一个抽象数据类型,然后假设一些基本操作,主要目的是为了讲解数据结构,比如链表啊,堆栈啊。
真正实现中,都是具体的。
C语言本身,操作系统本身根本不会定义这些内容。
试用C语言的结构类型定义表示复数的抽象数据类型。
定义:
class complex
{
private:
double real; //复数的实部
double imag; //复数的虚部 复数表示为 real + imag i (如 2 + 3i)
public:
complex()
{
real=0;
image=0;
}
complex(double r, double i)
{
real=r;
imag=i;
}
void input(); //输入函数
void output(); //输出函数
void add(complex a);
void sub(complex a);
……………………………… //加、减、乘、除为成员函数 运算时直接调用就行
//建议您先实现加法和减法
}
祝您成功,加油!