c 计算n(n<100)个有理数的平均数并返回,要求输出结果为最简分数形式。
时间: 2024-09-10 13:15:30 浏览: 21
在 C 语言中,计算 n 个有理数的平均数并将结果转换为最简分数形式需要进行以下几个步骤:
1. 定义结构体存储一个有理数,通常包括分子 (num) 和分母 (denom),因为 C 本身并不支持直接表示分数,我们手动模拟。
```c
typedef struct {
int num;
int denom;
} RationalNumber;
```
2. 创建一个函数接收整数数组作为输入,求平均值,并将其转换为最简分数。这里可以使用辗转相除法(欧几里得算法)来简化分数。
```c
RationalNumber simplify_fraction(int numerator, int denominator) {
if (denominator == 0) {
printf("Error: Division by zero.\n");
return (RationalNumber){0, 0};
}
while (gcd(numerator, denominator) != 1) {
int temp = numerator % denominator;
numerator = denominator;
denominator = temp;
}
return (RationalNumber){numerator, denominator};
}
double calculate_average(RationalNumber *numbers, int n) {
double total = 0;
for (int i = 0; i < n; i++) {
total += numbers[i].num / (double)numbers[i].denom;
}
RationalNumber avg_in_fraction = simplify_fraction((int)(total * numbers[0].denom), numbers[0].denom);
return (double)avg_in_fraction.num / avg_in_fraction.denom;
}
```
3. 主程序部分读取 n 个有理数,存储到 `RationalNumber` 数组中,然后调用上面的函数计算并打印结果。
```c
#include <stdio.h>
#include <stdlib.h>
int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
int main() {
int n;
printf("Enter the number of rational numbers (less than 100): ");
scanf("%d", &n);
// 确保输入有效且小于100
if (n >= 100) {
printf("Error: Number of inputs exceeds limit.\n");
return -1;
}
RationalNumber numbers[n];
for (int i = 0; i < n; i++) {
scanf("%d/%d", &numbers[i].num, &numbers[i].denom);
}
double average = calculate_average(numbers, n);
printf("The average as a simplified fraction is: %d/%d\n", (int)average, (int)numbers[0].denom); // 注意这里的denom保持不变
return 0;
}
```