#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
表示分数的结构体
*/
// 结构体的知识得看看课本了
typedef struct{
int up; //分子
int down; //分母
}Fraction;
// 使得分数满足三个条件的函数,(最简、为0时分子为0,分母为1、有负数时取绝对值)
Fraction reduction(Fraction result){
// 为负数时
if(result.down<0||result.up<0){
result.down=abs(result.down);
result.up=abs(result.up);
}
// 为0时
else if(result.up==0){
result.down=1;
}
// 约分求最简
else{
int num=find(result.down,result.up);
result.down=result.down/num;
result.up=result.up/num;
}
return result;
}
// 分数加法
Fraction add(Fraction resultA,Fraction resultB){
Fraction result;
result.down=resultA.down*resultB.down;
result.up=resultA.up*resultB.down+resultB.up*resultA.down;
return reduction(result);
}
// 分数减法
Fraction minu(Fraction resultA,Fraction resultB){
Fraction result;
result.down=resultA.down*resultB.down;
result.up=resultA.up*resultB.down-resultB.up*resultA.down;
return reduction(result);
}
// 分数乘法
Fraction multip(Fraction resultA,Fraction resultB){
Fraction result;
result.down=resultA.down*resultB.down;
result.up=resultA.up*resultB.up;
return reduction(result);
}
// 分数除法 ,把除法当作乘法计算(颠倒第二个的分子与分母)
Fraction divide(Fraction resultA,Fraction resultB){
Fraction result;
result.down=resultA.down*resultB.up;
result.up=resultA.up*resultB.down;
return reduction(result);
}
// 用于输出分数的函数
void printFraction(Fraction fraction){
// 输出分数的时候也有几个要求需要满足
/*
1、注意假分数的输出(正负两种情况)
2、若为真分数,直接输出
3、分母若为1,输出的应该是一个整数
*/
if(fraction.down==1){
// 分母是整数的输出形式
printf("%d\n",fraction.up);
} else if(abs(fraction.up)>fraction.down){
// 假分数的输出形式
printf("%d %d/%d\n",fraction.up/fraction.down,fraction.up%fraction.down,fraction.down);
}else{
// 直接输出
printf("%d/%d\n",fraction.up,fraction.down);
}
}
[从0爱上编程] 分数的表示方法
于 2022-05-02 16:04:14 首次发布