1. 程式人生 > >資料結構實驗之實現兩個複數的四則運算

資料結構實驗之實現兩個複數的四則運算

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(); 

      }   

}