天天看點

資料結構:複數的建構

 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語言還沒入門,一些基本操作沒掌握吧,還有就是可惡的編譯器,出些亂七八糟的錯誤。加油吧,學之,難者亦易已!