#include "stdafx.h"
#include "math.h"
#include "stdio.h"
#include "ComplexNumber.h"算法
//複數做圖
void oplot(int n, double x[], double y[], char xc, char yc, char c,double *xd, double *yd)
{
int i,j,k;
double xx,yy;
char xy[72][72];
for (i=0; i<=71; i++)
for (j=0; j<=71; j++) xy[i][j]=' ';
xy[0][35]='Y';
for (i=1; i<=71; i++) xy[i][36]=yc;
xy[36][71]='X';
for (j=0; j<=70; j++) xy[36][j]=xc;
xx=0.0;
yy=0.0;
for (k=0; k<=n-1; k++)
{
if (fabs(x[k])>xx) xx=fabs(x[k]);
if (fabs(y[k])>yy) yy=fabs(y[k]);
}
xx=35.0/xx;
yy=35.0/yy;
for (k=0; k<=n-1; k++)
{
i=37.0-yy*y[k]-0.5;
j=xx*x[k]+36.0-0.5;
xy[i][j]=c;
}
printf("\n");
for (i=0; i<=71; i++)
{
for (j=0; j<=71; j++)
printf("%c",xy[i][j]);
printf("\n");
}
printf("\n");
printf("X-scale is:%13.7e\n",xx);
printf("Y-scale is:%13.7e\n",yy);
printf("\n");
*xd=xx;
*yd=yy;
return;
}io
//複數對數
void oclog(double x, double y, double *u, double *v)
{
double p;
p=log(sqrt(x*x+y*y));
*u=p;
*v=atan2(y,x);
return;
}程序
//複數的N次方根
void ontrt(double x, double y, int n, double u[], double v[])
{
int k;
double r,q,t;
if (n<1) return;
q=atan2(y,x);
r=sqrt(x*x+y*y);
if (r+1.0!=1.0)
{
r=(1.0/n)*log(r);
r=exp(r);
}
for (k=0; k<=n-1; k++)
{
t=(2.0*k*3.1415926+q)/n;
u[k]=r*cos(t);
v[k]=r*sin(t);
}
return;
}語言
//複數指數
void ocexp(double x, double y, double *u, double *v)
{
double p;
p=exp(x);
*u=p*cos(y);
*v=p*sin(y);
return;
}di
//複數正弦
void ocsin(double x, double y, double *u, double *v)
{
double p,q;
p=exp(y);
q=exp(-y);
*u=sin(x)*(p+q)/2.0;
*v=cos(x)*(p-q)/2.0;
return;
}co
//複數除法
void ocdiv(double a, double b, double c, double d, double *e, double *f)
{
double p,q,s,w;
p=a*c;
q=-b*d;
s=(a+b)*(c-d);
w=c*c+d*d;
if (w+1.0==1.0)
{
*e=1.0e+35*a/fabs(a);
*f=1.0e+35*b/fabs(b);
}
else
{
*e=(p-q)/w;
*f=(s-p-q)/w;
}
return;
}math
//複數乘冪
void opowr(double x, double y, int n, double *u, double *v)
{
double r,q;
q=atan2(y,x);
r=sqrt(x*x+y*y);
if (r+1.0!=1.0)
{
r=n*log(r);
r=exp(r);
}
*u=r*cos(n*q);
*v=r*sin(n*q);
return;
}return
//複數乘法
void ocmul(double a, double b, double c, double d, double *e, double *f)
{
double p,q,s;
p=a*c;
q=b*d;
s=(a+b)*(c+d);
*e=p-q;
*f=s-p-q;
return;
}void
//複數餘弦
void occos(double x, double y, double *u, double *v)
{
double p,q;
p=exp(y);
q=exp(-y);
*u=cos(x)*(p+q)/2.0;
*v=-sin(x)*(p-q)/2.0;
return;
}
----根據《C語言經常使用算法程序集》整理printf