首页  > 学历解惑  > c语言怎么用函数写分数

c语言怎么用函数写分数

2025-05-04 04:14:33
许老师
许老师已认证

许老师为您分享以下优质知识

在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,