数据结构编程复数计算+有理数的加减乘除+三元组_第1页
数据结构编程复数计算+有理数的加减乘除+三元组_第2页
数据结构编程复数计算+有理数的加减乘除+三元组_第3页
数据结构编程复数计算+有理数的加减乘除+三元组_第4页
数据结构编程复数计算+有理数的加减乘除+三元组_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/ 三元组 /头文件#include<stdio.h>#include<malloc.h>#include<stdlib.h>/函数结果状态代码#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 * Triplet;Status InitTriplet(Triplet &T

2、,ElemType e1,ElemType e2,ElemType e3)/初始化三元组T=(ElemType *)malloc(3*sizeof(ElemType);if(!T) exit(OVERFLOW);T0=e1;T1=e2;T2=e3;return OK;/InitTripletStatus DestroyTriplet(Triplet &T)/销毁三元组free(T);T=NULL;return OK;/DestroyTripletStatus Get(Triplet T,int i,ElemType &e)/返回第 i 个值if(i<1|i>3) r

3、eturn ERROR;e=Ti-1;return OK;/GetStatus Put(Triplet &T,int i,ElemType e) /置第 i 个值为 eif(i<1|i>3) return ERROR;Ti-1=e; return OK;/PutStatus IsAscending(Triplet T) /判断三元组是否是升序 if(T0<=T1)&&(T1<=T2) return TRUE; else return FALSE;/IsAscendingStatus IsDescending(Triplet T) /判断三元组是否

4、为降序 if(T0>=T1)&&(T1>=T2) return TRUE; else return FALSE;/IsDescendingStatus Max(Triplet T,ElemType &e) /返回三元组中的最大值 e=(T0>T1)?T0:T1; e=(e>T2)?e:T2; return OK;/MaxStatus Min(Triplet T,ElemType &e) /返回三元组中的最小值 e=(T0<T1)?T0:T1; e=(e<T2)?e:T2; return OK;/Minvoid main()Tr

5、iplet T;ElemType a,b,c,d,e,f,g; int i,j,k,l;printf(" 请输入您想构建的三元组: "); scanf("%d%d%d",&a,&b,&c);InitTriplet(T,a,b,c); printf(" 您构建的三元组为: %d,%d,%dn",T0,T1,T2);printf(" 请输入您想获得的数字的位序: "); scanf("%d",&i);if(!Get(T,i,d) printf(" 您输入的值

6、有误 ,无法获取。 n"); else printf(" 您想获得的数字为: %dn",d);printf(" 请输入您想替换的数字的位序: "); scanf("%d",&j);printf(" 请输入您想替换的数字: "); scanf("%d",&e);if(!Put(T,j,e) printf(" 您输入的值有误,无法替换。 n");elseprintf(" 替换后的三元组为: %d,%d,%dn",T0,T1,T2);k

7、=IsAscending(T);if(k) printf(" 此三元组为升序排列。 n");else printf(" 此三元组不是升序排列。 n");l=IsDescending(T);if(l) printf(" 此三元组为降序排列。 n");else printf(" 此三元组不是降序排列。 n");Max(T,f); printf(" 此三元组中的最大值为 %dn",f);Min(T,g);printf(" 此三元组中的最小值为 %dn",g);DestroyTrip

8、let(T); 复数 /头文件#include<stdio.h>#include<malloc.h>#include<stdlib.h>/函数返回状态代码#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 InitComplex(Comple

9、x &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;

10、return 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;/AddComplexvoid main() Complex C1,C2,C3;ElemType real1,imag1,real2,imag2,temp; int i;printf(" 请输入您想创建的第一个复数: &quo

11、t;); scanf("%d%d",&real1,&imag1);printf(" 请输入您想创建的第二个复数: "); scanf("%d%d",&real2,&imag2); InitComplex(C1,real1,imag1);InitComplex(C2,real2,imag2);printf(" 您创建的两个复数分别是 %d+%di,%d+%din",C10,C11,C20,C21);printf(" 你想获取第一个复数的实部还是第二个复数的实部? "

12、); scanf("%d",&i);if(i!=1&&i!=2) printf(" 您输入的值有误,无法获取。 n");else if(i=1) GetReal(C1,temp); printf(" 第一个复数的实部为 %dn",temp);else GetReal(C2,temp); printf(" 第二个复数的实部为 %dn",temp);AddComplex(C1,C2,C3); printf("(%d+%di)+(%d+%di)=%d+%din",C10,C11

13、,C20,C21,C30,C31);DestroyComplex(C1);DestroyComplex(C2);DestroyComplex(C3); 有理数 /头文件#include<stdio.h>#include<malloc.h>#include<stdlib.h>/函数返回状态代码#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define INFEASIBLE -1#define OVERFLOW -2/运用动态分配的顺序存储结构typedef int Status;typedef

14、 int ElemType;typedef ElemType * Rational;Status InitRational(Rational &R,ElemType frac,ElemType deno)/初始化有理数R=(ElemType *)malloc(2*sizeof(ElemType);if(!R) exit(OVERFLOW);R0=frac;R1=deno;return OK;/InitRationalStatus DestroyRational(Rational &R)/销毁有理数free(R);R=NULL;return OK;/DestroyRational

15、int gcd(ElemType m,ElemType n)/求最大公因数int r;if(m<0)m=-m;if(n<0)n=-n;r=m%n;/ 辗转相除法:除数变被除数 ,余数变除数 ,商为 0 停while(r!=0)m=n; n=r; r=m%n; return n;/gcdStatus AddRational(Rational Ra,Rational Rb,Rational &Rc)/有理数的相加Rc=(ElemType *)malloc(2*sizeof(ElemType);/ 勿忘 if(!Rc) exit(OVERFLOW);Rc0=Ra0*Rb1+Ra1

16、*Rb0;Rc1=Ra1*Rb1;int temp=gcd(Rc0,Rc1);Rc0=Rc0/temp;Rc1=Rc1/temp;return OK;/AddRationalStatus SubRational(Rational Ra,Rational Rb,Rational &Rc)/有理数的相减 Rc0=Ra0*Rb1-Ra1*Rb0;Rc1=Ra1*Rb1;ElemType temp=gcd(Rc0,Rc1);Rc0=Rc0/temp;Rc1=Rc1/temp;return OK;/SubRationalStatus MulRational(Rational Ra,Rationa

17、l Rb,Rational &Rc)/有理数的乘法Rc0=Ra0*Rb0;Rc1=Ra1*Rb1;ElemType temp=gcd(Rc0,Rc1);Rc0=Rc0/temp;Rc1=Rc1/temp; return OK;/MulRationalStatus DivRational(Rational Ra,Rational Rb,Rational &Rc)/有理数的除法Rc0=Ra0*Rb1;Rc1=Ra1*Rb0;ElemType temp=gcd(Rc0,Rc1);Rc0=Rc0/temp;Rc1=Rc1/temp; return OK;/DivRationalvoid

18、 main()Rational Ra,Rb,Rc;ElemType a1,a2,b1,b2;printf(" 请输入第一个有理数,第一个数为分子,第二个数为分母:");scanf("%d%d",&a1,&a2);printf(" 请输入第二个有理数,第一个数为分子,第二个数为分母:");scanf("%d%d",&b1,&b2);if(a2=0|b2=0) printf(" 您输入的值有误,无法创建。 "); else InitRational(Ra,a1,a2);InitRational(Rb,b1,b2);printf(" 您构造的两个有理数分别为: %d/%d,%d/%dn",a1,a2,b1,b2);AddRational(Ra,Rb,Rc); printf("%d/%d+%d/%d=%d/%dn",Ra0,Ra1,Rb0,Rb1,Rc0,Rc1);SubRational(Ra,Rb,Rc); print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论