資料結構實驗之實現兩個複數的四則運算
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();
}
}