A. 在C语言环境下实现复数运算
乱七八糟写了一个,肯定有很多不对的地方,懒得找了,如果你找到了发QQ(252290278)给我吧
#include
<stdio.h>
#include<string.h>
int
ope(char
num[])//计算有几个符号
{
int
count=0;
for(int
i=0;num[i]!='\0';i++)
if('+'==num[i]
||
'-'==num[i])
count++;
return
count;
}
void
inone(double
&a,double
&b)//输入一个复数
{
int
i,j,l;
char
num[100];
scanf("%s",num);
l=strlen(num);
if('i'==num[l-1])//有虚部
{
if(ope(num))//如果有符号
{
i=0;
if(2==ope(num))//有两个符号
{
if('+'==num[0])//如果实部是正数
{
for(i=1;i<l;i++)//将整数部分的值存放到整数a中
if('+'==num[i]
||
'-'==num[i])
{
for(j=1;j<i;j++)
a=a*10+num[j]-'0';
break;
}
}
else
if('-'==num[0])//如果实部是负数
{
for(i=1;i<l;i++)//将整数部分的值存放到整数a中
if('+'==num[i]
||
'-'==num[i])
{
for(j=1;j<i;j++)
a=a*10-(num[j]-'0');
break;
}
}
}
else
if(1==ope(num))//一个符号,即实部为正数或者没有实部
{
for(i=0;i<l;i++)//将整数部分的值存放到整数a中
if('+'==num[i]
||
'-'==num[i])
{
for(j=0;j<i;j++)
a=a*10+(num[j]-'0');
break;
}
}
//将虚数部分的值存放到整数b中
if('+'==num[i])//如果虚部是正数
for(j=i+1;j<l-1;j++)
b=b*10+num[j]-'0';
else
if('-'==num[i])
for(j=i+1;j<l-1;j++)
b=b*10-(num[j]-'0');
}
else//没有符号
for(i=0;i<l-1;i++)
b=b*10+num[j]-'0';
}
else//没有虚部
{
if('-'==num[0])//实部是负数
for(i=1;i<l;i++)//将整数部分的值存放到整数a中
a=a*10-(num[i]-'0');
else
{
i=0;
if('+'==num[0])//实部是正数
i++;
for(;i<l;i++)
a=a*10+num[i]-'0';
}
}
}
void
intwo(double
&a,double
&b,double
&c,double
&d)//输入两个复数
{
a=b=c=d=0;
printf("请输入第一个复数:\n");
inone(a,b);
printf("请输入第二个复数:\n");
inone(c,d);
}
void
pri(double
a,double
b)//输出
{
if(0==a
&&
0==b)
{
printf("0\n");
return;
}
if(a)
printf("%d",a);
if(b)
{
if(b>0)
printf("+");
printf("%di",b);
}
printf("\n");
}
void
add()//加
{
double
a,b,c,d;
intwo(a,b,c,d);
printf("这两个复数相加的结果为:");
pri(a+c,b+d);
}
void
sub()//减
{
double
a,b,c,d;
intwo(a,b,c,d);
printf("这两个复数相减的结果为:");
pri(a-c,b-d);
}
void
mul()//乘
{
double
a,b,c,d;
intwo(a,b,c,d);
printf("这两个复数相乘的结果为:");
pri(a*c-b*d,b*c+a*d);
}
void
exc()//除
{
double
a,b,c,d;
intwo(a,b,c,d);
if(c==0
&&
d==0)
{
printf("错误,除数为零!\n");
return;
}
printf("这两个复数相除的结果为:");
pri((a*c+b*d)/(c*c+d*d),(b*c-a*d)/c*c+d*d);
}
void
vei()//幂
{
int
n;
double
a,b,c,d;
intwo(a,b);
c=a;d=b;
printf("请出入n次幂(只能为整数!):\n");
scanf("%d",&n);
for(i=1;i<n;i++)
{
a=a*c-b*d;
b=b*c+a*d;
}
printf("这个复数相减的结果为:");
pri(a,b);
}
int
main()
{
int
n;
char
ch;
while(1)
{
printf("请选择需要的运算:\n");
printf("0.退出\n");
printf("1.加运算\n");
printf("2.减运算\n");
printf("3.乘运算\n");
printf("4.除运算\n");
printf("5.幂运算\n");
scanf("%c",&ch);
while('
'==ch
||
'\n'==ch)
scanf("%c",&ch);
if(ch<'0'
||
ch>'9')
{
printf("输入错误请重新输入!\n");
continue;
}
n=ch-'0';
switch(n)
{
case
0:
return
0;
case
1:
add();
break;
case
2:
sub();
break;
case
3:
mul();
break;
case
4:
exc();
break;
case
5:
vei();
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
return
0;
}
B. C语言(有关复数)
你在VC中得不到正确的结果是因为printf函数的描述符用错了,把%d改为%f
在TC中编译错误是因为TC比VC检查要严格,是一个标准的C编译器,而VC其实是一个VC++编译器
在TC中声明了结构之后定义结构变量不能省略struct关键字,如要省略,则必须给该结构类型起个别名。对于你的程序来说,只要把复数类型声明改为如下方式即可,你试试吧:
typedef struct {
double real;
double imag;
} complex;
C. C语言关于复数
#include<stdio.h>
typedefstruct{
floatr;
floati;
}Complex;
ComplexreadComlexNumber(){
Complexn;
printf("Inputrealpart:");
scanf("%f",&n.r);
printf("Inputimaginarypart:");
scanf("%f",&n.i);
returnn;
}
ComplexsumComplex(Complexa,Complexb){
Complexc;
c.r=a.r+b.r;
c.i=a.i+b.i;
returnc;
}
ComplexdiffereneComplex(Complexa,Complexb){
Complexc;
c.r=a.r-b.r;
c.i=a.i-b.i;
returnc;
}
ComplexmultiplyComplex(Complexa,Complexb){
Complexc;
c.i=a.r*b.i+a.i*b.r;
c.r=a.r*b.r-a.i*b.i;
returnc;
}
ComplexdivideComplex(Complexa,Complexb){
Complexc;
c.r=(a.r*b.r+a.i*b.i)/(b.r*b.r+b.i*b.i);
c.i=(a.i*b.r-a.r*b.i)/(b.r*b.r+b.i*b.i);
returnc;
}
voidprintComplex(Complexn){
printf("%.2f+%.2fi",n.r,n.i);
}
intmain(){
Complexa,b,c;
printf("InputComplexnumbera: ");
a=readComlexNumber();
printf("InputComplexnumberb: ");
b=readComlexNumber();
printf("The2Complexa&bis: ");
printComplex(a);printf("and");printComplex(b);
//sum
c=sumComplex(a,b);
printf(" (a+b)=");printComplex(c);
//diff
c=differeneComplex(a,b);
printf(" (a-b)=");printComplex(c);
//multiply
c=multiplyComplex(a,b);
printf(" (a*b)=");printComplex(c);
//divide
c=divideComplex(a,b);
printf(" (a/b)=");printComplex(c);
return0;
}
D. 急!!!复数运算C语言程序
structcomplex{
floatrmz;//实部
floatlmz;//虚部
};
//产生一个复数.
complexgetacomplex(floata,floatb){
complexnode=newcomplex();
node.rmz=a;
node.lmz=b;
returnnode;}
//两个复数求和
complexaddcomplex(complexcomplex1,complexcomplex2)
{
complexnode=newcomplex();
node.rmz=complex1.rmz+complex2.rmz;
node.lmz=complex1.lmz+complex2.lmz;
returnnode;
}
//求两个复数的差
complexsubcomplex(complexcomplex1,complexcomplex2)
{
complexnode=newcomplex();
node.rmz=complex1.rmz-complex2.rmz;
node.lmz=complex1.lmz-complex2.lmz;
returnnode;
}
//求两个复数的积
complexproctcomplex(complexcomplex1,complexcomplex2)
{
complexnode=newcomplex();
node.rmz=complex1.rmz*complex2.rmz-complex1.lmz*complex2.lmz;
node.lmz=complex1.lmz*complex2.rmz+complex2.lmz*complex2.rmz;
returnnode;
}
//求实部
floatgetcomplexrmz(complexcomplex1)
{
returncomplex1.rmz;
}
//求虚部
floatgetcomplexlmz(complexcomplex1)
{
returncomplex1.lmz;
}
E. C语言怎么实现复数运算
这个是一个列子,可以参考下
struct complex{
float rmz; //实部
float lmz;//虚部
};
//产生一个复数.
complex getAComplex(float a,float b){
complex Node=new complex();
Node.rmz=a;
Node.lmz=b;
return Node;}
//两个复数求和
complex addComplex(complex complex1,complex complex2)
{
complex Node=new complex();
Node.rmz=complex1.rmz+complex2.rmz;
Node.lmz=complex1.lmz+complex2.lmz;
return Node;
}
//求两个复数的差
complex subComplex(complex complex1,complex complex2)
{
complex Node=new complex();
Node.rmz=complex1.rmz-complex2.rmz;
Node.lmz=complex1.lmz-complex2.lmz;
return Node;
}
//求两个复数的积
complex proctComplex(complex complex1,complex complex2)
{
complex Node=new complex();
Node.rmz=complex1.rmz*complex2.rmz-complex1.lmz*complex2.lmz;
Node.lmz=complex1.lmz*complex2.rmz+complex2.lmz*complex2.rmz;
return Node;
}
//求实部
float getComplexRmz(complex complex1)
{
return complex1.rmz;
}
//求虚部
float getComplexLmz(complex complex1)
{
return complex1.lmz;
}
F. c语言中如何定义一个复数型数组
首先加入头文件:
#include
<complex>
然后进行复数类型定义:
typedef
complex<float>
Comp;//这里double也可
这样就可以使用复数结构了
如:声明复数数组
Comp
a[5];
G. 用c语言如何输出复数
这不是c语言的问题。
数学上复数的表示方法是 a + bi,按这个形式输出就可以了,比如:
1+9i
-3.45-8.33i
输出方法这样就行:
print("%f+%fi", a, b);
H. 在C语言中,在VC程序中,复数如何表示
在FORTRAN语言中是有复数的。(最早的语言)
表示方法为(a,b)---a实部b虚部。FORTRAN语言可以复数计算。
在C语言中,在VC程序中可能是没有的。
你要用可以自己在C语言中用复数计算规则自己扩展。VC程序扩展更方便了,类型与运算操作符重载。
I. 如何用c语言编一个复数的四则运算
1、设计一个可进行复数运算的演示程序。要求实现下列六种基本运算
1)由输入的实部和虚部生成一个复数
2)两个复数求和;
3)两个复数求差;
4)两个复数求积,
5)从已知复数中分离出实部;
6)从已知复数中分离出虚部。
运算结果以相应的复数或实数的表示形式显示(最好用结构体的方法)
要是能用c++和stl,可以这样写#include <complex>#include <iostream>void main(){ using namespace std; complex<double> a(3, 2); complex<double> b(5, 6); complex<double> result(0,0); result = a*b/(a+b); cout << result;}
2、例程:
stdio.h>
#include<conio.h>
#include<stdlib.h>
#defineERR-1
#defineMAX100/*定义堆栈的大小*/
intstack[MAX];/*用一维数组定义堆栈*/
inttop=0;/*定义堆栈指示*/
intpush(inti)/*存储运算数,入栈操作*/
{
if(top<MAX)
{
stack[++top]=i;/*堆栈仍有空间,栈顶指示上移一个位置*/
return0;
}
else
{
printf("Thestackisfull");
returnERR;
}
}
intpop()/*取出运算数,出栈操作*/
{
intvar;/*定义待返回的栈顶元素*/
if(top!=NULL)/*堆栈中仍有元素*/
{
var=stack[top--];/*堆栈指示下移一个位置*/
returnvar;/*返回栈顶元素*/
}
else
printf("Thestackisempty! ");
returnERR;
}
voidmain()
{
intm,n;
charl;
inta,b,c;
intk;
do{
printf(" AriothmaticOperatesimulator ");/*给出提示信息*/
printf(" Pleaseinputfirstnumber:");/*输入第一个运算数*/
scanf("%d",&m);
push(m);/*第一个运算数入栈*/
printf(" Pleaseinputsecondnumber:");/*输入第二个运算数*/
scanf("%d",&n);
push(n);/*第二个运算数入栈*/
printf(" Chooseoperator(+/-/*//):");
l=getche();/*输入运算符*/
switch(l)/*判断运算符,转而执行相应代码*/
{
case'+':
b=pop();
a=pop();
c=a+b;
printf(" Theresultis%d ",c);
printf(" ");
break;
case'-':
b=pop();
a=pop();
c=a-b;
printf(" Theresultis%d ",c);
printf(" ");
break;
case'*':
b=pop();
a=pop();
c=a*b;
printf(" Theresultis%d ",c);
printf(" ");
break;
case'/':
b=pop();
a=pop();
c=a/b;
printf(" Theresultis%d ",c);
printf(" ");
break;
}
printf(" Continue?(y/n):");/*提示用户是否结束程序*/
l=getche();
if(l=='n')
exit(0);
}while(1);
}
J. 数据结构c语言复数运算
1、首先打开vc6.0, 新建一个项目。