数据结构实验之实现两个复数的四则运算

来源:互联网 发布:2016淘宝冷门暴力类目 编辑:程序博客网 时间:2024/05/16 00:33

1.实验目的

    了解并掌握用c语言来编写数据结构源程序的方法。

2.需求分析

       首先建立一个复数,然后根据提示用户输入两个复数,使得能同时进行两个复数的加、减、乘、除运算。

            输入形式和输入值的范围:分别输入两个复数,其格式为:a+bi用enter结束输入。

           输出的形式:按程序规定输出其运算值,如:运算后只有实数时只输出实数虚数部分不表示,反之一样。      

3.概要设计

      (1)为了实现上述程序的功能,需要定义一个表示复数的抽象数据类型。

      (2)本程序包含的函数:

l 主函数 main()

l 构造函数typedef struct  {};

l 调用函数:fushu ceartfushu(float a,float b)

fushu add(fushu c1,fushu c2)

fushu sub(fushu c1,fushu c2)

fushu mul(fushu c1,fushu c2)

fushu div(fushu cv1,fushu c2)

void print_Z(fushu z)

            各函数关系如下:

           (3)主函数的伪码

                      main()

                      {

                            说明一个构造函数fushu;

                            定义两个实数和虚数分别为z1,z2;

                            定义符号变量ch;

                            提示输入实数和虚数z1,z2;

                            调用子函数;

                            提示输入+ - * /;

                            循环做下面处理直至输入“0”:

                                  {

                                       判断输入的符号做下面处理:

                                             {

输入+时,调用加法子函数,打印输出   ;

输入-时,调用减法子函数,打印输出    ;

输入*时,调用乘法子函数,打印输出    ;

输入/时,调用除法子函数,打印输出    ;

                                             提示输入+-*/;

}

}

}

4.详细设计

      #include <stdio.h>

typedef structComplex              //构造一个复数Complex

{

      float real;                    //定义实数为 real

      float imag;                              //定义虚数为 image

}fushu;

fushuceartfushu(float a,float b);  //调用函数的宏定义

fushu add(fushuc1,fushu c2);

fushu sub(fushuc1,fushu c2);

fushu mul(fushuc1,fushu c2);

fushu div(fushucv1,fushu c2);

void print_Z(fushuz);

fushuceartfushu(float a,float b) //复数调用函数

{

      fushu z;                            //定义一个复数z

      z.real=a;                           //将a付给z的实部

      z.imag=b;                              //将b付给z的虚部

      return z;

}

fushu add(fushuc1,fushu c2)      //加法调用函数

{

      fushu sum;

      sum.real=c1.real+c2.real;     //实部加法运算

      sum.imag=c1.imag+c2.imag;    //虚部加法运算

      return sum;

}

fushu sub(fushuc1,fushu c2) //减法调用函数

{

      fushu cha;

      cha.real=c1.real-c2.real;    //实部减法运算

      cha.imag=c1.imag-c2.imag;    //虚部减法运算

      return cha;                          

}

 

fushu mul(fushuc1,fushu c2)      //乘法调用函数

{

      fushu ji;

      ji.real=c1.real*c2.real-c1.imag*c2.imag;   //实部乘法运算

      ji.imag=c1.imag*c2.real+c1.real*c2.imag;    //虚部乘法运算

      return ji;

}

fushu div(fushuc1,fushu c2)    //除法调用函数

{

      fushu shang;

      shang.real=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);   //实部除法运算

      shang.imag=(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);   //虚部除法运算

      return shang;

}

void print_Z(fushuz)          //输出调用函数

{

      if (z.imag==0)             //判断运算后虚数部分是否为0

           printf("结果为:%0.2f\n",z.real);   //是,就输出实部

      else

           if(z.real==0)         //判断运算后实数部分是否为0

                 printf("结果为:%0.2fi\n",z.imag); //是,就输出虚部

           else

                 printf("结果为:%0.2f+%0.2fi\n",z.real,z.imag);//否则输出实数和虚部

}

void main()

{

      fushu v1,v2,sum,cha,ji,shang;  

      float z1,z2;                                                //定义实部和虚部

      char ch;                                                      //定义符号

      printf("please inpur first fushunumber:");       //提示输入第一个复数

      scanf("%f+%fi",&z1,&z2);                                //输入语句

      v1=ceartfushu(z1,z2);                                   //赋值语句

      printf("the other one:");                                //提示输入

      scanf("%f+%fi",&z1,&z2);

      v2=ceartfushu(z1,z2);

      printf("please choice operation: +,-, * or /:");//提示输入运算符号

      getchar();                           //收集运算符

      ch=getchar();                            //将收集到的符号赋给ch

      while(ch!='0')                                                 //循环语句

      {

           switch(ch)                                                 //判断语句

           {

                 case'+':sum=add(v1,v2);print_Z(sum);break;  /*调用子函数运算语句*/

                 case'-':cha=sub(v1,v2);print_Z(cha);break;

                 case'*': ji=mul(v1,v2);print_Z(ji);break;         

                 case'/':shang=div(v1,v2);print_Z(shang);break;

                 default: printf("enterdata error!\n");                                              printf("\n");

                 printf("please choiceoperation: +, -, * or /:");  //提示输入运算符

           }

           ch=getchar(); 

      }   

}