《数据结构复数的实现与操作》由会员分享,可在线阅读,更多相关《数据结构复数的实现与操作(5页珍藏版)》请在金锄头文库上搜索。
1、/*/文件名: * * */作者:湖北科技学院 计科院 曹帅/日期:2013.10.28/功能:实现复数的基本操作/*/头文件#include#include#include#include#include/函数返回状态代码#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define INFEASIBLE -1#define OVERFLOW -2/使用动态分配的顺序存储结构typedef int Status;typedef int ElemType;typedef ElemType * Complex;Status Init
2、Complex(Complex &C,ElemType real,ElemType imag)/初始化一个复数C=(ElemType *)malloc(2*sizeof(ElemType);if(!C) exit(OVERFLOW);C0=real;C1=imag;return OK;/InitComplexStatus DestroyComplex(Complex &C)/销毁一个复数free(C);C=NULL;return OK;/DestroyComplexStatus GetReal(Complex C,ElemType &real)/获取复数的实数部分real=C0;return
3、OK;/GetRealStatus AddComplex(Complex C1,Complex C2,Complex &C3)/两个复数相加C3=(ElemType *)malloc(2*sizeof(ElemType);if(!C3) exit(OVERFLOW);C30=C10+C20;C31=C11+C21;return OK;/AddComplexStatus MultiplyComplex(Complex C1,Complex C2,Complex &C4)/两个复数相乘C4=(ElemType *)malloc(2*sizeof(ElemType);if(!C4) exit(OVE
4、RFLOW);C40=C10*C20-C11*C21;C41=C10*C21+C11*C20;return OK;/MutiplyComplexStatus SubComplex(Complex C1,Complex C2,Complex &C5)/两个复数相减C5=(ElemType *)malloc(2*sizeof(ElemType);if(!C5) exit(OVERFLOW);C50=C10-C20;C51=C11-C21;return OK;/SubComplexStatus DivComplex(Complex C1,Complex C2,Complex &C6)/两个复数相除C
5、6=(ElemType *)malloc(2*sizeof(ElemType);if(!C6) exit(OVERFLOW);C60=(C10*C20+C11*C21)/(C20*C20+C21*C21);C61=(C10*C21-C11*C20)/(C20*C20+C21*C21);return OK;/AddComplexvoid main()Complex C1,C2,C3,C4,C5,C6;ElemType real1,imag1,real2,imag2,temp;int select,i;while(1)printf(ntt*复数操作菜单*nn);printf(tt 1.复数的输入;
6、n);printf(tt 2.复数的输出;n);printf(tt 3.复数的四则运算;n);printf(tt 4.复数的实部获取;n);printf(tt 5.退出;nn);printf(tt*n);printf(tt 您的选择是 (1-5):);scanf(%d,&select);if(select 5|select 1)/限定输入选项printf(tt 输入错误 !n);printf(ttt 按任意键返回主菜单.n);system(cls);getch();switch(select)case 1:system(cls);/清屏;printf(nt*输入操作界面*n);printf(n
7、ttreal part: );scanf(%d,&real1);printf(ttimage part: );scanf(%d,&imag1);printf(nttreal part: );scanf(%d,&real2);printf(ttimage part: );scanf(%d,&imag2);InitComplex(C1,real1,imag1);/创建复数InitComplex(C2,real2,imag2);/创建复数,若无该部则无法执行下一步AddComplex(C1,C2,C3);MultiplyComplex(C1,C2,C4);SubComplex(C1,C2,C5);D
8、ivComplex(C1,C2,C6);printf(ttt 按任意键返回主菜单.n);system(cls);/清屏;getch();/返回主菜单;break;case 2:system(cls);/清屏;printf(t *输出操作界面*n);printf(nttComplex 1 is: (%d + %di)n,C10,C11);printf(ttComplex 2 is: (%d + %di)n,C20,C21);printf(ttt 按任意键返回主菜单.n);getch();system(cls);/清屏system(cls);break;case 3:system(cls);/清屏
9、printf(t*四则运算界面*n);printf(nttThe Add : n);printf(tt(%d+%di) + (%d+%di)= %d + %din,C10,C11,C20,C21,C30,C31);printf(nttThe Mut : n);printf(tt(%d+%di) * (%d+%di)= %d + %din,C10,C11,C20,C21,C40,C41);printf(nttThe Sub : n);printf(tt(%d+%di) - (%d+%di)= %d + %din,C10,C11,C20,C21,C50,C51);printf(nttThe Div
10、 : n);if(C61 = 0)printf(tt(%d+%di) / (%d+%di)= %d n,C10,C11,C20,C21,C60);elseprintf(tt(%d+%di) / (%d+%di)= %d + %din,C10,C11,C20,C21,C60,C61);printf(ttt 按任意键返回主菜单.n);getch();system(cls);break;case 4:system(cls);/清屏printf(tt*实部获取界面*n);printf(nttWhich real part want to get(1 or 2) ? );scanf(%d,&i);if(
11、i!=1&i!=2)printf(ttInput error!n);else if(i=1) GetReal(C1,temp);printf(ttFisrt complexs real part is: %dn,temp);else GetReal(C2,temp); printf(ttSeconed complexs real part is: %dn,temp);printf(ttt 按任意键返回主菜单.n);getch();system(cls);break;case 5:printf(tt 成功退出 !n);DestroyComplex(C1);/销毁复数DestroyComplex(C2);DestroyComplex(C3);DestroyComplex(C4);/销毁复数DestroyComplex(C5);DestroyComplex(C6);return ;