用c语言编程计算复数.doc
VC++ 6.0下用c语言编程计算复数(电气专业专用)
j,e,cos,,jsin,,1,,欧拉公式:
学过电路的人都知道,欧拉公式在电路中应用很广,特别是遇到正弦量的题,别说有多烦, 代数复数和极坐标复数的转化计算超级麻烦,不做过电路题的人是不能理解的,介于此,本人想通过c语言来简化这一操作,如果是代数复数的直接输入实部和虚部,如果是极坐标的直接输入模和相角,转化和计算交给程序和计算机去做吧~
要使用此程序必须要有c的编程环境,这里推荐大家使用VC++系类的。
各位同学如果学过c语言的应该不会陌生的。
下面教大家如何创建一个
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
区—工程—源文件。
要先创建一个文件夹用来存放工程区,工程,和c语言,要有良好的习惯。
打开之后使用快捷键“Ctrl+n”打开新建目录对话框。
选显卡选中Workspaces,右边第一栏改个名字,不能有中文啊,第二栏找到路径存放,之
后点击ok,工程区创建完成。
再使用快捷键“Ctrl+n”,选中projects,名字自定义,其他的如图所示,点击ok。
点击完finish之后,再点击一次ok,工程创建完成。
选中工程,再来一次快捷键“Ctrl+n”。
跟前面操作差不多,就是输入个名字而已,我们编的是c语言,一定要加后缀名.c,否则默
认为.cpp,点击ok完成源文件创建。
下面把程序复制到源文件里面:
#include
#include
#define PI 3.1415926 double Re(double m,double zeta) /*极坐标转换实部*/ {
double r;
r=m*cos(PI*zeta/180);
return r;
}
double Im(double m,double zeta) /*极坐标转换虚部*/ {
double j;
j=m*sin(PI*zeta/180);
return j;
}
double Mo(double x,double y) /*复数转换为幅值*/ {
double m;
m=sqrt(x*x+y*y);
return m;
}
double Phi(double x,double y) /*复数输出相角*/ {
double zeta;
zeta=180/PI*atan(y/x);
if((x>=0&&y>=0)||(x>=0&&y<0)) /*第一、四限角*/
return zeta;
else if((x<0&&y<0)||(x<0&&y>=0)) /*第二、三限角*/
return (zeta+180);
return 0;
}
void input(double *one,double *two,int *pwn) /*选择复数输入形式,
并输入该数,并返回3个值*/
{
int w;
double u,v;
printf("请选择数的输入类别:1为复数输入,0为极坐标方式输入\n");
scanf("%d",&w);
if(w)
{
printf("以复数形式输入该数,先输入实部,再输入虚部:\n");
scanf("%lf%lf",&u,&v);
*one=u;
*two=v;
*pwn=1;
}
else
{
printf("以极坐标形式输入该数,先输入幅值,再输入相角:\n");
scanf("%lf%lf",&u,&v);
*one=u;
*two=v;
*pwn=0;
}
}
void main()
{
double a1,a2,b1,b2,d1,d2,e1,e2,f1,f2,g1,g2;
int pwn1,pwn2,c1,c2,c3; /*pwn为标志位,为1时
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示以复数输入,为0时表
示以极坐标形式输入*/
printf("请输入第一个复数\n");
input(&a1,&a2,&pwn1);
printf("请输入第二个复数\n");
input(&b1,&b2,&pwn2);
printf("请选择算法种类:加法和减法为 1;乘法和除法为 0\n");
scanf("%d",&c1);
if(c1) /*c1为真执行加减法*/
{
printf("选择加法输入 1,选择减法输入 0\n");
scanf("%d",&c2);
if(!pwn1) //加减法用复数方便多了.
{
d1=Re(a1,a2);
d2=Im(a1,a2);
}
else
{
d1=a1;
d2=a2;
}
if(!pwn2)
{
e1=Re(b1,b2);
e2=Im(b1,b2);
}
else
{
e1=b1;
e2=b2;
}
if(c2) //c2为真执行加法.
{
{
f1=d1+e1;
f2=d2+e2;
g1=Mo(f1,f2);
g2=Phi(f1,f2);
}
printf("输出结果为:\n");
if(!pwn1&&!pwn2)
printf("%.3f/_%.2f?+%.3f/_%.2f?=\n",a1,a2,b1,b2);
if(!pwn1&&pwn2)
printf("%.3f/_%.2f?+%.3f+%.3fi=\n",a1,a2,b1,b2);
if(pwn1&&!pwn2)
printf("%.3f+%.3fi+%.3f/_%.2f?=\n",a1,a2,b1,b2);
if(pwn1&&pwn2)
printf("%.3f+%.3fi+%.3f+%.3fi=\n",a1,a2,b1,b2);
printf("复数形式为: %.3f+%.3fi\n",f1,f2);
printf("极坐标形式为:%.3f/_%.2f\n",g1,g2);
}
else //c2为假执行减法.
{
{
f1=d1-e1;
f2=d2-e2;
g1=Mo(f1,f2);
g2=Phi(f1,f2);
}
printf("输出结果为:\n");
if(!pwn1&&!pwn2)
printf("%.3f/_%.2f?-%.3f/_%.2f?=\n",a1,a2,b1,b2);
if(!pwn1&&pwn2)
printf("%.3f/_%.2f?-%.3f+%.3fi=\n",a1,a2,b1,b2);
if(pwn1&&!pwn2)
printf("%.3f+%.3fi-%.3f/_%.2f?=\n",a1,a2,b1,b2);
if(pwn1&&pwn2)
printf("%.3f+%.3fi-%.3f+%.3fi=\n",a1,a2,b1,b2);
printf("复数形式为: %.3f+%.3fi\n",f1,f2);
printf("极坐标形式为:%.3f/_%.2f\n",g1,g2);
}
}
else //乘除法化极坐标形式方便多啦.
{
printf("选择乘法输入 1,选择除法输入 0\n");
scanf("%d",&c3);
if(pwn1)
{
d1=Mo(a1,a2);
d2=Phi(a1,a2);
}
else
{
d1=a1;
d2=a2;
}
if(pwn2)
{
e1=Mo(b1,b2);
e2=Phi(b1,b2);
}
else
{
e1=b1;
e2=b2;
}
if(c3) //c3为真执行乘法.
{
{
f1=d1*e1;
f2=d2+e2;
g1=Re(f1,f2);
g2=Im(f1,f2);
}
printf("输出结果为:\n");
if(!pwn1&&!pwn2)
printf("%.3f/_%.2f?*%.3f/_%.2f?=\n",a1,a2,b1,b2);
if(!pwn1&&pwn2)
printf("%.3f/_%.2f?*(%.3f+%.3fi)=\n",a1,a2,b1,b2);
if(pwn1&&!pwn2)
printf("(%.3f+%.3fi)*%.3f/_%.2f?=\n",a1,a2,b1,b2);
if(pwn1&&pwn2)
printf("(%.3f+%.3fi)*(%.3f+%.3fi)=\n",a1,a2,b1,b2);
printf("复数形式为: %.3f+%.3fi\n",g1,g2);
printf("极坐标形式为:%.3f/_%.2f\n",f1,f2);
}
else //c3为假执行除法
{
{
f1=d1/e1;
f2=d2-e2;
g1=Re(f1,f2);
g2=Im(f1,f2);
}
printf("输出结果为:\n");
if(pwn1&&pwn2)
printf("%.3f/_%.2f?/%.3f/_%.2f?=\n",a1,a2,b1,b2);
if(pwn1&&!pwn2)
printf("%.3f/_%.2f?/(%.3f+%.3fi)=\n",a1,a2,b1,b2);
if(!pwn1&&pwn2)
printf("(%.3f+%.3fi)/%.3f/_%.2f?=\n",a1,a2,b1,b2);
if(!pwn1&&!pwn2)
printf("(%.3f+%.3fi)/(%.3f+%.3fi)=\n",a1,a2,b1,b2);
printf("复数形式为: %.3f+%.3fi\n",g1,g2);
printf("极坐标形式为:%.3f/_%.2f\n",f1,f2);
}
}
}
按顺序点击三个图标,编译完成并执行程序。
按提示执行操作,由于编者水平有限,改程序局限于两个数操作,有兴趣的读者可自行修改。
武大东分08电气
简同学
2011/11/03
百分百原创,请尊重个人劳动成果。关注个人微博,有时间上传个人最新作品并告诉大家~
新浪微博: