
许老师为您分享以下优质知识
在C语言中,可以通过结构体和函数来处理分数的输入、输出和运算。以下是一个完整的示例,展示了如何实现分数的输入、化简、加减乘除等操作。
一、定义分数结构体
首先,定义一个结构体来表示分数:
```c
typedef struct {
int numerator; // 分子
int denominator; // 分母
int symbol;// 符号,-1表示负数,1表示正数
} Fraction;
```
二、输入分数
编写函数`read_fraction`来读取用户输入的分数,并进行合法性检查:
```c
include
Fraction read_fraction() {
Fraction frac;
printf("请输入分子和分母(用空格隔开):");
scanf("%d %d", &frac.numerator, &frac.denominator);
// 检查分母是否为零
if (frac.denominator == 0) {
printf("错误:分母不能为零
");
exit(1);
}
// 确保分母为正
if (frac.denominator < 0) {
frac.numerator = -frac.numerator;
frac.denominator = -frac.denominator;
}
return frac;
}
```
三、化简分数
编写函数`reduce_fraction`来化简分数:
```c
include
void reduce_fraction(Fraction *frac) {
int gcd = gcd(abs(frac->
numerator), frac->
denominator);
frac->
numerator /= gcd;
frac->
denominator /= gcd;
// 确保分母为正
if (frac->
denominator < 0) {
frac->
numerator = -frac->
numerator;
frac->
denominator = -frac->
denominator;
}
}
```
四、输出分数
编写函数`print_fraction`来格式化输出分数:
```c
void print_fraction(const Fraction *frac, int decimal_places) {
printf("%s", frac->
symbol == -1 ? "-" : "");
printf("%04d/%04d", frac->
numerator, frac->
denominator);
if (decimal_places >
0) {
printf(".");
for (int i = 0; i < decimal_places; i++) {
frac->
numerator = frac->
numerator * 10;
printf("%d", frac->
numerator % 10);
frac->
numerator /= 10;
}
}
}
```
五、分数运算
编写函数来实现分数的加减乘除:
```c
Fraction add_fraction(const Fraction *a, const Fraction *b) {
Fraction result;
result.numerator = a->
numerator * b->
denominator + b->
numerator * a->
denominator;
result.denominator = a->
denominator * b->
denominator;
reduce_fraction(&result);
return result;
}
Fraction multiply_fraction(const Fraction *a, const Fraction *b) {
Fraction result;
result.numerator = a->
numerator * b->
numerator;
result.denominator = a->
denominator * b->
denominator;
reduce_fraction(&result);
return result;
}
Fraction subtract_fraction(const Fraction *a, const Fraction *b) {
Fraction result;
result.numerator = a->
numerator * b->
denominator - b->
numerator * a->
denominator;
result.denominator = a->
denominator * b->
denominator;
reduce_fraction(&result);
return result;
}
Fraction divide_fraction(const Fraction *a, const Fraction *b) {
Fraction result;
result.numerator = a->
numerator * b->
denominator;
result.denominator = a->
denominator * b->
numerator;
reduce_fraction(&result);
return result;
}
```
六、主函数示例
以下是一个完整的主函数示例,展示了如何使用上述函数:
```c
int main() {
Fraction frac1, frac2;
// 输入第一个分数
frac1 = read_fraction();
// 输入第二个分数
frac2 = read_fraction();
// 输出结果
printf("第一个分数:");
print_fraction(&frac1, 2);
printf("
");
printf("第二个分数:");
print_fraction(&frac2, 2);
printf("
");
// 加法
Fraction sum = add_fraction(&frac1, &frac2);
printf("和:");
print_fraction(&sum, 2);
// 乘法
Fraction product = multiply_fraction(&frac1, &frac2);
printf("积:");
print_fraction(&product, 2);
// 减法
Fraction difference = subtract_fraction(&frac1,