C語言資料結構複數的建構及運作
#include <stdio.h>
typedef struct
{
float Realpart;//實部
float Imagepart;//虛部
}Complex;
void Create(Complex &C,float x,float y)//為什麼取位址呢?因為這個函數要改變主函數的實參,不然的話指派語句隻在本函數裡有用了。實參不變化這個函數就相當于不存在。可以用printf語句試一下,如果沒有取位址,複數就沒有被建構
{//構造一個x+yi的複數
C.Realpart=x;
C.Imagepart=y;
}
float GetReal(Complex C)
{
//取得實部的值
return C.Realpart;
}
float GetImag(Complex C)
{//取得虛部的值
return C.Imagepart;
}
Complex Add(Complex C1,Complex C2)
{
//求兩個複數C1和C2的和sum
Complex sum;
sum.Realpart=C1.Realpart+C2.Realpart;
sum.Imagepart=C1.Imagepart+C2.Imagepart;
return sum;
}
Complex Sub(Complex C1,Complex C2)
{//求兩個複數C1和C2的差difference
Complex difference;
difference.Realpart=C1.Realpart-C2.Realpart;
difference.Imagepart=C1.Imagepart-C2.Imagepart;
return difference;
}
main()
{
//建立複數C,D,并輸出其實部、虛部
Complex C;
float a=2,b=3;
Create(C,a,b);
Complex D;
float c=5,d=6;
Create(D,c,d);
printf("%lf %lf\n",C.Realpart,C.Imagepart);
printf("%lf %lf\n",D.Realpart,D.Imagepart);
//分别輸出複數C的實虛部
printf("%lf\n",GetReal(C));
printf("%lf\n",GetImag(C));
//輸出兩個複數C、D的和
Complex E=Add(C,D);
printf("%lf %lf\n",E.Realpart,E.Imagepart);
//輸出兩個複數C、D的差
E=Sub(C,D);
printf("%lf %lf\n",E.Realpart,E.Imagepart);
}
雜記:
1、在寫函數Create的時候,書上說是&Complex C,但是編譯一直出錯[Error] variable or field 'Create' declared void。後來發現書上錯了,把&Complex C改成Complex &C就行了。後來想想也對,&取位址,怎麼會在類型前面呢?肯定是在變量前面啊。(看來對什麼都要有懷疑精神,不能一直聽信書上的)。
慢慢學着,對C語言的恐懼感也慢慢減弱了。之前一直自閉,恐怕就是C語言還沒入門,一些基本操作沒掌握吧,還有就是可惡的編譯器,出些亂七八糟的錯誤。加油吧,學之,難者亦易已!