本文目錄一覽:
- 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);
……………………………… //加、減、乘、除為成員函數 運算時直接調用就行
//建議您先實現加法和減法
}
祝您成功,加油!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/311123.html