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语言还没入门,一些基本操作没掌握吧,还有就是可恶的编译器,出些乱七八糟的错误。加油吧,学之,难者亦易已!