#include<iostream.h>
#include<stdio.h>
typedef struct _ratim //这里,具体区别自己翻翻我之前的回答吧如果不这样弄,那下面要用的时候前面必须带上struct关键字
{
int numerator;
int 喊汪denominator;
}ratim;
int gcd(int x,int y)//欧几里得辗转相除法求两数的最大的公约数
{
if(x<y)
return gcd(y,x);
if(x%y!=0)
return gcd(y,x%y);
else return y;
}
int count(int a,int b,int s)//计算加减乘除
{
int plus,minus,time;//加减乘
plus=a+b;
printf("所求两个有理数的和为:%d\\%d\n",plus,s);//加
minus=a-b;
printf("所求两个有理数的减为:%d\\%d\n",minus,s);//减
time=a*b;
printf("所求两个有理数的乘为:%d\\%d",time,s);//乘
printf("所求两个有理数的除为:%d\\%d\n",a,b);//除
return 0;//必须返回值
}
int main()
{
ratim k1;
ratim k2;
int lcm;//最小公倍数
printf("请输入第一个有理数分子、分母:\n");
do
{
cin>>k1.numerator>>k1.denominator;
if(k1.denominator==0)
printf("数据腊御不合法,请重新输入!");
}while(k1.denominator==0);
printf("请输入第二个有理数分子、分母:\n");
do
{
cin>>k2.numerator>>k2.denominator;
if(k2.denominator==0)
printf("数据不合法,请重新输入!");
}while(k2.denominator==0);
lcm=(k1.numerator*k2.numerator)/gcd(k1.numerator,k2.numerator);//最小公倍数
k1.denominator=lcm/k1.numerator*k1.denominator;
k2.denominator=lcm/k2.numerator*k2.denominator;
k1.numerator=lcm;
k2.numerator=lcm;
printf("这两个有理数分别为:%d//%d,%d\\%d\n",k1.numerator,k1.denominator,k2.numerator,k2.denominator);
count(k1.numerator,k2.numerator,k1.denominator);
printf("所求两个有理数的最大公约数为:%d\\%d\n",gcd(k1.numerator,k2.numerator),k1.denominator);
return 0;//必须返回值郑局仔
}
1.主函数 最后返亩码回值没有 加一句 return 0; 2.int count(int a,int b,int s) 这个函数定义用亏兄了int 那么必迅空哪须有一个整形返回值,这里可以不要返回值,应该是void count(int a,int b,int s) .............我运行了的!