请写一个c语言函数,要有结构和函数,结构定义复数,函数加减复数,主函数调用printf

如题所述

我感觉都是C++写这个。。

#include <iostream>
using namespace std;
class complex 
{
public:
complex(complex &c);        //深度复制构造函数
complex(float r, float i);  //普通构造函数
void set(float r, float i); //变量重新赋值
complex();                  //无参构造函数
friend complex add(complex &b, complex &c);   //相加
friend complex sub(complex &b, complex &c);   //相减
    friend complex mul(complex &b, complex &c);   //相乘
void show();
private:
float real;
float imag;
};
complex::complex()
{
real = 0;
imag = 0;
}
complex::complex(float r , float i)
{
real = r;
imag = i;
}
complex::complex(complex &c)
{
real = c.real;
imag = c.imag;
}
void complex::set(float r, float i)
{
real = r;
imag = i;
}
void complex::show()
{
cout<<"result is:"<<real<<( imag>0 ? "+":"-")<<abs(imag)<<"i"<<endl;   //abs()取绝对值函数
}
complex add(complex &b, complex &c)
{
float t1, t2;
t1 = b.real + c.real;
t2 = b.imag + c.imag;
return complex(t1, t2);
}
complex sub(complex &b, complex &c)
{
    float t1, t2;
t1 = b.real - c.real;
t2 = b.imag - c.imag;
return complex(t1, t2);
}
complex mul(complex &b, complex &c)
{
float t1, t2 ;
t1 = b.real * c.real - b.imag * c.imag;
t2 = b.real * c.imag + c.real * b.imag;
    return complex(t1, t2);
}

int main()
{
complex c1(3, 5);
complex c2(4, 8);
complex c3;
c3 = add(c1, c2); //调用赋值构造函数
c3.show();
c3 = sub(c1, c2);
c3.show();
c3 = mul(c1, c2);
c3.show();
return 0;
}

你要C的也有,还是大一无聊弄的……

#include <stdio.h>
#include <stdlib.h>

 
typedef struct{ 
float rmz; 
float lmz; 
}complex; 
//构造一个复数
complex getAComplex(float a,float b){ 
 complex complex1;
 complex1.rmz=a; 
 complex1.lmz=b; 
 return complex1;

//两个复数求和 
complex addComplex(complex complex1,complex complex2) 
{ complex complex3;
 complex3.rmz=complex1.rmz+complex2.rmz; 
 complex3.lmz=complex1.lmz+complex2.lmz; 
 return complex3; 

//求两个复数的差 
complex subComplex(complex complex1,complex complex2) 

 complex complex3;
 complex3.rmz=complex1.rmz-complex2.rmz; 
 complex3.lmz=complex1.lmz-complex2.lmz; 
 return complex3; 

//求两个复数的积 
complex productComplex(complex complex1,complex complex2) 

 complex complex3; 
 complex3.rmz=complex1.rmz*complex2.rmz-complex1.lmz*complex2.lmz; 
 complex3.lmz=complex1.lmz*complex2.rmz+complex2.lmz*complex1.rmz;
 return complex3;

//分离出实部
float getComplexRmz(complex complex1) 

 return complex1.rmz; 

//分离出虚部
float getComplexLmz(complex complex1) 

 return complex1.lmz; 

//打印复数
void PrintCom(complex com1)
{
  if(com1.rmz!=0&&com1.lmz!=0)
   printf("%.2f+%.2fi\n",com1.rmz,com1.lmz);     
  else if(com1.rmz==0&&com1.lmz!=0) 
   printf("%.2fi\n",com1.lmz);
  else if(com1.rmz!=0&&com1.lmz==0)
   printf("%.2f\n",com1.rmz);     
  else if(com1.rmz==0&&com1.lmz==0)
   printf("%.2f\n",com1.rmz);
}
//主函数
void main()
{
 float rmz1,lmz1,rmz2,lmz2;
 complex com1,com2,com3;
 int choice;
 printf("1.求两个复数的和\t2.求两个复数的差\t3.求两个复数的积\n4.分离出实部\t\t5.分离出虚部\t\t6.退出\n\n");
 
 printf("输入第1个复数的实部和虚部:");
 scanf("%f,%f",&rmz1,&lmz1);
 com1=getAComplex(rmz1,lmz1);
 printf("所生成的复数1为:");
 PrintCom(com1);
 printf("输入第2个复数的实部和虚部:");
 scanf("%f,%f",&rmz2,&lmz2);
 com2=getAComplex(rmz2,lmz2);
 printf("所生成的复数2为:");
 PrintCom(com2);
  while(1){                     
        printf("输入你的选择:");
fflush(stdin);
        scanf("%d",&choice);
        switch(choice)
     {
        case 1:
            com3=addComplex(com1,com2);
            printf("两个复数的和为:");
PrintCom(com3);
            break;
        case 2:
            com3=subComplex(com1,com2);
            printf("两个复数的差为:");
PrintCom(com3);
            break;
        case 3:
            com3=productComplex(com1,com2);
            printf("两个复数的积为:");
            PrintCom(com3);
            break;
        case 4:
            printf("复数1的实部为:%.2f\n",getComplexRmz(com1));  
            printf("复数2的实部为:%.2f\n", getComplexRmz(com2));
            break;
        case 5:
            printf("复数1的虚部为:%.2f\n",getComplexLmz(com1));  
            printf("复数2的虚部为:%.2f\n",getComplexLmz(com2)); 
            break;
        case 6:
            break;
        default:
            printf("请输入1~6的数字!\n"); break;
        } 
  if(choice==6) break;
  }
}

不知道有没有别的错误……

不懂再问吧

上课去了……


2013 5 27 14:14

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-27
#include <stdio.h>
typedef struct {double r;double i;}complex;//复数结构,实部r和虚部i
complex add(complex a,complex b);// 声明复数相加函数
complex sub(complex a,complex b);// 声明复数相减函数
int main()
{
complex a={1,2},b={3,4},c;
c=add(a,b);
printf("%.0lf%+%.0lfi\n",c.r,c.i);
c=sub(a,b);
printf("%.0lf%+%.0lfi\n",c.r,c.i);
return 0;
}
complex add(complex a,complex b)
{
complex c;
c.r=a.r+b.r;
c.i=a.i+b.i;
return c;
}
complex sub(complex a,complex b)
{
complex c;
c.r=a.r-b.r;
c.i=a.i-b.i;
return c;
}
第2个回答  2013-05-27
#include <stdio.h>
typedef struct {double r;double i;}complex;
complex add(complex a,complex b);
complex sub(complex a,complex b);
int main()
{
complex a={1,2},b={3,4},c;
c=add(a,b);
printf("%.0lf%+.0lfi\n",c.r,c.i);
c=sub(a,b);
printf("%.0lf%+.0lfi\n",c.r,c.i);
return 0;
}
complex add(complex a,complex b)
{
complex c;
c.r=a.r+b.r;
c.i=a.i+b.i;
return c;
}
complex sub(complex a,complex b)
{
complex c;
c.r=a.r-b.r;
c.i=a.i-b.i;
return c;
}