广工 数据结构设计性实验 有理数四则运算 报告.docx
《广工 数据结构设计性实验 有理数四则运算 报告.docx》由会员分享,可在线阅读,更多相关《广工 数据结构设计性实验 有理数四则运算 报告.docx(26页珍藏版)》请在冰豆网上搜索。
广工数据结构设计性实验有理数四则运算报告
序号:
《数据结构》设计性实验
题目_第2题有理数四则运算_
学院计算机学院
专业
年级班别
学号
学生姓名
指导教师
思路
理论
设计
难度系数
代码
总成绩
2013年6月29日
一、设计任务要求
问题描述:
设计一个可进行有理数运算的演示程序。
基本要求:
实现两个有理数相加、相减、相乘、相除以及求分子或分母的运算。
测试数据:
有读者指定。
选作内容:
事项两个有理数相除的运算。
二、主要算法流程图
三、主要代码
intMaxCommonisor(intm,intn)//*求最大公约数*//
{
intx,y,z;
if(m{z=m;m=n;n=z;}x=m;y=n;while(y!=0){z=x%y;x=y;y=z;}return(x);}Exit()//*退出*//{}intfraction_Add(intnumerator_1,intdenominator_1,intnumerator_2,intdenominator_2)//*分数加法*//{into,i,l,k,j;o=denominator_1*denominator_2;i=numerator_1*denominator_2+denominator_1*numerator_2;l=MaxCommonisor(o,i);k=o/l;j=i/l;printf("运算结果为%d/%d+%d/%d=%d/%d\n",numerator_1,denominator_1,numerator_2,denominator_2,j,k);}floatAdd(floata,floatb)///*有理数加法*/{floatsum;intnumerator_1,denominator_1,numerator_2,denominator_2,j,x;charm;loop1:printf("*******************************加法运算************************************\n");printf("\n");printf("1、整数、小数加法2、分数加法3、退出\n");printf("\n");printf("********************************************************************************\n");printf("请选择1、2或3:");scanf("%d",&x);if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");switch(x){case1:{printf("请输入第一个数据:");scanf("%f",&a);printf("请输入第二个数据:");scanf("%f",&b);sum=a+b;printf("运算结果为%f+%f=%f",a,b,sum);getchar();getchar();break;}case2:{printf("输入第一个数的分子:");scanf("%d",&numerator_1);printf("输入第一个数的分母:");scanf("%d",&denominator_1);printf("输入第二个数的分子:");scanf("%d",&numerator_2);printf("输入第二个数的分母:");scanf("%d",&denominator_2);fraction_Add(numerator_1,denominator_1,numerator_2,denominator_2);break;}case3:{Exit();break;}default:{printf("输入有误!\n");gotoloop1;break;}}if(x!=3)gotoloop1;}intfraction_Sub(intnumerator_1,intdenominator_1,intnumerator_2,intdenominator_2)///*分数减法*/{into,i,l,k,j;o=denominator_1*denominator_2;i=numerator_1*denominator_2-denominator_1*numerator_2;l=MaxCommonisor(o,i);k=o/l;j=i/l;printf("运算结果为%d/%d-%d/%d=%d/%d\n",numerator_1,denominator_1,numerator_2,denominator_2,j,k);}floatSub(floata,floatb)//*有理数减法*//{floatresult;intnumerator_1,denominator_1,numerator_2,denominator_2,j,x;charm;loop1:printf("*******************************减法运算************************************\n");printf("\n");printf("1、整数、小数减法2、分数减法3、退出\n");printf("\n");printf("********************************************************************************\n");printf("请选择1、2或3:");scanf("%d",&x);if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");switch(x){case1:{printf("请输入第一个数据:");scanf("%f",&a);printf("请输入第二个数据:");scanf("%f",&b);result=a-b;printf("%f-%f=%f",a,b,result);getchar();getchar();break;}case2:{printf("输入第一个数的分子:");scanf("%d",&numerator_1);printf("输入第一个数的分母:");scanf("%d",&denominator_1);printf("输入第二个数的分子:");scanf("%d",&numerator_2);printf("输入第二个数的分母:");scanf("%d",&denominator_2);fraction_Sub(numerator_1,denominator_1,numerator_2,denominator_2);break;}case3:{Exit();break;}default:{printf("输入有误!\n");gotoloop1;break;}}if(x!=3)gotoloop1;}intfraction_Mul(intnumerator_1,intdenominator_1,intnumerator_2,intdenominator_2)//*分数乘法*//{into,i,l,k,j;o=denominator_1*denominator_2;i=numerator_1*numerator_2;l=MaxCommonisor(o,i);k=o/l;j=i/l;printf("运算结果为%d/%d*%d/%d=%d/%d\n",numerator_1,denominator_1,numerator_2,denominator_2,j,k);}floatMul(floata,floatb)//*有理数乘法*//{floatresult;intnumerator_1,denominator_1,numerator_2,denominator_2,j,x;charm;loop1:printf("*******************************乘法运算************************************\n");printf("\n");printf("1、整数/小数乘法2、分数乘法3、退出\n");printf("\n");printf("********************************************************************************\n");printf("请选择1、2或3:");scanf("%d",&x);if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");switch(x){case1:{printf("请输入第一个数据:");scanf("%f",&a);printf("请输入第二个数据:");scanf("%f",&b);result=a*b;printf("%f*%f=%f",a,b,result);getchar();getchar();break;}case2:{printf("输入第一个数的分子:");scanf("%d",&numerator_1);printf("输入第一个数的分母:");scanf("%d",&denominator_1);printf("输入第二个数的分子:");scanf("%d",&numerator_2);printf("输入第二个数的分母:");scanf("%d",&denominator_2);fraction_Mul(numerator_1,denominator_1,numerator_2,denominator_2);break;}case3:{Exit();break;}default:{printf("输入有误!\n");gotoloop1;break;}}if(x!=3)gotoloop1;}intfraction_Div(intnumerator_1,intdenominator_1,intnumerator_2
{z=m;m=n;n=z;}
x=m;y=n;
while(y!
=0)
z=x%y;
x=y;
y=z;
}
return(x);
Exit()//*退出*//
intfraction_Add(intnumerator_1,intdenominator_1,intnumerator_2,intdenominator_2)//*分数加法*//
into,i,l,k,j;
o=denominator_1*denominator_2;
i=numerator_1*denominator_2+denominator_1*numerator_2;
l=MaxCommonisor(o,i);
k=o/l;
j=i/l;
printf("运算结果为%d/%d+%d/%d=%d/%d\n",numerator_1,denominator_1,numerator_2,denominator_2,j,k);
floatAdd(floata,floatb)///*有理数加法*/
floatsum;
intnumerator_1,denominator_1,numerator_2,denominator_2,j,x;
charm;
loop1:
printf("*******************************加法运算************************************\n");
printf("\n");
printf("1、整数、小数加法2、分数加法3、退出\n");
printf("********************************************************************************\n");
printf("请选择1、2或3:
");
scanf("%d",&x);
if(x!
=1&&x!
=2&&x!
=3)
printf("非法输入,请重新输入!
switch(x)
case1:
printf("请输入第一个数据:
scanf("%f",&a);
printf("请输入第二个数据:
scanf("%f",&b);
sum=a+b;
printf("运算结果为%f+%f=%f",a,b,sum);
getchar();
break;
case2:
printf("输入第一个数的分子:
scanf("%d",&numerator_1);
printf("输入第一个数的分母:
scanf("%d",&denominator_1);
printf("输入第二个数的分子:
scanf("%d",&numerator_2);
printf("输入第二个数的分母:
scanf("%d",&denominator_2);
fraction_Add(numerator_1,denominator_1,numerator_2,denominator_2);
case3:
Exit();
default:
printf("输入有误!
\n");
gotoloop1;
=3)gotoloop1;
intfraction_Sub(intnumerator_1,intdenominator_1,intnumerator_2,intdenominator_2)///*分数减法*/
i=numerator_1*denominator_2-denominator_1*numerator_2;
printf("运算结果为%d/%d-%d/%d=%d/%d\n",numerator_1,denominator_1,numerator_2,denominator_2,j,k);
floatSub(floata,floatb)//*有理数减法*//
floatresult;
printf("*******************************减法运算************************************\n");
printf("1、整数、小数减法2、分数减法3、退出\n");
result=a-b;
printf("%f-%f=%f",a,b,result);
fraction_Sub(numerator_1,denominator_1,numerator_2,denominator_2);
intfraction_Mul(intnumerator_1,intdenominator_1,intnumerator_2,intdenominator_2)//*分数乘法*//
i=numerator_1*numerator_2;
printf("运算结果为%d/%d*%d/%d=%d/%d\n",numerator_1,denominator_1,numerator_2,denominator_2,j,k);
floatMul(floata,floatb)//*有理数乘法*//
printf("*******************************乘法运算************************************\n");
printf("1、整数/小数乘法2、分数乘法3、退出\n");
=3)printf("非法输入,请重新输入!
result=a*b;
printf("%f*%f=%f",a,b,result);
fraction_Mul(numerator_1,denominator_1,numerator_2,denominator_2);
intfraction_Div(intnumerator_1,intdenominator_1,intnumerator_2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1